Professional Documents
Culture Documents
Programa de computador
um conjunto de comandos e regras que um programador deve conhecer para poder manipular os recursos de um computador. So escritos programao. em uma linguagem de
Para que um programa possa ser executado deve ser traduzido para uma linguagem que possa ser compreendida pelo computador atravs de um compilador.
Programa de computador
O paradigma de programao orientada a objetos considera que os dados a serem mecanismos de processados e os processamento desses dados devem ser considerados em conjunto. Os modelos representam conjuntamente dados e operaes sobre esses dados.
Modelos
Modelos so representaes simplificadas de objetos, pessoas, itens, tarefas, processos, conceitos, idias etc. So usados comumente por pessoas no seu dia-a-dia, independente do uso de computadores.
Restaurante Caseiro Hipottico
Mesa 1 Kg refeio Sobremesa Refrigerante Cerveja Mesa 2 Kg refeio Sobremesa Refrigerante Cerveja Mesa 3 Kg refeio Sobremesa Refrigerante Cerveja
Modelos e Dados
O quadro branco um modelo do restaurante, representando de forma simplificada as informaes do restaurante necessrias para contabilizar os pedidos.
O modelo representa certos dados ou informaes. Os dados contidos no modelo so somente relevantes abstrao do mundo real feita.
Modelos e Operaes
Um modelo normalmente contm operaes ou procedimentos associados a ele, por exemplo:
Incluso de um pedido para uma mesa. Modificao do status de um pedido. Encerramento dos pedidos de uma mesa.
Tambm possvel a criao de modelos que possuem somente dados ou somente operaes. Modelos podem conter submodelos e ser parte de outros modelos.
6
Pessoa como paciente de uma clnica mdica Pessoa como contato comercial
A criao e uso de modelos uma tarefa natural e a extenso desta abordagem programao deu origem ao paradigma Programao Orientada a Objetos.
7
Os modelos baseados em objetos so teis para compreenso de problemas, para comunicao com os usurios das aplicaes, para modelar empresa, projetar programas, etc.
POO um paradigma de programao de computadores onde se usam classes e objetos, criados a partir dos modelos descritos anteriormente, para representar e processar dados usando programas de computadores.
Encapsulamento
A capacidade de ocultar dados dentro do modelos, permitindo que somente operaes especializadas ou dedicadas manipulem os dados ocultos chama-se encapsulamento.
Modelos que encapsulam os dados possibilitam a criao de programas com menos erros e mais clareza.
Encapsulamento
Modelos podem conter dados para representao das informaes ou dados relativos ao que se deseja modelar e operaes para manipulao dos dados. Em muitos casos, ser desejvel que os dados no possam ser acessados ou usados diretamente, mas somente atravs das operaes. Por Exemplo:
Mquina fotogrfica o mecanismo da cmera oculta os dados e a maneira como so processados. 10
Encapsulamento
Em muitos modelos teremos vantagens em usar mecanismos de ocultao de dados: sempre que existir uma maneira de deixar ao modelo a capacidade e responsabilidade pela modificao de um de seus dados, devemos criar uma operao para faz-lo. Por exemplo:
Modelo que represente conta bancria e operao de retirada.
11
Exemplo 1: em pseudocdigo
Modelo Lampada Representa uma lmpada em uso Incio do modelo dado estadoDaLampada; operao acende() Acende a Lmpada incio estadoDaLampada = aceso; fim Apaga a Lmpada operao apaga() incio estadoDaLampada = apagado; fim Mostra o estado da lmpada operao mostraEstado() incio se (estadoDalampada == aceso) imprime A lmpada est acesa seno imprime A lmpada est apagada; fim Fim do modelo
13
14
Exemplo 2: em pseudocdigo
Modelo ContaBancriaSimplificada Dados da conta Inicio do modelo dado nomeDoCorrentista, saldo, contaEspecial ;
argumentos para a operao
operao abreConta(nome,deposito,especial) incio nomeDoCorrentista = nome; saldo = deposito; Inicializa simultaneamente contaEspecial = especial; todos os dados do modelo fim operao abreContaSimples(nome) incio nomeDoCorrentista = nome; saldo = 0.00; contaEspecial = false; fim
Inicializa simultaneamente todos os dados do modelo, usando o nome passado como argumento e os outros valores com valores default
15
Consideramos que o valor do ms um inteiro; Consideramos tambm que existem datas vlidas e no vlidas
17
Classes e objetos
Programadores que utilizam POO criam e usam objetos a partir de classes, que so relacionadas diretamente com os modelos descritos.
Classes so estruturas utilizadas para descrever os modelos, ou seja, contm a descrio dos dados (atributos) e das operaes (mtodos) que podem ser realizadas sobre eles.
Nome da Classe
Atributo 1 Atributo 2 Atributo 3 Mtodo 1 Mtodo 2
18
Classes e objetos
dados contidos em uma classe so conhecidos como campos ou atributos daquela classe. Cada campo deve ter um nome e ser de um tipo de dado nativo ou uma classe existente.
Os
Valores dentro de classes podem ser variveis. operaes contidas so os mtodos. receber argumentos
As
19
Classes e objetos
Para
que objetos ou instncias possam ser manipulados, necessria a criao de referncias a estes objetos, que so variveis do tipo da classe.
Classe -> Planta do edifcio, que descreve o edifcio, mas no corresponde fisicamente a ele. Instncia -> Edifcio construdo. Referncia -> Nome do Objeto (ilhaDoSol)
instncias Edifcio ilhaDoSol Edifcio palaci Edifcio iguatemi 20
Classe Edifcio
Exemplo:
21
22
Os campos das classes (atributos) devem ser declarados dentro do corpo da classe. Cada campo deve ser representado por um determinado tipo de dado. Em linguagens OO, possvel declarar campos como referncias a instncias de outras classes j existentes (Objetos).
23
Podemos observar que, para cada dado do modelo existe um campo correspondente na classe. Campos podem ser referncias a uma classe. Exemplo: class DataSimples
24
A classe String usada para representar cadeias de caracteres. (No so dados nativos, sendo instncias da classe String) 25
Operadores Aritmticos
+ (soma) - (subtrao) * (multiplicao) / (diviso) % (resto de uma diviso inteira) int(A) / int(B) (parte inteira de uma diviso)
+ (concatenao)
26
Converso entre Tipos Numricos: Sempre que for realizada uma operao numrica (+, -, *, /) entre dois tipos diferentes ser considerado como se os operadores fossem do mesmo tipo. Para isso, o operador de maior capacidade dita o tipo a ser considerado.
Menor Maior
27
A maioria das classes representa modelos que tem dados e operaes que manipulam esses dados. operaes so chamadas de mtodos.
As
Mtodos no podem ser criados dentro de outros mtodos, nem fora da classe qual pertencem.
28
Mtodo da classe
void inicializaDataSimples(byte d,byte m,short a) { if (dataEValida(d,m,a) == true) { dia = d; mes=m; ano=a; Parmetros } baseados em else tipos primitivos { dia = 0; mes=0; ano=0; } Mtodo da classe } boolean dataEValida(byte d,byte m,short a) { if ((d>=1) && (d<=31) && (m>=1) && (m<=12)) return true; else return false; }
29
30
O escopo dos campos e variveis dentro de uma classe determina a sua visibilidade.
Campos declarados em uma classe so vlidos por toda a classe, mesmo que os campos estejam declarados depois dos mtodos que os usam.
Variveis e instncias de objetos declarados dentro de mtodos s sero vlidos dentro desse mtodo.
Dentro de mtodos e blocos de comandos, as variveis e objetos devem ser declarados antes de serem utilizadas.
Variveis passadas como argumentos para mtodos s so vlidas dentro dos mtodos.
32
No segundo exemplo, seria conveniente usar um modificador para restringir o acesso ao mtodo imprimeNmeroDaPgina, j que este s deve ser usado atravs do mtodo 33 imprimeRelatrio.
private: s podem ser acessados, modificados ou executados por mtodos da mesma classe, sendo ocultos para o programador usurio que for usar instncias desta classe ou criar classes herdeiras ou derivadas.
protected: funciona como o modificador private, exceto que classes herdeiras ou derivadas tambm tero acesso ao campo ou mtodo.
Finalmente, campos e mtodos podem ser declarados sem modificadores. Nesse caso, eles sero considerados como pertencentes categoria package, significando que seus campos e mtodos sero visveis para todas as classes de um mesmo pacote. 34
Mtodos que devem ser acessveis devem ser declarados com o modificador public. Caso classes no venham a ser agrupadas em pacotes, a omisso no gera problemas. Mtodos para controle dos campos devem ser escritos, e estes mtodos devem ter o modificador public.
35
public void inicializaData(byte d,byte m,short a) { public indica que o mtodo pode ser acessado sem restries if (dataEValida(d,m,a) == true) { dia = d; mes=m; ano=a; } else { dia = 0; mes=0; ano=0; } } As variveis d, m e a so parmetros (argumentos) e s podem ser manipulados dentro desse mtodo.
36
37
conjuntos de objetos que representam os objetos existentes no negcio modelado. conjuntos de objetos que representam adequadas para a manipulao de dados. estruturas
Os objetos que compem o programa comunicam-se por trocas de mensagens. O programa precisa ter um ponto de entrada que indique mquina virtual onde iniciar a execuo.
38
Aplicaes em Java
public static void main(String[] args)
public: visvel para qualquer outra classe. static: dispensa a criao de objetos. void: nenhum retorno esperado. main: conveno para indicar a mquina virtual qual o ponto de entrada da aplicao. String[] args: parmetros passados pela aplicao via linha de comando. args o identificador.
39
public void moverPontos() Utilizao do mtodo mover da classe { p1.mover(4F,2F); Ponto, atravs do objeto p1. p2.mover(-2F,-4F); } public void criarPontos() Instncia de um objeto da classe Ponto { p1 = new Ponto(); p2 = new Ponto(); } public void rodar() Mtodo principal, que ser executado { criarPontos(); inicialmente pela mquina virtual Java. moverPontos(); } public static void main(String[] s) { Aplicacao ap = new Aplicacao(); ap.rodar(); } Criao de um objeto da prpria classe
40
41
Operador new
new instancia um novo objeto. new aloca o espao necessrio para armazenar o estado do objeto e uma tabela para indicar o corpo do cdigo necessrio para efetuar suas operaes. new executa as tarefas de inicializao do objeto conforme o seu Construtor. new retorna o identificador do objeto criado e o operador de atribuio utilizado para copiar este endereo para uma varivel, que servir para futuras referncias ao objeto. O compilador e a mquina virtual Java verificam o tipo da varivel e o tipo da referncia retornada.
42
Garbage Collection
Gerenciador de memria para aplicaes java. Thread chamada Automatic Garbage Collector. Retorna a memria ocupada por objetos que no esto mais sendo usados. Monitora a criao de objetos atravs do new. Cria um contador de referncia para cada objeto. Libera a memria quando o contador chegar a zero.
43
Referncia nula
Objetos armazenam uma referncia nula at serem inicializados. A referncia nula representada pela palavra reservada null. Pode-se desfazer uma referncia para um objeto atribuindo a ela a palavra null.
44
Primitivas e Referncias
Na declarao aloca-se espao para a referncia ao objeto. A alocao do objeto realizada atravs do operador new.
45
Construtores
J vimos que podemos criar aplicaes que utilizam instncias de classes definidas pelo usurio ou j existentes. Aps criar a instncia da classe com a palavra-chave new, usamos mtodos para inicializar os campos da instncia. Na declarao aloca-se espao para a referncia ao objeto. Por esquecimento, um programador pode criar a instncia de uma classe mas no inicializar seus dados.
46
Construtores
Construtor um tipo especial de membro de classe chamado automaticamente quando instncias so criadas atravs da palavra chave new. Construtores so teis para:
inicializar os atributos de uma classe; realizar rotinas complexas de inicializao; realizar inicializaes segundo parmetros passados no momento da criao do objeto.
47
Construtores
Construtores devem ter exatamente o mesmo nome da classe; Construtores no possuem tipo de retorno, nem mesmo void; Construtores so, normalmente, pblicos. Programador no pode chamar construtores diretamente;
48
Construtores Toda classe possui um construtor. Caso o programador no fornea uma verso explcita do construtor, Java utiliza uma verso de construtor implcita que no recebe nenhum parmetro. Se o programador fornecer um construtor a uma classe, a linguagem no mais incluir o construtor padro implcito.
49
Construtores - Exemplo
public class Empregado { String Nome, Endereo, CPF; float Salrio; int Idade; public Empregado ( String N, String End, String cpf, int Ida) { Nome = N; Endereo = End; Construtor da classe Empregado. CPF = cpf; Observe que no foi definido um tipo de retorno e possui o mesmo Idade = Ida; nome da classe. } public String InformarCPF( ) { return CPF; } public String ApresentarNome( ) { return Nome; } }
50
Construtores - Exemplo
Utilizao do Construtor da class CriaEmpregado classe Empregado para { public static void main(String args[]) instanciar um objeto. { Empregado obj = new Empregado(Maria Silva, Rua X n 246", "403.234.567Nome do Objeto Nome33",58); da classe
System.out.println("O nome = +obj.ApresentarNome()); System.out.println("O CPF = "+ obj.InformarCPF()); System.out.println("A idade = .DevolveIdade()); } }
51
Representada por um atributo esttico da classe System System.out.println(...) Tipos primitivos podem ser concatenados a Strings atravs do operador + Exemplo:
class saidaDados { public static void main (String args[]) { System.out.println(saida de dados); } }
52
Toda a classe que for se utilizar de entrada de dados via teclado deve utilizar o package Java.io.*. Esse pacote contm as classes que tratam de entrada de dados.
import java.io.*
Para obter valores do teclado em uma classe Java necessrio criar um objeto da classe BufferedReader.
BufferedReader obj = new BufferedReader(new inputStreamReader(System.in));
Todo a entrada de dados est sujeita a erros, j que fica a merc da digitao do usurio final. A forma mais simples de se tratar essa exceo solicitar que a exceo no seja tratada localmente atravs da linha de comando:
throws java.io.IOException
53
O Java s permite a entrada de Strings, desta forma, para que possamos informar valores numricos necessrio fazer uma converso de String para o tipo numrico desejado, como podemos ver a seguir: A varivel line uma String.
Converso de String para inteiro int i = Integer.valueOf(line).intValue(); Converso de String para long long l = Long.valueOf(line).longValue();
Converso de String para float float f = Float.valueOf(line).floatValue(); Converso de String para double double d = Double.valueOf(line).doubleValue(); 54
55
Operadores Relacionais
Operadores Aritmticos
&& (E lgico) || (OU lgico) ! (NO lgico)
< (menor) > (maior) <= (menor ou igual) >= (maior ou igual) == (igual) != (diferente)
if else
Estrutura do Comando
Observaes:
O comando else opcional. Na construo de ifs aninhados, o else refere-se sempre ao if mais prximo. Procure usar chaves para delimitar os blocos. O operador de comparao igual a representado por == e no por =. Bloco de comandos pode ser um nico comando (terminado por ponto-e-vrgula) ou vrios comandos (delimitados por {}). indispensvel o uso de parnteses ( ) na expresso_booleana.
57
switch
Estrutura do Comando
switch(varivelDeControle) { case constante1: bloco1; break; case constante2: bloco2; break; [default: bloco3; break;] }
Observaes:
Usual para selecionar alguma ao de um nmero de
alternativas. A varivel de controle s pode ser inteira ou char. O case define o ponto de entrada da execuo. Se voc quiser que s um bloco de declaraes seja executado use break. 58 A opo default opcional.
while
Estrutura do Comando
Observaes:
indispensvel o uso de parnteses ( ) na expresso_booleana.
O lao permanece em execuo enquanto a expresso_booleana for verdadeira. Um erro comum no atualizar as variveis de controle do lao, o que acarreta um loop infinito. Outro erro freqente colocar o ponto e vrgula aps o while. A fase de atualizao das variveis de controle ficam fora do lao, gerando um loop infinito. Use sempre chaves para delimitar o Bloco de comandos.
59
do - while
Estrutura do Comando
Observaes:
semelhante ao comando while, sendo que a condio de
parada do lao testada aps o bloco de comandos. Pelo menos uma vez o bloco de comandos ser executado. Observe as mesmas consideraes do comando while.
60
for
Observaes:
Num loop for explicita as quatro partes de uma iterao.
Um erro comum colocar o ponto e vrgula aps o for, ficando o bloco de comandos fora do lao. O resultado um loop que nada realiza.
61
62
63
Sobrecarga
Um mtodo pode ter o mesmo nome que outro mtodo na mesma classe;
Isto usual quando existem duas ou mais formas diferentes de se realizar a mesma tarefa;
diz-se
que
mtodo
est
Java permite a criao de mtodos com nome iguais, contanto que as assinaturas sejam diferentes; A assinatura composta do nome mais os tipos de argumento. O tipo de retorno no faz parte da assinatura;
64
Sobrecarga
Java admite tambm, que se sobrecarregue os construtores de uma classe.
Deve-se se referir de dentro de um construtor sobrecarregado para outro, atravs do uso da palavra reservada this.
65
Exemplo de Sobrecarga
class criaEmpregado { public static void main(String args[])
As chamadas dos mtodos sobrecarregados esto apresentadas em negrito.
{ Empregado emp1 = new Empregado("Maria","123123123", "Rua das flores 245", 25,500); System.out.println("A idade de Maria = "+ emp1.DevolveIdade()); System.out.println("A idade de Maria daqui a 10 anos e = " + emp1.DevolveIdade(10)); Empregado emp2 = new Empregado("Tadeu",700); System.out.println("O salrio de Tadeu = "+emp2.salario); } }
66
Exemplo de Sobrecarga
public class Empregado { String nome, endereco, cpf; float salario; int idade; public Empregado ( String n, String end, String c, int ida, float sal) { this(n, sal); endereco=end; cpf=c; idade=ida; } { } public int DevolveIdade() { return idade; } public int DevolveIdade(int numAnos) { return idade+numAnos; } } Uso da referncia this para chamar o outro construtor. public Empregado (String n, float sal) nome = n; salario = sal; As sobrecargas esto representadas em negrito.
67
A referncia this
Na chamada dos mtodos de uma classe, a mquina virtual passa implicitamente como parmetro uma referncia ao objeto ao qual a mensagem foi enviada.
Quando se deseja recuperar esta referncia de dentro do corpo da classe, usa-se a palavra reservada this.
Pode-se ainda utilizar a palavra chave this para se referir a um construtor sobrecarregado, como vimos anteriormente. Entretanto, neste caso, a palavra chave no diz respeito referncia do objeto, visto que este ainda est sendo criado.
68
A referncia this
Acesso
public class ExemploThis { public static void main(String args[]) { Funcionario func1 = new Funcionario("Maria",500); Funcionario func2 = new Funcionario("Joo",700); func1.salario = func1.ajustaSalario(20); func2.salario = func2.ajustaSalario(30); System.out.println("O novo salrio de "+ func1.nome +" = "+func1.salario); System.out.println("O novo salrio de "+ func2.nome +" = "+func2.salario); } }
69
70
Reutilizao de Classes
Um dos maior benefcio que a Programao Orientada a Objeto nos proporciona a reutilizao de cdigo.
A reutilizao se caracteriza pelo aproveitamento de classes e seus mtodos que j estejam escritos e que j tenham o seu funcionamento testado e comprovado.
A Reutilizao de cdigo diminui a necessidade de escrever novos mtodos e classes gerando economia de tempo e segurana.
Existe duas maneiras de conseguir esse reaproveitamento: Atravs de Composio ou atravs de Herana.
71
Composio
A composio o conceito mais usual no desenvolvimento de aplicaes baseadas em Orientao a Objetos.
Parte do pressuposto que uma determinada classe vai instanciar objetos de outras classes, utilizando-se do que esses objetos fazem para compor as funcionalidades da nova classe.
Esse conceito pode ser visto em exemplos anteriores (classe criaEmpregado e classe exemploThis), que instanciaram objetos da classe Empregado e funcionrio respectivamente.
CriaEmpregado exemploThis
Empregado Funcionrio
72
Herana
Herana a capacidade de uma classe definir o seu comportamento e sua estrutura aproveitando definies de outra classe, normalmente conhecida como classe base ou classe pai.
A herana no precisa ser interrompida na derivao de uma camada de classes. A coleo de todas as classes que se estendem de um pai comum chama-se hierarquia de herana.
A palavra reservada extends que define que uma classe est herdando de outra.
Analista de Sistemas
73
Herana
Atravs do mecanismo de herana possvel definirmos classes genricas que agreguem um conjunto de definies comuns a um grande nmero de objetos (Generalizao). A partir destas especificaes genricas podemos construir novas classes, mais especficas, que acrescentem novas caractersticas e comportamentos aos j existentes (Especializao).
Funcionrio
nome salrio
Analista de Sistemas
idiomas
linguagem
74
palavra reservada super, nos possibilita: referncia a classe base (pai) do objeto;
acesso a variveis escondidas (shadow), ou seja, variveis de uma classe que tem o mesmo nome de uma varivel definida em uma subclasse; acesso a mtodos que foram redefinidos, ou seja, mtodos que possuem a mesma assinatura na classe Pai e na classe derivada; utilizao pela classe derivada do construtor da classe pai.
75
Exemplo de Herana
Classe Pai public class Automovel Declarao de { public static final byte movidoAGasolina = 1; constantes. public static final byte movidoAAlcool = 2; public static final byte movidoADiesel = 3; private static final byte numeroMaximoDePrestacoes = 24;
Atributos Construtor
public Automovel(String m, String c, byte comb) { modelo = m; cor = c; combustivel = comb; } public byte quantasPrestacoes() { return numeroMaximoDePrestacoes; }
76
Exemplo de Herana
public float quantoCusta() { float preco = 0; switch (combustivel) { case movidoAGasolina: preco = 12000.0f; break; case movidoAAlcool: preco = 10500.0f; break; case movidoADiesel: preco = 11000.0f; break; } return preco; } public String toString() { String resultado; resultado = modelo+" "+cor+"\n"; switch(combustivel) { case movidoAGasolina: resultado += "Gasolina \n"; break; case movidoAAlcool: resultado += "lcool \n"; break; case movidoADiesel: resultado += "Diesel \n"; break; } return resultado; } }
77
Exemplo de Herana
public class AutomovelBasico extends Automovel { private boolean retrovisorDoLadoDoPassageiro; private boolean limpadorDoVidroTraseiro; private boolean radioAMFM;
Atributos A palavra extends que determina que AutomovelBasico herda de Automovel.
public AutomovelBasico (String m, String c, byte comb, boolean r, boolean l, boolean af) { super(m,c,comb); A palavra super, indica retrovisorDoLadoDoPassageiro = r; que deve ser usado o limpadorDoVidroTraseiro = l; construtor da classe Pai. radioAMFM = af; } public AutomovelBasico (String m, String c, byte comb) { super(m,c,comb); retrovisorDoLadoDoPassageiro = true; limpadorDoVidroTraseiro = true; radioAMFM = true; }
78
Exemplo de Herana
public float quantoCusta() Os dois mtodos { float preco = super.quantoCusta(); apresentados nessa if (retrovisorDoLadoDoPassageiro == true) transparncia possuem a preco = preco + 280; mesma assinatura da classe if (limpadorDoVidroTraseiro == true) Automovel, o que caracteriza uma redefinio preco = preco + 650; de mtodos da classe Pai. if (radioAMFM == true) preco = preco + 190; return preco; A palavra super, indica que deve ser chamado o mtodo } quantoCusta() e toString() da public String toString() classe Pai. { String resultado = super.toString(); if (retrovisorDoLadoDoPassageiro == true) resultado += "Com retrovisor do lado direito \n"; if (limpadorDoVidroTraseiro == true) resultado += "Com limpador traseiro \n"; if (radioAMFM == true) resultado += "Com radio \n"; return resultado; 79 }}
Exemplo de Herana
public class DemoAutomovel { public static void main(String arg[]) { Automovel a = new Automovel("Fusca","verde", Automovel.movidoAAlcool); System.out.println(a.toString()); Instncia de um objeto da System.out.println(a.quantoCusta()); classe AutomovelBasico. System.out.println(a.quantasPrestacoes()); AutomovelBasico ab = new AutomovelBasico("Corsa","cinza", Automovel.movidoAGasolina,true,true,false); System.out.println(ab.toString()); System.out.println(ab.quantoCusta()); System.out.println(ab.quantasPrestacoes()); } }
Observe que o mtodo quantasPrestacoes() est sendo acessado atravs de um objeto da classe AutomovelBasico. Isso s possvel porque a classe AutomovelBasico herda da classe Automovel, assim todos os atributos e mtodos da classe Pai podem ser usados pela classe derivada. Instncia de um objeto da classe Automovel.
80
Polimorfismo
O mecanismo de herana permite a criao de classes a partir de outras j existentes com relao -um-tipode, de forma que, a partir de uma classe genrica, classes mais especializadas possam ser criadas.
A relao -um-tipo-de entre classes permite a existncia de outra caracterstica fundamental de linguagens OO, o polimorfismo.
Polimorfismo (muitas formas) permite a manipulao de instncias de classes que herdem de uma mesma classe ancestral de forma unificada. Podemos escrever mtodos que recebam instncias de uma classe C, e os mesmos mtodos sero capazes de processar instncias de qualquer classe que herde de C, j que qualquer classe que herde de C -um-tipo-de C. 81
Polimorfismo
Permite o envio de mensagens a um objeto sem a determinao exata do seu tipo; Permite a extensibilidade do sistema com pouco ou nenhum impacto nas classes existentes; Permite a construo de classes genricas para efetuar tarefas gerais comuns aos softwares, como as estruturas de dados.
82
Exemplo de Polimorfismo
public class ConcessionariaDeAutomoveis { public static void main(String args[]) { Automovel a1 = new Automovel("Fiat","bege", Automovel.movidoAAlcool); AutomovelBasico a2 = new AutomovelBasico("Corsa","cinza", Automovel.movidoAGasolina); imprime(a1); O mtodo imprime recebe um objeto da classe Automovel imprime(a2); como parmetro. Observe que nesse exemplo, chamamos o } mtodo passando a1 e a2, ou seja, objetos de classes
diferentes mas da mesma hierarquia de classes, caracterizando dessa forma a utilizao de polimorfismo.
public static void imprime(Automovel a) { System.out.println(Dados do automvel escolhido : "); System.out.println(a.toString()); System.out.println("Valor : "+a.quantoCusta()); System.out.println(a.quantasPrestacoes()+" prestaes de "+ (a.quantoCusta()/a.quantasPrestacoes())); } }
83
Classes Abstratas
So classes compostas por implementaes genricas e especificaes de procedimentos. Como no so totalmente implementadas, no produzem instncias, ou seja, no podemos criar objetos dessas classes. Elas agrupam caractersticas e comportamentos que sero herdados por outras classes e fornecem padres de comportamento que sero implementados nas subclasses.
A classe passa a servir como modelo genrico para as classes que sero dela derivadas.
84
Classes Abstratas
Um mtodo abstrato ser apenas o molde de uma implementao a ser provida pelas classes filhas concretas.
sua
Mtodos abstratos s podem existir em classes abstratos. Mtodos que no so abstratos podem ser usados normalmente pelos objetos das classes que derivam da classe abstrata.
As classes que derivarem de um classe abstrata devem obrigatoriamente implementar todos os 85 mtodos abstratos definidos na classe Pai.
public void move (int x1, int y1) { apaga(); x = x1; y = y1; Declarao de um mtodo desenha(); normal que poder ser } utilizado pelos objetos de
classes derivadas.
Declarao dos mtodos abstratos. Esses mtodos devem obrigatoriamente ser implementados nas classes derivadas.
86
public void desenha() { System.out.println("Desenhando quadrado (" + x + "," + y + ")"); } public void apaga() { System.out.println("Apagando quadrado (" + x + "," + y + ")"); } } class TesteAbstract { public static void main (String args[]) Classe { Quadrado q = new Quadrado(10,10); para testar q.desenha(); o exemplo. q.move(50,50); q.apaga(); } }
87
Interfaces
Se uma classe definida por apenas mtodos abstratos ento melhor no usar a palavra-chave abstract. Para estes caso o Java fornece uma tcnica chamada de interfaces que pode ser usada para definir um modelo de comportamento.
As interfaces diferem dos mtodos abstratos no fato de que nenhum mtodo da interface pode ter um corpo.
Uma classe pode implementar vrias interface mas apenas herda (extends) de uma nica classe. As Interfaces so compiladas da mesma forma que uma classe. 88
Interfaces
Uma interface uma coleo de definio de mtodos.
Java possui a palavra reservada interface para indicar a definio de uma interface. Sintaticamente equivalente a uma classe completamente abstrata.
Todos
Semanticamente entretanto, as duas diferem, pois uma interface guarda uma idia de protocolo (compromisso) entre classes.
89
Exemplo de Interfaces
class Linha implements FiguraGeometrica { int x, y ; interface FiguraGeometrica public Linha(int x1, int y1) { x = x1; y=y1; } public void desenha( ) { System.out.println("Desenhando linha (" + x + "," + y + ") "); } public void apaga( ) { System.out.println("Apagando linha (" + x + "," + y + ")" ); } public void move (int x1, int y1) Nesse exemplo a classe quadrado implementa a { this.apaga(); interface figuraGeometrica e x = x1; aceita desenvolver todos os y = y1; mtodos definidos pela this.desenha(); interface. } } { public void desenha(); public void apaga(); public void move (int x1, int y1); }
90
Pacotes
Um package um agrupamento de classes e interfaces que esto logicamente relacionadas. No Java um conjunto de classes e interfaces que esto dentro de um mesmo diretrio de arquivos. O Java utiliza os packages para:
garantir a unicidade do nome da classe, ou seja, no permitir que existam nomes de classes iguais em um mesmo pacote;
e para realizar controles de acesso; Membros de uma classe sem a especificao do controle de acesso so considerados membros que podem ser acessados pelas classes do mesmo package.
91
Pacotes
colocar uma classe em um determinado pacote, deve-se colocar a palavra reservada package na primeira linha de cdigo do arquivo fonte (*.java). package java.lang; utilizar classes definidas em outros pacotes deve-se importar as classes atravs da palavra chave import. Importa apenas a import java.lang.String; ou ainda import java.lang.*;
classe String
Para
Para
92
java.applet
java.awt grficas.
java.io Sadas.
java.net
java.util Classes de utilitrios (Data, Dicionrio, Pilha, Vetor, Random, etc.) Classes para manipulao de Banco de
93
java.sql Dados
Tratamento de Excees
Uma exceo um evento que ocorre durante a execuo do programa, que foge normalidade do fluxo de instrues.
Linguagens que tratam adequadamente as excees tm a vantagem de separar a lgica da aplicao do tratamento de erros.
tratveis
pelo
Emitindo Excees
Os mtodos podem emitir excees de forma explcita. Um mtodo pode declarar que capaz de emitir uma exceo, usando para isso a clusula throws.
Ao emitir uma exceo est se considerando que o mtodo chamador ir tratar a exceo.
Caso o mtodo chamador no trate a exceo ser apresentado um erro no console do computador e a aplicao pode parar de rodar. No prximo exemplo, caso seja digitado uma letra em lugar de um nmero, a mquina virtual Java emite um erro e para a execuo da aplicao.
95
96
Capturando Excees
Para capturar excees coloque o trecho que pode originar a exceo num bloco try.
Manipule cada exceo num bloco catch. Podem existir vrios catch para um nico try, j que num nico bloco try podem ocorrer tipos de excees diferentes.
try{ //origina a //exceo } catch(exception1){ //manipula exc1 } catch(exception2){ //manipula exc2 } finally { //proc. //obrigatrios } 97
98
catch (Exception e) { }
Exception o identificador de System.out.println("Problema na converso"); exceo default. Existe um ok = false; especfico para cada tipo de No finally colocado o cdigo que ser exceo. executado ocorrendo ou no uma exceo.
finally { System.out.println("Exemplo de captura de excees"); } if (ok == true) System.out.println("O nmero digitado foi: " + n); } }
99
Vetores Um vetor (array) uma seqncia de objetos ou valores de tipos primitivos, todos do mesmo tipo e combinados sob um nico identificador.
Arrays
Vetores
Declarao: Exemplos:
Construo: Exemplo:
Inicializao:
Observe que um vetor pode ser declarado, construdo e inicializado ao mesmo tempo.
class DiasDosMeses { public static void main(String[] arg) { int[] maxDiasMes = new int[12]; String[] nomeMes = {"JAN", "FEV", "MAR", "ABR", "MAI", "JUN", "JUL", "AGO","SET", "OUT", "NOV", "DEZ"}; for(int i=0; i < maxDiasMes.length; i++) { if(((i+1 < 8) && ((i+1)%2==1)) || ((i+1 >= 8) && ((i+1)%2==0))) maxDiasMes[i] = 31; else maxDiasMes[i] = 30; } maxDiasMes[1] = 28; for(int i=0;i<12;i++) System.out.println(nomeMes[i]+":"+ maxDiasMes[i]); } }
102
103
Referncias Bibliogrficas: SANTOS, R. Introduo Programao Orientada a Objetos Usando Java. 1a Edio: Editora Campus. 2003.
DEITEL,
104