Sei sulla pagina 1di 79

Java Standard Edition

Programao Orientada a Objetos


Definio Conceitos e Terminologias
1

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 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...

Segundo Grady Booch:


Programao orientada a objetos um mtodo de implementao no qual programas so organizados como colees cooperativas de objetos, cada um representando uma instncia de

Aspectos importantes da POO


Usa objetos, e no procedimentos como bloco lgico fundamental para a construo de programas Cada objeto uma instncia de uma classe Objetos comunicam-se atravs de mensagens Classes so relacionadas com as outras via mecanismos de herana, formando uma hierarquia de classes Exemplos de linguagens OO:

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 7 definida, de acordo com a perspectiva do

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
8

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]

Os objetos podem ser fsicos...


Bicicleta, mquina de escrever, pessoa, sensor, ...

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...

Exemplos de objetos - propriedades


Objeto: nibus Propriedades Valores
Velocidade: 112 Km/h Lugares....: 44 Marca......: MERCEDES Km..........: 80.732 Km Eixos.......: 2

Objeto: poltrona Propriedades Valores

11

Exemplos de objetos - propriedades


Velocidade: 112 Lugares....: 44 Marca......: MERCEDES Km..........: 80.732 Km Eixos.......: 2

Cor......: azul lugares: 1 Marca.: Artefacto

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

Valores (geralmente dinmicos)


Todas as propriedades possuem valores que podem variar ao longo do tempo

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.

Vamos construir isso em Java.

17

Exemplos de objetos
Exemplo de um objeto em Java:
class Lampada extends Object { boolean estaAcesa = false; boolean getAcesa(){ ... } void acende(){ ... } void apaga(){ ... } } Estado Comportame nto

Mtodo

18

Exemplos de objetos
Exemplo de um objeto em Java:
Lampada l1, l2; l1 l2 l1 = l2 = new Lampada(); new Lampada(); l1 l2

l1.acende(); l2.apaga(); l1 = l2; if ( l1.getAcesa() ) {


19

l1 l2

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

Ciclo de vida de um Objeto


A linha da vida de um objeto:
1) Instanciao: o objeto criado e passa a ser referenciado por um nome (sua referncia); 2) Uso: o objeto recebe mensagens de outros objetos e, com isso, executa parte da funcionalidade do sistema; 3) Destruio: a rea de memria ocupada pelo objeto reclamada...todas as referncias para o objetos ficam nulas.
A destruio de um objeto realizada
22

Exemplo Ciclo de vida de um Objeto


Exemplo de cdigo Java:
Quadrado q;

q = new Quadrado();

q.moverDireita(20); q.mudarTamanho(5); q.ficarVisivel(false); q.mudarCor(red);

q = null;

23

Exemplo Ciclo de vida de um Objeto


Esquematicamente:
q new

tamanho: 28 cor: white visivel: 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.

Objeto versus referncias


Os objetos so manipulados atravs de referncias ou ponteiros que indicam onde o objeto est localizado na memria do computador No h outra forma de chegar ao objeto sem que seja via uma referncia.
Lembre de Bruce Eckel e sua analogia do 25

Referncias para objetos


A maioria dos objetos em um programa Java so acessados por variveis chamadas de referncias Como Java uma linguagem fortemente tipada, estas variveis devem ser declaradas e tipificadas em tempo de compilao String s;// Exemplos: s do tipo String
Quadrado q1; Cliente c; // q1 do tipo Quadrado // c um cliente
26

Referncias para objetos


Referncias so ponteiros para o objeto
Quadrado q; q = new Quadrado(); q.mudeTamanho(50); q = null; // declarao // instanciao // uso

// desprezo

27

Referncias para objetos


Referncias so ponteiros para o objeto
Quadrado q; q = new Quadrado(); q.mudeTamanho(50); q = null; // declarao // instanciao // uso

// desprezo

q
tamanho: 30

28

Referncias para objetos


Referncias so ponteiros para o objeto
Quadrado q; q = new Quadrado(); q.mudeTamanho(50); q = null; // declarao // instanciao // uso

// desprezo

q
tamanho: 50

29

Referncias para objetos


Referncias so ponteiros para o objeto
Quadrado q; q = new Quadrado(); q.mudeTamanho(50); q = null; // declarao // instanciao // uso

// desprezo Objeto sem referncia!


tamanho: 50

30

O que uma Classe?

31

Classes
Definio:
Local onde encontram-se definidas as propriedades (variveis) e o comportamento (mtodos) que uma categoria de objetos deve possuir

Estrutura fundamental de programao em Java!


Todo e qualquer programa Java deve definir pelo menos uma classe No h como escrever cdigo Java sem que haja a definio de classes
32

Classes
Toda classe define um novo tipo de dados Valores de um tipo definido por uma classe recebem o nome de objetos

33

Exemplo de uma classe Java


Exemplo:
Nome da classe

class Cliente extends Object { private String nome; private String endereco; private char sexo; } Propriedades dos objetos da classe Cliente

34

Exemplo de uma classe Java


Instanciao da classe cliente:
Cliente c1 = new Cliente(); Cliente c2 = new Cliente(); c1
nome: end.: sexo:

c2
nome: end.: sexo:

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

Assim, uma forma de definir abstraes em Java criar uma classe!

36

Exemplo de uma classe Java


Ampliando a classe Cliente (inserindo mtodos):
class Cliente extends Object { private String nome; private String endereco; private char sexo; Mtod o public void setNome( String novoNome ){ nome = novoNome; } }
37

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 39 programao estruturada: deciso,

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:

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

Papel do desenvolvedor de classes


Define novos tipos de dados Expe, atravs dos mtodos, todas as funes necessrias aos usurios das classes e oculta o resto da implementao 44 Tem a liberdade de mudar a implementao das

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]
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!

Modificadores de acesso controlam a visibilidade do encapsulamento de Java


public

tudo que pode ser acessado de fora46

Exemplo de uma classe Java


Visibilidade do encapsulamento de Cliente:
class Cliente extends Object { private String nome; private String endereco; private char sexo;
interno pblico

public void setNome( String novoNome ){ nome = novoNome; }

}
47

Exemplo de uma classe Java


Visibilidade do encapsulamento de Cliente:
class Venda { private Cliente c; ... public void mudeCliente( String novo ){ cli.nome = novo; } } A propriedade nome privativa da Classe cliente
48

Exemplo de uma classe Java


Visibilidade do encapsulamento de Cliente:
class Venda { 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

Destrutores: usados para destruir objetos


No h mtodos destrutores em Java
50

Exemplo de uma classe Java


Exemplo de um construtor:
class Cliente extends Object { private String nome; private String endereco; private char sexo; public Cliente( String umNome, String umEnd, char umSexo ) nome = umNome; endereco = umEnd; sexo = umSexo; }

pblico

51

Exemplo de uma classe Java


Uso do construtor da classe Cliente:
class Venda { Cliente c, d; c = new Cliente( Bart, Tamba, M ); ... d = new Cliente( Maria, Bessa, F );

} O construtor s utilizado no momento da criao de objetos


52

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

Essas variveis no devem ser passadas para os objetos


Para cada classe, poder existir apenas uma nica cpia de cada varivel: varivel de classe
53

Variveis de classe
Exemplos de variveis de classe:
Classe Agncia Bancria agenciaCentro

juros:

agenciaEpitacio agenciaMana ira

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

Comportamento da classe e no de um objeto em particular


como se a classe tivesse operaes prprias: mtodo de classe
56

Mtodos de classe
Exemplos de mtodos de classe:
numAgencias()

Classe Agncia Bancria


numProxAgencia()

O mtodo numAgencias() poderia consultar o nmero de objetos instanciados at o momento O mtodo numProxAgencia() poderia informar 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

a contribuio original do paradigma OO Representao grfica da herana:


Empregado

Gerente

Diretor

Supervisor
59

Herana
Terminologias relacionadas Herana:
Classes mais generalizadas: superclasses Mais especializadas: subclasses

A herana viabiliza a construo de sistemas a partir de componentes facilmente reutilizveis


Suporte a reutilizao at entre sistemas Facilita a extensibilidade em um mesmo sistema

A classe descendente no tem trabalho para receber a herana 60

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 61 Java!

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

Alguns autores afirmam que a Herana fere o princpio do encapsulamento


Mudanas na superclasse podem ser difceis 62 Subclasses recebem/enxergam os dados e

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

Em algumas linguagens, possvel herdar caractersticas oriundas de diversas superclasses


64

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

Potencializa a manuteno de sistemas


Maior legibilidade do cdigo existente Quantidade menor de cdigo a ser
65

Polimorfismo
Polimorfismo
Do Grego poly(muitas)+morpho(formas)

H dois aspectos do polimorfismo


Mtodos de mesmo nome so definidos em vrias classes, podendo assumir diferentes implementaes em cada uma dessas Propriedade pela qual uma varivel pode apontar para objetos de diferentes classes em momentos distintos

Estes aspectos so complementares e trabalham juntos

66

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

Exemplo de uso de Polimorfismo


rea total sem polimorfismo:
double areaTotal = 0; for (int i = 0; i < MAXPOLIG; i++){ if (poligono[i] == Poligono) 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

Exemplo de uso de Polimorfismo


rea total com polimorfismo:
double areaTotal = 0; for (int i = 0; i < MAXPOLIG; i++){ areaTotal += poligono[i].area(); }

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

Cdigo de menor tamanho


Cdigo mais claro, fcil, enxuto e elegante

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 72

Polimorfismo Paramtrico
Uma mensagem pode ser enviada a um objeto com parmetros:
Nmero de variveis De tipos diferentes

O mtodo invocado escolhido pelos parmetros enviados na mensagem


public class Documento { ... public void imprime(); public void imprime(String titulo); }
73

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
74

Operaes com Objeto, Classe e Herana


Objetos, classes e herana permitem a definio de hierarquia de abstraes Abstraes facilitam o entendimento e o gerenciamento da complexidade de sistemas Classes agrupam objetos com caractersticas iguais Herana estrutura classes semelhantes Operaes abstratas:
Classificao/Instanciao Generalizao/Especializao
75

Classificao/Instanciao
A capacidade de classificar objetos permite expressar relaes de classificao/instanciao Observao de diversos fenmenos para categorizao em grupos (classes), com classificao 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 composio A formao de uma classe se d por Bicicleta uma agregao de classes prexistentes = composio
Pneu Quadro Guidom
decomposio

78

Bibliografia
PEREIRA, Frederico C. G.; Slides do Curso de Java. Disponvel por WWW em http://asterix.coinfo.cefetpb.edu.br/~fre d 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 79