Escolar Documentos
Profissional Documentos
Cultura Documentos
Orientacao A Objetos Da Teoria A Pratica em Java PDF
Orientacao A Objetos Da Teoria A Pratica em Java PDF
'D7HRULDj3UiWLFDHP-DYD
CCUEC/Unicamp
outubro/99
Roteiro
5HXWLOL]DomRGH3URMHWRH6RIWZDUH
Design Patterns (Padres de Projeto)
Frameworks
Componentes
RMI (Remote Method Invocation)
Reutilizao de Projeto
'HVLJQ3DWWHUQV - padres de projeto e anlise
)UDPHZRUNV orientados a objetos
objetivo
motivao
aplicabilidade
estrutura
participantes
colaboraes
conseqncias
implementao
exemplo de codificao
Padres de Projeto
2EVHUYHU
Suponhamos uma aplicao de Administrao de Solicitao
de Servios (ASS) de uma empresa prestadora de servios,
onde servios-objeto devem ser sempre comunicados a
respeito da alterao do estado do
funcionrio-objeto responsvel pela sua execuo.
Como modelar a estrutura de dados e os mtodos das
classes Servio e Funcionrio para atender esse requisito?
Padres de Projeto
2EVHUYHU: define uma dependncia de um para muitos entre objetos de tal forma
que quando um objeto muda de estado, todos os seus dependentes so
notificados e atualizados automaticamente
Subject
Attach(Observer)
Detach(Observer)
Notify()
ConcreteSubject
GetState()
SetState()
observers
Observer
for all o in observers{
o .Update()}
subject
Update()
ConcreteObserver
Update()
return subjectState
observerState
subjectState
observerState=
subject.GetState()
Padres de Projeto
6WDWH
Suponhamos que na nossa aplicao ASS, servios-objeto,
dependendo do estado em que se encontram (espera, parado,
em andamento, finalizado), tenham comportamentos diferentes,
ou seja, reajem diferentemente mesma mensagem.
Por exemplo: calculaValor()
Como modelar a estrutura de dados e os mtodos da
classe Servio para atender a esse requisito?
Padres de Projeto
6WDWH: permite um objeto alterar seu comportamento quando seu estado
interno se altera. Parecer que o objeto mudou de classe.
Context
state
State
Handle()
Request()
State
Handle()
ConcreteStateA
Handle()
ConcreteStateB
Handle()
Padres de Projeto
&RPSRVLWH
Na nossa aplicao ASS, um servio pode ser um servio de
rede, de produo, de suporte ou de desenvolvimento de sistemas.
Este ltimo na verdade uma composio de servios que
devem ser executados pela rea de desenvolvimento e
pelas outras especialidades mencionadas acima.
Quando um objeto-servio receber a mensagem descrever(),
no queremos nos preocupar com o tipo de servio que est
recebendo a mensagem.
Como estruturar a classe Servio de forma a permitir essa
facilidade?
Padres de Projeto
&RPSRVLWH
Client
Component
Operation()
Add(Component)
Remove(Component)
GetChild(int)
Representa hierarquias do
tipo parte-todo
Clientes ignoram a diferena
entre composies de objetos
e objetos individuais
children
Leaf
Operation()
Composite
Operation()
Add(component)
Remove(Component)
GetChild(int)
Forall g in children
g.Operation();
Padres de Projeto
5HFRQKHFLPHQWRGHXPSDGUmRGHSURMHWR
Padres de Projeto
&RPRXVDUSDGU}HVGHIRUPDHILFD]
Estude os padres aos quais voc j tenha acesso
Procure por conceitos bsicos similares
Aplique o padro
No espere que tudo possa ser resolvido pelos padres
&RPRGHVFREULUQRYRVSDGU}HV
O padro pode ser utilizado em outros lugares?
Utilize o padro vrias vezes
Espere fazer mudanas em seu diagrama de classes
Padres de Projeto
9DQWDJHQV
Aumentam a produtividade dos desenvolvedores
Aumentam a consistncia entre as aplicaes
So potencialmente melhores do que os cdigos reutilizveis
Podem ser utilizados em combinao para resolverem problemas difceis
Existem novos padres sendo desenvolvidos todos os dias
'HVYDQWDJHQV
Precisamos aprender um grande nmero de padres
Alguns desenvolvedores no esto abertos a aceitar o trabalho dos outros
Os padres no so cdigos
Frameworks
Classes abstratas funcionam como um molde para as suas
subclasses.
Da mesma forma, um projeto constitudo por classes
abstratas funciona como um molde para aplicaes.
Um projeto constitudo por classes abstratas denominado
IUDPHZRUNGHDSOLFDo}HVRULHQWDGRDREMHWRV
Um framework pode ser considerado como uma
infra-estrutura de classes que provem o
comportamento necessrio para implementar
aplicaes dentro de um domnio atravs dos
mecanismos de especializao e composio de
objetos, tpicos das linguagens orientadas a objetos
)UDPHZRUN
Chamadas a operaes
implementadas pelo
usurio
Chamadas a operaes
implementadas pelo framework
$SOLFDomRHVSHFtILFD
Classes especficas implementadas pelo usurio
Frameworks - Exemplo
09&0RGHO9LHZ&RQWUROOHU
Modelo: contm os dados da aplicao junto com a lgica dos negcios
que define como alterar e acessar os dados; o modelo pode ser
compartilhado entre vrios objetos, vises e controladores.
Framework MVC
Mudei !
9LVmR
0RGHOR
Por favor,
me passe os
dados
Mudei!
&RQWURODGRU
Framework MVC
0RGHOR
Altere dados
9LVmR
&RQWURODGRU
Altere apresentao
O usurio interage
MVC - Exemplo
MVC - Model/View/Controller
0RGHOR
Viso
Viso
Controlador
&DWHJRULD
9DORU
Controlador
Controlador
Reutilizao de Software
3DFRWHV3DFNDJHV
&RPSRQHQWHV
:UDSSHUV
Packages
3DFNDJHV so conjuntos de classes relacionadas entre si
de forma que ofeream facilidades uma s outras.
Java traz uma grande quantidade de classes agrupadas em
pacotes que esto prontas para serem utilizadas
pelo programador.
Packages
$OJXQVH[HPSORVGH3DFNDJHVHP-DYD
MDYDODQJ - base da linguagem Java
(Boolean, Character, Double, Float, Integer, Long, math, Object, String,..)
MDYDLR - pacote que permite manipulao de streams lendo ou gravando em arquivos
(DataInputStream, FileInputStream, FileOutputStream, PrintScreen)
MDYDXWLO - pacote que prov uma miscelnea de classes teis incluindo estrutura de
dados, time, date, gerao de nmeros randmicos, etc..
MDYDDZW - pacote que prov um conjunto de manipulaes de interface para o
usurio tais como windows, caixas de dilogo, botes, cores, checkboxes..
MDYDDSSOHW - pacote que habilita a criao de applets atravs da classe Applet e tambm
prov recursos de udio
Packages - Exemplo
import java.applet.*;
import java.awt.*;
import java.util.Date;
public class 'LJLWDO&ORFN extends java.applet.Applet implements Runnable {
Font theFont = new Font(TimesRoman, Font.BOLD, 24);
Date theDate;
Thread runner;
public voidVWDUW ()
{ if ( runner == null ) { runner = new Thread(this); runner.start();} }
public void VWRS()
{ if (runner != null) { runner.stop(); runner = null;} }
Packages - Exemplo
public void UXQ()
{ while (true)
{ theDate = new Date(); repaint();
try { Thread.sleep(1000);}
catch (InterruptedException e) {}
}
}
public void SDLQW(Graphics g)
{ g.setFont(theFont);
g.drawString(theDate.toString(), 10, 50);
}
}
Componentes
Um componente um pedao de cdigo encapsulado e
acessvel apenas a partir de sua interface
Um componente possui:
seu FRPSRUWDPHQWRH[WHUQR (o que ele faz) que definido
na sua especificao
suas RSHUDo}HVLQWHUQDV (como ele faz o que se prope a fazer)
que est escondido do mundo externo e pode ser entendido
apenas se examinarmos seu cdigo fonte
seu H[HFXWiYHO (runtime binrio .exe .dll)
Componentes
Componentes de negcio so essencialmente REMHWRV
Cada componente implementa a OyJLFDGHQHJyFLR e as propriedades
relativas a uma entidade do mundo real.
O que os distingue dos objetos tradicionais a capacidade de ser utilizados
por aplicaes produzidas em GLIHUHQWHVOLQJXDJHQVHWHFQRORJLDV, rodando
sobre diferentes sistemas operacionais.
A tecnologia de componentes altera radicalmente a forma como os
sistemas de informao so desenvolvidos.
Os componentes podem ser considerados como blocos bsicos de
construo.
3DUDFULDUXPQRYRVLVWHPDRVGHVHQYROYHGRUHVDSHQDVFRPELQDP
FRPSRQHQWHV
0iTXLQD6HUYLGRUD
1
RMI Registry
Lookup
Server
Register
4
Server
&OLHQW
Security
Manager
9
Server
Interface
6HUYHU
3
Security
Manager
Stub
Skeleton
Metodologia de Desenvolvimento
Metodologia
Coleo de WpFQLFDVHGLUHWUL]HV para construo,
manuteno e melhoria em produtos de software.
Fornece uma base de comunicao, um conjunto de
tcnicas e uma base para engenharia de software.
Fases Clssicas
$QiOLVHGH
5HTXLVLWRV
,PSOHPHQWDomR
$QiOLVH
Teste de Unidades
Teste do Sistema
Teste de Aceitao
7HVWH
3URMHWR
,PSODQWDomR
FRQYHUVmR
Estratgia Paralela
Estudo Piloto
Abordagem Faseada
Modelo Espiral
3ODQHMDPHQWR
$QiOLVHGH5LVFRV
Anlise de
requisitos
Planejamento
baseado nos
requisitos do
usurio
continua ou no ?
$YDOLDomR
GRXVXiULR
(QJHQKDULD
(PGLUHomRDR
VLVWHPDFRPSOHWR
(processo de desenvolvimento)
Metodologia OO
2TXHID]FRPTXHXPDPHWRGRORJLDGHGHVHQYROYLPHQWRGH
VLVWHPDVVHMDFRQVLGHUDGD2ULHQWDGDD2EMHWRV"
Metodologia OO
Uma metodologia de desenvolvimento de sistemas
considerada Orientada a Objetos se ela orienta a construo
de sistemas a partir do entendimento do mundo real como
um conjunto de objetos que comunicam-se entre si de forma
coordenada
Metodologia OO
4XDLVVmRDVSULQFLSDLVDWLYLGDGHV"
Entender quais so os REMHWRVenvolvidos no domnio do problema
Entender como se FRPXQLFDP no mundo real
3URMHWDU a forma como devem ser LPSOHPHQWDGRV
Metodologia OO
4XDLVDVSULQFLSDLVWpFQLFDVXWLOL]DGDV"
Entendimento do mundo real - Reviso de processos, Use cases
Objetos e seus relacionamentos - Modelo de Objetos, CRC, DTE, DI
Projeto - Padres de projeto, frameworks, componentes
Implementao - ambientes de desenvolvimento, middleware (RMI),
banco de dados
Mtodos de Desenvolvimento OO
%RRFK - Object-Oriented Design with Applications
:LUIV%URFN - Designing Object-Oriented Software (&5&)
5XPEDXJK - Object-Oriented Modeling and Design (207)
&RDG<RXUGRQ - Object-Oriented Analysis
-DFREVRQ - OO Software Engineering - A 8VH&DVH Driven Approach
6KODHU0HOORU - Object /LIHF\FOHV-Modeling the World in States
&ROHPDQ et al: Fusion - OO Development: The )XVLRQ Method
Mtodos de Desenvolvimento OO
(VWUDWpJLD
Escolher um Mtodo como sendo o mtodo SULQFLSDO
para ser seguido e ater-se sua notao para
todo o ciclo de vida.
Usar WpFQLFDVGHRXWURVPpWRGRV para dar suporte aos
esforos de modelagem e desenvolvimento.
Rumbaugh
Jacobson
Odell
(classificao)
Meyer
80/
Shlaer-Mellor
(ciclo de vida)
(condies pr e ps)
Harel
(diag. de estado)
Gamma et al
(Frameworks, padres)
Fusion
(desc.operaes,
numerao de mensagens)
Wirfs-Brock
(responsabilidades)
Usurio
Gerente
Consulta s solicitao
'LDJUDPDGR8VH&DVH'HVFULomRGR8VH&DVH
gera
data solicitao
usurio
descrio
justificativa
Servio
descrio
data-incio
data-final
recebe
executa
autoriza
executado
Funcionrio
nome
funo
e-mail
responsvel
rea Tcnica
trabalha
chefia
nome
objetivo
'LDJUDPDGHFODVVHVH[WUDtGRDSDUWLUGDDQiOLVHGRV8VH&DVHV
Anlise - CRC
Classes/responsabilidades/colaboradores
&ODVVH6HUYLoR
6XSHUFODVVH
5HVSRQVDELOLGDGHV
&RODERUDGRUHV
$incluir
$obter o no. de servios ativos
$obter no. solic por servio
Solicitao
obter identificao
obter data previso inicio
....
obter usurios por produto
Solicitao
obter
rea responsvel
rea tcnica
)HHGEDFNSDUDYDOLGDURVPpWRGRVGDFODVVH
rea tcnica
Servio
E-mail
rea receptora
Produto/servio
Dados da solicitao
Vincular(sol)
receber(sol)
Solicitao
Solicitao
reaTcnica
DEULU
$JXDUGDQGR
(PFXUVR
desalocar(recurso)
(recurso no suficiente)
desalocar(recurso)
(recurso suficiente)
Modelo de
Classes
DTE
CRC
DI
Anlise
No final da anlise, j sabemos quais os objetos do negcio
envolvidos e como eles devem interagir de forma geral,
atravs do modelo de classes e do diagrama de interao
Projeto
6HUiTXHDVFODVVHVGHQHJyFLRVmRVXILFLHQWHVSDUDD
LPSOHPHQWDomRGRVLVWHPD"
O modelo de objetos pode ser otimizado ?
Como o usurio vai interagir com o sistema ?
Quem ir controlar o fluxo de mensagens ?
Quem vai interagir com o banco de dados ?
Projeto
Tanto o domnio do problema, como o domnio da soluo
devem ser entendidos como um conjunto de
classes de objetos
&ODVVHVGHLQWHUIDFH - interao com o usurio
&ODVVHVGHFRQWUROH - seqncia das mensagens
&ODVVHVGHEDQFRGHGDGRV - persistncia dos dados
&ODVVHVGHQHJyFLR - relacionadas no modelo de anlise
Projeto
3ULQFLSDLVDWLYLGDGHVGHSURMHWR
3URMHWRGH2EMHWRV
Otimizao e refinamento do modelo de classes da anlise
Converso para o modelo relacional de banco de dados
3URMHWRGH,QWHUIDFH
Define a forma de interao dos usurios com a aplicao
sendo construda
3URMHWRGH6LVWHPD
Produz uma arquitetura de aplicao a qual inclui decises
sobre a organizao do sistema e a alocao de mdulos
em componentes de hardware e software
Projeto
7HFQRORJLDVGHDSRLR
3URMHWRGH2EMHWRV
Design Patterns (padres de projeto)
Packages
3URMHWRGH,QWHUIDFH
Utilizao segundo um Guia de Estilo que oriente a utilizao
correta de recursos grficos (GUIs), formulrios, frames e outros,
considerando o ambiente de implementao (por exemplo, Web)
3URMHWRGH6LVWHPD
Arquiteturas de aplicao , frameworks, componentes
Projeto de Interface
Etapas principais
Projeto de Interface
Princpios bsicos
Transparncia
Robustez
Orientao
Produtividade
Integridade
Projeto de Interface
Princpios bsicos (cont)
Controle
Clusterizao
Visibilidade
Consistncia Inteligente
Utilizao de cores como complemento
Projeto de Objetos
Etapas bsicas
Projeto de Objetos
Exemplo de refinamento do modelo de classes da anlise
AreaTecnica
responsvel
Produto
ObterAreaTecnica()
AreaTecnica
Produto
area:AreaTecnica
ObterAreaTecnica()
Projeto de Objetos
Exemplo de refinamento do modelo de classes da anlise
Area Tcnica
executa
Solicitao
adicionarSolicita(so)
Area Tcnica
sol: set Solicitacao
adicionarSolicita(so)
no nulo
Solicitao
area: AreaTecnica
conectar_area(area)
Projeto de Sistemas
Questes bsicas para a Arquitetura da Aplicao
Tecnologias de Implementao
Linguagens Orientadas a Objetos
Java, C++, Smalltalk
Ambientes de Desenvolvimento
VisualAge for Java(IBM)
Visual Caf (Symantec)
Jbuilder 3 (Borland)
Mtodo Integrado
Fase 2
Implementao
do Processo
4P
Fase 1
Entendimento
do Negcio
Anlise do
Processo
Gerenciamento
do Processo
5P
Projeto do
Processo
Requisitos
Anlise
4S
5S
Projeto
Implem
6S
7S
Viso Geral
Fase 3
Aprendizado
,PSOHPHQWDomRGHXPDPHWRGRORJLD22
Mudana de paradigma - treinamento intensivo
Prottipos sem compromissos
Primeiros sistemas devem ser livres...
Grupo formal de metodologia - proposta e treinamento
Acerto do ambiente de desenvolvimento - suporte, padres
Administrao de classes/objetos - Biblioteca de Classes
Ferramenta CASE
Orientao a Objetos
Benefcios
Reaproveitamento
Estabilidade
Projetista pensa em termos de comportamento dos objetos e
no em detalhes de baixo nvel
Construo de objetos cada vez mais complexos
Confiabilidade
Verificao de preciso
Novos mercados de software
Desenvolvimento acelerado
Integridade
Orientao a Objetos
Benefcios
Programao facilitada
Manuteno facilitada
Ciclo de vida dinmico
Refinamento durante a construo
Modelagem mais realista
Melhor comunicao entre profissionais de sistema e clientes
Interoperabilidade
Processamento cliente-servidor
Processamento distribudo e em paralelo
Bibliotecas de classes industrializadas e corporativas
Java Studio
8PDPELHQWHGHGHVHQYROYLPHQWR2ULHQWDGRD2EMHWRV
Referncias
(1) Anlise e Projeto Orientados a Objetos
Scott W. Ambler (IBPI Press)
(2) Modelagem e Projetos Baseados em Objetos
J. Rumbaugh et. al (Campus)
(3) Princpios de Anlise e Projeto Baseados em Objetos
James Martin (Campus)
(4) Design Patterns - Elements os Reusable Object-Oriented Software
Erich Gamma et. al (Addison-Wesley)
(5) Manual do Visual Age for Java
(6) Software Engineering - A Practitioners Approach
Roger S. Pressman