Vous êtes sur la page 1sur 37

Diagrama de Classes

Viviane Torres da Silva viviane.silva@ic.uff.br http://www.ic.uff.br/~viviane.silva/es1

O que ?
Diagrama mais utilizado da UML Representa os tipos (classes) de objetos de um sistema
Propriedades desses tipos Funcionalidades providas por esses tipos Relacionamentos entre esses tipos

Pode ser mapeado diretamente para uma linguagem orientada a objetos


Ajuda no processo transitrio dos requisitos para o cdigo Pode representar visualmente o cdigo do sistema

Idia geral
Caixas representando as classes Linhas representando os relacionamentos

Classes
As classes so representadas por caixas contendo
Nome (obrigatrio) Lista de atributos Lista de operaes

Pedido
Pedido

Nome Atributos Operaes

-data: Date -numero: int -valor: Money +finaliza()

Propriedades
Classes so descritas via suas propriedades
Primitivas: representadas como atributos Compostas: representadas como associaes para outras classes

Quando transformadas para cdigo, as propriedades se tornam sempre campos da classe


Atributos
Cliente -nome: String -endereco: String Pedido -data: Date -numero: int -valor: Money

Associaes

Atributos
Visibilidade Nome Tipo Multiplicidade Valor padro

- endereco : String[1] = Sem Endereo

Atributos: Visibilidade
Privado (-)
Somente a prpria classe pode manipular o atributo Indicado na maioria dos casos

Pacote (~)
Qualquer classe do mesmo pacote pode manipular o atributo

Protegido (#)
Qualquer subclasse pode manipular o atributo

Publico (+)
Qualquer classe do sistema pode manipular o atributo

- endereco : String

Atributos: Nome e tipo


O nome do atributo corresponde ao nome que ser utilizado no cdigo fonte
aceitvel utilizar nomes com espao e acentos na fase de anlise

O tipo do atributo corresponde ao tipo que ser utilizado no cdigo fonte


Tipos primitivos da linguagem Classes de apoio da linguagem (String, Date, Money, etc.)

- endereco : String

Atributos: Multiplicidade
Representa o nmero de elementos de uma propriedade Estrutura X..Y onde
Opcional: X = 0 Mandatrio: X = 1 Somente um valor: Y = 1 Multivalorado: Y > 1 0..1 1 (equivalente a 1..1 * (equivalente a 0..*) 1..*

Valores clssicos
default)

- endereco : String[0..3]

Associao
Utilizada para relacionar duas classes S as classes que esto relacionadas so as classes cujos objetos podem se comunicar Identifica o papel das classes na associao

Empregado 0..1 subordinado

gerente

0 ..* 1..*

Atributos de uma associao


Nome
Nome da associao

Papis
Papis das classes que esto relacionadas pela associao O papel da classe A o nome do atributo que a classe B possui que guarda o objetivo da classe A

Multiplicidades
Quantidades de objetos associados a um papel

Navegabilidade
Indica a direo da relao entre as classes
Pedido Cliente -nome: String -endereco: String -pedidosFechados -data: Date -numero: int 0..* -valor: Money +finaliza()

Operaes ou mtodos
Operaes so descritas via
Visibilidade Nome Lista de parmetros Tipo de retorno

+ finaliza(data : Date) : Money

Operaes: Visibilidade
Valem as mesmas regras de visibilidade de atributos Privado (-)
Funcionalidades de apoio prpria classe

Pacote (~)
Funcionalidades de apoio a outras classes do pacote (ex. construo de um componente)

Protegido (#)
Funcionalidades que precisam ser estendidas por outras classes (ex. construo de um framework)

Publico (+)
Funcionalidades visveis por todas as classes do sistema

+ finaliza(data : Date) : Money

Operaes: Nome e tipo de retorno


Valem as mesmas regras j vistas para atributos...
Normalmente o nome de uma operao formado por um verbo (opcionalmente seguido de substantivo) A ausncia de um tipo de retorno indica que a operao no retorna nada (i.e., void)

+ finaliza(data : Date) : Money

Operaes: Lista de parmetros


A lista de parmetros pode ser composta por zero ou mais parmetros separados por vrgula
Parmetro: [direo] nome : tipo [= valor padro] Nome Tipo Primitivo Classe Valor padro (opcional)

+ finaliza(data : Date) : Money

Anlise x Design
Em anlise no se atenha aos detalhes mas em design sim
Visibilidade Navegabilidade Tipo

Visibilidade pblica em propriedades


Assume campo privado e mtodos de acesso (get e set)

Operaes
Somente as responsabilidades obvias das classes

Exerccio
Uma loja que vende roupas possui um sistema capaz de controlar a venda e o estoque. Cada roupa possui um cdigo de barras, um tamanho e o nmero de exemplares que a loja possui daquela roupa. Os clientes da loja so cadastrados pelo nome Faa um diagrama de classe que modele um sistema capaz de respondendo as perguntas abaixo:
Quais foram as roupas compradas por um cliente? Quais so os cliente que j compraram uma determinada roupa? Quantos exemplares possuem de uma determinada roupa?

Palavras-chave, propriedades e restries


Apiam a linguagem grfica com informaes textuais Permitem dar mais semntica aos elementos do modelo Notao de palavra-chave (estereotipos)
Textual: <<palavra>> (ex.: <<interface>>) Icnica: imagem representando a palavra-chave

Notao de propriedades e restries


{propriedade} {nome = valor} {restrio} (ex.: {readonly}) s operao de leitura (ex.: {verso = 1.0} (ex.: {Me deve ser do sexo feminino})
+mae <<entity>> Pessoa +nome: String {readonly, versao = 1.0} +filho

Propriedades de atributos e associaes


Alguns exemplos... {readonly}
Somente oferece operaes de leitura

{ordered}, {unordered}
Indica se o atributo ou associao multivalorado mantm a seqncia dos itens inseridos

{unique}, {nonunique}
Indica se o atributo ou associao multivalorado permite repetio

- endereco : String = Sem Endereo {readonly}

Propriedades de operaes
{query}
No modifica o estado do sistema aps a execuo

{sequential}
A instncia foi projetada para tratar uma thread por vez, mas no sua responsabilidade assegurar que isso ocorra

{guarded}
A instncia foi projetada para tratar uma thread por vez, e sua responsabilidade assegurar que isso ocorra (ex.: metodos synchronized em Java)

{concurrent}
A instncia capaz de tratar mltiplas threads concorrentemente

Outros relacionamentos entre classes


Alm das associaes, alguns outros tipos de relacionamentos so importantes
Generalizao Composio Agregao Dependncia Classes de associao

Generalizao
Visa estabelecer relaes entre tipos Leitura: um Se Gerente um Funcionrio
Todas as operaes e propriedades (no privadas) de Funcionrio vo estar disponveis em Gerente Toda instncia de Gerente pode ser utilizada aonde se espera instncias de Funcionrio Gera o efeito de herana e polimorfismo quando mapeado para cdigo
Funcionrio

Gerente

Agregao
uma associao com a semntica de contm Serve como uma relao todo-parte fraca O todo existe sem as partes As partes existem sem o todo

Carro

0..5 -passageiros

Pessoa

Composio
uma associao com a semntica de composto de Serve como uma relao todo-parte forte As partes no existem sem o topo
As partes pertencem a somente um todo A remoo do todo implica na remoo das partes

Carro

Peas

Dependncia
Deixa explcito que mudanas em uma classe podem gerar conseqncias em outra classe Exemplos:
Uma classe chama mtodos de outra Uma classe tem operaes que retornam outra classe Uma classe tem operaes que esperam como parmetro outra classe

Outros relacionamento (ex.: associao com navegao) implicitamente determinam dependncia

Leitura: classe A depende da classe B

Classes de associao
Permitem a adio de informaes em uma associao Devem ser transformadas em classes comuns posteriormente para viabilizar implementao
Cliente -nome: String -endereco: String Loja 0..* 0..*

Qual o valor total gasto por um cliente em cada loja?

Cliente -nome: String -endereco: String Loja 0..* 0..*

Cadastro +valorTotalGasto

Cliente -nome: String -endereco: String 1 0..*

Cadastro +valorTotalGasto 0..* 1

Loja

Propriedades e operaes estticas


Propriedades que no so instanciadas nos objetos Operaes que atuam somente sobre propriedades estticas Ambos so acessados diretamente na classe
Ex.: Pedido.getProximoNumero()

No necessrio um objeto para acessar a propriedade So sublinhadas no diagrama


Pedido -data: Date -numero: int -valor: Money +finaliza() +getProximoNumero(): int

Propriedades derivadas
So propriedades que na verdade no existem como atributos ou associaes Podem ser inferidas por outras propriedades da classe interessante explicitar atravs de nota ou restrio a frmula de derivao So marcadas com o smbolo /

Perodo +inicio: Date +fim: Date +/duracao: int

durao = fim - incio

Classes e operaes abstratas


Classes que no podem ter instncias
Usualmente tm operaes abstratas, ou seja, sem implementao

Suas subclasses usualmente so concretas


Implementam mtodos com comportamentos especficos para as operaes abstratas

Utilizam nome em itlico

Animal +fala()

Interfaces
Uma classe sem nenhuma implementao
Todas operaes so abstratas

Faz uso da palavra-chave <<interface>>


Pode ser representado tambm como um cone

O relacionamento de realizao indica as classes que implementam a interface


Equivalente a generalizao
<<interface>> List +get(position:int)()
<<interface>> List +get(position:int)()

ArrayList

List

ArrayList
ArrayList

+get(position:int)()

Pacotes
Em algumas situaes se deseja ter uma viso geral das partes do sistema Para isso, o diagrama de pacotes a ferramenta indicada Pacotes agregam classes e outros pacotes
Dependncias podem ser inferidas indiretamente

Exemplo
Classe C1 pertence ao pacote P1 Classe C2 pertence ao pacote P2 Classe C1 depende da classe C2 Logo, pacote P1 depende do pacote P2

Pacotes

<<interface>> policies::ArchTracePolicy +getDescription(): String +getRationale(): String

herana

<<interface>> policies::PostTracePolicy +execute(trace: Trace, action: byte)

<<interface>> policies::PreTracePolicy +execute(trace: Trace, action: byte)

policies

builtin::DenyImmutableAETracePolicy +execute(trace: Trace, action: byte) +getDescription(): String +getRationale(): String

<<import>>

builtin::RemoveAncestryTracesPolicy +execute(trace: Trace, action: byte) +getDescription(): String +getRationale(): String

builtin::DenyRemovalFromBranch +execute(trace: Trace, action: byte) +getDescription(): String +getRationale(): String

builtin

Dicas
Inicie com um diagrama simples O que normalmente tem em todo diagrama
Classes Atributos Operaes Associaes

Use os demais recursos da linguagem somente quando for realmente necessrio

Dicas: Possveis candidatos


Classes
Entidades externas que produzem ou consomem informaes (ex.: sistema de validao do carto de crdito) Coisas que so parte do problema e que so informaes compostas (ex.: Produto) Eventos que ocorrem durante a operao do sistema (ex.: Pedido) Papeis que interagem com o sistema (ex.: Cliente) Unidades organizacionais relevantes (ex.: Rede de lojas) Lugares que fornecem o contexto do problema ou do sistema (ex.: Loja) Estruturas definidas no problema (ex.: Estoque)

Dicas: Possveis candidatos


Atributos
Informao primitiva que precisa ser memorizada (ex.: Preo)

Associaes
A classe A precisa se relacionar com a classe B para atender a operaes especficas (ex.: Cliente Pedido)

Operaes
Funcionalidades que devem ser providas por uma classe para viabilizar o uso do sistema (ex.: calculaTotal em Pedido)

Exerccio
Elabore um diagrama de classes para um sistema de ponto de vendas
R01. O gerente deve fazer login com um ID e senha para iniciar e finalizar o sistema; R02. O caixa (operador) deve fazer login com um ID e senha para poder utilizar o sistema; R03. Registrar a venda em andamento os itens comprados; R04. Exibir a descrio e preo e do item registrado; R05. Calcular o total da venda corrente; R06. Tratar pagamento com dinheiro capturar a quantidade recebida e calcular o troco; R07. Tratar pagamento com carto de crdito capturar a informao do carto atravs de um leitor de cartes ou entrada manual e autorizar o pagamento utilizando o servio de autorizao de crdito (externo) via conexo por modem; R08. Tratar pagamento com cheque capturar o nmero da carteira de identidade por entrada manual e autorizar o pagamento utilizando o servio de autorizao de cheque (externo) via conexo por modem; R09. Reduzir as quantidades em estoque quando a venda confirmada; R10. Registrar as vendas completadas; R11. Permitir que diversas lojas utilizem o sistema, com catlogo de produtos e preos unificado, porm estoques separados;

Bibliografia
Fowler, Martin. 2003. UML Distilled: A Brief Guide to the Standard Object Modeling Language. 3rd ed. Addison-Wesley Professional. Pressman, Roger. 2004. Software Engineering: A Practitioner's Approach. 6th ed. McGraw-Hill. Vrias transparncias foram produzidas por Leonardo Murta
http://www.ic.uff.br/~leomurta

Vous aimerez peut-être aussi