Programação Orientada por Objectos - Aula 7

Post on 11-Jun-2015

1.434 views 0 download

description

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.

Transcript of Programação Orientada por Objectos - Aula 7

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