programação orientada por objectos - aula 6
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/28.jpg)
Associação
2009/2010 Programação Orientada por Objectos 28
business
Company
Person
Associação
![Page 29: Programação Orientada por Objectos - Aula 6](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/37.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/38.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/40.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/42.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/43.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062513/5579a678d8b42ac1148b4b26/html5/thumbnails/44.jpg)
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