Plano Diagrama de Classes de Prof. Cesar Augusto Tala Posição no método APOO Diagrama de seqüênia (refinamento) Diagrama de lasse (refinamento) Visão geral do método Posição da atividade Análise de requisitos Análise Refinar a desrição dos asos de uso Levantamento das lasses Estudo da interação entre objetos Refinamento do diagrama de lasses Definição do omportamento de lasses Modelo de implantação (deployement) Implementação Modelo de implementação Codifiação Resumo Caso de uso Modelo de asos de uso Diagrama de asos de uso Desrições Glossário Modelo do domínio PROJETO Classes de projeto Operações e atributos de ada lasse realização Modelo de análise Diagramas de interação Classes de análise realização Cenários de olaboração Modelo de projeto Classes de projeto Cenários de olaboração Arquitetura de sofware Arquitetura de software Interfaes Subsistemas
CLASSE DE ANÁLISE X PROJETO NO PROJETO linguagem de programação alvo visibilidades relações são detalhadas operações das lasses de projeto são traduzidas de forma direta em ódigo. Método adotado para a atividade Criar realizações de asos de uso Desrever interações e refinar diagrama de lasses Simplifiar diagramas de seqüênia utilizando subsistemas (opional) Desrever omportamentos assoiados à persistênia Definir meanismos de projeto (Arquiteto de Software) Diagrama de interação Na análise onsiderou-se que os objetos estavam disponíveis e persistidos Diagrama de seq. análise sd análise asos de uso :meteorologista valor Celsius? :IUConv ersao :CtrlConversao :Historio :Conv ersaocf soliitar valor Celsius não havia preoupação om a riação e destruição dos mesmos onverter valor guardar onversao Não havia preoupação em aessá-los e assoiá-los a outros objetos valor Fahrenheit mostrar valor onvertido valor Fahrenheit Diagrama de seq. projeto sd onverter -f Continuação slide anterior :meteorologista :CtrlConv ersao :IUConv ersao :Historio loop [!FIM] soliitarcelsius() :float Celsius? salvar() writeobjet ConversaoCF() onv :ConversaoCF adiionar(this) mostrar(onv.getfahr()) onv.fahr 2
Diagrama de lasses de análise Diagrama de lasses de projeto lass Classes de análise (assoiações) lass lasses onverter «boundary» IUConv ersao «ontrol» CtrlConversao ~ mostrar(float) : void ~ soliitarcelsius() : float «instantiate» «interfae» Serializable IUConversao CtrlConversao ConversaoCF pertene 0..0 «instantiate» «instantiate» :IUHistorio CtrlHistorio Historio «entity» ConversaoCF - elsius: float - Horario: Date + getfahr() : float 0..0 {ordered} «entity» Historio + adiionar(conversaocf) : void - writeobjet() : void Exemplo: realização 2 Diag. de seqüênia parial sd projeto asos de uso (web) Conversor C > F (WEB) «jsp page» :IUConversao «servlet» :CtrlConversao deployment projeto asos de uso :meteorologista Servidor WEB pág. onversão elsius POST elsius Nav egador N ConversaoCF(elsius) Navegador :Conv ersaocf Navegador 2 Navegador N- Refinar diagrama de lasses Dependênia Implementação de assoiações Dependênia Variável loal Parâmetro de operação (método) Instaniação Atributos indiam assoiação 3
Dependênia: exemplos lass Dependênia Implementação de assoiações unidireional : lass Classe ClasseA + operaao(classec) : void «loal» ClasseB ClasseA ClasseB «parameter» ClasseC «instantiate» ClasseD lass ClasseA { private ClasseB objb = new ClasseB(); // objb pode ser instaniado em outro loal // outros atributos // métodos } E se fosse bidireional? Implementação bidireional : Unidireional 0.. : 0..5.lass ClasseA { 2. Private ClasseB objb = new ClasseB(); // pode ser instaniado em outro loal 3. // outros atributos 4. // métodos 5.} 6.lass ClasseB { 7. Private Classe obja = new ClasseA(); // pode ser instaniado em outro loal 8. // outros atributos 9. // métodos 0.} lass 0.. leiona 0..5 Unidireional 0.. : 0..5 Implementação Unidireional 0.. : 0..5 Implementação 2.lass { 2. private [] disiplinas = { 3. new (), 4. new (), 5. new (), 6. new (), 7. New (), 8. }; 9.}.lass { 2. private [] disiplinas = new [5]; 3. publi void adiionars([] dis){ 4. // iniializar vetor disiplinas om parâmetro dis 5. } 6.} A instaniação pode oorrer em outros pontos da lasse lass leiona lass leiona 0.. 0..5 0.. 0..5 4
Multipliidade :* lass lasses Bidireional multipliidade *:* lass muitos para muitos * +emprega +partiipa Pessoa.lass { 2. private Vetor<> disiplinas = 3. new Vetor<>(5, ); 4. publi void adiionars([] dis){ 5. disiplinas.add(dis[0]); 6.... 7. } 8.}.publi lass { 2. publi Vetor<Pessoa> emprega; 3.... 4.} 5.publi lass Pessoa { 6. publi Vetor<> partiipa; 7.... 8.} Assoiações reflexivas Classes Assoiativas lass assoiação reflexiv a lass lasse assoiativa +temprerequisito +prerequisito +emprega +partiipa Pessoa *.publi lass { 2. publi Vetor<> temprerequisito; 3. publi Vetor<> prerequisito; 4.... 5.} Partiipaao - argahoraria: int - dataentrada: Date - datasaida: Date Equivale à... Classes Assoiativas (2) Classes Assoiativas (3) lass lasse assoiativa (proj) Proj eto Partiipaao possui partiipa - argahoraria: int - dataentrada: Date - datasaida: Date Implementação >>>> Pessoa.publi lass { 2. publi Vetor<Partiipaao> m_partiipaao; 3.... 4.} 5.publi lass Pessoa { 6. publi Vetor<Partiipaao> m_partiipaao; 7.... 8.} 9.publi lass Partiipaao { 0. private int argahoraria;. private Date dataentrada; 2. private Date datasaida; 3. publi projeto;// se relação for bidireional 4. Publi Pessoa pessoa; // se relação for bidireional 5.... 6.} 5
2. Agregação por omposição lass agregação por omposição HistorioPagsWeb URLVisitada - URL: String Implementação >>> Agregação por omposição (2).lass URLVisitada { 2. private String url; 3. 4. URLVisitada (String url) { 5. this.url = url; 6. } 7.} 8.lass Historio { 9. // ria três objetos da lasse URLVisitada 0. private URLVisitada[] historio = { // ou oleção. new URLVisitada("http://www.uol.om.br"), 2. new URLVisitada("http://www.terra.om.br"), 3. new URLVisitada("http://www.lemonde.fr"), 4. }; 5. 6.} Implementação >>> Agregação por omposição (3).lass Historio { Classe 2. private lass URLVisitada { aninhada 3. private String url; 4. URLVisitada (String umaurl) { 5. url = umaurl; 6. } 7.... 8. } 9. private Vetor<URLVisitada> historio = 0. new Vetor<URLVisitada>(4, 2);.... Agregação por assoiação Idem assoiação 3.} omo private, a URLVisitada só pode ser instaniada dentro do esopo do todo Realização Subsistemas e» «interfae» Serializable.publi interfae Serializable { 2.... 3.} 4.publi lass Histório implements Serializable { 5.... 6.} Comportamentos repetidos nos diagramas de seqüênia podem indiar subsistemas Ex: autentiação, aesso a dados «entity» Historio + adiionar(conversaocf) : void - writeobjet() : void 6
Subsistemas: definição Composto por outros elementos Paotes Classes Apresenta omportamento Subsistemas: representação UML lass subsistema «interfae» Faturamento + emitirfatura(pessoa, float) : void Íone para estereótipo <<Subsistema>> Faturamento Class3 Class4 COMPORTAMENTOS ASSOCIADOS À PERSISTÊNCIA Refinar o diagrama de lasses Isolar amada do modelo do BD Usar padrões Fatory Façade gateway 7