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
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
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
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
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
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
*
Associação
E os lugares?
2009/2010 Programação Orientada por Objectos 7
airtravel
Person
Flight
Carries
- passenger(s)*
*
Associação
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
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
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
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
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
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
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
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
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
…
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
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.
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.
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.
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.
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.
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.
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.
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
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
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
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
Top Related