Você está na página 1de 25

Classes e Associaes

Tarefas:
Identificar classes
Organizar classes em pacotes de classes
Identificar associaes entre estas classes
Identificar atributos destas classes
Escopo:
Podem-se efetuar estas tarefas:
sobre um caso de uso por vez
sobre todos os casos de uso de um pacote de casos de uso (sub-sistema)
sobre todos os casos de uso do sistema (todos os pacotes de casos de uso)
Tipos de Classe - RUP.
Classes de Entidade
Classes Limtrofes
Classes de Controle
Cada um desses tipos ser visto a seguir
Tipos de Classe - Entidade
Exemplos:

Scio

Fita

Filme

Esteretipo: entity
Um Esteretipo um mecanismo para a extenso da UML. Se voc descobrir que
voc precisa de um componente para a modelagem que no faz parte da UML, mas
que parecido com algo existente na UML, voc trata seu componente como um
esteretipo do componente da UML.
Normalmente possuem vida longa (persistncia).
O comportamento no depende da forma do ambiente (dos diversos tipos possveis
de interface, por exemplo).
Responsveis pelas informaes do negcio.
Podem ser utilizadas em mais de uma aplicao.

Tipos de Classe -Limtrofe


Responsveis pela comunicao do sistema com os atores

Interface com usurio

Comunicao com outros sistemas

Exemplos:

JanelaEmprestimoFitas

JanelaReservaFilmes

BoletoEmprestimoFitas

SistemaAutorizacaoCredito

Esteretipo: boundary
Tipos de Classe - Controle
Classes de Controle modelam o comportamento seqencial de um caso de uso. Classes
de Controle coordenam os eventos necessrios para realizar o comportamento
especificado no Caso de Uso. Voc pode pensar em uma Classe de Controle como a
responsvel por rodar o Caso de Uso elas representam a dinmica do Caso de Uso.
Classes de Controle so, tipicamente, dependentes da aplicao.
Exemplo:

CTLEmprestimoFitas

Esteretipo: control
Contm comportamento que no nem de interface, nem de entidade.
Coordenao, Controle de Transaes, Controle de outros objetos.
Normalmente utilizado para encapsular controle relacionado a um caso de uso
especfico.
Cria, inicializa, recupera e exclui objetos controlados.
Coordena a execuo dos objetos controlados (gerente).
Eventualmente podem encapsular uma lgica complexa de negcio envolvendo
diversos outros objetos.
Modelo Conceitual
Modelo dos conceitos do domnio do problema que aparecem nos casos de uso /
regras de negcio.
E formado por:

Conceitos (classes)

Associaes entre conceitos

Atributos dos conceitos

Descobrindo classes
Estratgia dos nomes.
A partir da descrio dos casos de uso, faa uma lista dos nomes encontrados.
Um nome pode acabar virando:

um objeto/classe

um atributo de um objeto/classe

uma operao (mtodo) de uma classe

Resultado dependente da qualidade da redao dos casos de uso.


Glossrio e Regras do Negcio tambm so fontes para identificao de classes.
Descobrindo classes: Classes Entity:
Coisas concretas

Avio, Trem, Fita, PDV

Descritores

Modelo do Avio

Lugares

Aeroporto, Vdeo Locadora, Loja

Transaes

Emprstimo, Reserva, Venda

Itens de Transao

Item de Emprstimo, Item de Venda

Papis

Piloto, Atendente, Scio, Passageiro

Organizaes

Departamento de Vendas

Conceitos

Degrau Tarifrio

Eventos

Vo, Acidente, Ligao

Registro Fiscal/Contratual

Cupom Fiscal, Contrato de Trabalho

Containeres de outras coisas Acervo, Prateleira, Avio


Classes Domnio de uma vdeo-locadora
Resultado: Lista de candidatos classe

VideoLocadora

Fita

Filme

Emprstimo

ItemEmprestimo

Reserva

Scio

Nome de classe:

no singular

Primeira letra MAISCULA

Notao mixed case: ItemEmprestimo

Utilize vocabulrio do domnio

Diagrama de Classes
Um diagrama de classes ilustra a estrutura das classes e seus relacionamentos.
Uma classe representa por um retngulo com trs sees:

Nome da Classe

Atributos

Operaes

A visualizao dos atributos e operaes no diagrama pode ser suprimida


(diagramas de mais alto nvel).
Notao para uma classe

Esteretipo
Classificao de uma classe
Esteretipos comuns:

boundary

entity

control

... (voc pode criar os seus esteretipos!!)

Esteretipos Jude
Pode-se visualizar um esteretipo na forma de um cone (um smbolo especial para a
classe) ou de um Label em uma representao normal de uma classe.
Exemplo: Representao de um objeto de entidade.

Organizar Classes em Pacotes


Normalmente, existem vrios diagramas de classe para um sistema.
O primeiro diagrama fornece uma viso geral dos pacotes de alto nvel.
Um pacote (package) um mecanismo de propsito geral para organizar elementos
em grupos
Um pacote pode ser subdividido em outros pacotes.
Para cada pacote de mais baixo nvel podemos elaborar 1 ou mais diagramas de
classes.

Diagrama de Classe Principal

Pacote Classes de Negcio

Esteretipo Jude

Descrio da Classe

Dificuldades em nomear ou descrever uma classe podem indicar que a classe no uma
boa abstrao. A lista abaixo identifica situaes que podem ocorrer ao nomear ou
descrever uma classe:

Posso identificar um nome e uma descrio clara e precisa: boa candidata


classe
Posso identificar um nome, mas a descrio a mesma de alguma outra classe:
combine as classes.

Posso identificar um nome, mas preciso escrever um livro para descrever a


classe: divida a classe em classes menores.

No consigo identificar um nome nem uma descrio: preciso continuar o


trabalho de anlise para descobrir as abstraes corretas.

Associaes

Uma associao estabelece uma relao semntica estrutural entre duas ou mais
classes que descreve as ligaes entre suas instncias (uma pessoa trabalha para uma
companhia, uma companhia tem vrios escritrios, etc.).
O tipo mais comum de associao a binria (entre duas classes).

O diagrama indica que um Pedido vem de um nico cliente e que um Cliente pode fazer
vrios pedidos ao longo do tempo. Cada Pedido tem vrios Itens de Pedido, cada um
dos quais se refere a um nico Produto. A associao tem dois lados, cada lado ligado
a uma classe indicando um relacionamento entre as classes. A terminao de uma
associao pode ser explicitamente nomeada (cliente, pedido ou produto, no exemplo).
Este nome chamado de papel (role). Assim, um objeto da classe Produto exerce o
papel de produto para a classe ItemPedido. Um objeto da classe Pedido exerce o papel
pedido para a classe ItemPedido e assim por diante.
A terminao de uma associao tambm tem uma multiplicidade, que uma indicao
do nmero de objetos que podem participar do relacionamento. O * no lado do Pedido
na Associao Pedido-Cliente indica que um Cliente pode ter vrios Pedidos associados
com ele, enquanto que o 1 do outro lado indica que um Pedido vem de um nico
Cliente.
A partir do diagrama, posso inferir a seguinte interface para as classes em Java:
class Pedido {
private boolean ehPrePaga;
private String numero;
private double preco;
private Date dataRecebimento;
private Cliente cliente; // associacao com Cliente
private List itemPedido = new ArrayList();
// associacao com ItemPedido
public void despacha() {
// acrescentar cdigo
}

public void fecha() {


// acrescentar cdigo
}
}
class ItemPedido {
private int quantidade;
private double preco;
private boolean foiAtendido;
private Pedido pedido;
// associacao com Pedido
private Produto produto; // associacao com Produto

class Cliente {
private String nome;
private String endereco;
private List pedido = new ArrayList();

// associacao com Pedido

public String analiseCredito() {


// implementar o cdigo depois
return "";
}
}
class Produto
{
private List itemPedido = new ArrayList();
// associacao com ItemPedido
}

Multiplicidade
1 ou 1..1

exatamente 1

* ou 0..*

zero ou mais

1..*

um ou mais

0..1

zero ou um

5..8

intervalo especfico

4..7, 9

combinao (4,5,6,7,9)

De forma genrica, a multiplicidade expressa em uma lista de um ou mais


elementos da forma:

min..max ou nnn (se min = max, para um dado intervalo)

Se a multiplicidade for omitida ("unspecified multiplicity"), assume-se * (zero ou


mais).
Papel (Rolename)
Um papel um nome que denota o propsito ou a capacidade de uma classe em uma
associao.

O papel colocado junto classe na linha da associao.


O papel opcional. Se for omitido, assume-se o mesmo nome da classe, ou outra
conveno (ex: no Rose: theClasse).
O nome correspondente a um papel deve ser nico:

dentro de uma associao

dentro do conjunto formado por todos os atributos e papis de todas as


associaes para uma mesma classe, considerando inclusive suas possveis
superclasses.

Nome possvel para o papel de ItemPedido no relacionamento de Pedido com


ItemPedido?
Deve ser diferente de:
ehPrePaga
numero
preo
dataRecebimento
cliente
Associao Reflexiva

Mltiplas Associaes

Agregao e Composio
Agregao/Composio so formas especiais de associao onde o TODO est
relacionado s suas PARTES.
Agregao o relacionamento parte-de. como dizer que um carro tem um motor e
rodas como partes integrantes. Isto fcil entender, mas a parte difcil entender qual
a diferena entre agregao e uma associao. Antes da UML, as pessoas
eram normalmente bastante vagas em relao ao que era agregao e o que era
associao. Ainda pior, vago ou no, estavam sempre inconsistentes com todos os
outros. Como resultado, muitos analistas acham que o conceito de agregao
importante ainda que por razes diferentes. Ento a UML incluiu o conceito de
agregao, mas sem qualquer semntica. Como diz Jim Rumbaugh, "Pense
em agregao como um placebo para modelagem" (Rumbaugh, Jacobson, e Booch
1999).
Alm de agregao, a UML oferece uma variedade mais forte de agregao, chamada de
composio. Na composio, o objeto parte pode pertencer a s um objeto todo; mais
ainda, esperado que as partes normalmente vivam e morram com o todo.
Normalmente, considera-se que a destruio do todo propaga-se para as partes. Esta
destruio em cascata considerada parte integrante de uma composio, mas ela
implcita para qualquer associao com multiplicidade 1..1; se voc realmente quer
excluir um Cliente, por exemplo, voc deve excluir todos os pedidos para aquele Cliente
(e, em conseqncia, todos os itens de pedido para estes Pedidos).
Voc poderia no usar composies/agregaes em seus diagramas e substitu-las por
associaes simples, mas voc no estaria expressando toda a semntica do
relacionamento.
Composio
A "parte" pode compor apenas 1 "todo" em um determinado instante do tempo.
O "todo" responsvel pela vida de suas partes (criao e destruio).
A "parte" no tem vida independente do "todo"
Ex: Mo x Dedos
Agregao
A parte pode estar em mais de 1 "todo"
A parte tem vida independente do todo.
Agregao / Composio no Jude

Atributos
Os atributos so muito semelhantes s associaes.
No nvel conceitual, um atributo nome do Cliente indica que Clientes tm nomes. Ao
nvel da especificao, este atributo indica que um objeto Cliente pode informar seu
nome e tem um meio de gravar este nome. Ao nvel da implementao, um Cliente tem
um campo (tambm chamado de varivel de instncia) para seu nome.
Dependendo do nvel de detalhe no diagrama, a notao para um atributo pode mostrar
o nome do atributo, seu tipo, e o valor default. A sintaxe da UML para um atributo
visibilidade: tipo = valorDefault, onde visibilidade a mesma dos mtodos (public,
private ou protected).
Ento, qual a diferena entre um atributo e uma associao?
Da perspectiva conceitual, no h nenhuma diferena. Um atributo carrega somente
outro tipo de notao que voc pode usar, se lhe parecer conveniente. Atributos,
normalmente tm um nico valor. Normalmente, um diagrama no indica se um atributo
opcional ou mandatrio, embora voc possa por a multiplicidade depois do nome do
atributo entre colchetes, por exemplo: dateReceived[0..1] : Date.
A diferena ocorre nos nveis de especificao e implementao. Os atributos implicam
em navegao somente do tipo ao atributo. Alm disso, implcito que o tipo contm
sua prpria cpia do atributo, implicando em que atributos tm semntica de valor ao
invs de referncia.
No momento, melhor pensar em atributos como tipos simples de dados, tais como
Strings, datas, quantias, inteiros e reais.
Atributos representam propriedades que todas as instncias da classe possuiro.
Pessoa

nome

endereo

telefone

dataNascimento

Tipicamente, o nome de cada atributo comea por uma letra minscula.


O nome deve ser nico dentro da classe, incluindo os pseudo-atributos
(associaes).
Cada atributo deve possuir uma definio clara e concisa.
Cada objeto possui um valor para cada atributo definido na sua classe.
Atributos correspondem normalmente a elementos simples (String, boolean, integer,
real, date, time, datetime.
No defina atributos correspondentes a "chaves estrangeiras".
Normalmente o atributo "ID do objeto" omitido do modelo.
Notao

nome

nome : Tipo

nome : Tipo = valor inicial

Outros tipos bsicos podem ser definidos e utilizados para a definio de atributos.
Ex:
Endereo
Telefone
CPF
CEP
ou

Tipos Nativos x Abstratos


Nativos: Normalmente fornecidos pelas linguagens

Integer, real, string, date, time, ...

Abstratos: Criados de acordo com o problema

Ex: CPF, Telefone, ...

CPF:

string e uma regra de formao

Telefone: vrias sees (DDD - estao - ramal)


Nome:

(primeiro, meio, ltimo)

Tipos abstratos encapsulam os tipos nativos.


Desta forma, os atributos ficam mais independentes da linguagem.
Estes tipos abstratos podem ser definidos em um pacote prprio
Atributos: Multiplicidade
Multiplicidade

size: int

uma varivel inteira

colors [3] : Saturation

vetor de 3 posies (saturaes)

points [2..*] : Point

vetor com no mnimo 2 valores (pontos)

nome [0..1] : String

atributo opcional

Default: [1..1]

O Rose e o Jude no permitem especificar multiplicidade no atributo

Atributos: Jude

Atributo Esttico (atributo com escopo de classe)


Um valor apenas, compartilhado por todas as instncias (0..n) da classe.
UML: maxDiasEmprestimo
Um atributo com escopo de classe definido com o atributo static em Java ou C++
(no existe atributo com escopo de classe em Delphi)

Atributo Derivado
Atributo cujo valor pode ser derivado de valores de outros atributos do prprio
objeto ou de outros objetos.
Regra de derivao deve ser especificada em documento parte.
Exemplo:

classe Venda
atributo valorTotal
valorTotal = somatrio dos valores dos itens da venda

Exerccio
Desenhe a representao UML da classe Produto, considerando que ela possui os
seguintes elementos:
Atributos:

cdigo de barras

descrio resumida

descrio detalhada (opcional)

preo unitrio

indicador se o desconto padro se aplica a este produto

qtde de itens vendidos (valor inicial = 0)

Exerccio
Inclua um relacionamento de Produto com uma classe ItemVenda, supondo que 1
produto est relacionado com vrios itens (no obrigatrio) e 1 item est relacionado
obrigatoriamente com 1 produto.
O item assume o papel de itemVendido, enquanto o produto assume o papel de
Produto na associao.
O item possui os atributos quantidade e preo de venda.

Generalizao
Define um relacionamento entre classes, onde uma classe compartilha a estrutura e o
comportamento de uma ou mais classes.
hierarquia simples: subclasse especializa apenas uma superclasse
Hierarquia mltipla: subclasse especializa vrias superclasses
Regra dos 100%:

100% da definio de uma superclasse deve ser aplicvel subclasse, ou seja,


100% dos atributos e relacionamentos da superclasse devem ser aplicveis
subclasse.

Regra -UM:

Todos os membros de uma subclasse devem ser membros da superclasse, ou


seja, "SUBCLASSE" UMA "SUPERCLASSE".

Generalizao

O que pode ser especializado?


Atributos
Operaes
Relacionamentos
Uma subclasse pode possuir atributos, operaes e associaes adicionais
Uma subclasse pode redefinir operaes herdadas.
Herana e Especializao de Atributos

Herana de mtodos

O mtodo getPreco() est definido tambm para as subclasses Jogo e Filme


Herana e Especializao de Associaes

A classe Produto abstrata: no pode haver um objeto instanciado a partir da classe


Produto
O mtodo getPreco() abstrato: ele tem de obrigatoriamente ser redefinido nas
subclasses
As multiplicidades das associaes definidas na superclasse so vlidas tambm
para as subclasses.

A subclasse Filme tem associaes (categoria) no definidas para a superclasse.


Implementao em Java:
class VideoLocadora {
}
abstract class Produto
{
protected VideoLocadora videoLocadora;
protected String codigo;
protected String titulo;
protected String descricao;
abstract protected double getPreco();
}
class Jogo extends Produto {
protected String versao;
public double getPreco() {
// implementar depois
return 0;
}
}
class CategoriaFilme {
private String nome;
private double precoNormal;
private double precoLancamento;
}
class Filme
extends Produto {
private CategoriaFilme categoria;
protected String genero;
protected int anoLancamento;
protected String idioma;
public double getPreco() {
// implementar depois
return 0;
}
}

Resumindo...
A subclasse herda todos os atributos, operaes e associaes da superclasse.
Cada subclasse pode definir novos atributos
Cada subclasse pode definir novas operaes
Cada subclasse pode redefinir operaes da superclasse
Cada subclasse pode participar de associaes especficas
Como identificar?
Processo de Generalizao:

Voc definiu algumas classes e nota que existe uma estrutura e comportamento
comum entre elas.

Crie uma superclasse para encapsular a estrutura e comportamento comum entre


elas.

As classes originais passam a ser derivadas desta nova superclasse.

Do especfico para o geral

Superclasses esto em um nvel de abstrao maior que as suas subclasses


Motivao
Cdigo duplicado uma das piores coisas possveis em sistemas de informao. Se
voc diz a mesma coisa em diversos lugares, ento quando chega o momento de
alterar o que voc diz, voc tem mais coisas a alterar do que deveria.
Uma manifestao de cdigo duplicado so duas classes que fazem coisas parecidas
(usando ou no o mesmo algoritmo para isso). Os objetos fornecem um mecanismo
embutido para lidar com esta situao atravs do uso de herana. No entanto, muitas
vezes, voc no percebe o que h em comum entre as classes at t-las criado. Neste
caso, comum voc criar a estrutura de heranas aps ter criado as classes.
O problema aqui a escolha que voc ter de fazer entre herana e delegao
(veremos delegao logo a seguir). Herana a escolha mais simples se as duas
classes compartilham, alm do comportamento, tambm a interface.

Processo de Especializao

Uma classe tem atributos e/ou mtodos que so usados somente em cenrios
muito especficos

Refinamento de uma superclasse atravs da identificao de estrutura,


comportamento e/ou associaes especficos.

Criao de subclasses que especializam o conceito inicialmente identificado.

Do geral para o especfico

Motivao
O principal motivo para extrair uma subclasse a percepo de que uma classe
tem comportamento usado por algumas instncias da mesma (objetos) e no por
outras . Muitas vezes este fato sinalizado por uma enumerao (um switch ou um
case) nos mtodos da classe.

Herana Mltipla

Embora seja um conceito simples, pode levar a problemas de implementao


Nem todas as linguagens de programao OO do suporte direto herana mltipla
(suportada em C++, no suportada em Java ou Delphi)
Use o menos possvel!!!
Pode tornar o modelo muito complexo
Na maioria das vezes possvel evitar (usando delegaes)
Problemas no uso de herana mltipla...
Conflito de nome de atributos ou operaes
Herana duplicada

VeiculoAnfibio v;
v.acelerar();
Herana x Delegao

// qual deles ????

Os conceitos de Herana e Delegao so confundidos com freqncia.


Generalizao: -UM, UM TIPO DE
Delegao: TEM UM, COMPOSTO POR

Um exemplo inocente...

Outro exemplo inocente...

Uma vez que, por exemplo, um aluno de mestrado pode ser um aluno de tempo parcial
ou integral, como juntar as duas classificaes?
Dica: Existem conceitos misturados: dados cadastrais de aluno, dados relativos
dedicao do aluno (parcial ou integral) e dados relativos ao curso do aluno (graduao,
mestrado ou doutorado)
Outro problema: Metamorfose
Empresa tem empregados de dois tipos. Horistas e Assalariados
Os horistas recebem de acordo com um valor hora e o nmero de horas trabalhadas
Os assalariados tem um valor mensal fixo

E se o horista virar assalariado ou vice-versa? Ser preciso destruir o objeto


correspondente ao empregado e tornar a instanci-lo na nova categoria...
Como resolver? Novamente existem conceitos misturados: dados de empregado
com dados relativos ao regime de tempo.
Classe Abstrata
No Jude:

Modelo: Todo produto um filme ou jogo. Produto apenas uma abstrao.

Produto

Filme

Jogo

Contexto: A Vdeo Locadora passa a trabalhar com aluguel de outros produtos


(DVDs, por exemplo): basta criar a nova classe como herdeira da classe Produto. A
existncia da nova classe transparente para as classes clientes da classe Produto (a
classe VideoLocadora, por exemplo)

Você também pode gostar