10 de jan de 2011

Introdução a Programação Orientada a Objetos


Aula de 8/1/2011


Níveis
  • POO
  • UML – representação gráfica da OO
  • PU / XP / Scrum – metodologias
  •  PU = RUP = processo unificado
  • PMI – gerenciamento de projeto
  • CMMi – gestão de qualidade

Início
  • Orientação a objetos
    • Baseados em coisas concretas
    • Mensagens para se comunicar uns com os outros
  • Estruturada: sequencia de ações (como visto nos algoritmos – troca de pneu, troca de lâmpada, receita de bolo)
  • Evolução
    • Depende do contexto. Atual: internet; antigo: programação para exército, banco; anterior: desktop
    • Desenvolver o software mais adequado à plataforma. Mais adequado, menos erros
      • Ex: software para celular, Macintoshs
    • Novo paradigma (?): programação orientada a aspecto
  • Escalabilidade
    • Quanto mais pessoas usam, mais erros são descobertos, mais o ssoftware é aprimorado
  • Primeira linguagem:
    • Simula – acadêmica
    • Smalltalk – comercial

Comparativo Estruturado X Orientado a Objeto
  • Um cliente solicita que o cadastro de aluno seja documentada
  • No modelo Estruturado: a ficha do aluno é a base para a criação das telas e das tabelas
  • No modelo OO há uma pergunta:
    • O que um aluno faz?
  • Objetos: tem comportamentos e características
    • Características do aluno: RG, CPF, nome, idade, sexo
    • Comportamentos do aluno: pagar mensalidade, estudar, assitir aula
  • No modelo OO não há preocupação com tabelas ou comandos
    • Os dados estão associados a comportamentos.
    • Ex: o fato do aluno assistir à aula já traz:
      • Qual o curso
      • Em que local
      • Em que horário
  • Resumo: A idéia antes da ferramenta.
  • Os objetos são classificáveis
    • Teoria geral dos conjuntos
  • Separar funções
    • Analista-Programador? Não
    • Existe Arquiteto-Pedreiro?
    • DBA: o responsável pelo banco
  • Vantagens da OO
    • Organização
    • Produtividade
    • Redução de custo
    • Reaproveitamento
    • Facilidade de manutenção
    • Trabalho em equipe
    • Object management group: OMG.ORG
  • Livros Sugeridos
    • Análise Orientada a Objeto, TAfner, Editora Visual Books.
    • Introdução à Programação Orientada a Objetos com Java, Caíque Cardoso, Editora Ciência Moderna
    • Introdução a Programação Orientada a Objetos com Blue J


  •  Conceitos de OO
    • Três conceitos são usados para definir se uma linguagem é orientada a objeto ou não:
      • Abstração
      • Encapsulamento
    • Herança

  • Objetos
    • São classificáveis
      • Entram em grupos (classes)
      • Ex: grupo de alunos, grupo de professores, grupo de mesas
    • Ocupam espaço na memória
    • Ex: aula
      • Sala de aula: memória
      • Alunos: objetos instanciados na memória
      • Vir para a aula: ser instanciado
      • Sair da aula: objeto destruído
    • Atributos / propriedades
      • Atributos: modelados
      • Propriedades: já vem da linguagem (como no caso dos objetos da tela)
    • Métodos / Operações
      • Métodos modelados
      • Operações: dentro dos métodos
  • Mensagem
    • Professor -> (mensagem aula) Aluno
    • Escola -> mensagem (parâmetros) Aluno
    • Buffer = Sala de espera
    • Indica o local da memória onde o objeto vai ficar
    • Indica o comportamento que o objeto vai ter
    • Tipos de mensagens
      • Síncrona: manda e espera resposta na hora (ex: conversa pelo MSN)
      • Assíncrona: manda e não espera resposta (ex: E-mail)
  • Classes
    • Abriga os objetos
    • Instanciar: colocar na memória
  • Herança
    • Não é “copiar e colar” o objeto para herdar
      • No modo estruturado as funções eram copiadas, coladas e modificadas, mas isto não é herança
    • Classe base e classe derivada
    • Ex:


  • Funcionário: classe base
  • Gerente e Diretor: classes derivadas
  • Gerente tem também vale-refeição, vale transporte e cesta básica, e acrescenta o Bônus.
  • Diretor também tem vale-refeição, vale transporte e cesta básica, e acrescenta o carro dado pela empresa.
  • Gerente não tem carro; Diretor não tem bônus.
  •  
  • Extensibilidade
    • Poder alterar um programa sem afetar o restante
    • Ex: alterar um item nas classes derivadas acima não afeta a classe base
  • Persistência
    • Tempo que o objeto dura na memora
    • Qualquer tipo de memória: RAM, mídias, etc.
  • Abstração
    • Tirar o que não é relevante para o programa
    • Ex: descida pelo elevador
      • Você não precisa saber como o elevador funciona por dentro (mecanismo, cabos, motores etc.). Apenas como selecionar o andar.
    • Ex: ver e-mail
      • Você sabe que digita seu endereço e senha, mas não precisa saber como a página confere sua senha, traz os e-mails na tela etc.
  • Encapsulamento
    • Nível de proteção
    • Não dá acesso direto a um valor – um objeto dá acesso
    • Ex: tempo de descida do elevador
      • Só um objeto externo pode dar a medida desse tempo (um cronômetro)
      • O objeto elevador não dá o tempo
      • Não é possível alterar a velocidade do elevador – somente se fosse possível mexer no mecanismo.
    • Ex: senha do e-mail
      • Um método para validar
      • Outro para alterar ou enviar link de alteração
      • Não é possível alterar diretamente a senha na base de dados
  • Polimorfismo
    • Objetos diferentes recebem a mesma mensagem e atuam cada um de uma forma
      • Ex: aluno e professor recebem a mesma mensagem: aula em tal dia e tal local e tal horário
      • Professor vai agir de uma forma (lecionar, distribuir material, passar lista)
      • Aluno vai agir de outra forma (marcar presença, assistir a aula)

Exercício de modelação:
“Fritar um ovo orientado a objeto”
Extrair os seguintes itens da situação “Fritar um ovo”:
  1. Objetos
  2. Classes
  3. Abstração e encapsulamento
  4. Polimorfismo

Quando achar a folha com a resposta, publico.