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

39
Diagrama de Classes de Projeto Prof. Cesar Augusto Tacla

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

Page 1: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Diagrama de Classes de Projeto

Prof. Cesar Augusto Tacla

Page 2: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Plano

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

Page 3: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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

Page 4: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Posição da atividade

Page 5: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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

Page 6: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

PROJETO

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

�Diagramas de interação

�Arquitetura de software �Interfaces�Subsistemas

Page 7: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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.

Page 8: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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)

Page 9: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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

Page 10: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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

Page 11: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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

Page 12: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

salvar()

writeObject

Continuação slide anterior

Page 13: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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

Page 14: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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

Page 15: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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»

Page 16: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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)

Page 17: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Refinar diagrama de classes

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

Page 18: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Dependência

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

�Atributos indicam associação

Page 19: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Dependência: exemplosclass Dependência

ClasseA

+ operacao(ClasseC) : void

ClasseB

ClasseC ClasseD

«local»

«parameter»«instantiate»

Page 20: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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?

Page 21: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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.}

Page 22: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Unidirecional 0..1 : 0..5

class Professor

Professor Disciplina

0..1

leciona

0..5

Page 23: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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

Page 24: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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

Page 25: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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 *

Page 26: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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..*

Page 27: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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.}

Page 28: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Classes Associativas

class classe associativa

ProjetoPessoa

Participacao

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

+emprega

0..*

+participa

0..*

Equivale à...

Page 29: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Classes Associativas (2)

class classe associativ a (proj )

Projeto PessoaParticipacao

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

1

possui

0..* 1

participa

0..*

Implementação >>>>

Page 30: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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.}

Page 31: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Agregação por composição

class agregação por composição

HistoricoPagsWeb URLVisitada

- URL: String0..*1

Implementação >>>

Page 32: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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 >>>

Page 33: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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

Page 34: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Agregação por associação

� Idem associação

Page 35: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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.}

Page 36: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Subsistemas

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

�Ex: autenticação, acesso a dados

Page 37: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

Subsistemas: definição

�Composto por outros elementos �Pacotes�Classes

�Apresenta comportamento

Page 38: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

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>>

Page 39: Diagrama de Classes de Projeto - dainf.ct.utfpr.edu.brtacla/UML/0080-ProjetoCasosUso-slides1.pdf · Cenários de colaboração Arquitetura de sofware Modelo de projeto. PROJETO Classes

COMPORTAMENTOS ASSOCIADOS ÀPERSISTÊNCIA

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

�Factory�Façade�gateway