• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Programação Orientada por Objectos - Aula 1
 

Programação Orientada por Objectos - Aula 1

on

  • 5,894 views

Aula teórica 1 da unidade (disciplina) de Programação Orientada por Objectos dos cursos de LIGE, LEI e LETI no ISCTE-IUL no 2.º semestre do ano lectivo de 2009/2010.

Aula teórica 1 da unidade (disciplina) de Programação Orientada por Objectos dos cursos de LIGE, LEI e LETI no ISCTE-IUL no 2.º semestre do ano lectivo de 2009/2010.

Statistics

Views

Total Views
5,894
Views on SlideShare
4,848
Embed Views
1,046

Actions

Likes
4
Downloads
187
Comments
0

11 Embeds 1,046

http://zago.zip.net 686
http://www.jornaljava.com 247
http://blog.uol.com.br 58
http://poo.dcti.iscte.pt 24
http://www.slideshare.net 12
http://www.linkedin.com 9
https://jujo00obo2o234ungd3t8qjfcjrs3o6k-a-sites-opensocial.googleusercontent.com 4
http://aw.zago.sites.uol.com.br 3
http://webcache.googleusercontent.com 1
http://cc.bingj.com 1
https://www.linkedin.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Programação Orientada por Objectos - Aula 1 Programação Orientada por Objectos - Aula 1 Presentation Transcript

    • Aula 1
      Introdução à programação orientada por objectos
      Classes, objectos e referências (revisão)
      Modularização em pacotes
      Organização em ficheiros e directórios
    • Programação estruturada
      Forma
      Instâncias de tipos escalares ou matriciais
      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”)
      2008/2009
      Programação Orientada por Objectos
      2
      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.
    • Programação procedimental
      Forma
      Instâncias de tipos escalares ou vectoriais
      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 dados, modificando-os
      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
      2010-03-30
      Programação Orientada para Objectos
      3
    • Programação baseada em objectos ou centrada nos dados
      Forma
      Instâncias de tipos escalares ou vectoriais, ou de TAD (tipos abstractos de dados)
      Instruções organizadas em estruturas de controlo
      Instruções e estruturas de controlo organizadas em rotinas
      Rotinas relacionadas organizadas em TAD
      Modularização
      TAD – Conjunto de dados e operações
      Operações – Rotinas que operam sobre instâncias de TAD
      Melhorias
      Melhora encapsulamento (dados e operações relacionadas)
      Possibilita ocultação dos dados
      Muda perspectiva sobre os problemas
      2008/2009
      Programação Orientada por Objectos
      4
    • Programação orientada por objectos
      Forma
      Instâncias de classes (objectos), de tipos escalares ou vectoriais, ou de TAD (tipos abstractos de dados)
      Instruções organizadas em estruturas de controlo
      Instruções e estruturas de controlo organizadas em rotinas
      Rotinas relacionadas organizadas em TAD
      Operações relacionadas organizadas em classes
      Modularização
      Classes – Modelos para objectos com um dado comportamento
      TAD – Conjunto de dados e operações
      Operações – Rotinas que operam sobre instâncias de TAD
      Métodos – Implementação das operações
      Melhorias
      Introduz noções de extensão e especialização
      Muda drasticamente perspectiva sobre os problemas
      2008/2009
      Programação Orientada por Objectos
      5
    • Programação orientada por objectos: classes
      Paradigmas usados
      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
      2008/2009
      Programação Orientada por Objectos
      6
    • Programação orientada por objectos: encapsulamento
      Interface:
      Operações – Implementadas em um ou mais métodos
      Propriedades – Podem ou não ser implementadas usando atributos
      Implementação
      Métodos – Implementação de operações
      Atributos – Dados que fazem parte da implementação da classe
      2008/2009
      Programação Orientada por Objectos
      7
    • Programação orientada por objectos: abordagem
      Tudo (ou quase) são objectos
      Objectos têm responsabilidades, comportamentos e propriedades
      Organização de programas reflecte realidade…
      …mas os objectos são personalizados
      2008/2009
      Programação Orientada por Objectos
      8
      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().
    • Programação orientada por objectos: análise e desenho
      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?
      2008/2009
      Programação Orientada por Objectos
      9
    • Classes e objectos
      Classes
      São tipos
      São modelo ou projecto para construção de objectos com características comuns
      Declaram-se ou definem-se
      Definem conjunto de possíveis objectos
      Exemplos: humano, carro
      Objectos
      São instâncias de classes
      Constroem-se
      Exemplos: Manuel Silva, o carro do Manuel Silva
      2008/2009
      Programação Orientada por Objectos
      10
    • Classes e objectos
      Classes
      Representam objectos com características comuns
      Favorecem abstracção (consumidor só conhece interface)
      Permitem encapsulamento (implementação oculta)
      Possibilitam reutilização (por especialização ou instanciação)
      Objectos
      Modelam ou representam entidades reais (carro) ou virtuais (compra)
      Têm identidade própria
      Têm estado total ou parcialmente observável através da interface
      2008/2009
      Programação Orientada por Objectos
      11
    • Tipos de referência e tipos de valor
      Tipos de referência
      Identidade é relevante
      Igualdade usualmente não é relevante
      Tipos de valor
      Igualdade é relevante
      Identidade não é relevante
      2008/2009
      Programação Orientada por Objectos
      12
      Classes Java.
      Tipos primitivos em Java.
    • Classes em Java
      Definem conjunto de características (propriedades e operações) comuns a todas as suas instâncias.
      2010-03-30
      Programação Orientada para Objectos
      13
      Car
      - licenseNumber : String
      - model : String
      - yearBuilt : int
      - lastInspectionDate : Date
      implementação
      interface
      + getLicenseNumber() : String
      + getModel() : String
      + getLastInspectionDate() : Date
      + getYearAge() : int
      + getNextInspectionDate() : Date
      + isInspected() : boolean
      + setInspectedToday()
      Propriedades
      Operação
    • Objectos em Java
      Instâncias de uma classe com valores específicos nos seus atributos e, por isso, com propriedades bem definidas.
      2010-03-30
      Programação Orientada para Objectos
      14
      johnsCar : Car
      licenseNumber = 00-aa-00
      model = VW-GTI-TDI-SLK
      yearBuilt = 2005
      lastInspectionDate = 2009-11-20
    • Operações e métodos em Java
      Operações
      Parte da interface da classe
      Invocam-se
      Métodos
      Parte da implementação da classe
      Executados quando se invoca a operação correspondente
      Uma única operação pode ser implementada por vários métodos
      2008/2009
      Programação Orientada por Objectos
      15
      Como? Usando polimorfismo de subtipos, que se verá mais tarde.
    • Construtores em Java
      Inicializam objectos quando estes são construídos
      Colocam objectos num estado inicial válido (cumprindo o a condição invariante de instância)
      2008/2009
      Programação Orientada por Objectos
      16
    • Operações em Java
      Modificadoras – 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 objecto
      Inspectoras – 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/2009
      Programação Orientada por Objectos
      17
    • Operações em Java: boas práticas
      Cada operação deve ter um objectivo (uma função) único e bem definido
      Operações inspectoras – Nome reflecte aquilo que devolvem
      Outras operações – Nome reflecte a acção que realizam
      Uma operação não deve tentar ser simultaneamente inspectora e modificadora (função e procedimento)
      2008/2009
      Programação Orientada por Objectos
      18
    • Características de classe
      Classes são “pseudo-objectos” fábrica das suas instâncias
      “Pseudo-objectos” fábricas têm características de classe
      Em Java declaração de atributos e métodos de classe precede-se do qualificador static
      Boas práticas
      Evitar características de classe!
      Usar apenas para definir constantes!
      Exemplo
      Math.PI
      2008/2009
      Programação Orientada por Objectos
      19
      Por oposição às características de instância.
    • Referências e objectos
      CarjohnsCar = newCar("00-aa-00", …);
      CarjanesCar = johnsCar;
      CarfredsCar = newCar(johnsCar);
      2010-03-30
      Programação Orientada para Objectos
      20
      Construtor por cópia!
      johnsCar, janesCar : Car
      fredsCar : Car
      licenseNumber = 00-aa-00

      licenseNumber = 00-aa-00

      Hmmm…. Mesma matrícula??
    • Referências e objectos
      CarjohnsCar = newCar("00-aa-00", …);
      CarjanesCar = johnsCar;
      CarfredsCar = newCar(johnsCar);
      2010-03-30
      Programação Orientada para Objectos
      21
      Referências:
      Objectos:
      johnsCar : «ref» Car
      : Car
      : Car
      janesCar : «ref» Car
      fredsCar : «ref» Car
      licenseNumber = 00-aa-00

      licenseNumber = 00-aa-00

    • UML = UnifiedModellingLanguage
      2010-03-30
      Programação Orientada para Objectos
      22
      Nome
      Acesso
      Nome do objecto
      Atributos
      Atributos
      Operações
      johnsCar : Car
      Car
      licenseNumber = 00-aa-00
      model = VW-GTI-TDI-SLK
      yearBuilt = 2005
      lastInspectionDate = 2009-11-20
      - licenseNumber : String

      Valores dos atributos
      + getLicenseNumber() : String

    • Referências e objectos: declaração e construção
      Classevariável;
      variável = null;
      Classe outraVariável = null;
      ClasseaindaOutraVariável =
      newClasse(…);
      2008/2009
      Programação Orientada por Objectos
      23
      Declaração da referência variável, não inicializada, capaz de referenciar objectos da classe Classe.
      Construção do novo objecto
      Construção da referência
      Construção da referê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:
      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ística
      Classe (característica de classe)
      Classe.característica
      2008/2009
      Programação Orientada por Objectos
      24
      Se a referência for nula (null), é lançada a excepção NullPointerException.
    • Princípio do encapsulamento
      Tudo o que pode ser privado, deve ser privado!
      Regras gerais
      Todos os atributos devem ser privados
      Os construtores são usualmente públicos
      2008/2009
      Programação Orientada por Objectos
      25
      As constantes, pelo contrário, podem e muitas vezes devem ser públicas.
    • Classe é um módulo
      Interface
      Operações e métodos não privados
      Constantes não privadas
      Implementação
      Operações e 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
      2008/2009
      Programação Orientada por Objectos
      26
      não privado ≠ público
      etc.
    • Categorias de acesso
      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
      2008/2009
      Programação Orientada por Objectos
      27
      Acessibilidade crescente
      Há promiscuidade entre objectos da mesma classe! Cuidado!
      Que é isto? Próximo diapositivo…
    • Pacote
      Pacote
      Unidades de modularização em Java
      2010-03-30
      Programação OrientadaparaObjectos
      28
      Classe
      Classe
      Rotina
      Rotina
      Rotina
      Rotina
      Classe
      Rotina
      Rotina
      Classe
      Rotina
      Rotina
      Rotina
      Rotina
      Classe
      Rotina
      Rotina
      Rotina
      Rotina
      Rotina
      Rotina
    • Pacotes
      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
      Primeiros elementos são nome DNS invertido (e.g., pt.iscte)
      Restantes elementos podem designar unidades organizacionais (e.g., pt.iscte.dcti.poo)
      2008/2009
      Programação Orientada por Objectos
      29
    • Pacotes como módulos
      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)
      2008/2009
      Programação Orientada por Objectos
      30
    • Pacotes: organização hierárquica
      java
      lang
      util
      org
      junit
      omg
      pt
      iscte
      dcti
      ip
      games
      poo
      Hierarquia aberta
      Não têm declaração isolada
      Cada ficheiro .java declara o pacote a que pertence
      2008/2009
      Programação Orientada por Objectos
      31
      Game.java
      Player.java
      packagept.iscte.dcti.poo
      class Game {

      }
      packagept.iscte.dcti.poo
      classPlayer {

      }
    • Pacotes: organização hierárquica
      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
      2008/2009
      Programação Orientada por Objectos
      32
    • Pacotes: organização hierárquica
      2010-03-30
      Programação Orientada para Objectos
      33
      The type top.AtTop is not visible
      The type top.bottom.AtBottom is not visible
    • Ficheiros
      Uma só classe pública por ficheiro
      Classe pública e seu ficheiro têm de ter o mesmo nome
      Número arbitrário de classes privadas de pacote (package-private) por ficheiro, mas…
      Boa prática: Uma só classe por ficheiro!
      2008/2009
      Programação Orientada por Objectos
      34
    • Directórios
      Usualmente, à hierarquia de pacotes corresponde uma hierarquia de directórios com os ficheiros correspondentes
      2008/2009
      Programação Orientada por Objectos
      35
      Depende da implementação do Java.
      No Explorer do Windows
      (directórios)
      No Eclipse
      (pacotes)
    • A reter
      Uma classe é um modelo
      Um objecto é uma instância de uma classe
      Em Java não é possível declarar variáveis cujo tipo é uma classe: variáveis declaradas dessa forma são referências para objectos da classe
      Tudo o que pode ser privado, deve ser privado
      As classes devem ser organizadas em pacotes
      2010-03-30
      Programação Orientada para Objectos
      36
    • 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-0
      2010-03-30
      Programação Orientada para Objectos
      37
    • Sumário
      Introdução à programação orientada por objectos
      Classes, objectos e referências (revisão)
      Modularização em pacotes
      Organização em ficheiros e directórios
      2010-03-30
      Programação Orientada para Objectos
      38