Aula 1Introdução à programação orientada por objectosClasses, objectos e referências (revisão)Modularização em pacotesOrganização em ficheiros e directórios
Programação estruturadaFormaInstâncias de tipos escalares ou matriciaisInstruções organizadas em estruturas de controloSem modularizaçãoMelhoriasMelhora estruturação do fluxo de controlo dos programasPossibilita raciocínio formal acerca de programasAumenta legibilidade dos programas face ao passado (programação “esparguete”)2008/2009Programação Orientada por Objectos2Organização do código em módulos, i.e., “cápsulas” com objectivos bem definidos contendo uma implementação oculta e expondo ao exterior uma interface. A modularização favorece a abstracção.
Programação procedimentalFormaInstâncias de tipos escalares ou vectoriaisInstruções organizadas em estruturas de controloInstruções e estruturas de controlo organizadas em rotinasModularização em rotinasFunções – Devolvem resultado de um cálculoProcedimentos – Agem sobre dados, modificando-osMelhoriasPossibilita encapsulamentoFacilita reutilizaçãoMelhora localização de erros e facilita manutençãoPossibilita maximização da coesão e minimização das ligações2010-03-30Programação Orientada para Objectos3
Programação baseada em objectos ou centrada nos dadosFormaInstâncias de tipos escalares ou vectoriais, ou de TAD (tipos abstractos de dados)Instruções organizadas em estruturas de controloInstruções e estruturas de controlo organizadas em rotinasRotinas relacionadas organizadas em TADModularizaçãoTAD – Conjunto de dados e operaçõesOperações – Rotinas que operam sobre instâncias de TADMelhoriasMelhora encapsulamento (dados e operações relacionadas)Possibilita ocultação dos dadosMuda perspectiva sobre os problemas2008/2009Programação Orientada por Objectos4
Programação orientada por objectosFormaInstâncias de classes (objectos), de tipos escalares ou vectoriais, ou de TAD (tipos abstractos de dados)Instruções organizadas em estruturas de controloInstruções e estruturas de controlo organizadas em rotinasRotinas relacionadas organizadas em TADOperações relacionadas organizadas em classesModularizaçãoClasses – Modelos para objectos com um dado comportamentoTAD – Conjunto de dados e operaçõesOperações – Rotinas que operam sobre instâncias de TADMétodos – Implementação das operaçõesMelhoriasIntroduz noções de extensão e especializaçãoMuda drasticamente perspectiva sobre os problemas2008/2009Programação Orientada por Objectos5
Programação orientada por objectos: classesParadigmas usadosProgramação estruturada – Controlo de fluxoProgramação procedimental – RotinasProgramação centrada nos dados – TAD e operaçõesVantagensMelhor modularizaçãoMelhor encapsulamentoMaior possibilidade de reutilizaçãoPossibilidade de extensão e especializaçãoMaior expressividadeMaior flexibilidadeMaior robustez2008/2009Programação Orientada por Objectos6
Programação orientada por objectos: encapsulamentoInterface:Operações – Implementadas em um ou mais métodosPropriedades – Podem ou não ser implementadas usando atributosImplementaçãoMétodos – Implementação de operaçõesAtributos – Dados que fazem parte da implementação da classe2008/2009Programação Orientada por Objectos7
Programação orientada por objectos: abordagemTudo (ou quase) são objectosObjectos têm responsabilidades, comportamentos e propriedadesOrganização de programas reflecte realidade……mas os objectos são personalizados2008/2009Programação Orientada por Objectos8Na 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().
Programação orientada por objectos: análise e desenhoAnálise do problemaQue objectos existem?Que responsabilidades têm?Como colaboram?Como classificar os objectos?Desenho da soluçãoQue classes definir?Que objectos construir?Que responsabilidades lhes atribuir?De que forma os fazer colaborar?2008/2009Programação Orientada por Objectos9
Classes e objectosClassesSão tiposSão modelo ou projecto para construção de objectos com características comunsDeclaram-se ou definem-seDefinem conjunto de possíveis objectosExemplos: humano, carroObjectosSão instâncias de classesConstroem-seExemplos: Manuel Silva, o carro do Manuel Silva2008/2009Programação Orientada por Objectos10
Classes e objectosClassesRepresentam objectos com características comunsFavorecem abstracção (consumidor só conhece interface)Permitem encapsulamento (implementação oculta)Possibilitam reutilização (por especialização ou instanciação)ObjectosModelam ou representam entidades reais (carro) ou virtuais (compra)Têm identidade própriaTêm estado total ou parcialmente observável através da interface2008/2009Programação Orientada por Objectos11
Tipos de referência e tipos de valorTipos de referênciaIdentidade é relevanteIgualdade usualmente não é relevanteTipos de valorIgualdade é relevanteIdentidade não é relevante2008/2009Programação Orientada por Objectos12Classes Java.Tipos primitivos em Java.
Classes em JavaDefinem conjunto de características (propriedades e operações) comuns a todas as suas instâncias.2010-03-30Programação Orientada para Objectos13Car- licenseNumber : String- model : String- yearBuilt : int- lastInspectionDate : Dateimplementaçãointerface+ getLicenseNumber() : String+ getModel() : String+ getLastInspectionDate() : Date+ getYearAge() : int+ getNextInspectionDate() : Date+ isInspected() : boolean+ setInspectedToday()PropriedadesOperação
Objectos em JavaInstâncias de uma classe com valores específicos nos seus atributos e, por isso, com propriedades bem definidas.2010-03-30Programação Orientada para Objectos14johnsCar : CarlicenseNumber = 00-aa-00model = VW-GTI-TDI-SLKyearBuilt = 2005lastInspectionDate = 2009-11-20
Operações e métodos em JavaOperaçõesParte da interface da classe Invocam-seMétodosParte da implementação da classeExecutados quando se invoca a operação correspondenteUma única operação pode ser implementada por vários métodos2008/2009Programação Orientada por Objectos15Como? Usando polimorfismo de subtipos, que se verá mais tarde.
Construtores em JavaInicializam objectos quando estes são construídosColocam objectos num estado inicial válido (cumprindo o a condição invariante de instância)2008/2009Programação Orientada por Objectos16
Operações em JavaModificadoras – Alteram o estado do objecto e possivelmente do resto do programa ou seu ambiente (são procedimentos)Não modificadoras – Não alteram o estado do objectoInspectoras – Devolvem uma qualquer propriedade do objecto e não têm efeitos laterais (são funções)“Alter-modificadoras” – Alteram o estado do programa ou do seu ambiente sem alterar o objecto (são procedimentos)2008/2009Programação Orientada por Objectos17
Operações em Java: boas práticasCada operação deve ter um objectivo (uma função) único e bem definidoOperações inspectoras – Nome reflecte aquilo que devolvemOutras operações – Nome reflecte a acção que realizamUma operação não deve tentar ser simultaneamente inspectora e modificadora (função e procedimento)2008/2009Programação Orientada por Objectos18
Características de classeClasses são “pseudo-objectos” fábrica das suas instâncias“Pseudo-objectos” fábricas têm características de classeEm Java declaração de atributos e métodos de classe precede-se do qualificador staticBoas práticasEvitar características de classe!Usar apenas para definir constantes!ExemploMath.PI2008/2009Programação Orientada por Objectos19Por oposição às características de instância.
Referências e objectosCarjohnsCar = newCar("00-aa-00", …);CarjanesCar = johnsCar;CarfredsCar = newCar(johnsCar);2010-03-30Programação Orientada para Objectos20Construtor por cópia!johnsCar, janesCar : CarfredsCar : CarlicenseNumber = 00-aa-00…licenseNumber = 00-aa-00…Hmmm…. Mesma matrícula??
Referências e objectosCarjohnsCar = newCar("00-aa-00", …);CarjanesCar = johnsCar;CarfredsCar = newCar(johnsCar);2010-03-30Programação Orientada para Objectos21Referências:Objectos:johnsCar : «ref» Car: Car: CarjanesCar : «ref» CarfredsCar : «ref» CarlicenseNumber = 00-aa-00…licenseNumber = 00-aa-00…
UML = UnifiedModellingLanguage2010-03-30Programação Orientada para Objectos22NomeAcessoNome do objectoAtributosAtributosOperaçõesjohnsCar : CarCarlicenseNumber = 00-aa-00model = VW-GTI-TDI-SLKyearBuilt = 2005lastInspectionDate = 2009-11-20- licenseNumber : String…Valores dos atributos+ getLicenseNumber() : String…
Referências e objectos: declaração e construçãoClassevariável;variável = null;Classe outraVariável = null;ClasseaindaOutraVariável =newClasse(…);2008/2009Programação Orientada por Objectos23Declaração da referência variável, não inicializada, capaz de referenciar objectos da classe Classe.Construção do novo objectoConstrução da referênciaConstrução da referênciaAtenção! Os tipos primitivos do Java (int, float, char, etc.) são tipos de valor. Não há referências para eles. As variáveis declaradas são uma instância do tipo primitivo. Por exemplo:intanInteger;anInteger = 10;intanotherInteger = 20;Inicialização da referência com o valor especial null, que indica que referência não referencia qualquer objecto.Construção de uma referência com valor inicial nulo.Construção de um novo objecto e de uma referência que o referencia.
Acesso a características (ou membros)Usa-se operador . (ponto)Objecto (característica de instância)referênciaParaObjecto.característicaClasse (característica de classe)Classe.característica2008/2009Programação Orientada por Objectos24Se a referência for nula (null), é lançada a excepção NullPointerException.
Princípio do encapsulamentoTudo o que pode ser privado, deve ser privado!Regras geraisTodos os atributos devem ser privadosOs construtores são usualmente públicos2008/2009Programação Orientada por Objectos25As constantes, pelo contrário, podem e muitas vezes devem ser públicas.
Classe é um móduloInterfaceOperações e métodos não privadosConstantes não privadasImplementaçãoOperações e métodos privadosAtributos privadosCorpos dos métodosContratoPré e pós-condições das operações e métodosManual de utilizaçãoComentários de documentação da classeComentários de documentação de cada característica pública2008/2009Programação Orientada por Objectos26não privado ≠ públicoetc.
Categorias de acessoCaracterísticas ou membros podem serprivate – acesso apenas por outros membros da mesma classepackage-private (sem qualificador) – adicionalmente, acesso por membros de classes do mesmo pacoteprotected – adicionalmente, acesso por membros de classes derivadas (a ver nas próximas aulas) public –  acesso universal2008/2009Programação Orientada por Objectos27Acessibilidade crescenteHá promiscuidade entre objectos da mesma classe! Cuidado!Que é isto? Próximo diapositivo…
PacotePacoteUnidades de modularização em Java2010-03-30Programação OrientadaparaObjectos28ClasseClasseRotinaRotinaRotinaRotinaClasseRotinaRotinaClasseRotinaRotinaRotinaRotinaClasseRotinaRotinaRotinaRotinaRotinaRotina
PacotesConjuntos de classes com relação lógica forte entre siExemplosjava.utilorg.junitConvenções de nomesSó minúsculasSem separação entre palavrasAbreviaturas e siglas aceitáveisPrimeiros elementos são nome DNS invertido (e.g., pt.iscte)Restantes elementos podem designar unidades organizacionais (e.g., pt.iscte.dcti.poo)2008/2009Programação Orientada por Objectos29
Pacotes como módulosInterfaceClasses públicasMembros não privados de classes públicasImplementaçãoPara além da implementação das classes…… todas as classes privadas de pacote (package-private)2008/2009Programação Orientada por Objectos30
Pacotes: organização hierárquicajavalangutilorgjunitomgptisctedctiipgamespooHierarquia abertaNão têm declaração isoladaCada ficheiro .java declara o pacote a que pertence2008/2009Programação Orientada por Objectos31Game.javaPlayer.javapackagept.iscte.dcti.pooclass Game {    …}packagept.iscte.dcti.pooclassPlayer {    …}
Pacotes: organização hierárquicaRelevante quanto a nomesOrganização lógica (como directórios)Menor colisão de nomesIrrelevante quanto a categorias acessoPacote e subpacote são independentesMembros do subpacote não o são do pacoteMembros do pacote não o são do subpacote2008/2009Programação Orientada por Objectos32
Pacotes: organização hierárquica2010-03-30Programação Orientada para Objectos33The type top.AtTop is not visibleThe type top.bottom.AtBottom is not visible
FicheirosUma só classe pública por ficheiroClasse pública e seu ficheiro têm de ter o mesmo nomeNúmero arbitrário de classes privadas de pacote (package-private) por ficheiro, mas…Boa prática: Uma só classe por ficheiro!2008/2009Programação Orientada por Objectos34
DirectóriosUsualmente, à hierarquia de pacotes corresponde uma hierarquia de directórios com os ficheiros correspondentes2008/2009Programação Orientada por Objectos35Depende da implementação do Java.No Explorer do Windows(directórios)No Eclipse(pacotes)
A reterUma classe é um modeloUm objecto é uma instância de uma classeEm Java não é possível declarar variáveis cujo tipo é uma classe: variáveis declaradas dessa forma são referências para objectos da classeTudo o que pode ser privado, deve ser privadoAs classes devem ser organizadas em pacotes2010-03-30Programação Orientada para Objectos36
A ler para as próximas aulas ...Capítulo 8 do livro:Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-02010-03-30Programação Orientada para Objectos37

Programação Orientada por Objectos - Aula 1

  • 1.
    Aula 1Introdução àprogramação orientada por objectosClasses, objectos e referências (revisão)Modularização em pacotesOrganização em ficheiros e directórios
  • 2.
    Programação estruturadaFormaInstâncias detipos escalares ou matriciaisInstruções organizadas em estruturas de controloSem modularizaçãoMelhoriasMelhora estruturação do fluxo de controlo dos programasPossibilita raciocínio formal acerca de programasAumenta legibilidade dos programas face ao passado (programação “esparguete”)2008/2009Programação Orientada por Objectos2Organização do código em módulos, i.e., “cápsulas” com objectivos bem definidos contendo uma implementação oculta e expondo ao exterior uma interface. A modularização favorece a abstracção.
  • 3.
    Programação procedimentalFormaInstâncias detipos escalares ou vectoriaisInstruções organizadas em estruturas de controloInstruções e estruturas de controlo organizadas em rotinasModularização em rotinasFunções – Devolvem resultado de um cálculoProcedimentos – Agem sobre dados, modificando-osMelhoriasPossibilita encapsulamentoFacilita reutilizaçãoMelhora localização de erros e facilita manutençãoPossibilita maximização da coesão e minimização das ligações2010-03-30Programação Orientada para Objectos3
  • 4.
    Programação baseada emobjectos ou centrada nos dadosFormaInstâncias de tipos escalares ou vectoriais, ou de TAD (tipos abstractos de dados)Instruções organizadas em estruturas de controloInstruções e estruturas de controlo organizadas em rotinasRotinas relacionadas organizadas em TADModularizaçãoTAD – Conjunto de dados e operaçõesOperações – Rotinas que operam sobre instâncias de TADMelhoriasMelhora encapsulamento (dados e operações relacionadas)Possibilita ocultação dos dadosMuda perspectiva sobre os problemas2008/2009Programação Orientada por Objectos4
  • 5.
    Programação orientada porobjectosFormaInstâncias de classes (objectos), de tipos escalares ou vectoriais, ou de TAD (tipos abstractos de dados)Instruções organizadas em estruturas de controloInstruções e estruturas de controlo organizadas em rotinasRotinas relacionadas organizadas em TADOperações relacionadas organizadas em classesModularizaçãoClasses – Modelos para objectos com um dado comportamentoTAD – Conjunto de dados e operaçõesOperações – Rotinas que operam sobre instâncias de TADMétodos – Implementação das operaçõesMelhoriasIntroduz noções de extensão e especializaçãoMuda drasticamente perspectiva sobre os problemas2008/2009Programação Orientada por Objectos5
  • 6.
    Programação orientada porobjectos: classesParadigmas usadosProgramação estruturada – Controlo de fluxoProgramação procedimental – RotinasProgramação centrada nos dados – TAD e operaçõesVantagensMelhor modularizaçãoMelhor encapsulamentoMaior possibilidade de reutilizaçãoPossibilidade de extensão e especializaçãoMaior expressividadeMaior flexibilidadeMaior robustez2008/2009Programação Orientada por Objectos6
  • 7.
    Programação orientada porobjectos: encapsulamentoInterface:Operações – Implementadas em um ou mais métodosPropriedades – Podem ou não ser implementadas usando atributosImplementaçãoMétodos – Implementação de operaçõesAtributos – Dados que fazem parte da implementação da classe2008/2009Programação Orientada por Objectos7
  • 8.
    Programação orientada porobjectos: abordagemTudo (ou quase) são objectosObjectos têm responsabilidades, comportamentos e propriedadesOrganização de programas reflecte realidade……mas os objectos são personalizados2008/2009Programação Orientada por Objectos8Na 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().
  • 9.
    Programação orientada porobjectos: análise e desenhoAnálise do problemaQue objectos existem?Que responsabilidades têm?Como colaboram?Como classificar os objectos?Desenho da soluçãoQue classes definir?Que objectos construir?Que responsabilidades lhes atribuir?De que forma os fazer colaborar?2008/2009Programação Orientada por Objectos9
  • 10.
    Classes e objectosClassesSãotiposSão modelo ou projecto para construção de objectos com características comunsDeclaram-se ou definem-seDefinem conjunto de possíveis objectosExemplos: humano, carroObjectosSão instâncias de classesConstroem-seExemplos: Manuel Silva, o carro do Manuel Silva2008/2009Programação Orientada por Objectos10
  • 11.
    Classes e objectosClassesRepresentamobjectos com características comunsFavorecem abstracção (consumidor só conhece interface)Permitem encapsulamento (implementação oculta)Possibilitam reutilização (por especialização ou instanciação)ObjectosModelam ou representam entidades reais (carro) ou virtuais (compra)Têm identidade própriaTêm estado total ou parcialmente observável através da interface2008/2009Programação Orientada por Objectos11
  • 12.
    Tipos de referênciae tipos de valorTipos de referênciaIdentidade é relevanteIgualdade usualmente não é relevanteTipos de valorIgualdade é relevanteIdentidade não é relevante2008/2009Programação Orientada por Objectos12Classes Java.Tipos primitivos em Java.
  • 13.
    Classes em JavaDefinemconjunto de características (propriedades e operações) comuns a todas as suas instâncias.2010-03-30Programação Orientada para Objectos13Car- licenseNumber : String- model : String- yearBuilt : int- lastInspectionDate : Dateimplementaçãointerface+ getLicenseNumber() : String+ getModel() : String+ getLastInspectionDate() : Date+ getYearAge() : int+ getNextInspectionDate() : Date+ isInspected() : boolean+ setInspectedToday()PropriedadesOperação
  • 14.
    Objectos em JavaInstânciasde uma classe com valores específicos nos seus atributos e, por isso, com propriedades bem definidas.2010-03-30Programação Orientada para Objectos14johnsCar : CarlicenseNumber = 00-aa-00model = VW-GTI-TDI-SLKyearBuilt = 2005lastInspectionDate = 2009-11-20
  • 15.
    Operações e métodosem JavaOperaçõesParte da interface da classe Invocam-seMétodosParte da implementação da classeExecutados quando se invoca a operação correspondenteUma única operação pode ser implementada por vários métodos2008/2009Programação Orientada por Objectos15Como? Usando polimorfismo de subtipos, que se verá mais tarde.
  • 16.
    Construtores em JavaInicializamobjectos quando estes são construídosColocam objectos num estado inicial válido (cumprindo o a condição invariante de instância)2008/2009Programação Orientada por Objectos16
  • 17.
    Operações em JavaModificadoras– Alteram o estado do objecto e possivelmente do resto do programa ou seu ambiente (são procedimentos)Não modificadoras – Não alteram o estado do objectoInspectoras – Devolvem uma qualquer propriedade do objecto e não têm efeitos laterais (são funções)“Alter-modificadoras” – Alteram o estado do programa ou do seu ambiente sem alterar o objecto (são procedimentos)2008/2009Programação Orientada por Objectos17
  • 18.
    Operações em Java:boas práticasCada operação deve ter um objectivo (uma função) único e bem definidoOperações inspectoras – Nome reflecte aquilo que devolvemOutras operações – Nome reflecte a acção que realizamUma operação não deve tentar ser simultaneamente inspectora e modificadora (função e procedimento)2008/2009Programação Orientada por Objectos18
  • 19.
    Características de classeClassessão “pseudo-objectos” fábrica das suas instâncias“Pseudo-objectos” fábricas têm características de classeEm Java declaração de atributos e métodos de classe precede-se do qualificador staticBoas práticasEvitar características de classe!Usar apenas para definir constantes!ExemploMath.PI2008/2009Programação Orientada por Objectos19Por oposição às características de instância.
  • 20.
    Referências e objectosCarjohnsCar= newCar("00-aa-00", …);CarjanesCar = johnsCar;CarfredsCar = newCar(johnsCar);2010-03-30Programação Orientada para Objectos20Construtor por cópia!johnsCar, janesCar : CarfredsCar : CarlicenseNumber = 00-aa-00…licenseNumber = 00-aa-00…Hmmm…. Mesma matrícula??
  • 21.
    Referências e objectosCarjohnsCar= newCar("00-aa-00", …);CarjanesCar = johnsCar;CarfredsCar = newCar(johnsCar);2010-03-30Programação Orientada para Objectos21Referências:Objectos:johnsCar : «ref» Car: Car: CarjanesCar : «ref» CarfredsCar : «ref» CarlicenseNumber = 00-aa-00…licenseNumber = 00-aa-00…
  • 22.
    UML = UnifiedModellingLanguage2010-03-30ProgramaçãoOrientada para Objectos22NomeAcessoNome do objectoAtributosAtributosOperaçõesjohnsCar : CarCarlicenseNumber = 00-aa-00model = VW-GTI-TDI-SLKyearBuilt = 2005lastInspectionDate = 2009-11-20- licenseNumber : String…Valores dos atributos+ getLicenseNumber() : String…
  • 23.
    Referências e objectos:declaração e construçãoClassevariável;variável = null;Classe outraVariável = null;ClasseaindaOutraVariável =newClasse(…);2008/2009Programação Orientada por Objectos23Declaração da referência variável, não inicializada, capaz de referenciar objectos da classe Classe.Construção do novo objectoConstrução da referênciaConstrução da referênciaAtenção! Os tipos primitivos do Java (int, float, char, etc.) são tipos de valor. Não há referências para eles. As variáveis declaradas são uma instância do tipo primitivo. Por exemplo:intanInteger;anInteger = 10;intanotherInteger = 20;Inicialização da referência com o valor especial null, que indica que referência não referencia qualquer objecto.Construção de uma referência com valor inicial nulo.Construção de um novo objecto e de uma referência que o referencia.
  • 24.
    Acesso a características(ou membros)Usa-se operador . (ponto)Objecto (característica de instância)referênciaParaObjecto.característicaClasse (característica de classe)Classe.característica2008/2009Programação Orientada por Objectos24Se a referência for nula (null), é lançada a excepção NullPointerException.
  • 25.
    Princípio do encapsulamentoTudoo que pode ser privado, deve ser privado!Regras geraisTodos os atributos devem ser privadosOs construtores são usualmente públicos2008/2009Programação Orientada por Objectos25As constantes, pelo contrário, podem e muitas vezes devem ser públicas.
  • 26.
    Classe é ummóduloInterfaceOperações e métodos não privadosConstantes não privadasImplementaçãoOperações e métodos privadosAtributos privadosCorpos dos métodosContratoPré e pós-condições das operações e métodosManual de utilizaçãoComentários de documentação da classeComentários de documentação de cada característica pública2008/2009Programação Orientada por Objectos26não privado ≠ públicoetc.
  • 27.
    Categorias de acessoCaracterísticasou membros podem serprivate – acesso apenas por outros membros da mesma classepackage-private (sem qualificador) – adicionalmente, acesso por membros de classes do mesmo pacoteprotected – adicionalmente, acesso por membros de classes derivadas (a ver nas próximas aulas) public – acesso universal2008/2009Programação Orientada por Objectos27Acessibilidade crescenteHá promiscuidade entre objectos da mesma classe! Cuidado!Que é isto? Próximo diapositivo…
  • 28.
    PacotePacoteUnidades de modularizaçãoem Java2010-03-30Programação OrientadaparaObjectos28ClasseClasseRotinaRotinaRotinaRotinaClasseRotinaRotinaClasseRotinaRotinaRotinaRotinaClasseRotinaRotinaRotinaRotinaRotinaRotina
  • 29.
    PacotesConjuntos de classescom relação lógica forte entre siExemplosjava.utilorg.junitConvenções de nomesSó minúsculasSem separação entre palavrasAbreviaturas e siglas aceitáveisPrimeiros elementos são nome DNS invertido (e.g., pt.iscte)Restantes elementos podem designar unidades organizacionais (e.g., pt.iscte.dcti.poo)2008/2009Programação Orientada por Objectos29
  • 30.
    Pacotes como módulosInterfaceClassespúblicasMembros não privados de classes públicasImplementaçãoPara além da implementação das classes…… todas as classes privadas de pacote (package-private)2008/2009Programação Orientada por Objectos30
  • 31.
    Pacotes: organização hierárquicajavalangutilorgjunitomgptisctedctiipgamespooHierarquiaabertaNão têm declaração isoladaCada ficheiro .java declara o pacote a que pertence2008/2009Programação Orientada por Objectos31Game.javaPlayer.javapackagept.iscte.dcti.pooclass Game { …}packagept.iscte.dcti.pooclassPlayer { …}
  • 32.
    Pacotes: organização hierárquicaRelevantequanto a nomesOrganização lógica (como directórios)Menor colisão de nomesIrrelevante quanto a categorias acessoPacote e subpacote são independentesMembros do subpacote não o são do pacoteMembros do pacote não o são do subpacote2008/2009Programação Orientada por Objectos32
  • 33.
    Pacotes: organização hierárquica2010-03-30ProgramaçãoOrientada para Objectos33The type top.AtTop is not visibleThe type top.bottom.AtBottom is not visible
  • 34.
    FicheirosUma só classepública por ficheiroClasse pública e seu ficheiro têm de ter o mesmo nomeNúmero arbitrário de classes privadas de pacote (package-private) por ficheiro, mas…Boa prática: Uma só classe por ficheiro!2008/2009Programação Orientada por Objectos34
  • 35.
    DirectóriosUsualmente, à hierarquiade pacotes corresponde uma hierarquia de directórios com os ficheiros correspondentes2008/2009Programação Orientada por Objectos35Depende da implementação do Java.No Explorer do Windows(directórios)No Eclipse(pacotes)
  • 36.
    A reterUma classeé um modeloUm objecto é uma instância de uma classeEm Java não é possível declarar variáveis cujo tipo é uma classe: variáveis declaradas dessa forma são referências para objectos da classeTudo o que pode ser privado, deve ser privadoAs classes devem ser organizadas em pacotes2010-03-30Programação Orientada para Objectos36
  • 37.
    A ler paraas próximas aulas ...Capítulo 8 do livro:Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-02010-03-30Programação Orientada para Objectos37