Você está na página 1de 76

Orientao a Objetos

Cleidson Souza - cdesouza@ufpa.br


Departamento de Informtica
Universidade Federal do Par
1 Informtica - UFPA
Agenda
Introduo a OO Paradigma de Objetos
Histrico Classe e Objetos
Motivos que influenciaram Encapsulamento
Vantagens da OO Herana
reas de aplicao Classes Abstratas
O que a Orientao a Objetos? Polimorfismo
Preconceitos sobre a OO Delegao
Desenvolvimento OO Acoplamento Dinmico
Linguagens de Programao OO MetaClasses

Bibliografia

2 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 Object-
Oriented Programming Languages, Systems and Applications
(OOPSLA).
C++
Java

3 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
...
4 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].

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

6 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 conjunto de regras que


estabelecem fronteiras e descrevem como resolver
problemas dentro desta fronteira. Um paradigma
ajuda-nos a organizar a e coordenar a maneira como
olhamos o mundo.
7 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.


8 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.
9 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
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.
12 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.
14 Informtica - UFPA
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.
15 Informtica - UFPA
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 Paradigma de
Procedual Objetos
Tipos de Dados Classes
Varivel Objeto / Instncia
Funo / Procedimento Operao / Mtodo Servio
Chamada de Funo Envio de Mensagem

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

Podemos afirmar que um objeto um conceito,


abstrao, ou entidade com limites bem definidos e
um significado para a aplicao.

17 Informtica - UFPA
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
5
ao

Objeto geomtrico
ao
O per

Atributos
2

Op
4 o o
era cor:
a er 3 posio:
O p

selecionar(p: Ponto): boolean


girar(ngulo: real)
mover(delta: coord)

19 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
20
realizadas no segundo objeto.
Informtica - UFPA
Objetos - Caractersticas
Comunicao entre Objetos
Operao
1
O per
ao

2
a
O per

Atributos
o
3
5

Op
o a er Operao
ra o4
e 1

O per
Op

ao

2
a
O per
Atributos

o
3

5
Op
o a er
r a o4
e
Op

21 Informtica - UFPA
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.
22 Cria um programa legvel e bem estruturado Informtica - UFPA
Exemplo de Encapsulamento
Implementacao de uma public static void
main(String args[]) {
Lista sem usar
Lista al = new Lista(5);
Encapsulamento: al.dados[0]=0;
al.tamanho++;
public class Lista{ al.dados[1]=1;
public int dados[]; al.tamanho++;
if (al.tamanho>=2) {
public int tamanho;
public Lista(int n) { System.out.println("Imprime o
1 elemento "+ al.dados[0]);
dados = new int[n];
tamanho = 0; System.out.println("Imprime o
2 elemento "+ al.dados[1]);
} }
} }
23 Informtica - UFPA
Exemplo de Encapsulamento
Implementacao de uma public static void main(String args[])
Lista com Encapsulamento: {
public class ArrayLista{ ArrayLista al=new ArrayLista(5);
private int dados[]; al.add(1);
private int tamanho; al.add(2);
public ArrayLista(int n) { System.out.println("Imprime o 1
dados = new int[n]; elemento +al.remove(0));
tamanho = 0; System.out.println("Imprime o 2
} elemento +al.remove(1));
public void add(int a) {
}
dados[tamanho] = a;
tamanho++;
}
}
public int remove(int posicao) {
if ((posicao>0) &&
(posicao<tamanho))
return dados[posicao];
return -1;
}
24 Informtica - UFPA
Exemplo de Encapsulamento
Implementacao de uma public static void main(String args[])
Lista com Encapsulamento: {
import java.util.Vector; VectorLista al = new VectorLista(5);
public class VectorLista{ al.add(1);
private int dados[]; al.add(2);
public VectorLista(int n) { System.out.println("Imprime o 1
dados = new Vector(n); elemento "+ al.remove(0));
}
System.out.println("Imprime o 2
public void add(int a) {
elemento "+ al.remove(1));
dados.addElement(new Integer(a));
}
}
public int remove(int posicao) { }
if ((posicao>0) && (posicao<dados.size()))
return ((Integer)
dados.elementAt(posicao)).intValue();
return -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.
28 Informtica - UFPA
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
nome:string
Atributos idade:inteiro
calcularIdade() Mtodos

(Pessoa) (Pessoa) (Pessoa)


merson Romrio Clarissa

29 Informtica - UFPA
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
31 Informtica - UFPA
Herana
Herana de Atributos

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

32 Informtica - UFPA
Herana
Herana de Relacionamentos

N 1
Veculo Pessoa
placa pertence
registrar()

Todo carro e
todo caminho
Carro 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 Professor
Universitrio Primrio

34 Informtica - UFPA
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 Generalizao

35 Professor Aluno
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
nome
identificao* Aluno
36 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 Elipse
calcularArea
comportamento. Ou seja, as
classes derivadas devem se
comportar como as
superclasses. Para isso Crculo
sempre deve existir uma calcularArea
hierarquia de Generalizao
/Especializao entre as
classes.
Um objeto do tipo crculo
pode ser usado no lugar de Crculos
um objeto do tipo elipse
Elipses
porque todo circulo um
39 tipo especial de elipse. Informtica - UFPA
Herana Mltipla
Herana mltipla a possibilidade de se definir uma
subclasse com mais de uma superclasse.

CoisaQueVoa Animal

Avio Ave Mamfero

Ave herda de ambos,


CoisaQueVoa e
Animal
40 Informtica - UFPA
Herana Mltipla
Outro Exemplo de Herana Mltipla

Empregado Cliente

Empregado Cliente

41 Informtica - UFPA
Herana Mltipla: Observaes
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
CoisaQueVoa Animal
cor atributo
cor

A1 A2
Ave Qual cor da ave ?
B
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

43 Informtica - UFPA
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.

44 Informtica - UFPA
Polimorfismo
Em Orientao a Objetos :
Professor
calcSalario()

Professor Professor
Universitrio Primrio
calcSalario() calcSalario()

Assim, pode-se adicionar um comportamento especfico


(implementao) s subclasses de uma hierarquia de
generalizao / especializao.

45 Informtica - UFPA
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;

46 Informtica - UFPA
Polimorfismo
Polimorfismo de Incluso: 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); Crculo
imprimir(c); calcularArea()
}
void imprimir(Elipse eli) {.... }
47 Informtica - UFPA
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 ou Atrasado: se ocorre durante o tempo de
execuo ou muda durante a execuo do programa.

48 Informtica - UFPA
Acoplamento
Exemplo (Java):
1 Elipse e;
2 Circulo c;
3 e := c;
4 e.calcularArea( );
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
49 Elipse ? 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
50
superclasse .
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:
public abstract class Figure { ....
51 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.
Informtica - UFPA
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 Objeto B
Pessoal Compartilhada
Pessoal Compartilhada
attr1
attr1
mtodos
mtodos
55 Informtica - UFPA
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.

56 Informtica - UFPA
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.

58 Informtica - UFPA
Delegao: quando usar
1. Se uma subclasse Lista
precisar esconder um addInicio(Item)
addFinal(Item)
mtodo ou varivel remInicio
herdado da subclasse. remFinal

Na maioria das
linguagens orientadas a
Pilha
objetos no existe
nenhum mecanismo empilhar -->addInicio(Item)
desempilhar --> remInicio
para permitir isto, logo
deve-se evitar a herana.

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.
63 Informtica - UFPA
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.
64 Informtica - UFPA
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 definicao da
classe...
}

public class Bolsista extends PapelAluno {}


public class Monitor extends PapelAluno {}
public class Estagiario 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.

instncia
MetaClasse Classe instncia
Objeto

67 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.
(Crculo)
raio= 10
MetaCrculo cor = preta
# de instncias = 2 Crculo
instncia
raio (Crculo)
pi = 3.1415 instncia cor raio= 23
cor = azul
68 Informtica - UFPA
MetaClasses
2. So utilizadas no processo de criao (e
inicializao) das novas instncias de uma classe.
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
MetaCrculo cor = preta
# de instncias = 2 Crculo
instncia
raio (Crculo)
pi = 3.1415 instncia cor raio= 23
cor = azul

72 Informtica - UFPA
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
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.
75 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

Você também pode gostar