Marcio de Carvalho [email protected]
Processo Unificado
Unidade IV: Análise OO
(Aspectos Estáticos)
3
Modelo de Classes
O Modelo de Classes evolui durante as iterações do desenvolvimento do sistema. À medida que o sistema é desenvolvido, o Modelo de Classes é incrementado com novos detalhes. Há três níveis de abstração pelos quais o Modelo de Classes passa: Modelo de Classes de Domínio. Modelo de Classes de Especificação. Modelo de Classes de Implementação.
4
Modelo de Classes
Modelo de Classes de Domínio: Representa as classes de domínio do negócio em
questão. É construído durante a atividade de análise das
iterações. Não leva em consideração restrições inerentes à
tecnologia a ser utilizada na solução de um problema.
5
Modelo de Classes
Modelo de Classes de Especificação: É uma extensão do Modelo de Classes de
Domínio. Possui detalhes específicos inerentes a solução de
software escolhida. São definidas novas classes necessárias para
desenvolver a solução do problema. É construído na atividade de projeto das iterações.
6
Modelo de Classes
Modelo de Classes de Implementação: É uma extensão do Modelo de Classes de
Especificação. Corresponde à implementação das classes em
alguma linguagem de programação, normalmente OO.
É construído na atividade de implementação das iterações.
7
Diagrama de Classes Os diagramas de classes também podem conter
pacotes ou subsitemas, utilizados para agrupar elementos do seu modelo em um conjunto maior.
Elementos de UML presentes nos Diagramas de Classes: Classes, suas estruturas internas e comportamento; Interfaces; Associações, agregações, dependências, e relações de
herança; Multiplicidade e indicadores de navegação; Nomes de papéis (O que uma classe representa para
outra).
8
Classes
ContaBancaria
ContaBancaria
numerosaldodataAbertura
ContaBancaria
numerosaldodataAbertura
creditar()debitar()
Nome da Classe
Operações
Atributos
3 formas de representar classes
9
Relacionamentos Ao construir modelo de classe você irá
descobrir que há um numero muito pequeno de classes que trabalham sozinhas.
Ao fazer modelagem de um sistema é preciso ver como os itens relacionam-se entre si.
Três tipos especialmente importantes: Dependência - que representa relacionamento de
utilização entre as classes. Generalização - que relacionam classes
generalizadas a suas especializações. Associações - representam relacionamentos
estruturais entre objeto.
10
Dependência
ContaBancaria ObjValor
public class ContaBancaria {private int numero;private float saldo;private Date dataAbertura;
public void creditar(ObjValor valor) {...
}}
11
Generalização
ContaBancaria
numerosaldodataAbertura
creditar()debitar()
Poupanca
variacao
public class Poupanca extends ContaBancaria {private int variacao;...}
}
public class ContaBancaria {private int numero;private float saldo;private Date dataAbertura;
public void creditar(ObjValor valor) {... }
}
12
Associação
Pessoa BancoEmpresta de
nome da associação
Pessoa Bancodevedor credor
papéis na associação
Pessoa Banco1..* *
multiplicidade da associação
13
Associação: Multiplicidade
2..4
0..1
1..*
0..*
1
*
Não Especificado Exatamente um Zero ou mais (vários,
ilimitado)
Um ou mais Zero ou um
Intervalo especificado Intervalos múltiplos
2, 4..6
14
Associação
public class Cliente {private String nome;private long cpf;private ContaBancaria contas[ ];
.
.
.}
Cliente ContaBancariaMovimenta
1 *
15
Associação: Classe Associativa
Pessoa Empresaempregado empregador
**nometelefoneendereco
rezaoSocialendereco
Emprego
salariodataContratacao
16
Associação: Classe Associativa
*
Pessoa
nometelefoneendereco
Empresa
rezaoSocialendereco
Emprego
salariodataContratacao
1 * 1
17
Associação Reflexiva
Supervisao
Empregado
nometelefoneendereco
*
1
supervisionado
supervisor
18
Agregação
Cliente
Banco
1..*
*
19
Composição
*Banco Filial1
20
Agregação & Composição
*Banco Filial1
Cliente
1..*
*
21
Responsabilidades & Colaborações
Costuma-se categorizar os objetos de um sistema de acordo com o tipo de responsabilidade a ele atribuída. objetos de entidade objetos de controle objetos de fronteira
Esta categorização foi proposta por Ivar Jacobson (Jacobson et al, 1992) em uma técnica denominada Análise de Robustez.
22
Objetos de Entidade
Um objeto de entidade é um repositório para alguma informação manipulada pelo sistema.
Esses objetos representam conceitos do domínio do negócio.
Normalmente esses objetos armazenam informações persistentes.
Há várias instâncias de uma mesma classe de entidade coexistindo no sistema.
23
Objetos de Fronteira
Esses objetos traduzem os eventos gerados por um ator em eventos relevantes ao sistema.
Também são responsáveis por apresentar os resultados de uma interação dos objetos em algo inteligível pelo ator.
Um objeto de fronteira existe para que o sistema se comunique com o mundo exterior.
Por conseqüência, estes objetos são altamente dependentes do ambiente.
24
Objetos de Controle
São a “ponte de comunicação” entre objetos de fronteira e objetos de entidade.
Responsáveis por controlar a lógica de execução correspondente a um caso de uso.
Decidem o que o sistema deve fazer quando um evento externo relevante ocorre. Eles realizam o controle do processamento Agem como gerentes (coordenadores,
controladores) dos outros objetos para a realização de um ou mais caso de uso.
25
Divisão de responsabilidades
A categorização de responsabilidades implica em que cada objeto é especialista em realizar um de três tipos de tarefa: se comunicar com atores (fronteira) manter as informações do sistema (entidade) coordenar a realização de um caso de uso
(controle). A importância dessa categorização está
relacionada à capacidade de adaptação do sistema a eventuais mudanças
26
Divisão de responsabilidades
«entidade»
«entidade»
«entidade»«controle»«fronteira»
27
Classes Avançadas Visibilidade (UML):
A visibilidade de uma característica indica se ela pode ser utilizada por outras classes:
Público (+) – membros da classe são acessíveis por todos os clientes.
Package (~) - membros da classe são acessíveis somente pelas classes do mesmo pacote (package) e pela própria classe.
Protegido (#) – membros da classe são acessíveis somente por subclasses e pela própria classe.
Privado (-) - membros da classe são acessíveis somente pela própria classe.
28
Classes Avançadas Escopo:
O escopo da propriedade especifica se uma característica aparece em cada instancia da classe ou se haverá uma única instancia da característica para todas as instancias da classe:
Instância – cada instancia da classe mantém seu próprio valor para a característica.
Static (Classe) – existe apenas um valor da característica para todas as instancias do classificador.
29
Classes Avançadas
Elementos abstratos, herança e polimorfismo: É comum especificar classes abstratas, significando que
não poderão apresentar instancias diretas. Na UML são representadas por nome em itálico.
Generalização (herança) é usada para fazer a modelagem de estruturas de classes com abstrações mais gerais no topo da hierarquia e outras mais específicas na parte inferior.
Uma operação é polimórfica, significando que, em uma hierarquia de classes, você pode especificar operações com a mesma assinatura em pontos diferentes da hierarquia.
Você pode especificar uma operação abstrata escrevendo o respectivo nome em itálico.
30
Diagrama de objetos
Além do diagrama de classes, A UML define um segundo tipo de diagrama estrutural, o diagrama de objetos.
Pode ser visto com uma instância de diagramas de classes
Representa uma “fotografia” do sistema em um certo momento. exibe as ligações formadas entre objetos
conforme estes interagem e os valores dos seus atributos.
31
Exemplo (Diagrama de objetos)
Empregado
João : Empregado
Maria : Empregado
José : Empregado
Antônio : EmpregadoAline : Empregado
Lucas : Empregado
Rafaela : Empregado
Supervisao
Empregado
nometelefoneendereco
*
1
supervisionado
supervisor
FIM