Escolar Documentos
Profissional Documentos
Cultura Documentos
Motivao
Conforme visto, Java uma linguagem OO Para desenvolver aplicaes de qualidade em Java preciso aprender a aplicar princpios de OO ao programar (quase) possvel escrever programas em Java sem saber OO, mas
Dificilmente voc ser capaz de ir alm de programinhas simples com mais de uma classe Ser muito difcil entender outros cdigos Seu cdigo ser difcil de entender, manter e reutilizar Voc estar perdendo ao utilizar uma linguagem como Java (poder usar outra mais simples para escrever de forma procedural) 2
Definio de POO
Segundo Robert Sebesta:
A essncia da programao orientada a objetos resolver problemas identificando os objetos do mundo real do problema e o seu processamento necessrio, criando, ento, simulao dos mesmos, seus processos e as comunicaes necessrias entre eles...
Conceitos e terminologia
Abstrao Objetos Encapsulamento/Ocultao de informao Estado e comportamento Classes Herana Polimorfismo
Abstrao
Abstrao
Conceito de abstrao:
Processo mental que consiste em escolher ou isolar um aspecto determinado de um estado de coisas relativamente complexo, a fim de simplificar a sua avaliao, classificao ou para permitir a comunicao do mesmo [Dicionrio Houassis] Uma abstrao denota as caractersticas essenciais de um objeto que o distinguem de outros tipos de objetos e assim prov uma fronteira conceitual firmemente definida, de acordo com a perspectiva do observador 7 [Booch]
Objetos
No mundo real....
Para um ser humano, um objeto ...
Algo tangvel e/ou visvel Algo que possa ser compreendido intelectualmente Algo para o qual um pensamento ou ao possa ser direcionado
Um objeto modela alguma parte da realidade e algo que existe no tempo e no espao
Objetos
Para um programador...
Um objeto representa uma entidade, unidade ou item identificvel, individual, real ou abstrato, com um papel bem definido no domnio do problema no qual se quer resolver/solucionar [Booch]
Ou no...
Reao qumica, nmero complexo, venda...
9
Objetos
Nem tudo um objeto
Tempo, mtricas, sensaes e sentimentos humanos no so, em geral, modelados como objetos Estes, normalmente, so tratados como propriedades dos objetos
Descobrir quais entidades fazem parte do domnio do problema e identificar suas propriedades e comportamentos tarefa do programador e, sobretudo, de vocs! (analistas de sistemas) 10 Isso vem com a experincia...
11
12
Exemplos de objetos
Exemplo de um objeto em Java:
class Onibus { float velocidade; int lugares; String marca; int quilometragem; int eixos; } // fim da classe ... Onibus carro43, setusao, frescao;
13
Objetos
Definio formal: Um objeto tem um estado, comportamento e uma identidade; a estrutura e o comportamento de objetos similares so definidos nas suas classes [Booch]
14
Caractersticas de um objeto
Estado:
Propriedades (geralmente estticas)
Caracterstica inerente ou distintiva que contribui para a unicidade de um objeto
O estado de um objeto consiste de todas as propriedades do objeto mais os valores atuais destas propriedades [Booch]
15
Caractersticas de um objeto
Comportamento:
O comportamento de um objeto caracterizado pelo conjunto de operaes que o objeto capaz de executar (ou sua interface) Podemos imaginar os objetos como prestadores de servios Sempre que o objeto solicitar um servio de outro objeto, deve enviar-lhe uma mensagem Se o objeto receptor for capaz de prestar este servio, ele ento ser executado
16
Exemplos de objetos
Exemplo:
Suponha uma abstrao para uma lmpada que deva exibir o seguinte comportamento:
Informar se est acesa; Acender-se e Apagar-se.
17
Exemplos de objetos
Exemplo de um objeto em Java:
class Lampada extends Object { boolean estaAcesa = false; Estado
Mtodo
Comportament o
18
Exemplos de objetos
Exemplo de um objeto em Java:
Lampada l1, l2; l1 l2 l1 = l2 = new Lampada(); new Lampada(); l1 l2
if ( l1.getAcesa() ) {
19
Identidade de um Objeto
Identidade
Cada objeto nico e distinguvel dos demais independentemente dos valores dos seus atributos Para manipular os objetos, nos utilizamos de referncias para os mesmos Uma referncia nada mais do que uma varivel que aponta para um objeto do tipo para o qual foi declarada ou para objetos do subtipo deste tipo
20
Identidade de um Objeto
Identidade
Objetos so criados atravs de um processo chamado de instanciao, que, por sua vez, devolve um ponteiro para o objeto criado. Erros comuns:
Confundir referncia com identidade, varivel com objeto Confundir valores de atributos com identidade
21
22
q = new Quadrado();
q = null;
23
28 white true
24
Instanciao de Objetos
Definio
Operao atravs da qual um objeto criado e passa a existir na memria do computador. A classe o modelo ou a frma utilizada para criar o objeto.
Cliente c;
// c um cliente
26
q = new Quadrado();
q.mudeTamanho(50); q = null;
// instanciao
// uso // desprezo
27
q = new Quadrado();
q.mudeTamanho(50); q = null;
// instanciao
// uso // desprezo
q
tamanho: 30
28
q = new Quadrado();
q.mudeTamanho(50); q = null;
// instanciao
// uso // desprezo
q
tamanho: 50
29
q = new Quadrado();
q.mudeTamanho(50); q = null;
// instanciao
// uso // desprezo
q
tamanho: 50
30
31
Classes
Definio:
Local onde encontram-se definidas as propriedades (variveis) e o comportamento (mtodos) que uma categoria de objetos deve possuir
Classes
Toda classe define um novo tipo de dados Valores de um tipo definido por uma classe recebem o nome de objetos
33
}
Propriedades dos objetos da classe Cliente
34
35
Importante!
A classe Cliente, como est, apenas define a estrutura dos objetos; isto , as propriedades que os objetos do tipo Cliente tero
Esta classe uma abstrao de um cliente para um sistema computacional O domnio do problema a ser resolvido que determina quais sero estas propriedades
36
Mtodos
Um mtodo um procedimento ou funo que permite aos objetos de uma classe executarem servios como o objeto implementa suas funcionalidades O envio de uma mensagem para um objeto faz o mtodo correspondente (de mesmo nome) ser executado A mensagem a ativao de um mtodo sobre o objeto
38
Mtodos
Mtodos podem ter parmetros Mtodos poder ler ( getXXX() ) ou alterar ( setXXX() ) os valores das propriedades dos objetos
Modificam, portanto, o estado de um objeto Estes mtodos, juntos, representam o comportamento de um objeto ou o protocolo de uma classe
A implementao de um mtodo utiliza todas as estruturas lgicas da programao estruturada: deciso, laos, desvio de fluxo, 39 atribuio, etc.
Encapsulamento
40
Encapsulamento
A abstrao de um objeto deve preceder (ter prioridade) sua implementao A implementao, uma vez selecionada, deve ser tratada como um segredo da abstrao e, portanto, escondida dos clientes deste objeto O encapsulamento serve para proteger a abstrao Nenhuma parte de um sistema complexo deve depender dos detalhes internos de outras partes [Booch] 41
Encapsulamento
Conceitos complementares:
A abstrao representa um conceito O encapsulamento, por sua vez, impede os clientes de verem/conhecerem como este conceito foi implementado internamente
Para uma abstrao realmente funcionar, sua implementao deve estar encapsulada Os objetos so formados de duas partes:
Uma interface (viso externa) Uma implementao (a funcionalidade interna e oculta) 42
Encapsulamento
43
Encapsulamento
A implementao no interessa quem usa os objetos Papel do usurio de classes
No precisa saber como a classe foi escrita, apenas quais seus mtodos, quais os parmetros (quantidade, ordem e tipo) e os valores que so retornados Usa apenas a interface pblica da classe
44
Encapsulamento
Definio:
Encapsulamento o processo de esconder todos os detalhes de implementao de um objeto que no contribuem para suas caractersticas essenciais [Booch] A habilidade de mudar a representao de uma abstrao sem perturbar quaisquer de seus clientes o principal benefcio do encapsulamento [Booch]
Lembre-se disto:
O encapsulamento previne acidentes, no fraudes [Stroustrup] O encapsulamento no impede o
45
Encapsulamento
Uma classe Java define um bloco de construo para encapsulamento de propriedades e mtodos Os mtodos de uma classe deveriam acessar apenas as propriedades da prpria classe e nunca as de outra classe
Promove coeso!
classe
private Cliente c;
... public void mudeCliente( String novo ){
cli.nome = novo;
} } A propriedade nome privativa da Classe cliente
48
private Cliente c;
... public void mudeCliente( String novo ){
cli.setNome(novo);
} } O mtodo setNome() pblico em cliente
49
Construtores e Destrutores
Algumas linguagens implementam mtodos especiais
Construtores: utilizados para criar e/ou inicializar novos objetos
Em Java e C++, os construtores recebem o mesmo nome da classe Pode-se ter vrias verses de construtores em uma mesma classe; mudando a quantidade e o tipo dos parmetros
pblico
51
Cliente c, d;
c = new Cliente( Bart, Tamba, M ); ...
Variveis de classe
Uma classe pode ter variveis contendo informaes teis, como:
Nmero de objetos instanciados pela classe at certo instante Valor mdio, mnimo e mximo de uma propriedade
Variveis de classe
Exemplos de variveis de classe:
Classe Agncia Bancria agenciaCentro
juros:
agenciaEpitacio agenciaManair a
Varivel de Classe
54
Variveis de classe
Os objetos instanciados pela classe podem acessar as variveis de classe ( para modificar ou ler seu valor) A modificao numa varivel de classe percebida por todos os objetos A varivel de classe fica armazenada na classe e no nas instncias geradas comum o uso de variveis de classe para definir constantes
PI, MAX_IDADE, MIN_JUROS, ...
55
Mtodos de classe
Muitas vezes, faz-se necessrio acessar parte do comportamento de uma classe independentemente de suas instncias
Mtodo showMessageDialog(...) que monta um dilogo para o usurio da classe JOptionPane Mtodo sqrt() que calcula a raiz quadrada da classe Math
Mtodos de classe
Exemplos de mtodos de classe:
numAgencias()
O mtodo numAgencias() poderia consultar o nmero de objetos instanciados at o momento O mtodo numProxAgencia() poderia informar o 57
Herana
58
Herana
Permite reutilizar as caractersticas de uma classe na definio de outra classe
Reutilizao direta de cdigo previamente definido por algum em uma superclasse
Gerente
Diretor
Supervisor
59
Herana
Terminologias relacionadas Herana:
Classes mais generalizadas: superclasses Mais especializadas: subclasses
Herana
Herana uma tcnica para prover suporte a especializao
Classes mais abaixo: especializada Classes mais acima: genricas
Mtodos e variveis internas so herdados por todos os objetos dos nveis mais abaixo Vrias subclasses podem herdar as caractersticas de uma superclasse Herana mltipla no presente em Java!
Mas possvel em C++
61
Herana
Se B uma subclasse de A, ento:
Os objetos de B suportam todas as operaes suportadas pelos objetos de A, exceto aquelas que foram redefinidas O objetos de B incluem todas as variveis de instncia de B + todas as variveis de instncia de A
62
rvore de Herana
Unio das classes que herdam entre si gera uma rvore de herana; ou uma hierarquia de classes relacionadas Exemplo:
Polgono
Quadriltero
Hexgono
Tringulo
Retngulo
Quadrado
63
rvore de Herana
Todos os objetos herdam caractersticas definidas em polgono Retngulo e Quadrado so especializaes de Quadriltero Em todos os casos, cada subclasse possui uma nica superclasse
A isso, chamamos de Herana simples
Benefcios da Herana
Como cdigo pode ser facilmente reutilizado, a quantidade de cdigo a ser adicionado numa classe pode diminuir bastante
Subclasses provem comportamentos especializados tomando como base os elementos comuns criados na superclasse A reutilizao pode ser realizada mais de uma vez por outras novas subclasses
65
Polimorfismo
Polimorfismo
Do Grego poly(muitas)+morpho(formas)
Polimorfismo
Exemplo:
Polgono
area()
Quadriltero
area()
Hexgono
area()
Tringulo
area()
67
Polimorfismo
Vrias classes podem ter mtodos com o mesmo nome Uma varivel do tipo Polgono pode assumir a forma de Polgono, Tringulo, Retngulo
Poligono p; p = new Poligono(); p.area(); ... P = new Triangulo(); p.area();
68
areaTotal += poligono[i].areaPolig();
else if (poligono[i] == Triangulo) areaTotal += poligono[i].areaTriang(); else if (poligono[i] == Quadrado) areaTotal += poligono[i].areaQuadr(); else if (poligono[i] == Retangulo) areaTotal += poligono[i].areaRetang(); }
69
Rpido, enxuto e fcil de entender O acrscimo de uma nova subclasse de Polgono no altera nenhuma linha de cdigo acima!
70
Benefcios do Polimorfismo
Legibilidade do cdigo
A utilizao do mesmo nome de mtodo para vrios objetos torna o cdigo de mais fcil leitura e assimilao, promovendo muito a expanso do sistema e sua manuteno
Flexibilidade
Pode-se incluir novas classes sem alterar o cdigo j existente que a manipular
71
Polimorfismo Paramtrico
Polimorfismo abordado: mtodos diferentes com o mesmo nome em classes distintas Polimorfismo paramtrico: vrios mtodos com o mesmo nome definidos na mesma classe que se diferenciam pelo tipo ou nmero dos parmetros suportados Tambm chamado de sobrecarga de mtodos (overloading, em ingls) Esta tcnica tambm pode ser utilizada nos construtores definidos na classe
72
Polimorfismo Paramtrico
Uma mensagem pode ser enviada a um objeto com parmetros:
Nmero de variveis De tipos diferentes
Ligao Dinmica
A implementao do polimorfismo exige ligao dinmica Uma ligao nada mais do que uma associao Ligao esttica: ocorre em tempo de compilao ou interligao (linking) e no mais modificada Ligao dinmica: ocorre em tempo de execuo e pode ser alterada no decorrer do andamento do programa
Ligao do operador a uma particular operao 74
75
Classificao/Instanciao
A capacidade de classificar objetos permite expressar relaes de classificao/instanciao Observao de diversos fenmenos para categorizao em grupos (classes), classificao com base nas propriedades comuns a todos
VendaVista
venda1
venda2
instanciao
76
Generalizao/Especializao
A partir da observao de duas ou mais classes, pode-se abstrair uma classe mais genrica Uma superclasse considerada uma generalizao das subclasses, que so generalizao chamadas de especializaes
Polgono
Quadrado
Tringulo
especializao
77
Composio/Decomposio
Permite que objetos sejam compostos pela agregao de outros objetos ou componentes Instncias de uma classe so compostas por instncias de outras classes = decomposio A formao de uma classe se d por composio uma agregao de classes pr-existentes = Bicicleta composio
decomposio
Pneu
Quadro
Guidom
78
Bibliografia
PEREIRA, Frederico C. G.; Slides do Curso de Java. Disponvel por WWW em http://asterix.coinfo.cefetpb.edu.br/~fred ROCHA, Helder da; Curso de Java. Disponvel por WWW em http://www.argonavis.com.br. The Java Tutorial. Disponvel por WWW em http://java.sun.com/docs/books/tutorial/ DEITEL, Harvey M.; Paul.J. Java How to Program. 3rd. ed. - Prentice Hall.
79