Vous êtes sur la page 1sur 76

Orientao a Objetos

Cleidson Souza - cdesouza@ufpa.br Departamento de Informtica Universidade Federal do Par 1


Informtica - UFPA

Agenda

Introduo a OO
Histrico Motivos que influenciaram Vantagens da OO reas de aplicao O que a Orientao a Objetos? Preconceitos sobre a OO Desenvolvimento OO Linguagens de Programao OO

Paradigma de Objetos
Classe e Objetos Encapsulamento Herana Classes Abstratas Polimorfismo Delegao Acoplamento Dinmico MetaClasses

Bibliografia

Informtica - UFPA

Histrico

Linguagens de Programao
Simula 67 : linguagem projetada para simulao. Famlia de linguagens Smalltalk. Smalltalk-72 e 80. Maior divulgao a partir de 1986 com o 1o Workshop em Programao Orientada a Objetos e a conferncia ObjectOriented Programming Languages, Systems and Applications (OOPSLA). C++ Java

Informtica - UFPA

Histrico(2)

Metodologias
Surgiram devido a incompatibilidade das abordagens estruturadas com a Programao Orientada a Objetos. Exemplo de metodologias:

Coad - Yourdon (1990) OMT (1991) OOSE (1992) Fuso (1995) UML (1996)

Banco de Dados Sistemas Operacionais ...


Informtica - UFPA

Motivos que influenciaram

Avanos na tecnologia de arquiteturas de computadores, suportando sofisticados ambientes de programao e interfaces homen-mquina. Avanos na rea de linguagens de programao como modularizao, ocultamento de informao, etc. Crise do Software: termo utilizado para descrever
problemas associados ao modo como o software desenvolvido, como feita a manuteno e como acompanhar a demanda por mais software [Pressman, 1995].

Informtica - UFPA

Vantagens da Tecnologia de Objetos


Facilita a reutilizao de cdigo Os modelos refletem o mundo real de maneira mais aproximada:
Descrevem de maneira mais precisa os dados. A decomposio baseada em um particionamento natural. Mais fceis de entender e manter.

Pequenas mudanas nos requisitos no implicam em alteraes massivas no sistema em desenvolvimento.

Informtica - UFPA

O que a Orientao a Objetos ?

um paradigma para o desenvolvimento de software que baseia-se na utilizao de componentes individuais (objetos) que colaboram para construir sistemas mais complexos. A colaborao entre os objetos feita atravs do envio de mensagens. Um paradigma um estabelecem fronteiras e problemas dentro desta ajuda-nos a organizar a e olhamos o mundo. conjunto de regras que descrevem como resolver fronteira. Um paradigma coordenar a maneira como
Informtica - UFPA

O que a Orientao a Objetos ?

O paradigma de objetos baseia-se nos seguintes conceitos:


Classes Objetos Herana Polimorfismo

e Binding Dinmico

Cada um destes conceitos ser abordado neste curso.


Informtica - UFPA

Preconceitos sobre Orientao a Objetos

A orientao a objetos no uma metodologia para o desenvolvimento de interfaces grficas amigveis, ou seja, o paradigma de objetos no est necessariamente relacionada a programao visual. A orientao a objetos no elimina a necessidade de implementar os sistemas, e nem est relacionadas apenas a fase de implementao.

A orientao a objetos no garante a reutilizao, ela oferece mecanismos para que isso ocorra, mas sempre ser funo do desenvolvedor garantir isso.
Informtica - UFPA

Algumas reas de aplicao da OO


Sistemas baseados em interfaces grficas. Sistemas de tempo real. Software Bsico (sistemas operacionais, protocolos de comunicao, etc.) Software comercial Sistemas de Banco de Dados outros ....

10

Informtica - UFPA

Desenvolvimento Orientado a Objetos

Anlise Orientada a Objetos: o processo de construo de modelos do domnio do problema, identificando e especificando um conjunto de objetos que interagem e comportam-se conforme os requisitos estabelecidos para o sistema. Projeto Orientado a Objetos: o processo de gerao de uma especificao detalhada do software a ser desenvolvido, de tal forma que esta especificao possa levar a direta implementao no ambiente alvo.

11

Informtica - UFPA

Desenvolvimento Orientado a Objetos

12

Programao Orientada a Objetos: um modelo de programao que baseia-se em conceitos como classes, objetos, herana, etc. Seu objetivo a resoluo de problemas baseada na identificao de objetos e o processamento requerido por estes objetos, e ento na criao de simulaes destes objetos. A programao obtida atravs da definio de classes e criao de hierarquias, nas quais propriedades comuns so transmitidas das superclasses para as subclasses atravs do mecanismo de herana.

Informtica - UFPA

Desenvolvimento Orientado a Objetos

Objetos destas classes so instanciados tal que a execuo do programa vista como um conjunto de objetos relacionados que se comunicam enviando mensagens uns para os outros.

13

Informtica - UFPA

Linguagens Orientadas a Objetos

Na literatura existe uma distino entre linguagens baseadas em objetos e linguagens orientadas a objetos: Uma linguagem baseada em objetos quando ela fornece apoio somente ao conceito de objetos. Exemplo: Ada e Visual Basic Uma linguagem orientada a objetos quando ela fornece apoio a objetos, e requer que objetos sejam instncias de classes. Alm disso, um mecanismo de herana deve ser oferecido. Ex: C++, Java e Smalltalk.
Informtica - UFPA

14

Linguagens Orientadas a Objetos

Alm da distino entre linguagens baseadas em objetos e linguagens orientadas a objetos, existe uma outra distino que classifica as linguagens orientadas a objetos em: Hbridas: So linguagens que originalmente no foram projetadas orientadas a objetos, mas que passaram a incorporar os conceitos deste paradigma. Ex: C++ e Object Pascal Puras: So linguagens que foram projetadas originalmente orientadas a objetos. Ex: Smalltalk e Java.
Informtica - UFPA

15

Linguagens Orientadas a Objetos


Podemos identificar similaridades entre a programao procedural (ou imperativa) e a programao orientada a objetos.

P a r a d i g m a Procedual
Tipos de Dados Varivel Funo / Procedimento Chamada de Funo

Paradigma Objetos

de

Classes Objeto / Instncia Operao / Mtodo Servio Envio de Mensagem


Informtica - UFPA

16

Objetos

Informalmente um objeto representa uma entidade, tanto fsica quanto conceitual ou de software.
Entidade Fsica: caminho, carro, bicicleta, etc. Entidade Conceitual: processo qumico, matrcula, etc Entidade de Software: lista encadeada, arquivo, etc.

Exemplos:

Podemos afirmar que um objeto um conceito, abstrao, ou entidade com limites bem definidos e um significado para a aplicao.
Informtica - UFPA

17

Objetos

Objetos so implementaes de Tipos Abstratos de Dados (TADs). TADs, um conceito da rea de Linguagens de Programao, so entidades que encapsulam dados e operaes associadas que manipulam esses dados. Evoluo de Tipos de Dados
Assembler: no possui tipos, Fortran: primeiro tipos primitivos, Pascal: tipos agregados de dados Simula: associao de tipos e operaes.

18

Informtica - UFPA

Objetos
Operao 1

Exemplo
O per

ao

O per

Atributos
era o 3 O per a o 4

Objeto geomtrico
cor: posio: selecionar(p: Ponto): boolean girar(ngulo: real) mover(delta: coord)

ao 2

19

Op

Informtica - UFPA

Objetos - Caractersticas
Os dados de um objeto so totalmente escondidos e protegidos de outros objetos. A nica maneira de acess-los atravs da invocao de uma operao declarada na interface pblica do objeto. A interface pblica de um objeto consiste no conjunto de operaes que um cliente do objeto pode acessar. Variveis representando o estado interno do objeto so chamadas variveis de instncia. As operaes so chamadas de mtodos. Um objeto comunica-se com outro atravs de mensagens que identificam operaes a serem realizadas no segundo objeto. 20 Informtica - UFPA

Objetos - Caractersticas
Comunicao entre Objetos
O per ao 5
Operao 1

O per ao 5

21

Informtica - UFPA

er Op 3

o4

Op

e ra

er Op 3

Atributos
a o4 Op e ra o

a O per 2 o
Operao 1

Atributos

a O per 2 o

Encapsulamento

Esconder os detalhes da implementao de um objeto chamado Encapsulamento. A capacidade de um objeto possuir uma parte privada, acessvel somente atravs dos mtodos definidos na sua classe. Benefcios:
O cdigo cliente pode usar apenas a interface para a operao. A implementao do objeto pode mudar, para corrigir erros, aumentar performance, etc sem que seja necessrio modificar o cdigo do cliente. A manuteno mais fcil e menos custosa. Cria um programa legvel e bem estruturado Informtica - UFPA

22

Exemplo de Encapsulamento

Implementacao Lista sem Encapsulamento:

de

uma usar

public class Lista{ public int dados[]; public int tamanho; public Lista(int n) { dados = new int[n]; tamanho = 0; } }

public static void main(String args[]) { Lista al = new Lista(5); al.dados[0]=0; al.tamanho++; al.dados[1]=1; al.tamanho++; if (al.tamanho>=2) { System.out.println("Imprime o 1 elemento "+ al.dados[0]); System.out.println("Imprime o 2 elemento "+ al.dados[1]); } }

23

Informtica - UFPA

Exemplo de Encapsulamento

Implementacao de uma Lista com Encapsulamento:


public class ArrayLista{ private int dados[]; private int tamanho; public ArrayLista(int n) { dados = new int[n]; tamanho = 0; } public void add(int a) { dados[tamanho] = a; tamanho++; } public int remove(int posicao) { if ((posicao>0) && (posicao<tamanho)) return dados[posicao]; return -1; }

public static void main(String args[]) { ArrayLista al=new ArrayLista(5); al.add(1); al.add(2); System.out.println("Imprime o 1 elemento +al.remove(0)); System.out.println("Imprime o 2 elemento +al.remove(1)); } }

24

Informtica - UFPA

Exemplo de Encapsulamento

Implementacao de uma Lista com Encapsulamento:

import java.util.Vector; public class VectorLista{ private int dados[]; public VectorLista(int n) { dados = new Vector(n); } public void add(int a) { dados.addElement(new Integer(a)); } public int remove(int posicao) { if ((posicao>0) && (posicao<dados.size())) return ((Integer) dados.elementAt(posicao)).intValue(); return -1; }

public static void main(String args[]) { VectorLista al = new VectorLista(5); al.add(1); al.add(2); System.out.println("Imprime o 1 elemento "+ al.remove(0)); System.out.println("Imprime o 2 elemento "+ al.remove(1)); } }

25

Informtica - UFPA

Objetos

Formalmente, um objeto algo que possui: um estado, que normalmente implementado atravs de
seu conjunto de propriedades (denominadas atributos), com os valores das propriedades, mais as ligaes que o objeto pode ter com outros objetos;

uma identidade nica. Identidade a propriedade de um objeto que distingue-o de outros objetos. Identidade no o nome do objeto, nem o endereo de memria onde ele est armazenado, um conceito de linguagens de programao que no visvel para os usurios. e um comportamento. O comportamento define como um objeto reage s requisies de outros objetos, em termos de mudanas de estados e passagem de mensagens.

26

Informtica - UFPA

Objetos

Um objeto possui um estado, exibe um comportamento bem-definido e possui uma identidade nica.

27

Informtica - UFPA

Classe

a descrio de um grupo de objetos com propriedades similares (atributos), comportamento comum(operaes) , relacionamentos com outros objetos e semnticas idnticas.
Todo objeto instncia de uma classe. Exemplo: int a; Pessoa p;

Enquanto um objeto individual uma entidade concreta que executa algum papel no sistema, uma classe captura a estrutura e comportamento comum a todos os objetos que esto relacionados.
Informtica - UFPA

28

Classes

Uma classe define a estrutura e o comportamento de qualquer objeto da classe, atuando como um padro para a construo de objetos. Objetos podem ser agrupados em classes.
Pessoa Atributos
nome:string idade:inteiro calcularIdade()

Mtodos (Pessoa) Clarissa


Informtica - UFPA

(Pessoa) merson 29

(Pessoa) Romrio

Classes

A definio da classe consiste na definio dos atributos e operaes dos objetos desta classe. Um atributo uma caracterstica de uma classe. Atributos no apresentam comportamento, eles definem a estrutura da classe. Operaes caracterizam o comportamento de um objeto, e so o nico meio de acessar, manipular e modificar os atributos de um objeto.

30

Informtica - UFPA

Herana

um mecanismo existente no paradigma orientado a objetos que permite a reutilizao da estrutura e do comportamento de uma classe ao se definir novas classes. A herana tambm conhecida como relac. -um. A classe que herda o comportamento chamada de subclasse e a que definiu o comportamento superclasse.
Pessoa
CIC

Professor

Aluno Informtica - UFPA

31

Herana

Herana de Atributos
Veculo
placa registrar()

Carro

Caminho

Todo carro e todo caminho possuem uma placa e uma operao registrar()

32

Informtica - UFPA

Herana

Herana de Relacionamentos
Veculo
placa registrar()
N 1

Pessoa

pertence

Carro

Caminho

Todo carro e todo caminho pertencem a uma Pessoa

33

Informtica - UFPA

Herana

No h limites no nmero de nveis na hierarquia de herana.


Pessoa
CIC

Professor

Aluno

Professor Universitrio

Professor Primrio Informtica - UFPA

34

Herana

A utilizao da herana aumenta a reutilizao de cdigo porque o cdigo definido na superclasse pode ser utilizado automaticamente na subclasse.
Atravs da herana possvel representar a relao de generalizao/especializao entre duas classes:

a superclasse uma generalizao da(s) subclasse(s), e a subclasse uma especializao da(s) superclasse(s).

Pessoa Especializao 35 Professor Aluno Generalizao


Informtica - UFPA

Tipos de Herana

Herana estrita: as subclasses podem redefinir ou excluir propriedades herdadas da superclasse. Herana no estrita: as mudanas acima so permitidas.

Observao: se uma mudana de um tipo e/ou nome feita, pode caracterizar a subclasse de maneira diferente da superclasse. Pessoa
nome identificao endereo

Livro

36

nome identificao*

Aluno Informtica - UFPA

Tipos de Herana

A subclasse pode : adicionar novas operaes:

Exemplo: na classe Professor a operao ministrarAula.

redefinir

uma operao existente.

Exemplo: Um crculo um tipo especial de elipse cujo mtodo para calcular rea r2. Elipse remover um comportamento. (pouco frequente) calcularArea
uma

combinao das trs anteriores.

Crculo
calcularArea

37

Informtica - UFPA

Tipos de Herana

Observaes: Quando uma operao ou atributo redefinida em uma subclasse ele chamado de sobrecarregado (overloaded).
Algumas linguagens de programao podem implementar a excluso de propriedades, no entanto, isto ocasiona um problema. No se sabe at onde a propriedade est sendo transmitida em uma hierarquia de generalizao. Na realidade em todas as linguagens onde existe alguma facilidade de cancelamento, a nica forma de verificar se alguma propriedade de uma classe ainda aceita em uma subclasse conferir cada uma das subclasses[TAK90].

38

Informtica - UFPA

Tipos de Herana
A herana deve ser utilizada visando a reutilizao de comportamento. Ou seja, as classes derivadas devem se comportar como as superclasses. Para isso sempre deve existir uma hierarquia de Generalizao /Especializao entre as classes. Um objeto do tipo crculo pode ser usado no lugar de um objeto do tipo elipse porque todo circulo um 39 tipo especial de elipse.

Elipse
calcularArea

Crculo
calcularArea

Crculos Elipses
Informtica - UFPA

Herana Mltipla

Herana mltipla a possibilidade de se definir uma subclasse com mais de uma superclasse.
CoisaQueVoa Animal

Avio

Ave

Mamfero

40

Ave herda de ambos, CoisaQueVoa e Animal


Informtica - UFPA

Herana Mltipla

Outro Exemplo de Herana Mltipla

Empregado

Cliente

Empregado Cliente

41

Informtica - UFPA

Herana Mltipla: Observaes


CoisaQueVoa
cor

Conceitualmente, a herana mltipla necessria para modelar o mundo real de maneira mais precisa. Na prtica, ela pode levar a problemas na implementao pois nem todas as linguagens de programao orientadas a objetos suportam herana mltipla. A
Animal
cor atributo

A1
Ave

A2 B

Qual cor da ave ?

42

Informtica - UFPA

Polimorfismo

a habilidade de variveis terem mais de um tipo. Funes so ditas polimrficas quando seus operandos podem ter mais de um tipo.
Classificao de [Cardelli & Wegner]:
Polimorfismo

Universal

Ad Hoc

Paramtrico

Incluso

Overloading

Coero Informtica - UFPA

43

Polimorfismo

Coero: a linguagem de programao tem um mapeamento


interno entre tipos.

Exemplo: se o operador + definido para somar dois nmeros reais e um inteiro passado como parmetro ento o inteiro coargido para real.

Overloading (sobrecarga): permite que um nome de

funo seja usado mais de uma vez com diferentes tipos de parmetros. O compilador automaticamente chama a funo correta que deve ser utilizada.

Exemplo: o operador + que pode ter 2 parmetros inteiros, 2 parmetros reais, 2 cadeias de caracteres (concatenao), etc. A instruo read(x) em Pascal onde x pode ser inteiro, real ou string. Informtica - UFPA

44

Polimorfismo

Em Orientao a Objetos : Professor


calcSalario()

Professor Universitrio
calcSalario()

Professor Primrio
calcSalario()

Assim, pode-se adicionar um comportamento especfico (implementao) s subclasses de uma hierarquia de generalizao / especializao.
Informtica - UFPA

45

Polimorfismo

Polimorfismo paramtrico ou parametrizao: a partir


de uma nica definio de uma funo ela pode trabalhar uniformemente. Tambm conhecido como genericity. Exemplo:

/* Definio da Classe */ template class pilha <Tipo T> {


/* Estrutura de dados ... */

void empilhar( T ); T desempilhar( ); } /* Utilizao no cdigo Cliente */ pilha<int> pilhaInt; pilha<float> pilhaFloat; Informtica - UFPA

46

Polimorfismo

Polimorfismo

tipo de polimorfismo encontrado em linguagens orientadas a objetos. Todo objeto de uma subclasse pode ser usado no contexto de um superclasse. Exemplo: todo objeto do tipo crculo pode ser usado no lugar de um objeto do tipo elipse. Elipse /* Cdigo polimrfico */ calcularArea()
void main( ) { Elipse e; Circulo c; imprimir(e); imprimir(c); } void imprimir(Elipse eli) {.... }

de

Incluso:

Crculo
calcularArea() Informtica - UFPA

47

Acoplamento (Binding)

uma associao feita pelo compilador (interpretador) entre um atributo e uma entidade.

Exemplo: acoplamento entre tipos e variveis.

O acoplamento pode ser: Esttico: se ocorre antes do tempo de execuo e


permanece inalterado durante a execuo do programa.
Exemplo: quando voc declara em Pascal que uma varivel do tipo integer;

Dinmico

execuo ou muda durante a execuo do programa.

ou Atrasado: se ocorre durante o tempo de

48

Informtica - UFPA

Acoplamento

Exemplo (Java):

1 2 3 4

Elipse e; Circulo c; e := c; e.calcularArea( );

49 Elipse ?

A atribuio da linha 3 dinamicamente acoplada, pois acopla o objeto e um tipo diferente de seu tipo originalmente declarado. Em princpio, seria uma violao atribuir um objetos de um tipo diferentes tipo a vrivel e, no entanto, como c (Circulo) subclasse de e (Elipse) essa atribuio vlida. Qual o mtodo executado ? Crculo ou
Informtica - UFPA

Acoplamento
A operao executada a de Circulo, porque o compilador em tempo de execuo verifica que a varivel aponta para um objeto desta classe. Em algumas linguagens o programador deve pedir explicitamente o acoplamento dinmico para uma mensagem em particular. Por exemplo, em C++ a operao deve ser declarada virtual na superclasse e redefinida na subclasse. Importante: Todas as operaes sobrecarregadas na classe derivada devem proporcionar semanticamente os mesmos servios oferecidos pela superclasse. 50 Informtica - UFPA

Classes Abstratas

Uma classe abstrata uma classe que no tem instncias diretas, mas cujas subclasses podem ter instncias. Uma classe concreta uma classe que pode ter instncias. Em outras palavras se X uma classe abstrata vc no pode executar o cdigo a seguir: X objeto = new X(); Apesar disso, voc pode criar construtores de uma classe abstrata para que eles sejam chamados pelos construtores das subclasses. (Reutilizao) Em Java utiliza-se a palavra abstract para indicar uma classe abstrata:

51

public abstract class Figure { ....

Informtica - UFPA

Classes Abstratas

O objetivo de criarmos classes abstratas para encapsular outras classes com comportamento comum. Elas podem surgir naturalmente na modelagem ou serem criadas para promover o reuso. Alm disso, uma classe abstrata pode definir um protocolo para uma operao sem definir a implementao do mtodo.
public

abstract class Figure { // inicioFigure public abstract double area(); public abstract double perimetro(); }// fimFigure
52
Informtica - UFPA

Classes Abstratas

Assim, voc pode declarar mtodos abstratos em uma classe abstrata apenas para especificar um protocolo comum de operaes. Toda subclasse concreta da classe abstrata deve fornecer uma implementao para TODOS os mtodos abstratos:
class Circle extends Figure { protected double raio; public Circle(double r) { raio = r;} public double area() { return PI*raio*raio;} public double perimetro() { return 2*PI*raio;} }

53

Informtica - UFPA

Classes Abstratas
Qualquer classe com pelo menos um mtodo abstract automaticamente abstrata e deve ser declarada como tal. Se uma subclasse de uma classe abstrata no implementa todos os mtodos abstratos ento ela tambm abstrata. Uma classe abstrata tambm pode ter mtodos concretos. Frequentemente, faz sentido mover o mximo de funcionalidade possvel para uma superclasse, seja ela abstrata ou no. Uma classe pode ser abstrata sem ter mtodos 54 abstratos. Isto evita que a classe seja instanciada. - UFPA Informtica

Delegao

um outro mecanismo para compartilhamento de cdigo. Tambm conhecido como composio. Normalmente ele utilizado em linguagens que no utilizam o conceitos de classes. Nestas linguagens os objetos so chamados prottipos (prototypes) e cada um deles implementa um comportamento especfico.
Objeto A
Pessoal attr1 mtodos Compartilhada Pessoal attr1 mtodos Informtica - UFPA

Objeto B
Compartilhada

55

Delegao

Se o objeto A no implementa uma determinada mensagem ele delega (repassa) a mensagem para o objeto B. Se o objeto B implementa aquela mensagem ento ele a executa com os dados de A, seno ele a delega para seus delegatees .... Pode existir uma lista de objetos para os quais mensagens so delegadas, o que causa conflito assim como na herana mltipla. A soluo uma lista sequencial de objetos. Exemplos de linguagens: Actor e Self.
Informtica - UFPA

56

Delegao

A herana permite o compartilhamento baseado em classes, enquanto que a delegao permite o compartilhamento baseado em objetos. A delegao um modo mais geral que a herana de estender a funcionalidade de uma classe, visto que existem muitas ocasies em que no conveniente usar a herana. Alm disso, a delegao permite que um objeto possa alterar suas respostas para pedidos de servios em tempo de execuo.

57

Informtica - UFPA

Delegao

Segundo [Grand98], qualquer extenso de uma classe que pode ser feita utilizando-se a herana, tambm pode ser feita com a delegao. Entretanto, a recproca no verdadeira. Em linguagens baseadas em classes este mecanismo tambm pode ser obtido. Isto feito atravs do repasse da mensagem para o outro objeto. Para isso necessrio que o objeto delegador do servio contenha uma referncia para o objeto responsvel pela execuo.
Informtica - UFPA

58

Delegao: quando usar

1. Se uma subclasse precisar esconder um mtodo ou varivel herdado da subclasse. Na maioria das linguagens orientadas a objetos no existe nenhum mecanismo para permitir isto, logo deve-se evitar a herana.

Lista
addInicio(Item) addFinal(Item) remInicio remFinal

Pilha
empilhar -->addInicio(Item) desempilhar --> remInicio

59

Informtica - UFPA

Delegao: quando usar


public class Lista { private Vector _dados = new Vector(); ..... public void addInicio(int x) {...} public void addFinal(int x) {...} public int remFinal( ) {...} public int remInicio( ) {...} } public class Pilha { private Lista _lista; // A implementacao das operacoes especificas da pilha // so simplesmente DELEGADAS para a lista. public void push(int x) { _list.addInicio(x); } public int pop( ) { return _list.remInicio( ); } }

60

Informtica - UFPA

Delegao: quando usar

2. Quando voc tem um cdigo a ser reutilizado entre duas ou mais classes e no existe herana entre elas:
public class ClienteJuridico extends Cliente { private Endereco _endereco; public void setEndereco(numero, rua, cidade, estado, cep) { _endereco.setData(numero, rua, cidade, estado, cep) ;} } public class Fornecedor { private Endereco _end; public void setEndereco(numero, rua, cidade, estado, cep) { _end.setData(numero, rua, cidade, estado, cep) ; } }

61

Informtica - UFPA

Delegao: quando usar


public class Endereco { private numero, rua, cidade, estado, cep; }

62

Informtica - UFPA

Delegao: quando usar


3. Para acomodar modificaes dos objetos que mudam de Subclasses.
public abtract class Aluno { // Atributos comuns de um Aluno} public class Bolsista extends Aluno {} public class Monitor extends Aluno {} public class Estagiario extends Aluno {}

A herana implica em uma acomodao fraca dos objetos que mudam de classe ao longo do tempo: Um aluno est frequentemente mudando de subclasses, ou seja, hoje ele um Bolsista, depois de um ms ele um Estagirio, e assim por diante.
Informtica - UFPA

63

Delegao: quando usar

Para modelarmos isso, seria necessrio que o objeto Bolsista existente fosse destrudo do sistema e um novo objeto Estagirio fosse criado, entretanto deveramos ter antes copiado os atributos comuns de um objeto para outro. Alm disso, quando um objeto se transmuta, ele perde todo o seu histrico. Isso torna a mudana mais complexa. A soluo usar a delegao, visto que ela se ajusta melhor mudanas freqentes. Quando um objeto precisa de responsabilidades adicionais especficas do papel, basta adicionar um novo papel.
Informtica - UFPA

64

Delegao: quando usar

Desta forma, estaremos usando a composio (uma pessoa e seus papis) e a herana(papis especializados desempenhados por um aluno).

public class Aluno { // Atributos comuns de um Aluno //Um novo atributo adicionado que corresponde // a um apontador para uma lista de papis // desempenhados pelo aluno Vector _papeis; }

65

Informtica - UFPA

Delegao: quando usar


public abstract class PapelAluno { // No possui nada, apenas a classe... } public class Bolsista public class Monitor public class Estagiario definicao da

extends PapelAluno {} extends PapelAluno {} extends PapelAluno {}

66

Informtica - UFPA

MetaClasses

So classes cujas instncias tambm so classes. Uma classe contm informao sobre os objetos, enquanto que uma metaclasse contm as informaes referentes classe. Dependendo da linguagem orientada a objetos :
Existe suporte explcito a metaclasses. Ex: ObjVLisp. Existe suporte implicto a metaclasses. Ex: Smalltalk. No existe suporte a metaclasses. Ex: C++ e Java.

MetaClasse 67

instncia

Classe

instncia

Objeto
Informtica - UFPA

MetaClasses

Vantagens 1. As classes podem ser utilizadas para armazenar a informao em relao ao grupo de objetos.

Exemplo: o nmero de objetos instanciados a partir da classe, o valor mdio de uma propriedade calculada a partir dos valores especficos desta propriedade nas instncias, uma propriedade comum a todas as classes. MetaCrculo
# de instncias = 2 pi = 3.1415
instncia

Crculo
raio cor

(Crculo) raio= 10 cor = preta


instncia

68

(Crculo) raio= 23 cor = azul Informtica - UFPA

MetaClasses

So utilizadas no processo de criao inicializao) das novas instncias de uma classe.


2.

(e

Exemplo: - Uma classe passa a ser tratada como um objeto que recebe uma mensagem solicitando a criao de objetos. Assim, o cdigo abaixo corresponderia a : Circulo c = new Circulo(); enviarmos uma mensagem (new) a um objeto Crculo. Logo, assim com a classe especifica as operaes da interface pblica dos objetos, necessita-se de uma metaclasse para especificar as operaes da interface pblica das classes. 69
Informtica - UFPA

MetaClasses

importante frisar que o conceito de metaclasses na implementao tende a desaparecer. O ponto a destacar que o nvel da metaclasse , frequentemente irrelevante para o programador tpico [TAK90]. O conceito de metaclasse utilizado em algumas metodologias de Anlise e Projeto Orientado a Objetos.

70

Informtica - UFPA

MetaClasses em Java

Em Java o conceito de constructor e atributos e mtodos static, corresponde a unio do conceito de classes e metaclasses.
Atributos Static: este modificador em atributos torna-os atributos da classe. Mtodos Static: da mesma forma, mtodos static pertencem a uma classe e no operam sobre instncias de uma classe.

A sintaxe para acessar metodo static :


NomeDaClasse . MetodoStatic(Parametros) Por exemplo: double valor = Circulo.getPi();

71

Informtica - UFPA

MetaClasses em Java
public class Circulo { static final double Pi = 3.14; int raio; Color cor; public Circulo(int raio) {this.raio = raio; } public static double getPi() { return Pi;} public double getArea() { return Pi*raio*raio;} } (Crculo) raio= 10 cor = preta
instncia

MetaCrculo
# de instncias = 2 pi = 3.1415
instncia

Crculo
raio cor

(Crculo) raio= 23 cor = azul Informtica - UFPA

72

MetaClasses em Java

Um mtodo static pode ser chamado sem que seja necessrio criar um objeto da classe. Exemplo:
public class TestRan { static public void main(String[] args) { double d, soma = 0; int i=0; while (i<100) { d = Math.random(); soma += d; i++; } System.out.println(" A media e "+(soma/100));} }

73

Informtica - UFPA

MetaClasses em Java

Um mtodo static s pode acessar atributos static. Como o mtodo main static ele no pode acessar atributos no static da classe. Por isso, no mtodo main frequentemente voc dever criar objetos da prpria classe para que assim voc possa referenciar atributos desta classe.
class Application{ public static void main(String[] args) { Application a = new Application(); } }

74

Informtica - UFPA

Bibliografia

75

Blair, G. et al. (Editors) Object-Oriented Languages, Systems and Applications, Pitman Publishing, 1991. Buzato, L. E., Rubira, C. M. F. Construo de Sistemas Orientados a Objetos Confiveis, Dcima Primeira Escola de Computao, Rio de Janeiro, Julho de 1998. Cornell, G., Horstmann, C. S. Core Java. Makron Books, So Paulo, 1998. Oliva, Alexandre. Programao em Java. II Simpsio Brasileiro de Linguagens de Programao, Campinas, setembro de 1997. Cesta, A. A., Rubira, C. M. F. Tutorial: A Linguagem de Programao Java, Campinas, junho de 1997. Flanagam, D. Java in a Nutshell, Second Edition, OReilly Associates, 1997.
Informtica - UFPA

Bibliografia

Grand, M. Patterns in Java, John Wiley & Sons, 1998. Meyer, B., Object-oriented software construction, Prentice-Hall, 1988. Flanagam, D. Java Examples in a Nutshell, First Edition, OReilly Associates, 1997. Takahashi, T. Programao Orientada a Objetos, Escola de Computao, So Paulo, 1990. Rubira, C. M. F. Tpicos Especiais em Engenharia de Software II, Universidade Estadual de Campinas, notas de aula, 1996.

76

Informtica - UFPA

Vous aimerez peut-être aussi