programação orientada por objectos - aula 6

44
Aula 6 Introdução ao UML: Noções básicas Áreas, vistas e tipos de diagrama Níveis de pormenor Notações para classes, objectos e relações

Upload: manuel-menezes-de-sequeira

Post on 11-Jun-2015

1.340 views

Category:

Education


0 download

DESCRIPTION

Aula teórica 6 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

Page 1: Programação Orientada por Objectos - Aula 6

Aula 6

Introdução ao UML: • Noções básicas• Áreas, vistas e tipos de diagrama• Níveis de pormenor• Notações para classes, objectos e relações

Page 2: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 2

Na aula anterior…

Erros e casos excepcionais Conceitos▪ Excepções ▪ Erros de programação▪ Erros no ambiente de execução

Representação, criação, detecção e tratamento▪ Excepções Java▪ Asserções Java

Boas práticas (incluindo segurança)2009/2010

Page 3: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 3

UML (Unified Modeling Language)

Linguagem visual de modelação Diagramas representam modelo do sistema Ferramenta importante de comunicação

Autores originais Grady Booch Ivar Jacobson James Rumbaugh

Normalização OMG (Object Management Group) http://www.uml.org/ Versão 2.2

2009/2010

Page 4: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 4

Diagramas

Estruturais Estáticos (de classes, de objectos) De desenho (estrutura interna, colaboração, componentes) Casos de uso

Dinâmicos Máquinas de estados De actividades De interacção (de sequência, de comunicação)

Físicos (de implantação)

Gestão de modelos (de pacotes)

2009/2010

Page 5: Programação Orientada por Objectos - Aula 6

Diagramas

2009/2010 Programação Orientada por Objectos 5

Modelo

Área dinâmic

a

Área físic

a

Vista de casos de

uso

Vista estática

Vista de

desenho

Área de gestão do modelo

…… …

Diagrama de classes

Diagrama de

objectos

Área estrutur

al

… …

Page 6: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 6

Diagrama de classes

Representa Classes Relações entre classes

Diagrama estrutural e estático

Domínio do problema Conceitos Modelo de análise

Domínio da solução Classes Modelo de desenho

2009/2010

Classes e suas relações não mudam durante execução do programa.

Modela a estrutura lógica do sistema. A perspectiva é não dinâmica: a evolução temporal do sistema em execução não é explícita.

Compreensão do problema, análise, recolha de requisitos, elaboração de glossário do domínio.

Desenho, síntese, implementação. Possível geração automática de código.

Page 7: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 7

Diagrama de objectos

Representa Objectos Ligações entre objectos

Diagrama estrutural e estático

2009/2010

Fotografia estática do estado do sistema em execução num dado instante de tempo.

Ajuda a compreender a estrutura dos dados do sistema. A perspectiva continua a não ser dinâmica: o sistema está parado no tempo.

Page 8: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 8

Classes

package mypackage;

public abstract class MyAbstractClass {

private Set<Type> set; private List<Type> list; private TreeSet<Type> sortedSet; public static final Type constant = value;

public MyAbstractClass() {…} private Type privateFunction(final Type parameter) {…} void packagePrivateProcedure() {…} protected abstract Type abstractProtectedFunction(); public static void classPublicProcedure() {…}}

2009/2010

mypackage ::MyAbstractClass- set: Type [*]- list: Type [*] {ordered, nonunique}- sortedSet: Type [*] {sorted}+ constant: Type = value {frozen}«constructor»+ MyAbstractClass()- privateFunction(in parameter: Type): Type

~ packagePrivateProcedure()# abstractProtectedFunction(): Type+ classPublicProcedure()

Classe representada por caixa com compartimentos.

Nome

Atributos

Operações

Page 9: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 9

Classes

package mypackage;

publicclass MyClass {

private Set<Type> set; private List<Type> list; private TreeSet<Type> sortedSet; public static final Type constant = value;

public MyClass() {…} private Type privateFunction(final Type parameter) {…} void packagePrivateProcedure() {…} protected Type protectedFunction() {…} public static void classPublicProcedure() {…}}

2009/2010

mypackage::MyClass- set: Type [*]- list: Type [*] {ordered, nonunique}- sortedSet: Type [*] {sorted}+ constant: Type = value {frozen}«constructor»+ MyClass()- privateFunction(in parameter: Type): Type

~ packagePrivateProcedure()# protectedFunction(): Type+ classPublicProcedure()

Page 10: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 10

Objectos

import mypackage;

public class MyClassTester {

public static void main(final String[] arguments) { MyClass localVariable = new MyClass(); … }

}

2009/2010

localVariable : mypackage::MyClassset = (value3, value1, value2)list = (value1, value2, value1)sortedSet = (value1, value2, value3)constant = value

Page 11: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 11

Objectos

import mypackage;

public class MyClassTester {

public static void main(final String[] arguments) { MyClass localVariable = new MyClass(); … }

}

2009/2010

: mypackage::MyClassset = (value3, value1, value2)list = (value1, value2, value1)sortedSet = (value1, value2, value3)constant = value

localVariable : «ref» mypackage::MyClass

Page 12: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 12

Classes: especialização

package mypackage;

public class MyDerivedClass extends MyClass { …}

2009/2010

mypackage::MyClass

mypackage::MyDerivedClass

Generalização

Generalização

Page 13: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 13

Objectos: especialização

import mypackage;

public class MyClassTester {

public static void main(final String[] arguments) { MyClass localVariable = new MyDerivedClass(); … }

}

2009/2010

: mypackage::MyDerivedClassset = (value3, value1, value2)list = (value1, value2, value1)sortedSet = (value1, value2, value3)constant = value

localVariable : «ref» mypackage::MyClass

Page 14: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 14

Classes genéricas

package mypackage;

public class MyClass<T> {

private Set<T> set; private List<T> list; private TreeSet<T> sortedSet; public static final T constant = value;

public MyClass() {…} private T privateFunction(final T parameter) {…} void packagePrivateProcedure() {…} protected T protectedFunction() {…} public static void classPublicProcedure() {…}}

2009/2010

mypackage::MyClass- set: T [*]- list: T [*] {ordered, nonunique}- sortedSet: T [*] {sorted}+ constant: T = value {frozen}«constructor»+ MyClass()- privateFunction(in parameter: T): T~ packagePrivateProcedure()# protectedFunction(): T+ classPublicProcedure()

T

Page 15: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 15

Classes genéricas: ligação (binding)

import mypackage;

public class MyClassTester {

public static void main(final String[] arguments) { MyClass<String> localVariable = …; … }

}

2009/2010

mypackage::MyClass<T → String>- set: String [*]- list: String [*] {ordered, nonunique}- sortedSet: String [*] {sorted}+ constant: String = value {frozen}«constructor»+ MyClass()- privateFunction(in parameter: String): String

~ packagePrivateProcedure()# protectedFunction(): String+ classPublicProcedure()

mypackage::MyClassT

«bind» <T → String>Ligação(binding

)

Page 16: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 16

Objectos

import mypackage;

public class MyClassTester {

public static void main(final String[] arguments) { MyClass<String> localVariable = new MyClass<String>(); … }

}

2009/2010

: mypackage::MyClass<T → String>set = (“string3”, “string1”, “string2”)list = (“string1”, “string2”, “string1”)sortedSet = (“string1”, “string2”, “string3”)constant = “string”

Page 17: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 17

Pacotes

package mypackage;

public class MyClass { …}

2009/2010

mypackage::MyClass

Page 18: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 18

Pacotes

package mypackage;

public class MyClass { …}

2009/2010

MyClass

mypackage

Page 19: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 19

Pacotes

package mypackage;

public class MyClass { …}

2009/2010

mypackage

Conteúdo

MyClass

Page 20: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 20

Interfaces

package mypackage;…

public interface MyInterface { Type operation(); …}

2009/2010

mypackage

«interface»MyInterface

operation(): Type…

Page 21: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 21

Realização

Interfaces

package mypackage;…

public interface MyInterface { Type operation(); …}

public class MyClass implements MyInterface { @Override public Type operation() { … } …}

2009/2010

mypackage

«interface»MyInterface

operation(): Type…

MyClass

+ operation(): Type

Page 22: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 22

Realização

Interfaces

package mypackage;…

public interface MyInterface {

…}

public class MyClass implements MyInterface {

…}

2009/2010

mypackage

MyClass

MyInterface

Page 23: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 23

Utilização

Realização

Interfaces

package mypackage;…

public interface MyInterface {

…}

public class MyClass implements MyInterface {

…}

public class MyOtherClass { … public void method(final MyInterface object) { final Type variable = object.operation(); … } …}

2009/2010

mypackage

MyClass

MyOtherClass

MyInterface

MyInterface

Page 24: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 24

Utilização

Realização

Interfaces

package mypackage;…

public interface MyInterface {

…}

public class MyClass implements MyInterface {

…}

public class MyOtherClass { … public void method(final MyInterface object) { final Type variable = object.operation(); … } …}

2009/2010

mypackage

MyClass

MyOtherClass

«interface»MyInterface

Page 25: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 25

Restrições

2009/2010

Rational

{mdc(numerator, denominator} = 1 Ʌ 0 < denominator}- numerator: int- denominator: int…

Rational

- numerator: int- denominator: int

{mdc(numerator, denominator} = 1 Ʌ 0 < denominator}

Page 26: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 26

Principais relações entre classes Generalização

Associação Agregação Composição

Abstracção Realização

Ligação (binding)

Utilização Invocação Criação

2009/2010

«bind» <…>

«call»

«create»

Page 27: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 27

Utilização: criação

package vehicles;

public class Car { …}

package vehicles;

public class Factory { …

public Car newCar(…) { … return new Car(…); }

…}

2009/2010

Factory

Car

«create»

vehicles

Criação(utilização)

Page 28: Programação Orientada por Objectos - Aula 6

Associação

2009/2010 Programação Orientada por Objectos 28

business

Company

Person

Associação

Page 29: Programação Orientada por Objectos - Aula 6

Associação: nome

2009/2010 Programação Orientada por Objectos 29

business

Company

Person

WorksFor

Associação

Page 30: Programação Orientada por Objectos - Aula 6

Associação: papeis

2009/2010 Programação Orientada por Objectos 30

business

Company

Person

WorksFor

employer

employee

Associação

Page 31: Programação Orientada por Objectos - Aula 6

Associação: multiplicidade

2009/2010 Programação Orientada por Objectos 31

business

Company

Person

WorksFor

employer

employee(s)

0..1

*

Associação

Page 32: Programação Orientada por Objectos - Aula 6

Multiplicidade

Notação Significado

0..1 Nenhum ou um.Opcional.

1..11

Exactamente um.Obrigatório.

0..n De zero a n.

0..**

Arbitrário.Qualquer.

n..nn

Exactamente n.

1..* Pelo menos 1.

2009/2010 Programação Orientada por Objectos 32

Page 33: Programação Orientada por Objectos - Aula 6

Associação: representaçãopackage business;

public class Company { private Set<Person> employees;

…}

public class Person { private Company employer;

…}

2009/2010 Programação Orientada por Objectos 33

business

Company

Person

WorksFor

employer

employee(s)

0..1

*

Associação

Page 34: Programação Orientada por Objectos - Aula 6

Representação e multiplicidadeNotação

Significado Representação

0..1 Nenhum ou um.Opcional.

Atributo referência (possivelmente nulo).

1..11

Exactamente um.Obrigatório.

Atributo (se referência, não nulo). Atenção ao construtor!

0..n De zero a n. Colecção (não nula) de elementos (não nulos).

0..**

Arbitrário.Qualquer.

Colecção (não nula) de elementos (não nulos).

n..nn

Exactamente n.

Matriz (não nula) com n elementos (não nulos). Atenção ao construtor!

1..* Pelo menos 1. Colecção (não nula) de elementos (não nulos). Atenção ao construtor!

2009/2010 Programação Orientada por Objectos 34

Page 35: Programação Orientada por Objectos - Aula 6

Associação: visibilidade

package business;

public class Company { private Set<Person> employees;

…}

public class Person { private Company employer;

…}

2009/2010 Programação Orientada por Objectos 35

business

Company

Person

WorksFor

- employer

- employee(s)

0..1

*

Associação

Page 36: Programação Orientada por Objectos - Aula 6

Associação: navegabilidadepackage business;

public class Company { private Set<Person> employees;

…}

public class Person { private Company employer;

…}

2009/2010 Programação Orientada por Objectos 36

business

Company

Person

WorksFor

employer

- employee(s)

0..1

*

Associação

Page 37: Programação Orientada por Objectos - Aula 6

Associação

package vehicles;

public class Car {

private Set<Wheel> wheels;

…}

public class Wheel {

private Car car;

…}

2009/2010 Programação Orientada por Objectos 37

vehicles

Car

Wheel

IsPartOf

- car

- wheel(s)

0..1

3..6

Page 38: Programação Orientada por Objectos - Aula 6

Associação: agregação

package vehicles;

public class Car { @Parts private Set<Wheel> wheels;

…}

public class Wheel { @Whole private Car car;

…}

2009/2010 Programação Orientada por Objectos 38

vehicles

Car

Wheel

Agregação

IsPartOf

- car

- wheel(s)

0..1

3..6

Page 39: Programação Orientada por Objectos - Aula 6

Associação

package business;

public class Company {

private Set<Department> departments; …}

public class Department {

private Company company; …}

2009/2010 Programação Orientada por Objectos 39

business

Company

Departament

IsPartOf

- company

- department(s)

1

*

Page 40: Programação Orientada por Objectos - Aula 6

Associação: composição

package business;

public class Company { @Components private Set<Department> departments; …}

public class Department { @Composite private Company company; …}

2009/2010 Programação Orientada por Objectos 40

business

Company

Departament

Composição

IsPartOf

- company

- department(s)

1

*

Page 41: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 41

A reter

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 42: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 42

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 43: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 43

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 44: Programação Orientada por Objectos - Aula 6

Programação Orientada por Objectos 44

Sumário

Introdução ao UML Noções Áreas, vistas e tipos de diagrama Níveis de pormenor Notações para classes, objectos e

relações Notações para as relações mais

importantes, incluindo a generalização, a associação, a agregação e a composição

2009/2010