Você está na página 1de 45

Relembrar os

conceitos OO
Parte 2
Princpios OOP de Alan
Kay
1. Tudo um objecto.
2. Os objectos efectuam a sua computao trocando
pedidos entre si recorrendo a mensagens.
3. Cada objecto tem a sua prpria memria que
consiste noutros objectos.
4. Cada objecto uma instncia de uma classe. A
classe agrupa objectos similares.
5. A classe um repositrio do comportamento
associado com um objecto
6. As classes esto organizadas numa rvore (de
raz nica) chamada hierarquia de herana.
z Programao orientada aos objectos baseada
no princpio do desenho recursivo.
40
ISEP/IPP
Exemplo
z Para ilustrar os conceitos OO vamos considerar um
cenrio exemplo de envio de flores para uma pessoa
amiga que vive noutra cidade, o Chris vai enviar flores
Robin.
z O Chris no pode entregar pessoalmente as flores, por
isso recorre aos servios da sua loja de flores local.
z O Chris diz ao florista (chamado Fred) a morada da Robin,
quanto quer gastar, e o tipo de flores e arranjo que
pretende.
z O Fred contacta a florista na cidade onde mora a Robin,
que faz o arranjo de flores e em seguida contacta um
paquete para a entrega das flores.
z natural que neste cenrio estejam envolvidas ainda
outras pessoas: os floricultores, as empresas de
41
distribuio, etc..
ISEP/IPP
Comunidade de objectos
no exemplo

$$

paquete Robin
Chris Fred

Florista (cidade 2)

Floricultor

Floricultor
Distribuidor flores
Florista (arranjo)
Floricultor

42
ISEP/IPP
Comunidades de objectos
z A primeira observao que os resultados so
obtidos atravs da interaco de diversos
agentes, aos quais chamamos objectos.
Adicionalmente, qualquer actividade no trivial
exige a interaco de uma comunidade de
objectos trabalhando em conjunto.
z Cada objecto tem um papel a desempenhar,
um servio que pode fornecer aos outros
membros da comunidade.

43
ISEP/IPP
Conceito OO:
Objectos
z O primeiro princpio de Alan Kay.
z Tudo um objecto.
z As aces em POO so executadas por
agentes, denominados instncias ou objectos
z H vrios agentes trabalhando
cooperativamente neste cenrio: o Chris, a
Robin, Fred o florista, a florista na cidade da
Robin, o paquete, e o floricultor. Cada agente
tem um papel a representar e o resultado final
consequncia do trabalho de todos para
encontrar uma soluo para um problema.
44
ISEP/IPP
Conceito OO:
Mensagens
z Princpio nmero dois:
z Os objectos efectuam a sua computao trocando
pedidos entre si recorrendo a mensagens
z As aces em POO so produzidas em
resposta a pedidos, chamados mensagens.
Uma instncia pode aceitar uma mensagem e
em seguida executar uma aco e retornar um
resultado.
z Para iniciar o processo de envio de flores, o
Chris envia uma mensagem ao Fred. O Fred
por sua vez envia uma mensagem florista na
cidade da Robin, que envia outra mensagem
ao paquete e por a fora.
45
ISEP/IPP
Information Hiding
z de reparar que um utilizador de um
servio fornecido por um objecto,
necessita apenas de saber quais as
mensagens aceites por esse objecto.
z No necessita de ter qualquer tipo de
ideia sobre como as aces que sero
executadas em resposta a um pedido.
z Aps aceitao de uma mensagem, um
objecto responsvel pela sua
46
ISEP/IPP
execuo.
Conceito OO:
Receptores
z As mensagens diferem das chamadas de
funes tradicionais em dois aspectos
muito importantes:
z Numa mensagem h um receptor designado
que aceita a mensagem
z A interpretao da mensagem pode ser
diferente dependendo do receptor
z A mesma mensagem resultar em
diferentes aces dependendo de quem
a recebe.
47
ISEP/IPP
Comportamento e
interpretao
z Apesar de diferentes objectos aceitarem a
mesma mensagem, as aces
(comportamento) que cada objecto
desencadear sero provavelmente diferentes.
z A escolha de qual o comportamento a efectuar
pode ser apenas decidido em run-time (late
binding)
z Cada objecto livre de interpretar uma
mensagem da maneira que melhor entender.
z O facto de um mesmo nome poder ter
significados completamente diferentes uma
forma de polimorfismo.
48
ISEP/IPP
No interferncia
(responsabilidade)
z importante permitir que os objectos executem
as suas tarefas da forma que entenderem
adequada sem interaces desnecessrias
nem interferncias de outros objectos.
z Instead of a bit-grinding processor ...
plundering data structures, we have a universe
of well-behaved objects that courteously ask
each other to carry out their various desires --
Dan Ingalls.
z Ask not what you can do to your data
structures, but ask what your data structures
can do for you -- annimo

49
ISEP/IPP
Conceito OO:
overloading
z um mecanismo que permite a definio de
diferentes mtodos para uma mesma
mensagem num objecto, baseado-se no
nmero e tipo de parmetros da mensagem
z Tipicamente todas as mensagens esto
associadas com o mesmo comportamento
z Exemplo (Java):
z Complexo.setValue(float r, float i);
z Complexo.setValue(Complexo o);

50
ISEP/IPP
Conceito OO:
Desenho recursivo
z O terceiro princpio de Alan Kay
z Cada objecto tem a sua prpria memria
que consiste noutros objectos.
z Cada objecto como um computador
em miniatura, um processador
especializado numa determinada tarefa.
z Composio de um objecto custa de
outros objectos existentes -- reutilizao

51
ISEP/IPP
Conceito OO:
Composio (Has-a)
z A diviso em partes particiona um sistema
complexo dividindo-o em partes (componentes)
que podem ser consideradas isoladamente.
z Caracterizada por frases com o verbo ter
z Um carro tem um motor, e tem uma transmisso
z Uma bicicleta tem duas rodas
z Permite diminuir a complexidade do sistema ao
considerar componentes isolados.

52
ISEP/IPP
Conceito OO:
Encapsulamento
z O encapsulamento consiste na
agregao dos dados e seus
comportamentos numa nica unidade
organizacional - classe.
z O Encapsulamento permite
z Reforar a integridade dos tipos de dados,
no permitindo aos programadores o acesso
aos campos de dados individuais de um
modo inapropriado.

53
ISEP/IPP
Vantagens do
encapsulamento
z Modularidade
z agregando dados e comportamentos numa
nica unidade.
z Privilgios idnticos aos dos tipos de
dados primitivos.
z Proteco dos dados
z garantindo a sua consistncia e segurana.

54
ISEP/IPP
Vantagens do
encapsulamento
z Separa a implementao da interface.
z Simplifica a percepo que os
utilizadores tm da classe
z nvel de abstraco.
z Facilita a possibilidade de modificao da
implementao da classe.
z Independncia do contexto
z promove o desacoplamento.
z Melhor qualidade na produo de
55
software.
ISEP/IPP
Conceito OO:
Classes e Instncias
z Princpio n. 4 e 5
z Cada objecto uma instncia de uma classe. A classe
agrupa objectos similares.
z A classe um repositrio do comportamento associado
com um objecto
z O comportamento expectvel do Fred determinado
com base na ideia generalizada que cada um de ns tem
dos floristas.
z Diz-se ento que o Fred uma instncia da classe
Florista
z O comportamento est associado com as classes e no
com os objectos. Todos os objectos que so instncias
de uma classe usam o mesmo mtodo em resposta a
uma mesma mensagem (mas cada um tem a sua prpria
56
memria!!! princpio n. 3).
ISEP/IPP
Conceito OO:
Herana
z Princpio n. 6
z As classes esto organizadas numa rvore
(de raiz nica) chamada hierarquia de
herana
z Esta hierarquia fornece diferentes
nveis de abstraco
z Estados e comportamentos associados
a um nvel da hierarquia so
automaticamente associados aos seus
descendentes.
57
ISEP/IPP
Conceito OO:
Herana (Is-a)
z As abstraces Is-a (diviso por
especializao) particionam um sistema
complexo criando abstraces mais
generalizadas/especializadas e relacionando
essas abstraces por herana.
z Caracterizada for frases com o verbo ser
z Um carro um veculo que por sua vez um meio de
transporte
z Uma bicicleta um veculo com rodas
z Uma carruagem a cavalo um meio de transporte
z Permite categorizar artefactos.
58
ISEP/IPP
Herana
z Herana uma forma de reutilizar software
z Novas classes so criadas a partir de classes
existentes,
z Herdando os atributos e comportamentos, e
z Acrescentando novos atributos e comportamentos
que necessitem.
z Herana utilizada para especializao
z Todo o objecto da subclasse tambm um objecto
da superclasse.
z O inverso no verdade.

59
ISEP/IPP
Exemplo de hierarquia de
classes

60
ISEP/IPP
Conceito OO:
overriding (sobreposio)
z As Subclasses podem alterar ou
sobrepor o comportamento herdado das
superclasses:
z Todos os mamferos do luz as suas
crias
z O ornitorrinco um mamfero que pe ovos
z O mecanismo de herana combinado
com a sobreposio que permitem
grande parte do poder do conceito OO.
61
ISEP/IPP
Conceito OO:
Polimorfismo
z Mecanismo ligado herana e sobreposio
de mtodos (overriding)
z Consiste na utilizao de variveis de um tipo
que na realidade so objectos de outro tipo
derivado
z Exemplo:
z Veiculo m;
z Na realidade esta varivel pode conter qualquer
objecto desde que este seja derivado da classe
Veiculo, por exemplo, Carro ou Bicicleta.
z As mensagens enviadas sero interpretadas pelo
objecto receptor e executadas de maneira
apropriada. Por exemplo, mover.

62
ISEP/IPP
Polimorfismo
z Significa que atravs do mesmo nome se pode
invocar diferentes mtodos.
z O mecanismo de polimorfismo permite que:
z usando uma referncia de uma superclasse para
referenciar um objecto (instncia de uma subclasse)
e
z invocando um mtodo que exista na superclasse e
que tambm exista (overriden) na subclasse do
objecto,
z o programa escolher dinamicamente (isto , em
tempo de execuo) o mtodo correcto da subclasse.
63
ISEP/IPP
Benefcios do
polimorfismo
z Tratamento genrico de cdigo
z numa hierarquia de tipos com o mesmo interface (os
mesmos mtodos pblicos), cdigo que funciona com
um tipo genrico tambm funciona com qualquer
objecto que seja subtipo desse tipo.
z Permite uma fcil extenso de um programa
com um mnimo de modificaes
z podem-se adicionar novos tipos de objectos que
respondem a mensagens existentes.
z Simplifica a escrita de cdigo, a leitura e
compreenso e a manuteno - nvel de
abstraco.
64
ISEP/IPP
Mtodos e classes
abstractas
z Diz-se de um mtodo que definido em termos
de assinatura mas no implementado
z Apenas se define o nome do mtodo, os argumentos
e o tipo de retorno sem fornecer a sua
implementao
z Uma classe abstracta aquela que tem pelo
menos um mtodo abstracto
z No permite a criao de objectos desta classe pois
nem todos os comportamentos esto definidos
z Obriga implementao dos mtodos abstractos em
classes derivadas

65
ISEP/IPP
Membros de classe e de
instncia
z Uma classe define os atributos e as
operaes de todas as instncias dessa
classe
z no entanto possvel definir atributos e
operaes da prpria classe
z No dependem de nenhuma instncia em
particular
z So partilhados por todas as instncias

66
ISEP/IPP
Membros de classe e de
instncia
class Entidade
{
static int lastKey = 0;
string nome;
int key;
...
private static void NovoCodigo() {
return ++lastKey;
}
public Entidade(string nome) {
this.nome = nome;
key = Entidade.NovoCodigo();
}
public string GetNome() {
return nome;
}
...
67
ISEP/IPP }
Membros de classe e de
instncia
class Pessoa
{
string nome;
string morada;
int id;
...
public static Pessoa Load(int id) {
// [ cdigo para ler da BD ]
Pessoa x = new Pessoa(nm, mr);
x.id = id;
return x;
}
public Pessoa(string nome, string morada) {
...
}
public string GetNome() {
return nome;
}
68
...
ISEP/IPP }
Membros de classe e de
instncia

//
// criao
criao de
de objecto
objecto
Pessoa
Pessoa p1 = new Pessoa(antnio,
p1 = new Pessoa(antnio, r.
r. direita);
direita);

//
// utilizao
utilizao dede mtodo
mtodo de
de classe
classe para
para criar
criar objecto
objecto
Pessoa
Pessoa p2
p2 == Pessoa.Load(34);
Pessoa.Load(34);
p2.GetNome();
p2.GetNome();

69
ISEP/IPP
Interfaces
An interface is a named collection of
operations used to specify a service of a
class without dictating its implementation.

interface
Observer
Observer

update()

70
ISEP/IPP
Design by contract
z Viso como servios
z A interface descreve o servio fornecido pelo
objecto.
z A interface funciona como um contrato para
esse servio: se o servio fornecido, ento
ser fornecido de acordo com o descrito no
contrato
z Permite a captura de semelhana entre classes
sem impor relaes artificiais entre elas
z Evidencia o servio prestado sem forar
qualquer tipo de implementao
71
ISEP/IPP
Permutabilidade
z Um aspecto importante das interfaces
a definio clara da conexo, interface,
entre componentes.
z Permite considerar vrias
implementaes para uma mesma
interface.
z Por exemplo, um carro pode ter
diferentes tipos de motor e de
transmisso.
72
ISEP/IPP
Implementao de
Interfaces
z As classes podem realizar uma ou mais
interfaces

MyObserver

Observer
update()

73
ISEP/IPP
Interface
z Uma interface define um contrato entre partes.
z Apenas define as operaes e no a
implementao
z Deve ser imutvel, i.e., as interfaces no
podem ser modificadas aps publicao

public interface IMovimentavel {


public void Mover();
public void MoverPara(Posicao p);
}

74
ISEP/IPP
Interface
z Pode ser feita herana entre interfaces
public interface IMovimentavel2 : IMovimentavel {
public void Percorrer(Posicao[] p);
}

z Esta a maneira correcta de actualizar


(upgrade) uma interface
z A interface IMovimentavel j tinha sido publicada e
como tal imutvel
z Novas funcionalidades devem ser colocadas noutra
interface derivada
z Permite o funcionamento correcto de clientes da
verso anterior
75
ISEP/IPP
Variveis do tipo Interface
z Funciona como um tipo de dados embora
no seja possvel criar objectos desse
tipo
IMovimentavel m; //declara variavel
IMovimentavel x = new IMovimentavel (); // ERRO!!!

z A interface no define a implementao


logo no se podem criar objectos desse
tipo
76
ISEP/IPP
Interface

z Uma classe pode implementar


vrias interfaces
public
public class
class Pessoa
Pessoa :: ICloneable,
ICloneable, IMovimentavel2
IMovimentavel2
{{
...
...
public
public object
object Clone()
Clone() {{ ...
... }}
public
public void
void Mover()
Mover() {{ ...
... }}
public
public void
void MoverPara(Posicao
MoverPara(Posicao p) p) {{ ...
... }}
public
public void
void Percorrer(Posicao[]
Percorrer(Posicao[] p) p) {{ ...
... }}
}}

77
ISEP/IPP
Interface
z Vrias classes podem implementar a
mesma interface

public
public class
class Carro
Carro :: Veiculo,
Veiculo, IMovimentavel
IMovimentavel {{
...
...
public
public void
void mover()
mover() {{ ...
... }}
public
public void
void moverPara(Posicao
moverPara(Posicao p)p) {{ ...
... }}
}}

z Permite relacionar objectos de


hierarquias de herana no relacionadas
78
ISEP/IPP
Interface
z Uma varivel do tipo interface pode referenciar qualquer
objecto que implementa essa interface
IMovimentavel m;
Pessoa p = new Pessoa();
Carro c = new Carro();
m = p;
m.mover(); //Pessoa.mover()
m = c;
m.mover(); //Carro.mover();

z Muito til para criar cdigo genrico (framework)


z Apenas necessita que os objectos implementem as
interfaces

79
ISEP/IPP
Exemplo de utilizao
public
public class
class Cidade
Cidade {{
protected
protected IList
IList moviles
moviles == new
new ArrayList();
ArrayList();
...
...
public
public void
void AddObjMovel(IMovimentavel
AddObjMovel(IMovimentavel o) o) {{
moviles.Add(o);
moviles.Add(o);
}}
public
public void
void Movimento()
Movimento() {{
IEnumerator
IEnumerator ii == moviles.GetEnumerator();
moviles.GetEnumerator();
while
while (i.MoveNext())
(i.MoveNext()) {{
IMovimentavel
IMovimentavel mm ==
(IMovimentavel)i.Current;
(IMovimentavel)i.Current;
m.mover();
m.mover();
}}
}}
}}

80
ISEP/IPP
Exemplo de utilizao
public
public class
class TestCidadeApp
TestCidadeApp
{{
public
public static
static void
void Main()
Main()
{{
Cidade
Cidade cc == new
new Cidade();
Cidade();

c.addMovel(new
c.addMovel(new Pessoa());
Pessoa());
c.addMovel(new
c.addMovel(new Carro());
Carro());
c.addMovel(new
c.addMovel(new Carro());
Carro());

c.movimento();
c.movimento();
}}
}}

81
ISEP/IPP
Rules of thumb
z Programar para uma interface e no para uma
implementao
z Diminuir o acoplamento/dependncias entre classes
z Favorecer a composio em vez da herana
z Herana apenas no conceito de especializao
conceptual e no funcional
z Separao de responsabilidades
z cada macaco no seu galho
z Separao do cdigo de criao de instncias

82
ISEP/IPP
Rules of thumb
z Diminuir as dependncias entre
objectos/componentes ao nvel dos mtodos
z Evitar ligaes estruturais entre objectos a no ser
quando necessrio
z Favorecer a criao de variveis locais
z Optimizar apenas no final
z No sacrificar a leitura e estrutura do cdigo para
optimizaes que na prtica no fazem diferena
z Usar um profiler para identificar onde vale a pena
optimizar

83
ISEP/IPP

Você também pode gostar