Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf ·...

Post on 07-Nov-2018

220 views 0 download

Transcript of Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf ·...

Diagrama de Classes de Projeto

Prof. Cesar Augusto Tacla

Plano

�Posição no método APOO�Projeto�Diagrama de seqüência (refinamento)�Diagrama de classe (refinamento)

Visão geral do método

� Análise de requisitos

� Análise� Refinar a descrição dos casos de uso� Levantamento das classes� Estudo da interação entre objetos

� Projeto� Refinamento do diagrama de classes� Definição do comportamento de classes� Modelo de implantação (deployement)

� Implementação� Modelo de implementação� Codificação

Posição da atividade

Resumo

Caso de uso

realizaçãoModelo de análise

Modelo de casos de uso

Classes de análise

Cenários de colaboração

Diagrama de casos de usoDescriçõesGlossárioModelo do domínio

realizaçãoClasses de projetoCenários de colaboração

Arquitetura de sofware

Modelo de projeto

PROJETO

�Classes de projeto�Operações e atributos de cada classe

�Diagramas de interação

�Arquitetura de software �Interfaces�Subsistemas

CLASSE DE ANÁLISE X PROJETO

NO PROJETO� linguagem de programação alvo �visibilidades�relações são detalhadas �operações das classes de projeto são

traduzidas de forma direta em código.

Método adotado para a atividade

�Criar realizações de casos de uso�Descrever interações e refinar diagrama

de classes�Simplificar diagramas de seqüência

utilizando subsistemas (opcional)�Descrever comportamentos associados à

persistência�Definir mecanismos de projeto (Arquiteto

de Software)

Diagrama de interação

�Na análise�considerou-se que os objetos estavam

disponíveis e persistidos

�não havia preocupação com a criação e destruição dos mesmos

�Não havia preocupação em acessá-los e associá-los a outros objetos

Diagrama de seq. análisesd análise casos de uso

:meteorologista:IUConv ersao :CtrlConv ersao :Historico :Conv ersaoCF

solicitar valor Celsius

valor Celsius?

c

c

converter valor c

guardar conversao

valor Fahrenheitmostrar valor convertido

valor Fahrenheit

sd conv erter c-f

:meteorologista

:Historico

conv:Conv ersaoCF

:IUConv ersao

:CtrlConv ersao

loop

[!FIM] solicitarCelsius() :float

Celsius?

c

c

ConversaoCF(c)

adicionar(this)

mostrar(conv.getFahr())

conv.Fahr

Diagrama de seq. projeto

salvar()

writeObject

Continuação slide anterior

Diagrama de classes de análiseclass Classes de análise (associações)

ConversaoCFCtrlConversao

Historico

IUConversao

:IUHistorico CtrlHistorico

0..10pertence

1

1 111

1 11 1

Diagrama de classes de projetoclass classes converter

«boundary»IUConversao

~ mostrar(float) : void~ solicitarCelsius() : float

«control»CtrlConv ersao

«entity»ConversaoCF

- celsius: float- Horario: Date

+ getFahr() : float

«entity»Historico

+ adicionar(ConversaoCF) : void- writeObject() : void

«interface»

Serializable1«instantiate»1 1

«instantiate»

1

1

«instantiate»

1

0..10 {ordered} 1

Exemplo: realização 2

�Conversor C > F (WEB)deployment projeto casos de uso

Serv idor WEB

Nav egador 1

Nav egador 2 Nav egador N-1

Nav egador N

«http»

«http» «http»

«http»

Diag. de seqüência parcialsd projeto casos de uso (web)

:meteorologista

«jsp page»

:IUConversao

«servlet»

:CtrlConversao

:Conv ersaoCF

pág. conversão

celsius

POST celsius

ConversaoCF(celsius)

Refinar diagrama de classes

�Dependência� Implementação de associações

Dependência

�Variável local�Parâmetro de operação (método)� Instanciação

�Atributos indicam associação

Dependência: exemplosclass Dependência

ClasseA

+ operacao(ClasseC) : void

ClasseB

ClasseC ClasseD

«local»

«parameter»«instantiate»

Implementação de associaçõesunidirecional 1:1

class Classe

ClasseA ClasseB

1 1

class ClasseA {private ClasseB objB = new ClasseB();// objB pode ser instanciado em outro local// outros atributos// métodos

}E se fosse bidirecional?

Implementação bidirecional 1:1

1.class ClasseA {2. Private ClasseB objB = new ClasseB(); // pode ser instanciado em outro local3. // outros atributos4. // métodos5.}6.class ClasseB {7. Private Classe objA = new ClasseA(); // pode ser instanciado em outro local8. // outros atributos9. // métodos10.}

Unidirecional 0..1 : 0..5

class Professor

Professor Disciplina

0..1

leciona

0..5

Unidirecional 0..1 : 0..5Implementação 1

1.class Professor {2. private Disciplina[] disciplinas = {3. new Disciplina(),4. new Disciplina(),5. new Disciplina(),6. new Disciplina(),7. New Disciplina(),8. };9.}

A instanciação pode ocorrer em outros pontos da classe

class Professor

Professor Disciplina

0..1

leciona

0..5

Unidirecional 0..1 : 0..5Implementação 2

1.class Professor {2. private Disciplina[] disciplinas = new Disciplina[5];3. public void adicionarDisciplinas(Disciplina[] disc){4. // inicializar vetor disciplinas com parâmetro disc5. }6.}

class Professor

Professor Disciplina

0..1

leciona

0..5

Multiplicidade 1:*

1.class Professor {2. private Vector<Disciplina> disciplinas = 3. new Vector<Disciplina>(5, 1);

4. public void adicionarDisciplinas(Disciplina[] disc){5. disciplinas.add(disc[0]);6. ...7. }8.}

class classes

Professor Disciplina

1 *

Bidirecional multiplicidade *:*

1.public class Projeto {2. public Vector<Pessoa> emprega;3. ...4.}5.public class Pessoa {6. public Vector<Projeto> participa;7. ...8.}

class muitos para muitos

Projeto Pessoa+emprega

0..*

+participa

0..*

Associações reflexivasclass associação reflexiv a

Professor Disciplina

1 *

+preRequisito0..*

+temPrerequisito0..*

1.public class Disciplina {2. public Vector<Disciplina> temPrerequisito;3. public Vector<Disciplina> preRequisito;4. ...5.}

Classes Associativas

class classe associativa

ProjetoPessoa

Participacao

- cargaHoraria: int- dataEntrada: Date- dataSaida: Date

+emprega

0..*

+participa

0..*

Equivale à...

Classes Associativas (2)

class classe associativ a (proj )

Projeto PessoaParticipacao

- cargaHoraria: int- dataEntrada: Date- dataSaida: Date

1

possui

0..* 1

participa

0..*

Implementação >>>>

Classes Associativas (3)

1.public class Projeto {2. public Vector<Participacao> m_Participacao;3. ...4.}5.public class Pessoa {6. public Vector<Participacao> m_Participacao;7. ...8.}9.public class Participacao {10. private int cargaHoraria;11. private Date dataEntrada;12. private Date dataSaida;13. public Projeto projeto;// se relação for bidirecional14. Public Pessoa pessoa; // se relação for bidirecional15. ...16.}

Agregação por composição

class agregação por composição

HistoricoPagsWeb URLVisitada

- URL: String0..*1

Implementação >>>

Agregação por composição (2)1.class URLVisitada {2. private String url;3.

4. URLVisitada (String url) {5. this.url = url;6. }7.}8.class Historico {9. // cria três objetos da classe URLVisitada10. private URLVisitada[] historico = { // ou coleção 11. new URLVisitada("http://www.uol.com.br"),12. new URLVisitada("http://www.terra.com.br"),13. new URLVisitada("http://www.lemonde.fr"),14. };15.…16.}

Implementação >>>

Agregação por composição (3)1.class Historico {2. private class URLVisitada {3. private String url;4. URLVisitada (String umaURL) {5. url = umaURL;6. }7. ...8. }9. private Vector<URLVisitada> historico = 10. new Vector<URLVisitada>(4, 2);11. ...12.

13.}

como private, a URLVisitada só pode ser instanciada dentro do escopo do todo

Classe aninhada

Agregação por associação

� Idem associação

Realização

«entity»Historico

+ adicionar(ConversaoCF) : void- writeObject() : void

«interface»

Serializable

«instantiate»

1

«entity»Historico

+ adicionar(ConversaoCF) : void- writeObject() : void

«interface»

Serializable

«instantiate»

1

1.public interface Serializable {2. ...3.}4.public class Histórico implements

Serializable {5. ...6.}

Subsistemas

�Comportamentos repetidos nos diagramas de seqüência podem indicar subsistemas

�Ex: autenticação, acesso a dados

Subsistemas: definição

�Composto por outros elementos �Pacotes�Classes

�Apresenta comportamento

Subsistemas: representação UMLclass subsistema

«interface»Faturamento

+ emitirFatura(Pessoa, float) : void

Faturamento

Class3

Class4

Ícone para estereótipo<<Subsistema>>

class subsistema

«interface»Faturamento

+ emitirFatura(Pessoa, float) : void

Faturamento

Class3

Class4

Ícone para estereótipo<<Subsistema>>

COMPORTAMENTOS ASSOCIADOS ÀPERSISTÊNCIA

�Refinar o diagrama de classes� Isolar camada do modelo do BD�Usar padrões

�Factory�Façade�gateway