12. Paradigmas da programação; Programação orientada por objectos; Pacotes – Fundamentos de Programação

  • Published on
    11-Jun-2015

  • View
    356

  • Download
    5

Embed Size (px)

DESCRIPTION

Fundamentos da Programao 12: Paradigmas da programao Programao orientada por objectos Modularizao em pacotes Apresentao 12 da unidade curricular de Fundamentos de Programao da Universidade Europeia. Alteraes de Manuel Menezes de Sequeira sobre verso original por vrios autores do DCTI do ISCTE-IUL, incluindo Lus Nunes, Ricardo Ribeiro, Andr Santos e o prprio Manuel Menezes de Sequeira.

Transcript

<ul><li> 1. Paradigmas da programao Programao orientada por objectos Modularizao em pacotes </li></ul> <p> 2. Enumeraes Instruo de seleco switch Gama limitada dos tipos inteiros 2013/2014 Fundamentos de Programao 2 3. 2013/2014 Fundamentos de Programao 3 4. Programao esparguete Programao estruturada Programao procedimental Programao baseada em objectos Programao orientada por objectos 2013/2014 Fundamentos de Programao 4 Progresso 5. Forma Instncias de tipos escalares ou arrays Instrues organizadas em estruturas de controlo Sem modularizao Melhorias Melhora estruturao do fluxo de controlo dos programas Possibilita raciocnio formal acerca de programas Aumenta legibilidade dos programas face ao passado (programao esparguete) 2013/2014 Fundamentos de Programao 5 Organizao do cdigo em mdulos, i.e., cpsulas com objectivos bem definidos contendo uma implementao oculta e expondo ao exterior uma interface. A modularizao favorece a abstraco. 6. Forma Instncias de tipos escalares ou arrays Instrues organizadas em estruturas de controlo Instrues e estruturas de controlo organizadas em rotinas Modularizao em rotinas Funes Devolvem resultado de um clculo Procedimentos Agem sobre o mundo, modificando-o Melhorias Possibilita encapsulamento Facilita reutilizao Melhora localizao de erros e facilita manuteno Possibilita maximizao da coeso e minimizao das ligaes 2013/2014 Fundamentos de Programao 6 7. Forma Instncias de tipos escalares, de arrays ou deTAD Instrues organizadas em estruturas de controlo Instrues e estruturas de controlo organizadas em rotinas Rotinas relacionadas organizadas emTAD Modularizao TAD Conjunto de dados e operaes Operaes Rotinas que operam sobre instncias deTAD Melhorias Melhora encapsulamento (dados e operaes relacionadas) Possibilita ocultao da informao Muda perspectiva sobre os problemas 2013/2014 Fundamentos de Programao 7 Ou programao centrada nos dados. Tipos abstractos de dados 8. Forma Instncias de classes (objectos), de tipos escalares, de arrays ou deTAD Instrues organizadas em estruturas de controlo Instrues e estruturas de controlo organizadas em rotinas Rotinas relacionadas organizadas emTAD Rotinas relacionadas organizadas em classes Modularizao Classes Modelos para objectos com um dado comportamento TAD Conjuntos de dados e operaes Operaes Rotinas que operam sobre instncias deTAD ou sobre objectos Mtodos Implementao das operaes Melhorias Introduz noes de extenso e especializao Muda drasticamente perspectiva sobre os problemas 2013/2014 Fundamentos de Programao 8 9. 2013/2014 Fundamentos de Programao 9 10. Assenta sobre Programao estruturada Controlo de fluxo Programao procedimental Rotinas Programao centrada nos dados TAD e operaes Vantagens Melhor modularizao Melhor encapsulamento Maior possibilidade de reutilizao Possibilidade de extenso e especializao Maior expressividade Maior flexibilidade Maior robustez 2013/2014 Fundamentos de Programao 10 11. Interface Operaes Implementadas por um ou mais mtodos Propriedades Podem ou no ser implementadas usando atributos Implementao Mtodos Implementao de operaes Mtodos auxiliares Usados pelos outros mtodos Atributos Dados que so parte da implementao 2013/2014 Fundamentos de Programao 11 12. Tudo (ou quase) so objectos Objectos tm responsabilidades, comportamentos e propriedades Organizao de programas reflecte realidade mas os objectos so personificados 2013/2014 Fundamentos de Programao 12 Na linguagem usada pelos programadores muito comum e til a prosopopeia. Por exemplo, depois pede-se a rapidez ao carro corresponde a car.speed() ou car.getSpeed(). 13. Anlise do problema Que objectos existem? Que responsabilidades tm? Como colaboram? Como classificar os objectos? Desenho da soluo Que classes definir? Que objectos construir? Que responsabilidades lhes atribuir? De que forma os fazer colaborar? 2013/2014 Fundamentos de Programao 13 14. Classes So tipos So modelo para objectos com caractersticas comuns Declaram-se ou definem-se Definem conjunto de possveis objectos So nomes comuns: humano, carro, Objectos So instncias de classes Constroem-se So nomes prprios: Manuel Silva, o carro do Manuel, 2013/2014 Fundamentos de Programao 14 15. Classes Favorecem abstraco Permitem encapsulamento Possibilitam reutilizao Objectos Representam entidades reais (e.g., carro) ou virtuais (e.g., compra) Tm identidade Tm estado observvel atravs da interface 2013/2014 Fundamentos de Programao 15 Consumidor s conhece interface. Implementao oculta. Por especializao ou por instanciao. 16. Tipos de referncia Classes de identidade ou referncia Identidade relevante Igualdade usualmente no relevante Classes de igualdade ou valor Identidade no relevante Igualdade relevante Tipos de valor Identidade no relevante Igualdade relevante 2013/2014 Fundamentos de Programao 16 E.g., classes Java. Tipos primitivos em Java. E.g., String, Rational, Point E.g., Person, Gang, Car 17. Definem caractersticas (propriedades e operaes) comuns a todas as instncias 2013/2014 Fundamentos de Programao 17 Car - licenseNumber : String - model : String - yearBuilt : int - lastInspectionDate : LocalDate + getLicenseNumber() : String + getModel() : String + getLastInspectionDate() : LocalDate + getYearAge() : int + getNextInspectionDate() : LocalDate + isInspected() : boolean + setInspectedToday() Propriedades Operao implementaointerface 18. Instncias de classe de referncia com identidade e com propriedades bem definidas 2013/2014 Fundamentos de Programao 18 johnsCar : Car licenseNumber = 00-AA-00 model =VW-GTI-TDI-SLK yearBuilt = 2005 lastInspectionDate = 2014-11-20 19. Operaes Parte da interface da classe So invocadas Mtodos Parte da implementao da classe So executados quando se invoca a sua operao Uma nica operao pode ser implementada por vrios mtodos 2013/2014 Fundamentos de Programao 19 Como? Usando polimorfismo de subtipos, que se ver mais tarde. 20. Inicializam instncias/objectos em construo Colocam instncias/objectos em estado inicial vlido, i.e., cumprindo a condio invariante de instncia 2013/2014 Fundamentos de Programao 20 21. Modificadoras Alteram estado do objecto (procedimentos) No modificadoras No alteram estado do objecto Inspectoras Devolvem propriedade do objecto e no tm efeitos laterais (funes) Alter-modificadoras Alteram estado do programa ou do seu ambiente (procedimentos) sem alterar estado do objecto 2013/2014 Fundamentos de Programao 21 22. Cada operao deve ter um objectivo (ou uma funo) nico e bem definido Operaes inspectoras Nome reflecte o que devolvem Outras operaes Nome reflecte aco realizada Uma operao no deve ser simultaneamente inspectora e modificadora (funo e procedimento) 2013/2014 Fundamentos de Programao 22 23. Classes so pseudo-objectos fbrica das suas instncias Pseudo-objectos fbricas tm caractersticas de classe Declarao de atributos e mtodos de classe: com static Boas prticas Evitar caractersticas de classe, em geral Usar para definir constantes Exemplo Math.PI 2013/2014 Fundamentos de Programao 23 Por oposio s caractersticas de instncia. 24. final Car johnsCar = new Car("00-AA-00", ); final Car janesCar = johnsCar; final Car fredsCar = new Car("01-35-AP", ); 2013/2014 Fundamentos de Programao 24 johnsCar, janesCar : Car licenseNumber = 00-AA-00 fredsCar : Car licenseNumber = 01-35-AP 25. final Car johnsCar = new Car("00-AA-00", ); final Car janesCar = johnsCar; final Car fredsCar = new Car("01-35-AP", ); 2013/2014 Fundamentos de Programao 25 johnsCar : ref Car : Car licenseNumber = 00-aa-00 : Car licenseNumber = 01-35-AP janesCar : ref Car fredsCar : ref Car Referncias: Objectos: 26. 2013/2014 Fundamentos de Programao 26 johnsCar : Car licenseNumber = 00-aa-00 model =VW-GTI-TDI-SLK yearBuilt = 2005 lastInspectionDate = 2013-11-20 Car - licenseNumber : String + getLicenseNumber() : String Nome da classe AtributosOperaes Acesso Nome do objecto Atributos Valores dos atributos 27. Classe varivel; varivel = null; Classe outraVarivel = null; Classe aindaOutraVarivel = new Classe(); 2013/2014 Fundamentos de Programao 27 Inicializao da referncia com o valor especial null, que indica que referncia no referencia qualquer objecto. Declarao da referncia varivel, no inicializada, capaz de referenciar objectos da classe Classe. Construo de um novo objecto e de uma referncia que o referencia. Construo de uma referncia com valor inicial nulo. Construodareferncia Ateno! Os tipos primitivos do Java (int, float, char, etc.) so tipos de valor. No h referncias para eles.As variveis declaradas so uma instncia do tipo primitivo. Por exemplo: int anInteger; anInteger = 10; int anotherInteger = 20; Construo do novo objecto Construodareferncia 28. Usa-se operador . (ponto) Objecto (caracterstica de instncia) refernciaParaObjecto.caracterstica Classe (caracterstica de classe) Classe.caracterstica 2013/2014 Fundamentos de Programao 28 Se a referncia for nula (null), lanada a excepo NullPointerException. Ou membros. 29. Tudo o que pode ser privado deve ser privado! Regras gerais Todos os atributos devem ser privados Os construtores so usualmente pblicos As operaes devem ser pblicas Os mtodos auxiliares devem ser privados 2013/2014 Fundamentos de Programao 29 As constantes, pelo contrrio, podem e muitas vezes devem ser pblicas. 30. Interface Operaes no privadas Constantes no privadas Implementao Mtodos privados Atributos privados Corpos dos mtodos Contrato Pr e ps-condies das operaes e mtodos Manual de utilizao Comentrios de documentao da classe Comentrios de documentao de cada caracterstica pblica 2013/2014 Fundamentos de Programao 30 no privado pblico etc. 31. Caractersticas ou membros podem ser private acesso apenas por outros membros da mesma classe package-private (sem qualificador) adicionalmente, acesso por membros de classes do mesmo pacote protected adicionalmente, acesso por membros de classes derivadas (a ver nas prximas aulas) public acesso universal 2013/2014 Fundamentos de Programao 31 Acessibilidadecrescente H promiscuidade entre objectos da mesma classe! Cuidado! Que isto? Prximo diapositivo 32. 2013/2014 Fundamentos de Programao 32 33. Pacote Pacote 2013/2014 Fundamentos de Programao 33 Classe Rotina Rotina Rotina Classe Rotina Rotina Rotina Classe Rotina Rotina Rotina Rotina Classe Rotina Rotina Classe Rotina Rotina Rotina Rotina 34. Conjuntos de classes com relao lgica forte entre si Exemplos java.util org.junit Convenes de nomes S minsculas Sem separao entre palavras Abreviaturas e siglas aceitveis Prefixo nome DNS invertido (e.g., pt.europeia) Elementos aps prefixo podem ser unidades organizacionais (e.g., pt.europeia.fp) 2013/2014 Fundamentos de Programao 34 35. Interface Classes pblicas Membros no privados de classes pblicas Implementao Para alm da implementao das classes todas as classes privadas de pacote (package- private) 2013/2014 Fundamentos de Programao 35 36. java lang util org junit omg pt europeia fp eda Hierarquia aberta No tm declarao isolada Cada ficheiro .java declara o pacote a que pertence 2013/2014 Fundamentos de Programao 36 package pt.europeia.fp public class Game { } Game.java package pt.europeia.fp public class Player { } Player.java 37. Relevante quanto a nomes Organizao lgica (como directrios) Menor coliso de nomes Irrelevante quanto a categorias acesso Pacote e subpacote so independentes Membros do subpacote no o so do pacote Membros do pacote no o so do subpacote 2013/2014 Fundamentos de Programao 37 38. 2013/2014 Fundamentos de Programao 38 The type top.AtTop is not visibleThe type top.bottom.AtBottom is not visible 39. Uma s classe pblica por ficheiro Classe pblica em ficheiro com mesmo nome Nmero arbitrrio de classes privadas de pacote (package-private) por ficheiro, mas Boa prtica: Uma s classe por ficheiro! 2013/2014 Fundamentos de Programao 39 40. Usualmente, hierarquia de pacotes corresponde uma hierarquia de directrios com os ficheiros correspondentes 2013/2014 Fundamentos de Programao 40 Depende da implementao do Java. No Eclipse (directrios/pastas) No Eclipse (pacotes) 41. Classes so modelos Objectos so instncias classes de referncia Em Java variveis no so instncias de classes, mas sim referncias para instncias de classes Tudo o que pode ser privado deve ser privado Classes devem organizar-se em pacotes 2013/2014 Fundamentos de Programao 41 42. Paradigmas da programao Programao orientada por objectos Modularizao em pacotes 2013/2014 Fundamentos de Programao 42 </p>