Você está na página 1de 34

Projeto Orientado a Objetos

Durante o projeto de objeto, desenvolvida uma soluo lgica


baseada no paradigma orientado a objetos.
So definidos:
Diagramas de Interao: ilustram como os objetos colaboram para
satisfazer os requisitos.
Diagrama de Classes de Projeto: define as classes de software e
interfaces que sero implementadas.

Diagrama de Classes de
Projeto

Diagrama de Classes de Projeto


As classes de projeto mostram definies das classes de software e
no dos conceitos do mundo real.
Classe do Modelo de Domnio x Classe do Modelo de Projeto
Classe do Modelo de Domnio: abstrao de um conceito do mundo
real tratado pelo sistema.
Classe do Modelo de Projeto: componente de software.

Diagrama de Classes de Projeto


Classes do Modelo de Domnio x Classes do Modelo de Projeto
Registrador

captura

Compra

data
completa
horario

Modelo do Domnio

Modelo do Projeto

Registrador

Compra

1
finalizaCompra
entraItem
fazPagamento

captura

data
completa
horario
fazItemLinha

Diagrama de Classes de Projeto


Informaes includas nos diagramas de classes de projeto:
 Classe, Atributo, Associao, Agregao e Herana
 Operao
 Interface
 Navegabilidade
 Dependncia

aparecem no modelo conceitual

Diagrama de Classes de Projeto

Atributo
Notao textual de um atributo:
visibilidade nome : tipo multiplicidade = default {propriedade}
De acordo com a UML, a sintaxe de qualquer linguagem de
programao tambm pode ser usada na declarao dos atributos.
Se a visibilidade no apresentada, o atributo considerado privado.

Visibilidade de Atributos e Operaes


A visibilidade de um atributo ou operao define o nvel de acesso que
os objetos tem a este atributo ou operao.
A UML define 4 tipos de visibilidade:
+

pblico

acessvel a todos os objetos do sistema

protegido

acessvel s instncias da classe em questo


e de suas subclasses

privado

acessvel s instncias da classe em questo

package

acessvel s instncias das classes que esto


no mesmo pacote da classe em questo

Atributo
Atributos que representam objetos de outras classes:
Compra
...

1
pgto

...

Pagamento
...
...

Compra

Pagamento

pgto: Pagamento

...

...

...

Compra
pgto: Pagamento
...

1
pgto

Pagamento
...
...

como ser utilizado


nesta disciplina

Atributo
Atributos que representam colees de objetos de outras classes:
Compra
...

itens
{ordered, List}

...

propriedade
pr-definida

Compra
itens: ItemCompra [1..*]
ou
itens: ItemCompra [1..*] {ordered}
...

Item Compra

1..*

...
...

propriedade
definida pelo
usurio

Item Compra
...
...

Operao
Uma operao a implementao de um servio que pode ser
requisitado a qualquer objeto da classe.
Uma classe pode ter zero ou mais operaes.
As assinaturas das operaes so mostradas no terceiro compartimento
do retngulo da classe.
SensorTemperatura

resetar ()
setarAlarme (t : Temperatura)
valor () : Temperatura

Notao (UML 1.0): nome (lista parmetros) : tipo-retorno {propriedade}


nome : tipo = valorDefault
A propriedade uma informao adicional: excees, abstrato, etc.

Operao
Se a visibilidade no apresentada, a operao considerada pblica.
Na UML, uma operao no um mtodo, uma operao uma
declarao.
Na UML, um mtodo a implementao de uma operao.
Um mtodo pode ser ilustrado:
nos diagramas de interao, pelos detalhes e seqncia das
mensagens;
nos diagramas de classes, dentro de um smbolo de nota
estereotipada com method;
nos diagramas de atividades.
Operaes abstratas, assim como as classes abstratas, so mostradas
com {abstract} ou com o nome em itlico.

Dependncia
Uma dependncia um relacionamento que indica que um elemento
cliente (ex. classe, pacote, caso de uso) tem conhecimento de outro
elemento fornecedor e que uma mudana no fornecedor pode afetar o
cliente.
Filme

play (c: Canal)


start ()
stop ()
reset ()

call

Canal

Notao de Dependncia: representada como uma linha pontilhada


direcionada para o elemento no qual dependente.
A linha pode ser complementada por um label. Ex: call, create.

Dependncia
Tipos de dependncia entre objetos e classes:
atributo do tipo do fornecedor
mensagem enviada a um fornecedor
parmetro recebido do tipo do fornecedor
o fornecedor uma superclasse ou interface
Alguns destes tipos de dependncia j possuem alguma linha que
sugere a dependncia.

Interface
Uma interface uma coleo de assinaturas de operaes que
definem um conjunto coesivo de comportamentos.
ObjetoPersistente
interface
ObjetoPersistente

salvar
remover
recuperar

Transporte

interface
ObjetoPersistente
dataTransporte
retornaPrecoTransporte
salvar
remover
recuperar

Transporte

dataTransporte
retornaPrecoTransporte

Interfaces so implementadas (ou realizadas) por classes. Para


realizar uma interface, uma classe ou componente deve implementar
as operaes definidas pela interface.
Notao da Interface: igual da herana, mas com a linha pontilhada.
Tambm pode ser utilizada uma linha com um crculo.

Navegao
A navegao indica que possvel navegar de objetos de um tipo para
objetos de outro tipo.
Quando a navegao no indicada, a associao bidirecional.

GrupoUsuario

Usuario

Notao de Navegao: seta junto com a associao.

Senha

Definio do Diagrama de
Classes de Projeto

Diagrama de Classes de Projeto


Ordem de definio do diagrama de classes de projeto:
O diagrama definido a partir dos diagramas de interao.
Um diagrama preliminar (classes, atributos e relacionamentos) pode
ser definido no incio do projeto, a partir do diagrama de classes
conceituais.
O diagrama refinado em paralelo com os diagramas de interao.

1. Identificao das Classes de Projeto


Identificar as classes que participam da soluo de software.
As classes podem ser encontradas analisando todos os diagramas de
interao e listando as que so mencionadas.

Exemplo de Identif. das Classes de Projeto


Object1

:Registrador

fazNovaCompra

:Compra

create

create

Registrador

Compra

ItemLinha

:ItemLinha

Object1

Exemplo de Identif. das Classes de Projeto


3: entraItem(id, qtidade)

:Registrador

:Compra

2: fazLinhaItem(espec, qtidade)
1: fazItemLinha(espec, qtidade)

2.2: adiciona(it)

:CatalogoProduto

2.1: create(espec, qtidade)

it:ItemLinha

1.1: espec:=procura(id)

:EspecificacaoProduto
: Map<Especificacao

Produto>

Registrador

CatalogoProduto

itens :
:ItemLinha
List<ItemLinha>

EspecificacaoProduto

Compra

ItemLinha

Exemplo de Identif. das Classes de Projeto


Diagrama de Classes Preliminar identificado a partir dos diagramas de
interao apresentados anteriormente:
Registrador

Loja

endereco
nome

CatalogoProduto

Compra

data
completa
duracao

EspecificacaoProduto

Pagamento

descricao
preco
IDItem

attribute1
valor

ItemLinha

quantidade

Os atributos identificados durante a anlise so includos no projeto.

2. Identificao das Operaes


As operaes de cada classe so identificadas a partir dos diagramas
de interao.
O conjunto de todas as mensagens enviadas aos objetos da classe X
nos diagramas de interao indicam operaes que a classe X deve
definir.
:Registrador

1: fazItemLinha

:Compra

Compra

fazItemLinha

Exemplo de Identificao das Operaes


Diagrama de Classes:
Registrador

CatalogoProduto

finalizaCompra
entraItem
fazNovaCompra
fazPagamento

getEspecificacao

Loja

Compra

endereco
nome
adicionaCompra

data
completa
duracao
tornaSeCompleta
fazItemLinha
fazPagamento
getTotal

EspecificacaoProduto

Pagamento

descricao
preco
IDItem

valor

ItemLinha

quantidade
getSubTotal

Exemplo de Identificao das Operaes


Diagrama de Classes com detalhes sobre os atributos e operaes
Loja

-endereco:String
-nome:String

CatalogoProduto

+getEspecificacao(id:IDItem):EspecificacaoProduto

+adicionaCompra(c:compra):void
Compra
Registrador

-data:String
-completa:boolean
-duracao:float

EspecificacaoProduto

-descricao:String
-preco:float
-IDItem:int

ItemLinha

-quantidade:int

+getSubTotal():void
+finalizaCompra():void
+entraItem(id:IDItem,quan:int):void +tornaSeCompleta():void
+fazNovaCompra():void
+fazItemLinha(esp:EspecificacaoProduto,quant:int):void
Pagamento
+fazPagamento(dinheiro:Money):void +fazPagamento(dinheiro:Money):void
+retornaTotal():Money
-valor:float

3. Identificao das Associaes


Navegabilidade: indica que possvel navegar unidirecionalmente
atravs da associao dos objetos na origem para a classe destino.
A navegabilidade implica visibilidade de atributo da classe origem para
a classe destino.
Registrador

-compraCorrente:Compra1
+finalizaCompra:void
+entraItem:void
+fazNovaCompra:void
+fazPagamento:void

Compra

captura

1 -data:int
-completa:Boolean
-horario:int
+tornaSeCompleta:void
+fazItemLinha:void
+fazPagamento:void
+getTotal:void

Identificao das Associaes


As associaes do diagrama de classes de projeto devem ser
adornadas com as setas de navegabilidade necessrias.
Quais associaes so includas no diagrama de classes de
projeto?
Aquelas que so necessrias para satisfazer a visibilidade e
necessidades de acesso indicadas pelos diagramas de interao.

Visibilidade de Atributo
Visibilidade de Atributo de A para B existe quando B um atributo de A.
uma visibilidade relativamente permanente porque ela persiste
enquanto A e B existem.
Object1

:Registrador

entraItem(id, qtidade)

:CatalogoProduto

espec:=getEspecificacao(id)

class Registrador
{
...
private CatalogoProduto catalogo;
...
{
}
public void entraItem (id,qtidade)
{
...
espec:= catalogo.getEspecificacao(id)
...
}
}

Identificao das Associaes


Diagrama de Classes de Projeto:
Loja

usa

-endereco:int
-nome:int
1

-descricao:int
-preco:int
1..* -IDItem:int

1
CatalogoProduto

+adicionaCompra():void
1

acessa

possui
1

EspecificacaoProduto

1
contem

+getEspecificacao(id:IDItem):EspecificacaoProduto
1
*

Compra

Registrador

1
+finalizaCompra():void
captura
+entraItem(id:IDItem,qtidade:int):void
+fazNovaCompra():void
+fazPagamento(dinheiro:Money):void

-data:int
-completa:int
1 -duracao:int

ItemLinha

+tornaSeCompleta():void
+fazItemLinha():void
+fazPagamento():void 1
* +getTotal():void

atualiza

descreve

contem 1..*

-quantidade:int
+getSubTotal():void

pago-por 1

Pagamento

-valor:int

A envia uma mensagem para B

4. Identificao das Dependncias


Relacionamento de Dependncia: indica que um elemento tem
conhecimento sobre outro elemento.
usado no diagrama de classes de projeto para representar uma
visibilidade entre classes que no do tipo atributo.
representado por uma linha pontilhada.
Filme

play (c: Canal)


start ()
stop ()
reset ()

Canal

Visibilidade de Parmetro
Visibilidade de Parmetro de A para B existe quando B passado
como parmetro de um mtodo de A.
uma visibilidade relativamente temporria porque ela persiste
somente dentro do escopo do mtodo.
Object1

3: entraItem(id,qtidade)

:Registrador

2: fazItemLinha(espec,qtidade)

1: espec:=getEspecificacao(id)

:CatalogoProduto

{
fazItemLinha(EspecificacaoProduto espec, int qtidade)
{
...
it = new ItemLinha(espec,qtidade)
}
}

:Compra

2.1: create(espec,qtidade)

it:ItemLinha

Visibilidade Local
Visibilidade Local de A para B existe quando B declarado como uma
varivel local dentro de um mtodo de A.
uma visibilidade relativamente temporria porque ela persiste
somente dentro do escopo do mtodo.
Object1

:Registrador

entraItem(id, qtidade)

:CatalogoProduto

espec:=getEspecificacao(id)

{
entraItem (id,qtidade)
{
...
// visibilidade local
EspecificacaoProduto espec:= catalogo.getEspecificacao(id)
...
}
}

Exemplo de Identificao das Dependncias


Considere o seguinte Diagrama de Colaborao:
Object1

3: entraItem(id,qtidade)

:Registrador

2: fazItemLinha(espec,qtidade)

:Compra

visibilidade de parmetro
1: espec:=getEspecificacao(id)

:CatalogoProduto

visibilidade local

{
fazItemLinha(EspecificacaoProduto espec, int qtidade)
{
...
it = new ItemLinha(espec,qtidade)
}
}

2.1: create(espec,qtidade)

it:ItemLinha

Exemplo de Identificao das Dependncias


Diagrama de Classes de Projeto:
Loja

usa

-endereco:int
-nome:int
1

CatalogoProduto

acessa

possui
1

1
+finalizaCompra():void
captura
+entraItem(id:IDItem,qtidade:int):void
+fazNovaCompra():void
+fazPagamento(dinheiro:Money):void

1
contem

+getEspecificacao(id:IDItem):EspecificacaoProduto
1
*
Compra

Registrador

atualiza

-descricao:int
-preco:int
1..* -IDItem:int

+adicionaCompra():void

EspecificacaoProduto

-data:int
-completa:int
1 -duracao:int

descreve

ItemLinha

+tornaSeCompleta():void
+fazItemLinha():void
+fazPagamento():void 1
* +getTotal():void

contem 1..*

-quantidade:int
+getSubTotal():void

pago-por 1

Pagamento

-valor:int