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.
Diagramas desequênciaNa aula anterior…Tipos de diagrama UMLNotações para classes, objectos e relaçõesUML como forma de comunicação entre pessoas que precisam de se entender em relaçãoA um problema (análise)A uma solução (desenho)UML como modelo formal e possível fonte para geração automática de código (e.g., Java)2009/2010Programação Orientada por Objectos2
4.
Associaçãopackage airtravel;public classPerson { …}public class Flight { private Set<Person> passengers; …}2009/2010Programação Orientada por Objectos3airtravelPerson- passenger(s)*CarriesAssociação*Flight
Associação: agregaçãopackage vehicles;publicclass Car { private Set<Wheel> wheels; …}public class Wheel { private Car car; …}2009/2010Programação OrientadaporObjectos5vehiclesCar- car0..1IsPartOfAgregação- wheel(s)3..6Wheel
7.
Associação: composiçãopackage business;publicclass Company { private Set<Department> departments; …}public class Department { private Company company; …}2009/2010Programação Orientada por Objectos6businessCompany- company1IsPartOfComposição- department(s)*Departament
Associação qualificadapackage airtravel;publicclass Person { …}public class Flight { private Map<Seat, Person> passengers; …}2009/2010Programação Orientada por Objectos8airtravelPerson- passenger(s)0..1CarriesAssociação qualificada*seat: SeatFlight
10.
AssociaçãoE características especiais,como a dieta pretendida?2009/2010Programação Orientada por Objectos9airtravelPerson- passenger(s)*CarriesAssociação*Flight
11.
Classe associativapackage airtravel;publicclass Person { …}public class Carries { private Person passenger; private Diet diet; …}public class Flight { private Set<Carries> passengers; …}2009/2010Programação Orientada por Objectos10airtravelPerson- passenger(s)*Carriesdiet: DietClasseassociativa*Flight
12.
Classe associativapackage airtravel;publicclass Person { …}public class Carries { private Person passenger; private Diet diet; …}public class Flight { private Set<Carries> passengers; …}2009/2010Programação Orientada por Objectos11airtravelPerson- passenger(s)*CarriesCarriesdiet: DietClasseassociativa*Flight
13.
Classe associativapackage airtravel;publicclass Person { …}public class Carries { private Person passenger; private Diet diet; …}public class Flight { private Set<Carries> passengers; …}2009/2010Programação Orientada por Objectos12airtravelPerson- passenger(s)*Carriesdiet: DietClasseassociativa*Flight
14.
Multiplicidade de classesPoderestringir-se número de instâncias simultâneas de classe no sistemaImplementação em Java recorre a truques2009/2010Programação Orientada por Objectos13n..mMyClass
15.
Solitão (singleton)package mypackage;publicfinal class MySingleton {private static final MySingleton INSTANCE = new MySingleton();privateMySingleton() {assert INSTANCE == null : …; }public static MySingletongetInstance() { return INSTANCE; } …}2009/2010Programação Orientada por Objectos141MySingleton
16.
Classe-pacote2009/2010Programação Orientada porObjectos15package 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) {…} …}0Math
Diagramas de sequênciaMostraminteracções entre entidades numa sequência temporalMostramentidades envolvidas numa interacçãosequências de mensagens trocadas entre entidadesEntidades podem seractores e sistema trocando mensagens (análise; domínio do problema)objectos invocando operações (desenho; domínio da solução)2009/2010Programação Orientada por Objectos17
19.
Exemplo 12009/2010Programação Orientadapor Objectos18A 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 = sequencediagramWithdrawal é o nome da interacção.sd withdrawal: AtmInterface: Bank: Accountvalid = valid(card, pin)Linha de vida.Que falta aqui?Que falta aqui?withdraw(card, amount)withdraw(amount)Invocação.Linha de vida activa.Retorno.
Exemplo 62009/2010Programação Orientadapor Objectos23sd withdrawalopt: AtmInterface: Bank: Accountvalid = valid(card, pin)valid(card)Quando há apenas um fragmento.withdraw(card, amount)withdraw(amount)[valid]
25.
Exemplo 72009/2010Programação Orientadapor Objectos24sd withdrawaloptloop(1, 3): AtmInterface: Bank: Accountvalid = 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 reterLigações enquantoinstâncias de associaçõesCasos típicos de multiplicidade de classesSolitãoClasse-pacoteDiagramas de sequênciaObjectosLinhas de vidaInvocaçõesRetornosAlternativas, opções e ciclos2009/2010Programação Orientada por Objectos25
27.
ReferênciasUML® ResourcePage (http://www.uml.org/)MartinFowler, 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/2010Programação Orientada por Objectos26
28.
A ler paraas 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-02009/2010Programação Orientada por Objectos27
Notas do Editor
#15 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.)