Programação Orientada por Objectos - Aula 7

1.712 visualizações

Publicada em

Aula teórica 7 da unidade (disciplina) de Programação Orientada por Objectivos para os cursos de LIGE, LEI e LETI no ISCTE-IUL no 2.º semestre do ano lectivo de 2009/2010.

Publicada em: Educação
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.712
No SlideShare
0
A partir de incorporações
0
Número de incorporações
38
Ações
Compartilhamentos
0
Downloads
102
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • 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.)
  • Programação Orientada por Objectos - Aula 7

    1. 1. Aula 7<br />Introdução ao UML:<br /><ul><li> Ligações como instâncias de associações
    2. 2. Multiplicidade de classes (solitões e classes-pacote)
    3. 3. Diagramas de sequência</li></li></ul><li>Na aula anterior…<br />Tipos de diagrama UML<br />Notações para classes, objectos e relações<br />UML como forma de comunicação entre pessoas que precisam de se entender em relação<br />A um problema (análise)<br />A uma solução (desenho)<br />UML como modelo formal e possível fonte para geração automática de código (e.g., Java)<br />2009/2010<br />Programação Orientada por Objectos<br />2<br />
    4. 4. Associação<br />package airtravel;<br />public class Person {<br /> …<br />}<br />public class Flight {<br /> private Set<Person><br /> passengers;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />3<br />airtravel<br />Person<br />- passenger(s)<br />*<br />Carries<br />Associação<br />*<br />Flight<br />
    5. 5. Ligação<br />2009/2010<br />Programação Orientada por Objectos<br />4<br />airtravel<br />john: Person<br />Person<br />- passenger(s)<br />*<br />- passenger<br />Carries<br />Carries<br />tp344: Flight<br />jim: Person<br />Carries<br />Ligações<br />Associação<br />- passenger<br />Carries<br />- passenger<br />*<br />janet: Person<br />Flight<br />
    6. 6. Associação: agregação<br />package vehicles;<br />public class Car {<br /> private Set<Wheel> wheels;<br /> …<br />}<br />public class Wheel {<br /> private Car car;<br /> …<br />}<br />2009/2010<br />Programação OrientadaporObjectos<br />5<br />vehicles<br />Car<br />- car<br />0..1<br />IsPartOf<br />Agregação<br />- wheel(s)<br />3..6<br />Wheel<br />
    7. 7. Associação: composição<br />package business;<br />public class Company {<br /> private Set<Department><br /> departments;<br /> …<br />}<br />public class Department {<br /> private Company company;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />6<br />business<br />Company<br />- company<br />1<br />IsPartOf<br />Composição<br />- department(s)<br />*<br />Departament<br />
    8. 8. Associação<br />E os lugares?<br />2009/2010<br />Programação Orientada por Objectos<br />7<br />airtravel<br />Person<br />- passenger(s)<br />*<br />Carries<br />Associação<br />*<br />Flight<br />
    9. 9. Associação qualificada<br />package airtravel;<br />public class Person {<br /> …<br />}<br />public class Flight {<br /> private Map<Seat, Person> <br /> passengers;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />8<br />airtravel<br />Person<br />- passenger(s)<br />0..1<br />Carries<br />Associação qualificada<br />*<br />seat: Seat<br />Flight<br />
    10. 10. Associação<br />E características especiais, como a dieta pretendida?<br />2009/2010<br />Programação Orientada por Objectos<br />9<br />airtravel<br />Person<br />- passenger(s)<br />*<br />Carries<br />Associação<br />*<br />Flight<br />
    11. 11. Classe associativa<br />package airtravel;<br />public class Person {<br /> …<br />}<br />public class Carries {<br /> private Person passenger;<br /> private Diet diet;<br /> …<br />}<br />public class Flight {<br /> private Set<Carries> <br /> passengers;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />10<br />airtravel<br />Person<br />- passenger(s)<br />*<br />Carries<br />diet: Diet<br />Classe<br />associativa<br />*<br />Flight<br />
    12. 12. Classe associativa<br />package airtravel;<br />public class Person {<br /> …<br />}<br />public class Carries {<br /> private Person passenger;<br /> private Diet diet;<br /> …<br />}<br />public class Flight {<br /> private Set<Carries> <br /> passengers;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />11<br />airtravel<br />Person<br />- passenger(s)<br />*<br />Carries<br />Carries<br />diet: Diet<br />Classe<br />associativa<br />*<br />Flight<br />
    13. 13. Classe associativa<br />package airtravel;<br />public class Person {<br /> …<br />}<br />public class Carries {<br /> private Person passenger;<br /> private Diet diet;<br /> …<br />}<br />public class Flight {<br /> private Set<Carries> <br /> passengers;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />12<br />airtravel<br />Person<br />- passenger(s)<br />*<br />Carries<br />diet: Diet<br />Classe<br />associativa<br />*<br />Flight<br />
    14. 14. Multiplicidade de classes<br />Pode restringir-se número de instâncias simultâneas de classe no sistema<br />Implementação em Java recorre a truques<br />2009/2010<br />Programação Orientada por Objectos<br />13<br />n..m<br />MyClass<br />
    15. 15. Solitão (singleton)<br />package mypackage;<br />public final class MySingleton {<br />private static final MySingleton INSTANCE =<br /> new MySingleton();<br />privateMySingleton() {<br />assert INSTANCE == null : …;<br /> }<br />public static MySingletongetInstance() {<br /> return INSTANCE;<br /> }<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />14<br />1<br />MySingleton<br />
    16. 16. Classe-pacote<br />2009/2010<br />Programação Orientada por Objectos<br />15<br />package java.lang;<br />public final class Math {<br />private Math() {<br />assert false : …;<br /> }<br /> public static final double PI = 3.14…;<br /> public static double sin(final double angle) {…}<br /> public static double cos(final double angle) {…}<br /> …<br />}<br />0<br />Math<br />
    17. 17. Diagramas<br />Modelo<br />Área dinâmica<br />Área física<br />Área estrutural<br />Área de gestão do modelo<br />…<br />…<br />…<br />Vista de interacção<br />…<br />Diagrama de sequência<br />2009/2010<br />Programação Orientada por Objectos<br />16<br />
    18. 18. Diagramas de sequência<br />Mostram interacções entre entidades numa sequência temporal<br />Mostram<br />entidades envolvidas numa interacção<br />sequências de mensagens trocadas entre entidades<br />Entidades podem ser<br />actores e sistema trocando mensagens (análise; domínio do problema)<br />objectos invocando operações (desenho; domínio da solução)<br />2009/2010<br />Programação Orientada por Objectos<br />17<br />
    19. 19. Exemplo 1<br />2009/2010<br />Programação Orientada por Objectos<br />18<br />A vida dos objectos, neste caso, prolonga-se para além dos limites do diagrama.<br />No topo do diagrama surgem os objectos pré-existentes envolvidos na interacção.<br />sd = sequencediagram<br />Withdrawal é o nome da interacção.<br />sd withdrawal<br />: AtmInterface<br />: Bank<br />: Account<br />valid = valid(card, pin)<br />Linha de vida.<br />Que falta aqui?<br />Que falta aqui?<br />withdraw(card, amount)<br />withdraw(amount)<br />Invocação.<br />Linha de vida activa.<br />Retorno.<br />
    20. 20. Exemplo 2<br />2009/2010<br />Programação Orientada por Objectos<br />19<br />sd withdrawal<br />: AtmInterface<br />: Bank<br />: Account<br />valid = valid(card, pin)<br />valid(card)<br />Invocação recursiva.<br />Reactivação do objecto.<br />withdraw(card, amount)<br />withdraw(amount)<br />
    21. 21. Exemplo 3<br />2009/2010<br />Programação Orientada por Objectos<br />20<br />sd withdrawal<br />: AtmInterface<br />: Bank<br />: Account<br />valid = valid(card, pin)<br />valid(card)<br />Invocação dependente de guarda.<br />[valid]<br />withdraw(card, amount)<br />withdraw(amount)<br />
    22. 22. Exemplo 4<br />2009/2010<br />Programação Orientada por Objectos<br />21<br />sd withdrawal<br />alt<br />: AtmInterface<br />: Bank<br />: Account<br />valid = valid(card, pin)<br />valid(card)<br />Fragmentos alternativos.<br />withdraw(card, amount)<br />withdraw(amount)<br />[valid]<br />Guarda de fragmento.<br />[¬valid]<br />
    23. 23. Exemplo 5<br />2009/2010<br />Programação Orientada por Objectos<br />22<br />sd withdrawal<br />alt<br />: AtmInterface<br />: Bank<br />: Account<br />valid = valid(card, pin)<br />valid(card)<br />withdraw(card, amount)<br />withdraw(amount)<br />[valid]<br />Nenhuma das guardas anteriores.<br />[else]<br />
    24. 24. Exemplo 6<br />2009/2010<br />Programação Orientada por Objectos<br />23<br />sd withdrawal<br />opt<br />: AtmInterface<br />: Bank<br />: Account<br />valid = valid(card, pin)<br />valid(card)<br />Quando há apenas um fragmento.<br />withdraw(card, amount)<br />withdraw(amount)<br />[valid]<br />
    25. 25. Exemplo 7<br />2009/2010<br />Programação Orientada por Objectos<br />24<br />sd withdrawal<br />opt<br />loop(1, 3)<br />: AtmInterface<br />: Bank<br />: Account<br />valid = valid(card, pin)<br />valid(card)<br />[¬valid]<br />Ciclo com pelo menos uma e no máximo três iterações.<br />Guarda do ciclo.<br />withdraw(card, amount)<br />withdraw(amount)<br />[valid]<br />
    26. 26. A reter<br />Ligações enquanto instâncias de associações<br />Casos típicos de multiplicidade de classes<br />Solitão<br />Classe-pacote<br />Diagramas de sequência<br />Objectos<br />Linhas de vida<br />Invocações<br />Retornos<br />Alternativas, opções e ciclos<br />2009/2010<br />Programação Orientada por Objectos<br />25<br />
    27. 27. Referências<br />UML® ResourcePage (http://www.uml.org/)<br />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)<br />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)<br />2009/2010<br />Programação Orientada por Objectos<br />26<br />
    28. 28. A ler para as próximas aulas ...<br />Capítulos 1 a 10 e 16 do livro:<br />Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice Hall, 2008.ISBN: 978-0-13-605966-0<br />2009/2010<br />Programação Orientada por Objectos<br />27<br />
    29. 29. Sumário<br />Introdução ao UML<br />Ligações como instâncias de associações<br />Multiplicidade de classes (solitões e classes-pacote)<br />Diagramas de sequência<br />2009/2010<br />Programação Orientada por Objectos<br />28<br />

    ×