Programação Orientada por Objectos - Aula 7
-
Upload
manuel-menezes-de-sequeira -
Category
Education
-
view
1.434 -
download
0
description
Transcript of Programação Orientada por Objectos - Aula 7
![Page 1: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/1.jpg)
Aula 7
Introdução ao UML:• Ligações como instâncias de associações• Multiplicidade de classes (solitões e classes-pacote)• Diagramas de sequência
![Page 2: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/2.jpg)
Programação Orientada por Objectos 2
Na aula anterior…
Tipos de diagrama UML
Notações para classes, objectos e relações
UML como forma de comunicação entre pessoas que precisam de se entender em relação A 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/2010
![Page 3: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/3.jpg)
Associação
package airtravel;
public class Person { …}
public class Flight {
private Set<Person> passengers;
…}
2009/2010 Programação Orientada por Objectos 3
airtravel
Person
Flight
Carries
- passenger(s)*
*
Associação
![Page 4: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/4.jpg)
Ligação
2009/2010 Programação Orientada por Objectos 4
airtravel
Person
Flight
Carries
- passenger(s)*
*
Associação
tp344: Flight
john: Person
jim: Person
janet: Person
Carries
Carries
Carries
- passenger
- passenger
- passengerLigações
![Page 5: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/5.jpg)
Associação: agregação
package vehicles;
public class Car {
private Set<Wheel> wheels;
…}
public class Wheel {
private Car car;
…}
2009/2010 Programação Orientada por Objectos 5
vehicles
Car
Wheel
Agregação
IsPartOf
- car
- wheel(s)
0..1
3..6
![Page 6: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/6.jpg)
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
Departament
Composição
IsPartOf
- company
- department(s)
1
*
![Page 7: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/7.jpg)
Associação
E os lugares?
2009/2010 Programação Orientada por Objectos 7
airtravel
Person
Flight
Carries
- passenger(s)*
*
Associação
![Page 8: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/8.jpg)
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
Flight
Carries
- passenger(s)0..1
*
Associação qualificada
seat: Seat
![Page 9: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/9.jpg)
Associação
E características especiais, como a dieta pretendida?
2009/2010 Programação Orientada por Objectos 9
airtravel
Person
Flight
Carries
- passenger(s)*
*
Associação
![Page 10: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/10.jpg)
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
Flight
Carries
- passenger(s)*
*
Classeassociativa
diet: Diet
![Page 11: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/11.jpg)
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
Flight
Carries
- passenger(s)*
*
Classeassociativa
diet: DietCarries
![Page 12: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/12.jpg)
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
Flight
- passenger(s)*
*
Classeassociativa
diet: DietCarries
![Page 13: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/13.jpg)
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
MyClass n..m
![Page 14: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/14.jpg)
Solitão (singleton)
package mypackage;
public final class MySingleton {
private static final MySingleton INSTANCE = new MySingleton();
private MySingleton() { assert INSTANCE == null : …; }
public static MySingleton getInstance() { return INSTANCE; }
…}
2009/2010 Programação Orientada por Objectos 14
MySingleton 1
![Page 15: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/15.jpg)
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) {…} …
}
Math 0
![Page 16: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/16.jpg)
Diagramas
2009/2010 Programação Orientada por Objectos 16
Modelo
Área dinâmic
a
Área físic
a
Área de gestão do modelo
…… …
Vista de interacç
ão
Diagrama de
sequência
Área estrutur
al
…
![Page 17: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/17.jpg)
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
![Page 18: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/18.jpg)
Exemplo 1
2009/2010 Programação Orientada por Objectos 18
: AtmInterface
valid = valid(card, pin)
: Bank : Account
sd withdrawal
Que falta aqui?
withdraw(card, amount)withdraw(amount)
Que falta aqui?
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.
Linha de vida.
Linha de vida activa.
Invocação.
Retorno.
sd = sequence diagramWithdrawal é o nome da interacção.
![Page 19: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/19.jpg)
Exemplo 2
2009/2010 Programação Orientada por Objectos 19
: AtmInterface
valid = valid(card, pin)
: Bank : Account
sd withdrawal
withdraw(card, amount)withdraw(amount)
valid(card)
Reactivação do objecto.
Invocação recursiva.
![Page 20: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/20.jpg)
Exemplo 3
2009/2010 Programação Orientada por Objectos 20
: AtmInterface
valid = valid(card, pin)
: Bank : Account
sd withdrawal
[valid]withdraw(card, amount)
withdraw(amount)
valid(card)
Invocação dependente de guarda.
![Page 21: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/21.jpg)
Exemplo 4
2009/2010 Programação Orientada por Objectos 21
: AtmInterface
valid = valid(card, pin)
: Bank : Account
sd withdrawal
withdraw(card, amount)withdraw(amount)
valid(card)
alt
[valid]
[¬vali
d]
Fragmentos alternativos.
Guarda de fragmento.
![Page 22: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/22.jpg)
Exemplo 5
2009/2010 Programação Orientada por Objectos 22
: AtmInterface
valid = valid(card, pin)
: Bank : Account
sd withdrawal
withdraw(card, amount)withdraw(amount)
valid(card)
alt
[valid]
[else]
Nenhuma das guardas anteriores.
![Page 23: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/23.jpg)
Exemplo 6
2009/2010 Programação Orientada por Objectos 23
: AtmInterface
valid = valid(card, pin)
: Bank : Account
sd withdrawal
withdraw(card, amount)withdraw(amount)
valid(card)
opt
[valid]
Quando há apenas um fragmento.
![Page 24: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/24.jpg)
Exemplo 7
2009/2010 Programação Orientada por Objectos 24
: AtmInterface
valid = valid(card, pin)
: Bank : Account
sd withdrawal
withdraw(card, amount)withdraw(amount)
valid(card)
opt
[valid]
loop(1, 3)[¬valid
]Ciclo com pelo menos uma e no máximo três iterações.
Guarda do ciclo.
![Page 25: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/25.jpg)
Programação Orientada por Objectos 25
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
![Page 26: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/26.jpg)
Programação Orientada por Objectos 26
Referências
UML® Resource Page (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ções na biblioteca)
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
![Page 27: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/27.jpg)
Programação Orientada por Objectos 27
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
![Page 28: Programação Orientada por Objectos - Aula 7](https://reader033.fdocument.pub/reader033/viewer/2022052620/5579a675d8b42ac1148b4b24/html5/thumbnails/28.jpg)
Programação Orientada por Objectos 28
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