Aula 7Introdução ao UML: Ligações como instâncias de associações
 Multiplicidade de classes (solitões e classes-pacote)
 Diagramas de sequê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
Associaçãopackage airtravel;public class Person {    …}public class Flight {    private Set<Person>        passengers;    …}2009/2010Programação Orientada por Objectos3airtravelPerson- passenger(s)*CarriesAssociação*Flight
Ligação2009/2010Programação Orientada por Objectos4airtraveljohn: PersonPerson- passenger(s)*- passengerCarriesCarriestp344: Flightjim: PersonCarriesLigaçõesAssociação- passengerCarries- passenger*janet: PersonFlight
Associação: agregaçãopackage vehicles;public class Car {    private Set<Wheel> wheels;    …}public class Wheel {    private Car car;    …}2009/2010Programação OrientadaporObjectos5vehiclesCar- car0..1IsPartOfAgregação- wheel(s)3..6Wheel
Associação: composiçãopackage business;public class Company {    private Set<Department>        departments;    …}public class Department {    private Company company;    …}2009/2010Programação Orientada por Objectos6businessCompany- company1IsPartOfComposição- department(s)*Departament
AssociaçãoE os lugares?2009/2010Programação Orientada por Objectos7airtravelPerson- passenger(s)*CarriesAssociação*Flight
Associação qualificadapackage airtravel;public class Person {    …}public class Flight {    private Map<Seat, Person>         passengers;    …}2009/2010Programação Orientada por Objectos8airtravelPerson- passenger(s)0..1CarriesAssociação qualificada*seat: SeatFlight
AssociaçãoE características especiais, como a dieta pretendida?2009/2010Programação Orientada por Objectos9airtravelPerson- passenger(s)*CarriesAssociação*Flight
Classe associativapackage airtravel;public class 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
Classe associativapackage airtravel;public class 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)*CarriesCarriesdiet: DietClasseassociativa*Flight
Classe associativapackage airtravel;public class 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
Multiplicidade de classesPode restringir-se número de instâncias simultâneas de classe no sistemaImplementação em Java recorre a truques2009/2010Programação Orientada por Objectos13n..mMyClass
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/2010Programação Orientada por Objectos141MySingleton
Classe-pacote2009/2010Programação Orientada por Objectos15package 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
DiagramasModeloÁrea dinâmicaÁrea físicaÁrea estruturalÁrea de gestão do modelo………Vista de interacção…Diagrama de sequência2009/2010Programação Orientada por Objectos16
Diagramas de sequênciaMostram interacçõ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
Exemplo 12009/2010Programação Orientada por 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 22009/2010Programação Orientada por Objectos19sd withdrawal: AtmInterface: Bank: Accountvalid = valid(card, pin)valid(card)Invocação recursiva.Reactivação do objecto.withdraw(card, amount)withdraw(amount)
Exemplo 32009/2010Programação Orientada por Objectos20sd withdrawal: AtmInterface: Bank: Accountvalid = valid(card, pin)valid(card)Invocação dependente de guarda.[valid]withdraw(card, amount)withdraw(amount)
Exemplo 42009/2010Programação Orientada por Objectos21sd withdrawalalt: AtmInterface: Bank: Accountvalid = valid(card, pin)valid(card)Fragmentos alternativos.withdraw(card, amount)withdraw(amount)[valid]Guarda de fragmento.[¬valid]
Exemplo 52009/2010Programação Orientada por Objectos22sd withdrawalalt: AtmInterface: Bank: Accountvalid = valid(card, pin)valid(card)withdraw(card, amount)withdraw(amount)[valid]Nenhuma das guardas anteriores.[else]
Exemplo 62009/2010Programação Orientada por Objectos23sd withdrawalopt: AtmInterface: Bank: Accountvalid = valid(card, pin)valid(card)Quando há apenas um fragmento.withdraw(card, amount)withdraw(amount)[valid]
Exemplo 72009/2010Programação Orientada por 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]
A reterLigações enquanto instâ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
ReferênciasUML® 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/2010Programação Orientada por Objectos26
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-02009/2010Programação Orientada por Objectos27

Programação Orientada por Objectos - Aula 7

  • 1.
    Aula 7Introdução aoUML: Ligações como instâncias de associações
  • 2.
    Multiplicidade declasses (solitões e classes-pacote)
  • 3.
    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
  • 5.
    Ligação2009/2010Programação Orientada porObjectos4airtraveljohn: PersonPerson- passenger(s)*- passengerCarriesCarriestp344: Flightjim: PersonCarriesLigaçõesAssociação- passengerCarries- passenger*janet: PersonFlight
  • 6.
    Associação: agregaçãopackage vehicles;publicclass Car { private Set<Wheel> wheels; …}public class Wheel { private Car car; …}2009/2010Programação OrientadaporObjectos5vehiclesCar- car0..1IsPartOfAgregaçã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- company1IsPartOfComposição- department(s)*Departament
  • 8.
    AssociaçãoE os lugares?2009/2010ProgramaçãoOrientada por Objectos7airtravelPerson- passenger(s)*CarriesAssociação*Flight
  • 9.
    Associação qualificadapackage airtravel;publicclass Person { …}public class Flight { private Map<Seat, Person> passengers; …}2009/2010Programação Orientada por Objectos8airtravelPerson- passenger(s)0..1CarriesAssociaçã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)*CarriesCarriesdiet: 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
  • 17.
    DiagramasModeloÁrea dinâmicaÁrea físicaÁreaestruturalÁrea de gestão do modelo………Vista de interacção…Diagrama de sequência2009/2010Programação Orientada por Objectos16
  • 18.
    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.
  • 20.
    Exemplo 22009/2010Programação Orientadapor Objectos19sd withdrawal: AtmInterface: Bank: Accountvalid = valid(card, pin)valid(card)Invocação recursiva.Reactivação do objecto.withdraw(card, amount)withdraw(amount)
  • 21.
    Exemplo 32009/2010Programação Orientadapor Objectos20sd withdrawal: AtmInterface: Bank: Accountvalid = valid(card, pin)valid(card)Invocação dependente de guarda.[valid]withdraw(card, amount)withdraw(amount)
  • 22.
    Exemplo 42009/2010Programação Orientadapor Objectos21sd withdrawalalt: AtmInterface: Bank: Accountvalid = valid(card, pin)valid(card)Fragmentos alternativos.withdraw(card, amount)withdraw(amount)[valid]Guarda de fragmento.[¬valid]
  • 23.
    Exemplo 52009/2010Programação Orientadapor Objectos22sd withdrawalalt: AtmInterface: Bank: Accountvalid = valid(card, pin)valid(card)withdraw(card, amount)withdraw(amount)[valid]Nenhuma das guardas anteriores.[else]
  • 24.
    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.)