A maior rede de estudos do Brasil

Grátis
75 pág.
Orientação a Objetos na Prática

Pré-visualização | Página 2 de 3

a eliminar a duplicação de 
código
Grande quantidade de atributos e métodos duplicados...
Herança
4343
 Refatoração
Superclasse
(características comuns)
Subclasses
(características específicas)
Herança
4444
Composição
 A classe contém referências para objetos de outras 
classes:
› Estas referências são também atributos da classe.
 Maneira alternativa de estender a funcionalidade de 
uma classe, agregando funcionalidades de outras 
classes.
 Herança x Composição
 É UM x TEM UM
4545
 O mecanismo de herança nem sempre é apropriado
 Estender funcionalidade através de herança pode não 
ser "natural":
 
› Uma conta de investimento é uma conta bancária!
› Uma conta de investimento não é uma Pessoa!
Composição
4646
• Se um proprietário tiver mais de um carro, a 
informação ficará redundante.
Composição
4747
• Utilizando uma conexão de ocorrência, o modelo 
poderia ser melhorado da seguinte forma:
Composição
4848
Polimorfismo
 "Programação Genérica".
 Trata objetos na mesma hierarquia de classes como 
se todos fossem objetos da superclasse.
 Tornam o programa extensível:
› Facilidade para adicionar novas classes.
4949
Polimorfismo
 Conceito Chave
Objetos das subclasses podem ser tratados como 
objetos da superclasse
 ::Project2
A
m1(...)
m2(...)
B
m1(...)
m3(...)
A classe B É UMA classe A 
→ Um objeto da classe B 
pode ser usado em qualquer 
lugar onde um objeto da 
classe A é esperado.
B A
5050
 Tabelas Virtuais
A.m2()m2()
A.m1()m1()
método invocadooperação
Classe A
 ::Project2
A
m1(...)
m2(...)
B
m1(...)
m3(...)
B.m3()m3()
A.m2()m2()
B.m1()m1()
método invocadooperação
Classe B
Polimorfismo
5151
 Chamadas polimórficas permitem simplificar a lógica 
condicional dos programas
Imagine um sistema 
construído para 
trabalhar tanto em 
Windows quanto em 
Linux
 ::Unit1 JWindows
close(...)
maximize(...)
minimize(...)
move(...)
open(...)
JLinux
close(...)
maximize(...)
minimize(...)
move(...)
open(...)
JWindows jWin;
JLinux jLin;
Polimorfismo
5252
procedure TForm1.FormCreate(Sender: TObject);
begin
 if SO='Windows' then
 jWin := JWindows.Create
 else
 jLin := JLinux.Create;
end;
procedure TForm1.WMSysCommand(var Message: TMessage);
begin
 if (Message.wParam = SC_MINIMIZE) then
 if SO='Windows' then
 jWin.minimize
 else
 jLin.minimize
 else if (Message.wParam = SC_MAXIMIZE) then
 if SO='Windows' then
 jWin.maximize
 else
 jLin.maximize
 else if (Message.wParam = SC_CLOSE) then
Observe a quantidade 
de lógica 
condicional!
Polimorfismo
5353
 Solução Polimórfica
 ::Unit1
JWindows
close(...)
maximize(...)
minimize(...)
move(...)
open(...)
Janela
close(...)
maximize(...)
minimize(...)
move(...)
open(...)
JLinux
close(...)
maximize(...)
minimize(...)
move(...)
open(...)
var
 jan: Janela;
Polimorfismo
5454
Observe a 
ausência de 
lógica 
condicional
procedure TForm1.FormCreate(Sender: TObject);
begin
 if SO='Windows' then
 jan := JWindows.Create
 else
 jan := JLinux.Create;
end;
procedure TForm1.WMSysCommand(var Message: TMessage);
begin
 if (Message.wParam = SC_MINIMIZE) then
 jan.minimize
 else if (Message.wParam = SC_MAXIMIZE) then
 jan.maximize
 else if (Message.wParam = SC_CLOSE) then
 jan.close
 else if (Message.wParam = SC_MOVE) then
 jan.move
 else
 inherited;
end;
Polimorfismo
5555
 Observe ainda como seria fácil acrescentar uma 
janela MOTIF para o Sun Solaris
 ::Unit1
Janela
close(...)
maximize(...)
minimize(...)
move(...)
open(...)
JWindows
close(...)
maximize(...)
minimize(...)
move(...)
open(...)
JLinux
close(...)
maximize(...)
minimize(...)
move(...)
open(...)
JSolaris
close(...)
maximize(...)
minimize(...)
move(...)
open(...)
Polimorfismo
5656
procedure TForm1.FormCreate(Sender: TObject);
begin
 if SO='Windows' then
 jan := JWindows.Create
 else if SO = 'Linux' then
 jan := JLinux.Create
 else
 jan := JSolaris.Create;
end;
procedure TForm1.WMSysCommand(var Message: 
TMessage);
begin
 if (Message.wParam = SC_MINIMIZE) then
 jan.minimize
 else if (Message.wParam = SC_MAXIMIZE) then
 jan.maximize
 else if (Message.wParam = SC_CLOSE) then
 jan.close
 else if (Message.wParam = SC_MOVE) then
 jan.move
 else
 inherited;
end;
... e nada mudou 
aqui!
Adicionou-se mais 
uma linha aqui...
Polimorfismo
5757
5858
Visão Geral da UML
5959
Diagrama de Casos de Uso
ComportamentoComportamento
6060
Diagrama de Classes
EstruturaEstrutura
6161
Diagrama de Seqüência
ComportamentoComportamento
6262
Diagrama de Colaboração
ComportamentoComportamento
6363
Diagrama de Estados
Estrutura e ComportamentoEstrutura e Comportamento
6464
Diagrama de Atividades
ComportamentoComportamento
6565
Diagrama de Componentes
EstruturaEstrutura
6666
Diagrama de Implantação
EstruturaEstrutura
6767
Diagrama de Máquina de Estado
6868
• Descreve processo de negócio e fluxo de trabalho;
• Suportam comportamento paralo (diferença para 
fluxograma);
• Semelhante Diagrama de Estados;
Diagrama de Atividades
6969
M o s t r a “q u e m ” 
f a z “o q u ê ”
Diagrama de Atividades
7070
• BlueJ – www.bluej.org
• UML – www.uml.org
• Jude – jude.change-vision.com
Links Úteis
7171
O Pioneirismo do Infnet
• O Infnet foi o pioneiro do ensino de Java no Rio de Janeiro, 
ministrando curso desta tecnologia antes mesmo da Sun.
48 h
Java Web Applications
Ensinar questões avançadas do desenvolvimento de aplicações Web com a 
linguagem de programação Java e os frameworks mais usados no mercado.
I554
48 h
Java Programming
Ensinar a programar em Java para alunos que já sabem programar em qualquer outra 
linguagem.
I552
40 h
Projeto de Sistemas e Orientação a Objetos com UML
Ensinar conceitos de orientação a objetos e sua utilização no processo de 
desenvolvimento de software usando UML.
I550
HorasNome do cursoCódigo
Formação Desenvolvedor Java
7272
A Formação Completa do Infnet
32 h
Java Workshop
Colocar em prática o conhecimento avançado de desenvolvimento 
de aplicações Java.
I562
32 h
Java Mobile
Ensinar programação Java para dispositivos móveis, como 
celulares e hand helds.
I560
24 h
Java Security
Ensinar conceitos avançados de segurança em Java para sistemas 
desktop e J2EE.
I558
48 h
Java Enterprise Applications
Ensinar conceitos avançados de programação em Java para 
sistemas com alta demanda de acesso e segurança.
I556
48 h
Java Web Applications
Ensinar questões avançadas do desenvolvimento de aplicações 
Web com a linguagem de programação Java e os frameworks mais 
usados no mercado.
I554
48 h
Java Programming
Ensinar a programar em Java para alunos que já sabem programar 
em qualquer outra linguagem.
I552
40 h
Projeto de Sistemas e Orientação a Objetos com UML
Ensinar conceitos de orientação a objetos e sua utilização no 
processo de desenvolvimento de software usando UML.
I550
HorasNome do cursoCódigo
Formação Desenvolvedor Java: Sistemas Distribuídos
7373
Perguntas
7474
OBRIGADO !
7575
www.infnet.edu.br
cursos@infnet.edu.br
2122-8800
Esta palestra está disponível em:
http://www.infnet.edu.br/Home/Eventos/CiclodePalestraseMiniCursos/EventosemTI/tabid/257/Default.aspx 
Ministrada por
André Luiz Monteiro da Costa
E-mail: 
andre.monteiro@prof.infnet.edu.br
Contatos
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27
	Slide 28
	Slide 29
	Slide 30
	Slide 31
	Slide 32
	Slide 33
	Slide 34
	Slide 35
	Slide 36
	Slide 37
	Slide 38
	Slide 39
	Slide 40
	Slide 41
	Slide 42
	Slide 43
	Slide 44
	Slide 45
	Slide 46
	Slide 47
	Slide

Crie agora seu perfil grátis para visualizar sem restrições.