Programação Orientada por Objectos - Aula 1

  • Published on
    04-Jul-2015

  • View
    5.124

  • Download
    2

Embed Size (px)

DESCRIPTION

Aula terica 1 da unidade (disciplina) de Programao Orientada por Objectos dos cursos de LIGE, LEI e LETI no ISCTE-IUL no 2. semestre do ano lectivo de 2009/2010.

Transcript

<ul><li> 1. Aula 1<br />Introduo programao orientada por objectos<br />Classes, objectos e referncias (reviso)<br />Modularizao em pacotes<br />Organizao em ficheiros e directrios<br /></li></ul> <p> 2. Programao estruturada<br />Forma<br />Instncias de tipos escalares ou matriciais<br />Instrues organizadas em estruturas de controlo<br />Sem modularizao<br />Melhorias<br />Melhora estruturao do fluxo de controlo dos programas<br />Possibilita raciocnio formal acerca de programas<br />Aumenta legibilidade dos programas face ao passado (programao esparguete)<br />2008/2009<br />Programao Orientada por Objectos<br />2<br />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.<br /> 3. Programao procedimental<br />Forma<br />Instncias de tipos escalares ou vectoriais<br />Instrues organizadas em estruturas de controlo<br />Instrues e estruturas de controlo organizadas em rotinas<br />Modularizao em rotinas<br />Funes Devolvem resultado de um clculo<br />Procedimentos Agem sobre dados, modificando-os<br />Melhorias<br />Possibilita encapsulamento<br />Facilita reutilizao<br />Melhora localizao de erros e facilita manuteno<br />Possibilita maximizao da coeso e minimizao das ligaes<br />2010-03-30<br />Programao Orientada para Objectos<br />3<br /> 4. Programao baseada em objectos ou centrada nos dados<br />Forma<br />Instncias de tipos escalares ou vectoriais, ou de TAD (tipos abstractos de dados)<br />Instrues organizadas em estruturas de controlo<br />Instrues e estruturas de controlo organizadas em rotinas<br />Rotinas relacionadas organizadas em TAD<br />Modularizao<br />TAD Conjunto de dados e operaes<br />Operaes Rotinas que operam sobre instncias de TAD<br />Melhorias<br />Melhora encapsulamento (dados e operaes relacionadas)<br />Possibilita ocultao dos dados<br />Muda perspectiva sobre os problemas<br />2008/2009<br />Programao Orientada por Objectos<br />4<br /> 5. Programao orientada por objectos<br />Forma<br />Instncias de classes (objectos), de tipos escalares ou vectoriais, ou de TAD (tipos abstractos de dados)<br />Instrues organizadas em estruturas de controlo<br />Instrues e estruturas de controlo organizadas em rotinas<br />Rotinas relacionadas organizadas em TAD<br />Operaes relacionadas organizadas em classes<br />Modularizao<br />Classes Modelos para objectos com um dado comportamento<br />TAD Conjunto de dados e operaes<br />Operaes Rotinas que operam sobre instncias de TAD<br />Mtodos Implementao das operaes<br />Melhorias<br />Introduz noes de extenso e especializao<br />Muda drasticamente perspectiva sobre os problemas<br />2008/2009<br />Programao Orientada por Objectos<br />5<br /> 6. Programao orientada por objectos: classes<br />Paradigmas usados<br />Programao estruturada Controlo de fluxo<br />Programao procedimental Rotinas<br />Programao centrada nos dados TAD e operaes<br />Vantagens<br />Melhor modularizao<br />Melhor encapsulamento<br />Maior possibilidade de reutilizao<br />Possibilidade de extenso e especializao<br />Maior expressividade<br />Maior flexibilidade<br />Maior robustez<br />2008/2009<br />Programao Orientada por Objectos<br />6<br /> 7. Programao orientada por objectos: encapsulamento<br />Interface:<br />Operaes Implementadas em um ou mais mtodos<br />Propriedades Podem ou no ser implementadas usando atributos<br />Implementao<br />Mtodos Implementao de operaes<br />Atributos Dados que fazem parte da implementao da classe<br />2008/2009<br />Programao Orientada por Objectos<br />7<br /> 8. Programao orientada por objectos: abordagem<br />Tudo (ou quase) so objectos<br />Objectos tm responsabilidades, comportamentos e propriedades<br />Organizao de programas reflecte realidade<br />mas os objectos so personalizados<br />2008/2009<br />Programao Orientada por Objectos<br />8<br />Na linguagem usada pelos programadores muito comum e til a prosopopeia. Por exemplo, depois pede-se o nome ao aluno corresponde a student.name() ou student.getName().<br /> 9. Programao orientada por objectos: anlise e desenho<br />Anlise do problema<br />Que objectos existem?<br />Que responsabilidades tm?<br />Como colaboram?<br />Como classificar os objectos?<br />Desenho da soluo<br />Que classes definir?<br />Que objectos construir?<br />Que responsabilidades lhes atribuir?<br />De que forma os fazer colaborar?<br />2008/2009<br />Programao Orientada por Objectos<br />9<br /> 10. Classes e objectos<br />Classes<br />So tipos<br />So modelo ou projecto para construo de objectos com caractersticas comuns<br />Declaram-se ou definem-se<br />Definem conjunto de possveis objectos<br />Exemplos: humano, carro<br />Objectos<br />So instncias de classes<br />Constroem-se<br />Exemplos: Manuel Silva, o carro do Manuel Silva<br />2008/2009<br />Programao Orientada por Objectos<br />10<br /> 11. Classes e objectos<br />Classes<br />Representam objectos com caractersticas comuns<br />Favorecem abstraco (consumidor s conhece interface)<br />Permitem encapsulamento (implementao oculta)<br />Possibilitam reutilizao (por especializao ou instanciao)<br />Objectos<br />Modelam ou representam entidades reais (carro) ou virtuais (compra)<br />Tm identidade prpria<br />Tm estado total ou parcialmente observvel atravs da interface<br />2008/2009<br />Programao Orientada por Objectos<br />11<br /> 12. Tipos de referncia e tipos de valor<br />Tipos de referncia<br />Identidade relevante<br />Igualdade usualmente no relevante<br />Tipos de valor<br />Igualdade relevante<br />Identidade no relevante<br />2008/2009<br />Programao Orientada por Objectos<br />12<br />Classes Java.<br />Tipos primitivos em Java.<br /> 13. Classes em Java<br />Definem conjunto de caractersticas (propriedades e operaes) comuns a todas as suas instncias.<br />2010-03-30<br />Programao Orientada para Objectos<br />13<br />Car<br />- licenseNumber : String<br />- model : String<br />- yearBuilt : int<br />- lastInspectionDate : Date<br />implementao<br />interface<br />+ getLicenseNumber() : String<br />+ getModel() : String<br />+ getLastInspectionDate() : Date<br />+ getYearAge() : int<br />+ getNextInspectionDate() : Date<br />+ isInspected() : boolean<br />+ setInspectedToday()<br />Propriedades<br />Operao<br /> 14. Objectos em Java<br />Instncias de uma classe com valores especficos nos seus atributos e, por isso, com propriedades bem definidas.<br />2010-03-30<br />Programao Orientada para Objectos<br />14<br />johnsCar : Car<br />licenseNumber = 00-aa-00<br />model = VW-GTI-TDI-SLK<br />yearBuilt = 2005<br />lastInspectionDate = 2009-11-20<br /> 15. Operaes e mtodos em Java<br />Operaes<br />Parte da interface da classe <br />Invocam-se<br />Mtodos<br />Parte da implementao da classe<br />Executados quando se invoca a operao correspondente<br />Uma nica operao pode ser implementada por vrios mtodos<br />2008/2009<br />Programao Orientada por Objectos<br />15<br />Como? Usando polimorfismo de subtipos, que se ver mais tarde.<br /> 16. Construtores em Java<br />Inicializam objectos quando estes so construdos<br />Colocam objectos num estado inicial vlido (cumprindo o a condio invariante de instncia)<br />2008/2009<br />Programao Orientada por Objectos<br />16<br /> 17. Operaes em Java<br />Modificadoras Alteram o estado do objecto e possivelmente do resto do programa ou seu ambiente (so procedimentos)<br />No modificadoras No alteram o estado do objecto<br />Inspectoras Devolvem uma qualquer propriedade do objecto e no tm efeitos laterais (so funes)<br />Alter-modificadoras Alteram o estado do programa ou do seu ambiente sem alterar o objecto (so procedimentos)<br />2008/2009<br />Programao Orientada por Objectos<br />17<br /> 18. Operaes em Java: boas prticas<br />Cada operao deve ter um objectivo (uma funo) nico e bem definido<br />Operaes inspectoras Nome reflecte aquilo que devolvem<br />Outras operaes Nome reflecte a aco que realizam<br />Uma operao no deve tentar ser simultaneamente inspectora e modificadora (funo e procedimento)<br />2008/2009<br />Programao Orientada por Objectos<br />18<br /> 19. Caractersticas de classe<br />Classes so pseudo-objectos fbrica das suas instncias<br />Pseudo-objectos fbricas tm caractersticas de classe<br />Em Java declarao de atributos e mtodos de classe precede-se do qualificador static<br />Boas prticas<br />Evitar caractersticas de classe!<br />Usar apenas para definir constantes!<br />Exemplo<br />Math.PI<br />2008/2009<br />Programao Orientada por Objectos<br />19<br />Por oposio s caractersticas de instncia.<br /> 20. Referncias e objectos<br />CarjohnsCar = newCar("00-aa-00", );<br />CarjanesCar = johnsCar;<br />CarfredsCar = newCar(johnsCar);<br />2010-03-30<br />Programao Orientada para Objectos<br />20<br />Construtor por cpia!<br />johnsCar, janesCar : Car<br />fredsCar : Car<br />licenseNumber = 00-aa-00<br /><br />licenseNumber = 00-aa-00<br /><br />Hmmm. Mesma matrcula??<br /> 21. Referncias e objectos<br />CarjohnsCar = newCar("00-aa-00", );<br />CarjanesCar = johnsCar;<br />CarfredsCar = newCar(johnsCar);<br />2010-03-30<br />Programao Orientada para Objectos<br />21<br />Referncias:<br />Objectos:<br />johnsCar : ref Car<br />: Car<br />: Car<br />janesCar : ref Car<br />fredsCar : ref Car<br />licenseNumber = 00-aa-00<br /><br />licenseNumber = 00-aa-00<br /><br /> 22. UML = UnifiedModellingLanguage<br />2010-03-30<br />Programao Orientada para Objectos<br />22<br />Nome<br />Acesso<br />Nome do objecto<br />Atributos<br />Atributos<br />Operaes<br />johnsCar : Car<br />Car<br />licenseNumber = 00-aa-00<br />model = VW-GTI-TDI-SLK<br />yearBuilt = 2005<br />lastInspectionDate = 2009-11-20<br />- licenseNumber : String<br /><br />Valores dos atributos<br />+ getLicenseNumber() : String<br /><br /> 23. Referncias e objectos: declarao e construo<br />Classevarivel;<br />varivel = null;<br />Classe outraVarivel = null;<br />ClasseaindaOutraVarivel =<br />newClasse();<br />2008/2009<br />Programao Orientada por Objectos<br />23<br />Declarao da referncia varivel, no inicializada, capaz de referenciar objectos da classe Classe.<br />Construo do novo objecto<br />Construo da referncia<br />Construo da referncia<br />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:<br />intanInteger;<br />anInteger = 10;<br />intanotherInteger = 20;<br />Inicializao da referncia com o valor especial null, que indica que referncia no referencia qualquer objecto.<br />Construo de uma referncia com valor inicial nulo.<br />Construo de um novo objecto e de uma referncia que o referencia.<br /> 24. Acesso a caractersticas (ou membros)<br />Usa-se operador . (ponto)<br />Objecto (caracterstica de instncia)<br />refernciaParaObjecto.caracterstica<br />Classe (caracterstica de classe)<br />Classe.caracterstica<br />2008/2009<br />Programao Orientada por Objectos<br />24<br />Se a referncia for nula (null), lanada a excepo NullPointerException.<br /> 25. Princpio do encapsulamento<br />Tudo o que pode ser privado, deve ser privado!<br />Regras gerais<br />Todos os atributos devem ser privados<br />Os construtores so usualmente pblicos<br />2008/2009<br />Programao Orientada por Objectos<br />25<br />As constantes, pelo contrrio, podem e muitas vezes devem ser pblicas.<br /> 26. Classe um mdulo<br />Interface<br />Operaes e mtodos no privados<br />Constantes no privadas<br />Implementao<br />Operaes e mtodos privados<br />Atributos privados<br />Corpos dos mtodos<br />Contrato<br />Pr e ps-condies das operaes e mtodos<br />Manual de utilizao<br />Comentrios de documentao da classe<br />Comentrios de documentao de cada caracterstica pblica<br />2008/2009<br />Programao Orientada por Objectos<br />26<br />no privado pblico<br />etc.<br /> 27. Categorias de acesso<br />Caractersticas ou membros podem ser<br />private acesso apenas por outros membros da mesma classe<br />package-private (sem qualificador) adicionalmente, acesso por membros de classes do mesmo pacote<br />protected adicionalmente, acesso por membros de classes derivadas (a ver nas prximas aulas) <br />public acesso universal<br />2008/2009<br />Programao Orientada por Objectos<br />27<br />Acessibilidade crescente<br />H promiscuidade entre objectos da mesma classe! Cuidado!<br />Que isto? Prximo diapositivo<br /> 28. Pacote<br />Pacote<br />Unidades de modularizao em Java<br />2010-03-30<br />Programao OrientadaparaObjectos<br />28<br />Classe<br />Classe<br />Rotina<br />Rotina<br />Rotina<br />Rotina<br />Classe<br />Rotina<br />Rotina<br />Classe<br />Rotina<br />Rotina<br />Rotina<br />Rotina<br />Classe<br />Rotina<br />Rotina<br />Rotina<br />Rotina<br />Rotina<br />Rotina<br /> 29. Pacotes<br />Conjuntos de classes com relao lgica forte entre si<br />Exemplos<br />java.util<br />org.junit<br />Convenes de nomes<br />S minsculas<br />Sem separao entre palavras<br />Abreviaturas e siglas aceitveis<br />Primeiros elementos so nome DNS invertido (e.g., pt.iscte)<br />Restantes elementos podem designar unidades organizacionais (e.g., pt.iscte.dcti.poo)<br />2008/2009<br />Programao Orientada por Objectos<br />29<br /> 30. Pacotes como mdulos<br />Interface<br />Classes pblicas<br />Membros no privados de classes pblicas<br />Implementao<br />Para alm da implementao das classes<br /> todas as classes privadas de pacote (package-private)<br />2008/2009<br />Programao Orientada por Objectos<br />30<br /> 31. Pacotes: organizao hierrquica<br />java<br />lang<br />util<br />org<br />junit<br />omg<br />pt<br />iscte<br />dcti<br />ip<br />games<br />poo<br />Hierarquia aberta<br />No tm declarao isolada<br />Cada ficheiro .java declara o pacote a que pertence<br />2008/2009<br />Programao Orientada por Objectos<br />31<br />Game.java<br />Player.java<br />packagept.iscte.dcti.poo<br />class Game {<br /><br />}<br />packagept.iscte.dcti.poo<br />classPlayer {<br /><br />}<br /> 32. Pacotes: organizao hierrquica<br />Relevante quanto a nomes<br />Organizao lgica (como directrios)<br />Menor coliso de nomes<br />Irrelevante quanto a categorias acesso<br />Pacote e subpacote so independentes<br />Membros do subpacote no o so do pacote<br />Membros do pacote no o so do subpacote<br />2008/2009<br />Programao Orientada por Objectos<br />32<br /> 33. Pacotes: organizao hierrquica<br />2010-03-30<br />Programao Orientada para Objectos<br />33<br />The type top.AtTop is not visible<br />The type top.bottom.AtBottom is not visible<br /> 34. Ficheiros<br />Uma s classe pblica por ficheiro<br />Classe pblica e seu ficheiro tm de ter o mesmo nome<br />Nmero arbitrrio de classes privadas de pacote (package-private) por ficheiro, mas<br />Boa prtica: Uma s classe por ficheiro!<br />2008/2009<br />Programao Orientada por Objectos<br />34<br /> 35. Directrios<br />Usualmente, hierarquia de pacotes corresponde uma hierarquia de directrios com os ficheiros correspondentes<br />2008/2009<br />Programao Orientada por Objectos<br />35<br />Depende da implementao do Java.<br />No Explorer do Windows<br />(directrios)<br />No Eclipse<br />(pacotes)<br /> 36. A reter<br />Uma classe um modelo<br />Um objecto uma instncia de uma classe<br />Em Java no possvel declarar variveis cujo tipo uma classe: variveis declaradas dessa forma so referncias para objectos da classe<br />Tudo o que pode ser privado, deve ser privado<br />As classes devem ser organizadas em pacotes<br />2010-03-30<br />Programao Orientada para Objectos<br />36<br /> 37. A ler para as prximas aulas ...<br />Captulo 8 do livro:<br />Y. Daniel Liang, Introduction to Java Programming, 7. edio, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0<br />2010-03-30<br />Programao Orientada para Objectos<br />37<br /> 38. Sumrio<br />Introduo programao orientada por objectos<br />Classes, objectos e referncias (reviso)<br />Modularizao em pacotes<br />Organizao em ficheiros e directrios<br />2010-03-30<br />Programao Orientada para Objectos<br />38<br /></p>

Recommended

View more >