Anda di halaman 1dari 25

Classes e Associaes Tarefas: Identificar classes Organizar classes em pacotes de classes Identificar associaes entre estas classes Identificar

icar 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 JanelaEmprestimoFitas JanelaReservaFilmes BoletoEmprestimoFitas SistemaAutorizacaoCredito

Exemplos:

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 Descritores Lugares Transaes Itens de Transao Papis Organizaes Conceitos Eventos Registro Fiscal/Contratual Avio, Trem, Fita, PDV Modelo do Avio Aeroporto, Vdeo Locadora, Loja Emprstimo, Reserva, Venda Item de Emprstimo, Item de Venda Piloto, Atendente, Scio, Passageiro Departamento de Vendas Degrau Tarifrio Vo, Acidente, Ligao 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

no singular Primeira letra MAISCULA Notao mixed case: ItemEmprestimo Utilize vocabulrio do domnio

Nome de classe:

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(); public String analiseCredito() { // implementar o cdigo depois return ""; } }

// associacao com Pedido

class Produto { private List itemPedido = new ArrayList(); // associacao com ItemPedido }

Multiplicidade 1 ou 1..1 * ou 0..* 1..* 0..1 5..8 4..7, 9 exatamente 1 zero ou mais um ou mais zero ou um intervalo especfico 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, ... string e uma regra de formao (primeiro, meio, ltimo)

CPF: Nome:

Telefone: vrias sees (DDD - estao - ramal)

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 colors [3] : Saturation points [2..*] : Point nome [0..1] : String

uma varivel inteira vetor de 3 posies (saturaes) vetor com no mnimo 2 valores (pontos) 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)

Anda mungkin juga menyukai