Paradigmas da programação
Programação orientada por objectos
Modularização em pacotes
 Enumerações
 Instrução de selecção switch
 Gama limitada dos tipos inteiros
2013/2014 Fundamentos de Programação 2
2013/2014 Fundamentos de Programação 3
 Programação esparguete
 Programação estruturada
 Programação procedimental
 Programação baseada em objectos
 Programação orientada por objectos
2013/2014 Fundamentos de Programação 4
Progresso
 Forma
 Instâncias de tipos escalares ou arrays
 Instruções organizadas em estruturas de controlo
 Sem modularização
 Melhorias
 Melhora estruturação do fluxo de controlo dos programas
 Possibilita raciocínio formal acerca de programas
 Aumenta legibilidade dos programas face ao passado
(programação «esparguete»)
2013/2014 Fundamentos de Programação 5
Organizaçã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.
 Forma
 Instâncias de tipos escalares ou arrays
 Instruções organizadas em estruturas de controlo
 Instruções e estruturas de controlo organizadas em rotinas
 Modularização em rotinas
 Funções – Devolvem resultado de um cálculo
 Procedimentos – Agem sobre o mundo, modificando-o
 Melhorias
 Possibilita encapsulamento
 Facilita reutilização
 Melhora localização de erros e facilita manutenção
 Possibilita maximização da coesão e minimização das ligações
2013/2014 Fundamentos de Programação 6
 Forma
 Instâncias de tipos escalares, de arrays ou deTAD
 Instruções organizadas em estruturas de controlo
 Instruções e estruturas de controlo organizadas em rotinas
 Rotinas relacionadas organizadas emTAD
 Modularização
 TAD – Conjunto de dados e operações
 Operações – Rotinas que operam sobre instâncias deTAD
 Melhorias
 Melhora encapsulamento (dados e operações relacionadas)
 Possibilita ocultação da informação
 Muda perspectiva sobre os problemas
2013/2014 Fundamentos de Programação 7
Ou programação centrada
nos dados.
Tipos
abstractos de
dados
 Forma
 Instâncias de classes (objectos), de tipos escalares, de arrays ou deTAD
 Instruções organizadas em estruturas de controlo
 Instruções e estruturas de controlo organizadas em rotinas
 Rotinas relacionadas organizadas emTAD
 Rotinas relacionadas organizadas em classes
 Modularização
 Classes – Modelos para objectos com um dado comportamento
 TAD – Conjuntos de dados e operações
 Operações – Rotinas que operam sobre instâncias deTAD ou sobre objectos
 Métodos – Implementação das operações
 Melhorias
 Introduz noções de extensão e especialização
 Muda drasticamente perspectiva sobre os problemas
2013/2014 Fundamentos de Programação 8
2013/2014 Fundamentos de Programação 9
 Assenta sobre
 Programação estruturada – Controlo de fluxo
 Programação procedimental – Rotinas
 Programação centrada nos dados –TAD e operações
 Vantagens
 Melhor modularização
 Melhor encapsulamento
 Maior possibilidade de reutilização
 Possibilidade de extensão e especialização
 Maior expressividade
 Maior flexibilidade
 Maior robustez
2013/2014 Fundamentos de Programação 10
 Interface
 Operações – Implementadas por um ou mais métodos
 Propriedades – Podem ou não ser implementadas
usando atributos
 Implementação
 Métodos – Implementação de operações
 Métodos auxiliares – Usados pelos outros métodos
 Atributos – Dados que são parte da implementação
2013/2014 Fundamentos de Programação 11
 Tudo (ou quase) são objectos
 Objectos têm
 responsabilidades,
 comportamentos e
 propriedades
 Organização de programas reflecte realidade…
 …mas os objectos são personificados
2013/2014 Fundamentos de Programação 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().
 Análise do problema
 Que objectos existem?
 Que responsabilidades têm?
 Como colaboram?
 Como classificar os objectos?
 Desenho da solução
 Que classes definir?
 Que objectos construir?
 Que responsabilidades lhes atribuir?
 De que forma os fazer colaborar?
2013/2014 Fundamentos de Programação 13
 Classes
 São tipos
 São modelo para objectos com características comuns
 Declaram-se ou definem-se
 Definem conjunto de possíveis objectos
 São nomes comuns: humano, carro, …
 Objectos
 São instâncias de classes
 Constroem-se
 São nomes próprios: Manuel Silva, o carro do Manuel, …
2013/2014 Fundamentos de Programação 14
 Classes
 Favorecem abstracção
 Permitem encapsulamento
 Possibilitam reutilização
 Objectos
 Representam entidades
▪ reais (e.g., carro) ou
▪ virtuais (e.g., compra)
 Têm identidade
 Têm estado observável através da interface
2013/2014 Fundamentos de Programação 15
Consumidor só conhece
interface.
Implementação oculta.
Por especialização ou por
instanciação.
 Tipos de referência
 Classes de identidade ou referência
▪ Identidade é relevante
▪ Igualdade usualmente não é relevante
 Classes de igualdade ou valor
▪ Identidade não é relevante
▪ Igualdade é relevante
 Tipos de valor
 Identidade não é relevante
 Igualdade é relevante
2013/2014 Fundamentos de Programação 16
E.g., classes Java.
Tipos primitivos em
Java.
E.g., String,
Rational, Point
E.g., Person, Gang,
Car
 Definem características
(propriedades e
operações) comuns a
todas as instâncias
2013/2014 Fundamentos de Programação 17
Car
- licenseNumber : String
- model : String
- yearBuilt : int
- lastInspectionDate : LocalDate
+ getLicenseNumber() : String
+ getModel() : String
+ getLastInspectionDate() : LocalDate
+ getYearAge() : int
+ getNextInspectionDate() : LocalDate
+ isInspected() : boolean
+ setInspectedToday()
Propriedades
Operação
implementaçãointerface
 Instâncias de classe de
referência com
identidade e com
propriedades bem
definidas
2013/2014 Fundamentos de Programação 18
johnsCar : Car
licenseNumber = 00-AA-00
model =VW-GTI-TDI-SLK
yearBuilt = 2005
lastInspectionDate = 2014-11-20
 Operações
 Parte da interface da classe
 São invocadas
 Métodos
 Parte da implementação da classe
 São executados quando se invoca a sua operação
 Uma única operação pode ser implementada por
vários métodos
2013/2014 Fundamentos de Programação 19
Como? Usando polimorfismo de
subtipos, que se verá mais tarde.
 Inicializam instâncias/objectos em construção
 Colocam instâncias/objectos em estado
inicial válido, i.e., cumprindo a condição
invariante de instância
2013/2014 Fundamentos de Programação 20
 Modificadoras – Alteram estado do objecto
(procedimentos)
 Não modificadoras – Não alteram estado do
objecto
 Inspectoras – Devolvem propriedade do objecto e não
têm efeitos laterais (funções)
 «Alter-modificadoras» –Alteram estado do programa
ou do seu ambiente (procedimentos) sem alterar
estado do objecto
2013/2014 Fundamentos de Programação 21
 Cada operação deve ter um objectivo (ou uma
função) único e bem definido
 Operações inspectoras – Nome reflecte o que
devolvem
 Outras operações – Nome reflecte acção realizada
 Uma operação não deve ser simultaneamente
inspectora e modificadora (função e
procedimento)
2013/2014 Fundamentos de Programação 22
 Classes são «pseudo-objectos» fábrica das suas instâncias
 «Pseudo-objectos» fábricas têm características de classe
 Declaração de atributos e métodos de classe: com static
 Boas práticas
 Evitar características de classe, em geral
 Usar para definir constantes
 Exemplo
 Math.PI
2013/2014 Fundamentos de Programação 23
Por oposição às
características de
instância.
final Car johnsCar = new Car("00-AA-00", …);
final Car janesCar = johnsCar;
final Car fredsCar = new Car("01-35-AP", …);
2013/2014 Fundamentos de Programação 24
johnsCar, janesCar : Car
licenseNumber = 00-AA-00
…
fredsCar : Car
licenseNumber = 01-35-AP
…
final Car johnsCar = new Car("00-AA-00", …);
final Car janesCar = johnsCar;
final Car fredsCar = new Car("01-35-AP", …);
2013/2014 Fundamentos de Programação 25
johnsCar : «ref» Car
: Car
licenseNumber = 00-aa-00
…
: Car
licenseNumber = 01-35-AP
…
janesCar : «ref» Car
fredsCar : «ref» Car
Referências: Objectos:
2013/2014 Fundamentos de Programação 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
AtributosOperações
Acesso Nome do objecto
Atributos Valores dos atributos
Classe variável;
variável = null;
Classe outraVariável = null;
Classe aindaOutraVariável =
new Classe(…);
2013/2014 Fundamentos de Programação 27
Inicialização da referência com o valor
especial null, que indica que referência não
referencia qualquer objecto.
Declaração da referência variável, não
inicializada, capaz de referenciar objectos da
classe Classe.
Construção de um novo
objecto e de uma referência
que o referencia.
Construção de uma
referência com valor inicial
nulo.
Construçãodareferência
Atençã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:
int anInteger;
anInteger = 10;
int anotherInteger = 20;
Construção do novo objecto
Construçãodareferência
 Usa-se operador . (ponto)
 Objecto (característica de instância)
referênciaParaObjecto.característica
 Classe (característica de classe)
Classe.característica
2013/2014 Fundamentos de Programação 28
Se a referência for nula
(null), é lançada a excepção
NullPointerException.
Ou membros.
 Tudo o que pode ser privado deve ser privado!
 Regras gerais
 Todos os atributos devem ser privados
 Os construtores são usualmente públicos
 As operações devem ser públicas
 Os métodos auxiliares devem ser privados
2013/2014 Fundamentos de Programação 29
As constantes, pelo contrário,
podem e muitas vezes devem ser
públicas.
 Interface
 Operações não privadas
 Constantes não privadas
 Implementação
 Métodos privados
 Atributos privados
 Corpos dos métodos
 Contrato
 Pré e pós-condições das operações e métodos
 Manual de utilização
 Comentários de documentação da classe
 Comentários de documentação de cada característica pública
2013/2014 Fundamentos de Programação 30
não privado ≠ público
etc.
 Características 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 próximas aulas)
 public – acesso universal
2013/2014 Fundamentos de Programação 31
Acessibilidadecrescente
Há promiscuidade entre objectos da
mesma classe! Cuidado!
Que é isto? Próximo diapositivo…
2013/2014 Fundamentos de Programação 32
Pacote Pacote
2013/2014 Fundamentos de Programação 33
Classe
Rotina
Rotina
Rotina
Classe
Rotina Rotina
Rotina
Classe
Rotina
Rotina
Rotina
Rotina
Classe
Rotina
Rotina
Classe
Rotina
Rotina
Rotina
Rotina
 Conjuntos de classes com relação lógica forte entre si
 Exemplos
 java.util
 org.junit
 Convenções de nomes
 Só minúsculas
 Sem separação entre palavras
 Abreviaturas e siglas aceitáveis
 Prefixo é nome DNS invertido (e.g., pt.europeia)
 Elementos após prefixo podem ser unidades
organizacionais (e.g., pt.europeia.fp)
2013/2014 Fundamentos de Programação 34
 Interface
 Classes públicas
 Membros não privados de classes públicas
 Implementação
 Para além da implementação das classes…
 … todas as classes privadas de pacote (package-
private)
2013/2014 Fundamentos de Programação 35
 java
 lang
 util
 org
 junit
 omg
 pt
 europeia
▪ fp
▪ eda
 Hierarquia aberta
 Não têm declaração isolada
 Cada ficheiro .java declara o pacote a que
pertence
2013/2014 Fundamentos de Programação 36
package pt.europeia.fp
public class Game {
…
}
Game.java
package pt.europeia.fp
public class Player {
…
}
Player.java
 Relevante quanto a nomes
 Organização lógica (como directórios)
 Menor colisão de nomes
 Irrelevante quanto a categorias acesso
 Pacote e subpacote são independentes
 Membros do subpacote não o são do pacote
 Membros do pacote não o são do subpacote
2013/2014 Fundamentos de Programação 37
2013/2014 Fundamentos de Programação 38
The type top.AtTop is not visibleThe type top.bottom.AtBottom is not visible
 Uma só classe pública por ficheiro
 Classe pública em ficheiro com mesmo nome
 Número arbitrário de classes privadas de
pacote (package-private) por ficheiro, mas…
 Boa prática: Uma só classe por ficheiro!
2013/2014 Fundamentos de Programação 39
 Usualmente, à hierarquia de pacotes
corresponde uma hierarquia de directórios
com os ficheiros correspondentes
2013/2014 Fundamentos de Programação 40
Depende da
implementação do Java.
No Eclipse
(directórios/pastas)
No Eclipse
(pacotes)
 Classes são modelos
 Objectos são instâncias classes de referência
 Em Java variáveis não são instâncias de classes,
mas sim referências para instâncias de classes
 Tudo o que pode ser privado deve ser privado
 Classes devem organizar-se em pacotes
2013/2014 Fundamentos de Programação 41
 Paradigmas da programação
 Programação orientada por objectos
 Modularização em pacotes
2013/2014 Fundamentos de Programação 42

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

  • 1.
    Paradigmas da programação Programaçãoorientada por objectos Modularização em pacotes
  • 2.
     Enumerações  Instruçãode selecção switch  Gama limitada dos tipos inteiros 2013/2014 Fundamentos de Programação 2
  • 3.
    2013/2014 Fundamentos deProgramação 3
  • 4.
     Programação esparguete Programação estruturada  Programação procedimental  Programação baseada em objectos  Programação orientada por objectos 2013/2014 Fundamentos de Programação 4 Progresso
  • 5.
     Forma  Instânciasde tipos escalares ou arrays  Instruções organizadas em estruturas de controlo  Sem modularização  Melhorias  Melhora estruturação do fluxo de controlo dos programas  Possibilita raciocínio formal acerca de programas  Aumenta legibilidade dos programas face ao passado (programação «esparguete») 2013/2014 Fundamentos de Programação 5 Organizaçã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.
  • 6.
     Forma  Instânciasde tipos escalares ou arrays  Instruções organizadas em estruturas de controlo  Instruções e estruturas de controlo organizadas em rotinas  Modularização em rotinas  Funções – Devolvem resultado de um cálculo  Procedimentos – Agem sobre o mundo, modificando-o  Melhorias  Possibilita encapsulamento  Facilita reutilização  Melhora localização de erros e facilita manutenção  Possibilita maximização da coesão e minimização das ligações 2013/2014 Fundamentos de Programação 6
  • 7.
     Forma  Instânciasde tipos escalares, de arrays ou deTAD  Instruções organizadas em estruturas de controlo  Instruções e estruturas de controlo organizadas em rotinas  Rotinas relacionadas organizadas emTAD  Modularização  TAD – Conjunto de dados e operações  Operações – Rotinas que operam sobre instâncias deTAD  Melhorias  Melhora encapsulamento (dados e operações relacionadas)  Possibilita ocultação da informação  Muda perspectiva sobre os problemas 2013/2014 Fundamentos de Programação 7 Ou programação centrada nos dados. Tipos abstractos de dados
  • 8.
     Forma  Instânciasde classes (objectos), de tipos escalares, de arrays ou deTAD  Instruções organizadas em estruturas de controlo  Instruções e estruturas de controlo organizadas em rotinas  Rotinas relacionadas organizadas emTAD  Rotinas relacionadas organizadas em classes  Modularização  Classes – Modelos para objectos com um dado comportamento  TAD – Conjuntos de dados e operações  Operações – Rotinas que operam sobre instâncias deTAD ou sobre objectos  Métodos – Implementação das operações  Melhorias  Introduz noções de extensão e especialização  Muda drasticamente perspectiva sobre os problemas 2013/2014 Fundamentos de Programação 8
  • 9.
    2013/2014 Fundamentos deProgramação 9
  • 10.
     Assenta sobre Programação estruturada – Controlo de fluxo  Programação procedimental – Rotinas  Programação centrada nos dados –TAD e operações  Vantagens  Melhor modularização  Melhor encapsulamento  Maior possibilidade de reutilização  Possibilidade de extensão e especialização  Maior expressividade  Maior flexibilidade  Maior robustez 2013/2014 Fundamentos de Programação 10
  • 11.
     Interface  Operações– Implementadas por um ou mais métodos  Propriedades – Podem ou não ser implementadas usando atributos  Implementação  Métodos – Implementação de operações  Métodos auxiliares – Usados pelos outros métodos  Atributos – Dados que são parte da implementação 2013/2014 Fundamentos de Programação 11
  • 12.
     Tudo (ouquase) são objectos  Objectos têm  responsabilidades,  comportamentos e  propriedades  Organização de programas reflecte realidade…  …mas os objectos são personificados 2013/2014 Fundamentos de Programação 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.
     Análise doproblema  Que objectos existem?  Que responsabilidades têm?  Como colaboram?  Como classificar os objectos?  Desenho da solução  Que classes definir?  Que objectos construir?  Que responsabilidades lhes atribuir?  De que forma os fazer colaborar? 2013/2014 Fundamentos de Programação 13
  • 14.
     Classes  Sãotipos  São modelo para objectos com características comuns  Declaram-se ou definem-se  Definem conjunto de possíveis objectos  São nomes comuns: humano, carro, …  Objectos  São instâncias de classes  Constroem-se  São nomes próprios: Manuel Silva, o carro do Manuel, … 2013/2014 Fundamentos de Programação 14
  • 15.
     Classes  Favorecemabstracção  Permitem encapsulamento  Possibilitam reutilização  Objectos  Representam entidades ▪ reais (e.g., carro) ou ▪ virtuais (e.g., compra)  Têm identidade  Têm estado observável através da interface 2013/2014 Fundamentos de Programação 15 Consumidor só conhece interface. Implementação oculta. Por especialização ou por instanciação.
  • 16.
     Tipos dereferência  Classes de identidade ou referência ▪ Identidade é relevante ▪ Igualdade usualmente não é relevante  Classes de igualdade ou valor ▪ Identidade não é relevante ▪ Igualdade é relevante  Tipos de valor  Identidade não é relevante  Igualdade é relevante 2013/2014 Fundamentos de Programação 16 E.g., classes Java. Tipos primitivos em Java. E.g., String, Rational, Point E.g., Person, Gang, Car
  • 17.
     Definem características (propriedadese operações) comuns a todas as instâncias 2013/2014 Fundamentos de Programação 17 Car - licenseNumber : String - model : String - yearBuilt : int - lastInspectionDate : LocalDate + getLicenseNumber() : String + getModel() : String + getLastInspectionDate() : LocalDate + getYearAge() : int + getNextInspectionDate() : LocalDate + isInspected() : boolean + setInspectedToday() Propriedades Operação implementaçãointerface
  • 18.
     Instâncias declasse de referência com identidade e com propriedades bem definidas 2013/2014 Fundamentos de Programação 18 johnsCar : Car licenseNumber = 00-AA-00 model =VW-GTI-TDI-SLK yearBuilt = 2005 lastInspectionDate = 2014-11-20
  • 19.
     Operações  Parteda interface da classe  São invocadas  Métodos  Parte da implementação da classe  São executados quando se invoca a sua operação  Uma única operação pode ser implementada por vários métodos 2013/2014 Fundamentos de Programação 19 Como? Usando polimorfismo de subtipos, que se verá mais tarde.
  • 20.
     Inicializam instâncias/objectosem construção  Colocam instâncias/objectos em estado inicial válido, i.e., cumprindo a condição invariante de instância 2013/2014 Fundamentos de Programação 20
  • 21.
     Modificadoras –Alteram estado do objecto (procedimentos)  Não modificadoras – Não alteram estado do objecto  Inspectoras – Devolvem propriedade do objecto e não têm efeitos laterais (funções)  «Alter-modificadoras» –Alteram estado do programa ou do seu ambiente (procedimentos) sem alterar estado do objecto 2013/2014 Fundamentos de Programação 21
  • 22.
     Cada operaçãodeve ter um objectivo (ou uma função) único e bem definido  Operações inspectoras – Nome reflecte o que devolvem  Outras operações – Nome reflecte acção realizada  Uma operação não deve ser simultaneamente inspectora e modificadora (função e procedimento) 2013/2014 Fundamentos de Programação 22
  • 23.
     Classes são«pseudo-objectos» fábrica das suas instâncias  «Pseudo-objectos» fábricas têm características de classe  Declaração de atributos e métodos de classe: com static  Boas práticas  Evitar características de classe, em geral  Usar para definir constantes  Exemplo  Math.PI 2013/2014 Fundamentos de Programação 23 Por oposição às características de instância.
  • 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 Programação 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 Programação 25 johnsCar : «ref» Car : Car licenseNumber = 00-aa-00 … : Car licenseNumber = 01-35-AP … janesCar : «ref» Car fredsCar : «ref» Car Referências: Objectos:
  • 26.
    2013/2014 Fundamentos deProgramação 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 AtributosOperações Acesso Nome do objecto Atributos Valores dos atributos
  • 27.
    Classe variável; variável =null; Classe outraVariável = null; Classe aindaOutraVariável = new Classe(…); 2013/2014 Fundamentos de Programação 27 Inicialização da referência com o valor especial null, que indica que referência não referencia qualquer objecto. Declaração da referência variável, não inicializada, capaz de referenciar objectos da classe Classe. Construção de um novo objecto e de uma referência que o referencia. Construção de uma referência com valor inicial nulo. Construçãodareferência Atençã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: int anInteger; anInteger = 10; int anotherInteger = 20; Construção do novo objecto Construçãodareferência
  • 28.
     Usa-se operador. (ponto)  Objecto (característica de instância) referênciaParaObjecto.característica  Classe (característica de classe) Classe.característica 2013/2014 Fundamentos de Programação 28 Se a referência for nula (null), é lançada a excepção NullPointerException. Ou membros.
  • 29.
     Tudo oque pode ser privado deve ser privado!  Regras gerais  Todos os atributos devem ser privados  Os construtores são usualmente públicos  As operações devem ser públicas  Os métodos auxiliares devem ser privados 2013/2014 Fundamentos de Programação 29 As constantes, pelo contrário, podem e muitas vezes devem ser públicas.
  • 30.
     Interface  Operaçõesnão privadas  Constantes não privadas  Implementação  Métodos privados  Atributos privados  Corpos dos métodos  Contrato  Pré e pós-condições das operações e métodos  Manual de utilização  Comentários de documentação da classe  Comentários de documentação de cada característica pública 2013/2014 Fundamentos de Programação 30 não privado ≠ público etc.
  • 31.
     Características oumembros 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 próximas aulas)  public – acesso universal 2013/2014 Fundamentos de Programação 31 Acessibilidadecrescente Há promiscuidade entre objectos da mesma classe! Cuidado! Que é isto? Próximo diapositivo…
  • 32.
    2013/2014 Fundamentos deProgramação 32
  • 33.
    Pacote Pacote 2013/2014 Fundamentosde Programação 33 Classe Rotina Rotina Rotina Classe Rotina Rotina Rotina Classe Rotina Rotina Rotina Rotina Classe Rotina Rotina Classe Rotina Rotina Rotina Rotina
  • 34.
     Conjuntos declasses com relação lógica forte entre si  Exemplos  java.util  org.junit  Convenções de nomes  Só minúsculas  Sem separação entre palavras  Abreviaturas e siglas aceitáveis  Prefixo é nome DNS invertido (e.g., pt.europeia)  Elementos após prefixo podem ser unidades organizacionais (e.g., pt.europeia.fp) 2013/2014 Fundamentos de Programação 34
  • 35.
     Interface  Classespúblicas  Membros não privados de classes públicas  Implementação  Para além da implementação das classes…  … todas as classes privadas de pacote (package- private) 2013/2014 Fundamentos de Programação 35
  • 36.
     java  lang util  org  junit  omg  pt  europeia ▪ fp ▪ eda  Hierarquia aberta  Não têm declaração isolada  Cada ficheiro .java declara o pacote a que pertence 2013/2014 Fundamentos de Programação 36 package pt.europeia.fp public class Game { … } Game.java package pt.europeia.fp public class Player { … } Player.java
  • 37.
     Relevante quantoa nomes  Organização lógica (como directórios)  Menor colisão de nomes  Irrelevante quanto a categorias acesso  Pacote e subpacote são independentes  Membros do subpacote não o são do pacote  Membros do pacote não o são do subpacote 2013/2014 Fundamentos de Programação 37
  • 38.
    2013/2014 Fundamentos deProgramação 38 The type top.AtTop is not visibleThe type top.bottom.AtBottom is not visible
  • 39.
     Uma sóclasse pública por ficheiro  Classe pública em ficheiro com mesmo nome  Número arbitrário de classes privadas de pacote (package-private) por ficheiro, mas…  Boa prática: Uma só classe por ficheiro! 2013/2014 Fundamentos de Programação 39
  • 40.
     Usualmente, àhierarquia de pacotes corresponde uma hierarquia de directórios com os ficheiros correspondentes 2013/2014 Fundamentos de Programação 40 Depende da implementação do Java. No Eclipse (directórios/pastas) No Eclipse (pacotes)
  • 41.
     Classes sãomodelos  Objectos são instâncias classes de referência  Em Java variáveis não são instâncias de classes, mas sim referências para instâncias de classes  Tudo o que pode ser privado deve ser privado  Classes devem organizar-se em pacotes 2013/2014 Fundamentos de Programação 41
  • 42.
     Paradigmas daprogramação  Programação orientada por objectos  Modularização em pacotes 2013/2014 Fundamentos de Programação 42

Notas do Editor

  • #13 Prosopopeia - Figura em que o orador atribui o dom da palavra, o sentimento ou a acção a seres inanimados ou irracionais, aos mortos ou aos ausentes. "prosopopeia", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2013, http://www.priberam.pt/dlpo/prosopopeia [consultado em 09-03-2015].
  • #32 As classes que não estão definidas dentro de outras classes (outer) só podem ser ou públicas ou privadas de pacote.