Curso Java - Básico - Introdução ao paradigma OO

Por que aprender orientação a objeto?

  • Java é uma linguagem Orientada a Objetos.
  • É possível escrever programas em Java sem saber usar os recursos da OO. Um programa simples com apenas uma classe.
    • Os principais problemas em aprender Java sem saber OO são:
      • Será muito difícil entender outros programas.
      • Seu código será feio, difícil de depurar e de reutilizar.
      • Você estará perdendo ao usar uma linguagem como Java.
        • Uma melhor opção é escolher uma outra linguagem.
    • OO permite a construção de software reutilizável, extensível e de fácil manutenção.

Objeto

  • Definição:
    • Um conceito, uma abstração com significado específico em um contexto.
    • Propósito:
      • Representar uma entidade do mundo real.
    • Objetos possuem:
      • Identidade,
      • Conjunto de características que determinam seu estado e
      • Comportamento específico definido por um conjunto de ações.

Exemplo de objeto

./images/telefone.gif

  • Identidade: ‘Telefone da minha casa’
  • Característcas:
    • cor azul
    • número 576-0989
  • Comportamento:
    • tocar
    • discar

Outro Exemplo de objeto

./images/onibus.gif

  • Identidade: ‘ônibus da escola’
  • Características:
    • cor amarela
    • placa LXY 7684
    • numero de assentos 30
    • tipo de combustivel a diesel
  • Comportamento:
    • frear
    • andar
    • correr
    • buzinar
    • acelerar

Classe

  • Definição:
    • Abstrações utilizadas para representar um conjunto de objetos com características e comportamento idênticos.
    • Uma classe pode ser vista como uma fábrica de objetos.
    • Objetos de uma classe são denominados instâncias.
      • Todos os objetos são instâncias de alguma classe.

Classe Telefone

  • Identificação
    • Características: (Atributos)
      • cor
      • número
        • discagem
    • Comportamento: (Métodos)
      • tocar
      • discar

Atributos

  • Descrevem as características das instâncias de uma classe.
  • Seus valores definem o estado do objeto.
  • O estado de um objeto pode mudar ao longo de sua existência .
    • Posso pedir para trocar o número do aparelho, por exemplo.
      • Mudanças no atributo salário, através de métodos, impedem que mudanças tenham que ser feitas em vários lugares, chamadas não são modificadas.
    • As instâncias de um objeto têm em comum a classe que define o objeto.
      • O que diferencia as instâncias entre si é o valor de seus atributos.

Métodos

  • Representam o comportamento das instâncias de uma classe.
  • A instância modifica seus atributos, através dos métodos.

    ./images/exemploMetodo.gif

Mensagens

  • Objetos são entidades independentes que necessitam se comunicar.
  • Objetos se comunicam através de troca de mensagens.
  • Os dados de um objeto não podem ser manipulados ou vistos por outro objeto (princípio do encapsulamento).
  • Para obter informações ou ativar o comportamento de objetos, é preciso enviar-lhes mensagens.
  • Objetos só reagem a mensagens que fazem parte das ações do protocolo de sua classe.

Como representar esses conceitos?

  • Utilizando uma linguagem de modelagem de sistemas, a UML.
  • A linguagem abrange um conjunto de diagramas que tornam possível a descrição de um sistema através de desenhos.
  • Existem vários diagramas descritos pela UML. Alguns exemplos são:
    • Diagrama de Classe.
    • Diagramas de Colaboração.
    • Diagrama de Estado.

Diagrama de Classe

  • Um diagrama de classes descreve as classes do sistema e os relacionamentos que existem entre elas.
  • Uma classe é representada por um retangulo que possui três compartimentos:
    • A identificação da classe
    • Os atributos
    • Os métodos
  • Um relacionamento é representado uma reta.

Exercício

  • Descobrir as classes e o relacionamento para o seguinte sistema
  • Construir uma agenda para armazenar os contatos de uma empresa. Os contatos da empresa podem ser pessoa física ou pessoa juridica. Ambos os contatos possuem nome, endereço, uma lista de telefones. Se o contato for uma pessoa física possuira um CPF e se for uma pessoa juridica possuira um CNPJ. Deverá existir a possibilidade de consulta pelo nome.

Herança

  • Estabelecem relacionamentos de generalização-especialização (é-um) entre classes
  • Permitem estabelecer hierarquias de classificação
  • A herança permite o reuso, reaproveitando código e dados da classe herdada.

Exercicio de Herança

  • Refinar o exercicio anterior através da utilizando do conceito de herança.

Polimorfismo

  • Possibilidade de enviar uma mesma mensagem para objetos de classes diferentes.
  • Cada uma das classes implementa um método específico para responder à mensagem.
  • O tipo de uma classe derivada é compatível com o tipo da classe de onde deriva, e uma pode ser usada no lugar da outra.

Classe Abstrata

  • Representação de uma classe que não possui instâncias
  • Utilizada com objetivo de:
    • diminuir a complexidade
    • auxiliar a classificação e organização da modelagem

    ./images/classeAbstrata.gif

Interface

  • Uma interface especifica um tipo, discriminando as operações que ele suporta.
  • Um sistema bem projetado é baseado em interfaces básicas bem definidas.
  • Interfaces determinam a inter-relação entre partes do sistema, encaixando-as como num quebra-cabeça.

    ./images/interface.gif

Exercício de Herança 2

  • A classe Pessoa deve ser uma classe normal, uma classe abstrata ou uma interface?

Associação

  • Um programa OO é um conjunto de objetos relacionados entre si.
  • Objetos se associam para trocar mensagens, distribuindo entre eles as tarefas apropriadas a cada um.

    ./images/associacao.gif

Bibliografia

  • UML Essencial - Um breve guia para a linguagem-padrão de modelagem de objetos.

    Martin Fowler e Kendall Scott

    Editora Bookman