Successfully reported this slideshow.

Programação Orientada por Objectos - Aula 6

1,561 views

Published on

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.

Published in: Education
  • Be the first to comment

  • Be the first to like this

Programação Orientada por Objectos - Aula 6

  1. 1. Aula 6<br />Introdução ao UML: <br /><ul><li> Noções básicas
  2. 2. Áreas, vistas e tipos de diagrama
  3. 3. Níveis de pormenor
  4. 4. Notações para classes, objectos e relações</li></li></ul><li>Na aula anterior…<br />Erros e casos excepcionais<br />Conceitos<br />Excepções <br />Erros de programação<br />Erros no ambiente de execução<br />Representação, criação, detecção e tratamento<br />Excepções Java<br />Asserções Java<br />Boas práticas (incluindo segurança)<br />2009/2010<br />Programação Orientada por Objectos<br />2<br />
  5. 5. UML (Unified Modeling Language)<br />Linguagem visual de modelação<br />Diagramas representam modelo do sistema<br />Ferramenta importante de comunicação<br />Autores originais<br />Grady Booch<br />Ivar Jacobson<br />James Rumbaugh<br />Normalização<br />OMG (Object Management Group)<br />http://www.uml.org/<br />Versão 2.2<br />2009/2010<br />Programação Orientada por Objectos<br />3<br />
  6. 6. Diagramas<br />Estruturais<br />Estáticos (de classes, de objectos)<br />De desenho (estrutura interna, colaboração, componentes)<br />Casos de uso<br />Dinâmicos<br />Máquinas de estados<br />De actividades<br />De interacção (de sequência, de comunicação)<br />Físicos (de implantação)<br />Gestão de modelos (de pacotes)<br />2009/2010<br />Programação Orientada por Objectos<br />4<br />
  7. 7. Diagramas<br />2009/2010<br />Programação Orientada por Objectos<br />5<br />Modelo<br />Área dinâmica<br />Área física<br />Área de gestão do modelo<br />Área estrutural<br />…<br />…<br />…<br />Vista de casos de uso<br />Vista estática<br />Vista de desenho<br />…<br />…<br />Diagrama de classes<br />Diagrama de objectos<br />
  8. 8. Diagrama de classes<br />Representa<br />Classes<br />Relações entre classes<br />Diagrama estrutural e estático<br />Domínio do problema<br />Conceitos <br />Modelo de análise<br />Domínio da solução<br />Classes<br />Modelo de desenho<br />2009/2010<br />Programação Orientada por Objectos<br />6<br />Classes e suas relações não mudam durante execução do programa.<br />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.<br />Compreensão do problema, análise, recolha de requisitos, elaboração de glossário do domínio.<br />Desenho, síntese, implementação. Possível geração automática de código.<br />
  9. 9. Diagrama de objectos<br />Representa<br />Objectos<br />Ligações entre objectos<br />Diagrama estrutural e estático<br />2009/2010<br />Programação Orientada por Objectos<br />7<br />Fotografia estática do estado do sistema em execução num dado instante de tempo.<br />Ajuda a compreender a estrutura dos dados do sistema. A perspectiva continua a não ser dinâmica: o sistema está parado no tempo.<br />
  10. 10. Classes<br />package mypackage;<br />…<br />public abstract <br />class MyAbstractClass {<br /> private Set<Type> set;<br /> private List<Type> list;<br /> private TreeSet<Type> <br />sortedSet;<br /> public static final Type constant = value;<br /> public MyAbstractClass() {…}<br /> private Type privateFunction(final Type parameter) {…}<br /> void packagePrivateProcedure() {…}<br /> protected abstract Type abstractProtectedFunction();<br /> public static void classPublicProcedure() {…}<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />8<br />Classe representada por caixa com compartimentos.<br />mypackage::MyAbstractClass<br />Nome<br />- set: Type [*]<br />- list: Type [*] {ordered, nonunique}<br />- sortedSet: Type [*] {sorted}<br />+ constant: Type = value {frozen}<br />Atributos<br />Operações<br />«constructor»+ MyAbstractClass()<br />- privateFunction(in parameter: Type): Type<br />~ packagePrivateProcedure()<br /># abstractProtectedFunction(): Type<br />+ classPublicProcedure()<br />
  11. 11. Classes<br />package mypackage;<br />…<br />public<br />class MyClass {<br /> private Set<Type> set;<br /> private List<Type> list;<br /> private TreeSet<Type> <br />sortedSet;<br /> public static final Type constant = value;<br /> public MyClass() {…}<br /> private Type privateFunction(final Type parameter) {…}<br /> void packagePrivateProcedure() {…}<br /> protected Type protectedFunction() {…}<br /> public static void classPublicProcedure() {…}<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />9<br />mypackage::MyClass<br />- set: Type [*]<br />- list: Type [*] {ordered, nonunique}<br />- sortedSet: Type [*] {sorted}<br />+ constant: Type = value {frozen}<br />«constructor»+ MyClass()<br />- privateFunction(in parameter: Type): Type<br />~ packagePrivateProcedure()<br /># protectedFunction(): Type<br />+ classPublicProcedure()<br />
  12. 12. Objectos<br />import mypackage;<br />…<br />public class MyClassTester {<br /> public static void main(final String[] arguments) {<br />MyClasslocalVariable = new MyClass();<br /> …<br /> }<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />10<br />localVariable : mypackage::MyClass<br />set = (value3, value1, value2)<br />list = (value1, value2, value1)<br />sortedSet = (value1, value2, value3)<br />constant = value<br />
  13. 13. Objectos<br />import mypackage;<br />…<br />public class MyClassTester {<br /> public static void main(final String[] arguments) {<br />MyClasslocalVariable = new MyClass();<br /> …<br /> }<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />11<br />: mypackage::MyClass<br />localVariable : «ref»mypackage::MyClass<br />set = (value3, value1, value2)<br />list = (value1, value2, value1)<br />sortedSet = (value1, value2, value3)<br />constant = value<br />
  14. 14. Classes: especialização<br />package mypackage;<br />…<br />public class MyDerivedClassextends MyClass {<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />12<br />mypackage::MyClass<br />mypackage::MyDerivedClass<br />Generalização<br />Generalização<br />
  15. 15. Objectos: especialização<br />import mypackage;<br />…<br />public class MyClassTester {<br /> public static void main(final String[] arguments) {<br />MyClasslocalVariable = new MyDerivedClass();<br /> …<br /> }<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />13<br />: mypackage::MyDerivedClass<br />localVariable : «ref» mypackage::MyClass<br />set = (value3, value1, value2)<br />list = (value1, value2, value1)<br />sortedSet = (value1, value2, value3)<br />constant = value<br />
  16. 16. Classes genéricas<br />package mypackage;<br />…<br />public class MyClass<T> {<br /> private Set<T> set;<br /> private List<T> list;<br /> private TreeSet<T> <br />sortedSet;<br /> public static final T constant = value;<br /> public MyClass() {…}<br /> private TprivateFunction(final T parameter) {…}<br /> void packagePrivateProcedure() {…}<br /> protected TprotectedFunction() {…}<br /> public static void classPublicProcedure() {…}<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />14<br />T<br />mypackage::MyClass<br />- set: T [*]<br />- list: T [*] {ordered, nonunique}<br />- sortedSet: T [*] {sorted}<br />+ constant: T = value {frozen}<br />«constructor»+ MyClass()<br />- privateFunction(in parameter: T): T<br />~ packagePrivateProcedure()<br /># protectedFunction(): T<br />+ classPublicProcedure()<br />
  17. 17. Classes genéricas: ligação (binding)<br />import mypackage;<br />…<br />public class MyClassTester {<br /> public static void main(final String[] arguments) {<br />MyClass<String>localVariable = …;<br /> …<br /> }<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />15<br />T<br />mypackage::MyClass<br />mypackage::MyClass<T -> String><br />- set: String [*]<br />- list: String [*] {ordered, nonunique}<br />- sortedSet: String [*] {sorted}<br />+ constant: String = value {frozen}<br />«bind» <T -> String><br />«constructor»+ MyClass()<br />- privateFunction(in parameter: String): String<br />~ packagePrivateProcedure()<br /># protectedFunction(): String<br />+ classPublicProcedure()<br />Ligação<br />(binding)<br />
  18. 18. Objectos<br />import mypackage;<br />…<br />public class MyClassTester {<br /> public static void main(final String[] arguments) {<br />MyClass<String> localVariable = new MyClass<String>();<br /> …<br /> }<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />16<br />: mypackage::MyClass<T -> String><br />set = (“string3”, “string1”, “string2”)<br />list = (“string1”, “string2”, “string1”)<br />sortedSet = (“string1”, “string2”, “string3”)<br />constant = “string”<br />
  19. 19. Pacotes<br />package mypackage;<br />…<br />public class MyClass {<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />17<br />mypackage::MyClass<br />
  20. 20. Pacotes<br />package mypackage;<br />…<br />public class MyClass {<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />18<br />mypackage<br />MyClass<br />
  21. 21. Pacotes<br />package mypackage;<br />…<br />public class MyClass {<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />19<br />mypackage<br />MyClass<br />Conteúdo<br />
  22. 22. Interfaces<br />package mypackage;<br />…<br />public interface MyInterface {<br /> Type operation();<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />20<br />mypackage<br />«interface»<br />MyInterface<br />operation(): Type<br />…<br />
  23. 23. Realização<br />Interfaces<br />package mypackage;<br />…<br />public interface MyInterface {<br /> Type operation();<br /> …<br />}<br />public <br />class MyClassimplements MyInterface {<br />@Override<br /> public Type operation() { … }<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />21<br />mypackage<br />«interface»<br />MyInterface<br />operation(): Type<br />…<br />MyClass<br />+ operation(): Type<br />…<br />
  24. 24. Realização<br />Interfaces<br />package mypackage;<br />…<br />public interface MyInterface {<br /> …<br />}<br />public <br />class MyClassimplements MyInterface {<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />22<br />mypackage<br />MyInterface<br />MyClass<br />
  25. 25. Utilização<br />Realização<br />Interfaces<br />package mypackage;<br />…<br />public interface MyInterface {<br /> …<br />}<br />public <br />class MyClass implements MyInterface {<br /> …<br />}<br />public class MyOtherClass {<br /> …<br /> public <br /> void method(final MyInterface object) {<br /> final Type variable =<br />object.operation();<br /> …<br /> }<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />23<br />mypackage<br />MyOtherClass<br />MyInterface<br />MyInterface<br />MyClass<br />
  26. 26. Utilização<br />Realização<br />Interfaces<br />package mypackage;<br />…<br />public interface MyInterface {<br /> …<br />}<br />public <br />class MyClass implements MyInterface {<br /> …<br />}<br />public class MyOtherClass {<br /> …<br /> public <br /> void method(final MyInterface object) {<br /> final Type variable =<br />object.operation();<br /> …<br /> }<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />24<br />mypackage<br />MyOtherClass<br />«interface»<br />MyInterface<br />MyClass<br />
  27. 27. Restrições<br />2009/2010<br />Programação Orientada por Objectos<br />25<br />Rational<br />Rational<br />{mdc(numerator, denominator} = 1 Ʌ 0 < denominator}<br />- numerator: int<br />- denominator: int<br />- numerator: int<br />- denominator: int<br />…<br />…<br />{mdc(numerator, denominator} = 1 Ʌ 0 < denominator}<br />
  28. 28. Principais relações entre classes<br />Generalização <br />Associação<br />Agregação<br />Composição<br />Abstracção<br />Realização<br />Ligação (binding)<br />Utilização<br />Invocação<br />Criação<br />2009/2010<br />Programação Orientada por Objectos<br />26<br />«bind» <…><br />«call»<br />«create»<br />
  29. 29. Utilização: criação<br />package vehicles;<br />public class Car {<br /> …<br />}<br />package vehicles;<br />public class Factory {<br /> …<br /> public Car newCar(…) {<br /> …<br /> return new Car(…);<br /> }<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />27<br />vehicles<br />Factory<br />«create»<br />Criação<br />(utilização)<br />Car<br />
  30. 30. Associação<br />2009/2010<br />Programação Orientada por Objectos<br />28<br />business<br />Company<br />Associação<br />Person<br />
  31. 31. Associação: nome<br />2009/2010<br />Programação Orientada por Objectos<br />29<br />business<br />Company<br />WorksFor<br />Associação<br />Person<br />
  32. 32. Associação: papeis<br />2009/2010<br />Programação Orientada por Objectos<br />30<br />business<br />Company<br />employer<br />WorksFor<br />Associação<br />employee<br />Person<br />
  33. 33. Associação: multiplicidade<br />2009/2010<br />Programação Orientada por Objectos<br />31<br />business<br />Company<br />employer<br />0..1<br />WorksFor<br />Associação<br />employee(s)<br />*<br />Person<br />
  34. 34. Multiplicidade<br />2009/2010<br />Programação Orientada por Objectos<br />32<br />
  35. 35. Associação: representação<br />package business;<br />public class Company {<br /> private<br /> Set<Person> employees;<br /> …<br />}<br />public class Person {<br /> private Company employer;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />33<br />business<br />Company<br />employer<br />0..1<br />WorksFor<br />Associação<br />employee(s)<br />*<br />Person<br />
  36. 36. Representação e multiplicidade<br />2009/2010<br />Programação Orientada por Objectos<br />34<br />
  37. 37. Associação: visibilidade<br />package business;<br />public class Company {<br />private<br /> Set<Person> employees;<br /> …<br />}<br />public class Person {<br />private Company employer;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />35<br />business<br />Company<br />- employer<br />0..1<br />WorksFor<br />Associação<br />- employee(s)<br />*<br />Person<br />
  38. 38. Associação: navegabilidade<br />package business;<br />public class Company {<br /> private<br /> Set<Person> employees;<br /> …<br />}<br />public class Person {<br /> private Company employer;<br /> …<br />}<br />2009/2010<br />Programação OrientadaporObjectos<br />36<br />business<br />Company<br />employer<br />0..1<br />WorksFor<br />Associação<br />- employee(s)<br />*<br />Person<br />
  39. 39. Associação<br />package vehicles;<br />public class Car {<br /> private Set<Wheel> wheels;<br /> …<br />}<br />public class Wheel {<br /> private Car car;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />37<br />vehicles<br />Car<br />- car<br />0..1<br />IsPartOf<br />- wheel(s)<br />3..6<br />Wheel<br />
  40. 40. Associação: agregação<br />package vehicles;<br />public class Car {<br /> @Parts<br /> private Set<Wheel> wheels;<br /> …<br />}<br />public class Wheel {<br /> @Whole<br /> private Car car;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />38<br />vehicles<br />Car<br />- car<br />0..1<br />IsPartOf<br />Agregação<br />- wheel(s)<br />3..6<br />Wheel<br />
  41. 41. Associação<br />package business;<br />public class Company {<br /> private Set<Department><br /> departments;<br /> …<br />}<br />public class Department {<br /> private Company company;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />39<br />business<br />Company<br />- company<br />1<br />IsPartOf<br />- department(s)<br />*<br />Departament<br />
  42. 42. Associação: composição<br />package business;<br />public class Company {<br /> @Components<br /> private Set<Department><br /> departments;<br /> …<br />}<br />public class Department {<br /> @Composite<br /> private Company company;<br /> …<br />}<br />2009/2010<br />Programação Orientada por Objectos<br />40<br />business<br />Company<br />- company<br />1<br />IsPartOf<br />Composição<br />- department(s)<br />*<br />Departament<br />
  43. 43. A reter<br />Tipos de diagrama UML<br />Notações para classes, objectos e relações<br />UML como forma de comunicação entre pessoas que precisam de se entender em relação<br />A um problema (análise)<br />A uma solução (desenho)<br />UML como modelo formal e possível fonte para geração automática de código (e.g., Java)<br />2009/2010<br />Programação Orientada por Objectos<br />41<br />
  44. 44. Referências<br />UML® ResourcePage (http://www.uml.org/)<br />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çõesnabiblioteca)<br />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)<br />2009/2010<br />Programação Orientada por Objectos<br />42<br />
  45. 45. A ler para as próximas aulas ...<br />Capítulos 1 a 10 e 16 do livro:<br />Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice Hall, 2008.ISBN: 978-0-13-605966-0<br />2009/2010<br />Programação Orientada por Objectos<br />43<br />
  46. 46. Sumário<br />Introdução ao UML<br />Noções<br />Áreas, vistas e tipos de diagrama<br />Níveis de pormenor<br />Notações para classes, objectos e relações<br />Notações para as relações mais importantes, incluindo a generalização, a associação, a agregação e a composição<br />2009/2010<br />Programação Orientada por Objectos<br />44<br />

×