Programação Orientada por Objectos - Aula 6
-
Upload
manuel-menezes-de-sequeira -
Category
Education
-
view
1.340 -
download
0
description
Transcript of 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
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