programação orientada por objectos - aula 6

Post on 11-Jun-2015

1.340 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

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

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

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

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

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

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

… …

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.

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.

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

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()

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

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

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

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

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

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

)

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”

Programação Orientada por Objectos 17

Pacotes

package mypackage;

public class MyClass { …}

2009/2010

mypackage::MyClass

Programação Orientada por Objectos 18

Pacotes

package mypackage;

public class MyClass { …}

2009/2010

MyClass

mypackage

Programação Orientada por Objectos 19

Pacotes

package mypackage;

public class MyClass { …}

2009/2010

mypackage

Conteúdo

MyClass

Programação Orientada por Objectos 20

Interfaces

package mypackage;…

public interface MyInterface { Type operation(); …}

2009/2010

mypackage

«interface»MyInterface

operation(): Type…

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

Programação Orientada por Objectos 22

Realização

Interfaces

package mypackage;…

public interface MyInterface {

…}

public class MyClass implements MyInterface {

…}

2009/2010

mypackage

MyClass

MyInterface

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

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

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}

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»

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)

Associação

2009/2010 Programação Orientada por Objectos 28

business

Company

Person

Associação

Associação: nome

2009/2010 Programação Orientada por Objectos 29

business

Company

Person

WorksFor

Associação

Associação: papeis

2009/2010 Programação Orientada por Objectos 30

business

Company

Person

WorksFor

employer

employee

Associação

Associação: multiplicidade

2009/2010 Programação Orientada por Objectos 31

business

Company

Person

WorksFor

employer

employee(s)

0..1

*

Associação

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

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

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

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

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

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

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

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

*

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

*

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

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

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

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

top related