O documento introduz conceitos do UML como ligações como instâncias de associações, multiplicidade de classes como solitões e classes-pacote, e diagramas de sequência.
4. Associação package airtravel; public class Person { … } public class Flight { private Set<Person> passengers; … } 2009/2010 Programação Orientada por Objectos 3 airtravel Person - passenger(s) * Carries Associação * Flight
5. Ligação 2009/2010 Programação Orientada por Objectos 4 airtravel john: Person Person - passenger(s) * - passenger Carries Carries tp344: Flight jim: Person Carries Ligações Associação - passenger Carries - passenger * janet: Person Flight
6. Associação: agregação package vehicles; public class Car { private Set<Wheel> wheels; … } public class Wheel { private Car car; … } 2009/2010 Programação OrientadaporObjectos 5 vehicles Car - car 0..1 IsPartOf Agregação - wheel(s) 3..6 Wheel
7. Associação: composição package business; public class Company { private Set<Department> departments; … } public class Department { private Company company; … } 2009/2010 Programação Orientada por Objectos 6 business Company - company 1 IsPartOf Composição - department(s) * Departament
8. Associação E os lugares? 2009/2010 Programação Orientada por Objectos 7 airtravel Person - passenger(s) * Carries Associação * Flight
9. Associação qualificada package airtravel; public class Person { … } public class Flight { private Map<Seat, Person> passengers; … } 2009/2010 Programação Orientada por Objectos 8 airtravel Person - passenger(s) 0..1 Carries Associação qualificada * seat: Seat Flight
10. Associação E características especiais, como a dieta pretendida? 2009/2010 Programação Orientada por Objectos 9 airtravel Person - passenger(s) * Carries Associação * Flight
11. Classe associativa package airtravel; public class Person { … } public class Carries { private Person passenger; private Diet diet; … } public class Flight { private Set<Carries> passengers; … } 2009/2010 Programação Orientada por Objectos 10 airtravel Person - passenger(s) * Carries diet: Diet Classe associativa * Flight
12. Classe associativa package airtravel; public class Person { … } public class Carries { private Person passenger; private Diet diet; … } public class Flight { private Set<Carries> passengers; … } 2009/2010 Programação Orientada por Objectos 11 airtravel Person - passenger(s) * Carries Carries diet: Diet Classe associativa * Flight
13. Classe associativa package airtravel; public class Person { … } public class Carries { private Person passenger; private Diet diet; … } public class Flight { private Set<Carries> passengers; … } 2009/2010 Programação Orientada por Objectos 12 airtravel Person - passenger(s) * Carries diet: Diet Classe associativa * Flight
14. Multiplicidade de classes Pode restringir-se número de instâncias simultâneas de classe no sistema Implementação em Java recorre a truques 2009/2010 Programação Orientada por Objectos 13 n..m MyClass
15. Solitão (singleton) package mypackage; public final class MySingleton { private static final MySingleton INSTANCE = new MySingleton(); privateMySingleton() { assert INSTANCE == null : …; } public static MySingletongetInstance() { return INSTANCE; } … } 2009/2010 Programação Orientada por Objectos 14 1 MySingleton
16. Classe-pacote 2009/2010 Programação Orientada por Objectos 15 package java.lang; public final class Math { private Math() { assert false : …; } public static final double PI = 3.14…; public static double sin(final double angle) {…} public static double cos(final double angle) {…} … } 0 Math
17. Diagramas Modelo Área dinâmica Área física Área estrutural Área de gestão do modelo … … … Vista de interacção … Diagrama de sequência 2009/2010 Programação Orientada por Objectos 16
18. Diagramas de sequência Mostram interacções entre entidades numa sequência temporal Mostram entidades envolvidas numa interacção sequências de mensagens trocadas entre entidades Entidades podem ser actores e sistema trocando mensagens (análise; domínio do problema) objectos invocando operações (desenho; domínio da solução) 2009/2010 Programação Orientada por Objectos 17
19. Exemplo 1 2009/2010 Programação Orientada por Objectos 18 A vida dos objectos, neste caso, prolonga-se para além dos limites do diagrama. No topo do diagrama surgem os objectos pré-existentes envolvidos na interacção. sd = sequencediagram Withdrawal é o nome da interacção. sd withdrawal : AtmInterface : Bank : Account valid = valid(card, pin) Linha de vida. Que falta aqui? Que falta aqui? withdraw(card, amount) withdraw(amount) Invocação. Linha de vida activa. Retorno.
20. Exemplo 2 2009/2010 Programação Orientada por Objectos 19 sd withdrawal : AtmInterface : Bank : Account valid = valid(card, pin) valid(card) Invocação recursiva. Reactivação do objecto. withdraw(card, amount) withdraw(amount)
21. Exemplo 3 2009/2010 Programação Orientada por Objectos 20 sd withdrawal : AtmInterface : Bank : Account valid = valid(card, pin) valid(card) Invocação dependente de guarda. [valid] withdraw(card, amount) withdraw(amount)
22. Exemplo 4 2009/2010 Programação Orientada por Objectos 21 sd withdrawal alt : AtmInterface : Bank : Account valid = valid(card, pin) valid(card) Fragmentos alternativos. withdraw(card, amount) withdraw(amount) [valid] Guarda de fragmento. [¬valid]
23. Exemplo 5 2009/2010 Programação Orientada por Objectos 22 sd withdrawal alt : AtmInterface : Bank : Account valid = valid(card, pin) valid(card) withdraw(card, amount) withdraw(amount) [valid] Nenhuma das guardas anteriores. [else]
24. Exemplo 6 2009/2010 Programação Orientada por Objectos 23 sd withdrawal opt : AtmInterface : Bank : Account valid = valid(card, pin) valid(card) Quando há apenas um fragmento. withdraw(card, amount) withdraw(amount) [valid]
25. Exemplo 7 2009/2010 Programação Orientada por Objectos 24 sd withdrawal opt loop(1, 3) : AtmInterface : Bank : Account valid = valid(card, pin) valid(card) [¬valid] Ciclo com pelo menos uma e no máximo três iterações. Guarda do ciclo. withdraw(card, amount) withdraw(amount) [valid]
26. A reter Ligações enquanto instâncias de associações Casos típicos de multiplicidade de classes Solitão Classe-pacote Diagramas de sequência Objectos Linhas de vida Invocações Retornos Alternativas, opções e ciclos 2009/2010 Programação Orientada por Objectos 25
27. Referências UML® ResourcePage (http://www.uml.org/) Martin Fowler, UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3.ª edição, Addison-Wesley, 2003.ISBN: 0-321-19368-7(1.ª e 2.ª ediçõesnabiblioteca) James Rumbaugh et al., The Unified Modeling Language Reference Manual, 2.ª edição, Addison-Wesley, 2005.ISBN: 0-321-24562-8(1.ª edição do guia do utilizador na biblioteca) 2009/2010 Programação Orientada por Objectos 26
28. A ler para as próximas aulas ... Capítulos 1 a 10 e 16 do livro: Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice Hall, 2008.ISBN: 978-0-13-605966-0 2009/2010 Programação Orientada por Objectos 27
29. Sumário Introdução ao UML Ligações como instâncias de associações Multiplicidade de classes (solitões e classes-pacote) Diagramas de sequência 2009/2010 Programação Orientada por Objectos 28
Notes de l'éditeur
O solitão é um padrão de desenho (design pattern). Corresponde a uma classe que possui apenas uma instância. Falar-se-á sobre padrões de desenho noutras disciplinas.Nota: A palavra solitão (singleton) aplica-se ao padrão de desenho, a uma classe que o aplique e ao objecto (único) que é instância dessa classe.(Nota avançada: Há soluções alternativas a esta, até porque este padrão tem variadíssimos problemas. Em algumas das soluções a multiplicidade passa a ser 0..1, uma vez que elas garantem que o solitão é construído apenas quando a ele se tenta aceder.)