Programação Orientada a Objetos
Atualização material aula 01
História
 Se tornou muito conhecida no início da década de 1990 porém surgiu em 1960.
 Até hoje é uma pratica não muito compreendida entre os desenvolvedores de software.
 O paradigma de POO surgiu a partir da necessidade de desenvolver programas com mais
qualidade, ter reaproveitamento de código e diminuir o tempo de desenvolvimento.
 A programação estruturada e a base da POO
 Um dos motivadores foi o avanço do hardware que não acompanhava o avanço do software.
 Em 1967 surge a linguagem de programação SIMULA 67 que introduz o conceito de classe.
 Na década de 1970 surge o Smalltalk uma linguagem de programação orientada a objetos que
popularizou esse conceito.

Logo depois novas linguagem como Java, Object Pascal, Ada, C++ implementam de POO.
 A base da POO é a abstração, não sendo uma ferramenta em si, mas sim uma forma de
programação utilizada ar solucionar problemas do mundo real.
Programação Orientada a Objetos
 É uma forma de solução de problemas baseado na cooperação de elementos que prestam
serviços a outros elementos, esse elementos são os objetos.
“Suponha que eu precise consultar a disponibilidade de um livro para reserva em uma biblioteca
quando eu solicitar essa informação ao bibliotecário, eu não preciso saber os detalhes de como o
bibliotecário irá fazer a consulta e nem mesmo preciso interferir nessa consulta, eu apenas preciso
saber o resultado. Nesse caso eu apenas faço a comunicação com o responsável e espero o
resultado”.
 O aumento da complexidade fez com que surgisse a necessidade de dividir a solução dos
problemas em partes, distribuindo as responsabilidade em unidade independentes com a
ocultando informações e a colaboração entre as unidades.
 Sob o ponto de vista de informações temos objetos, que provem serviços, esse objetos tem
estados, que dão soluções próprias ao serviços requisitados.
 Na POO temos o objeto que deve ser criado, ele guarda um conjunto de dados, os atributos, e
provem serviços através dos métodos.
 Tipo de dados abstrato em POO é o que chamado de classe, na programação estrutura temos
os tipos de dados primitivos e os tipos de dados derivados (record).
Fundamentos de Programação
Orientada a Objetos
Classes
 É um modelo utilizado para formatar a estrutura de um objeto, esse estrutura é utilizada
para instanciar um objeto. A classe estabelece um conjunto de atributos e métodos
comuns a um determinado objeto.
 Classes abstratas
 Possuem objetos que não estão relacionados a classe(ela mesmo), quando
definimos uma classe abstrata para ela fazer sentido deve ter um ou mais métodos
abstratos, ou seja métodos que não tem implementação.
 Classes abstratas não podem ser instanciadas.
Classes
 Classes concretas
 Possuem objetos relacionados a classe (ela mesma), e todos os métodos devem ter
implementações.
Exemplos de
classes
Exemplos de declaração de
classes
Ruby
Python
Object Pascal
C++
PHP
Java
Objetos
 O objeto é um módulo que possui rotinas e estrutura de dados e consegue interagir com
outros objetos através da troca de mensagens que é o mecanismo de comunicação
entre objetos.
 Troca de mensagem é a execução de um pedido de informação ou uma requisição feita por meio
de parâmetros.
 Os objetos são instanciados através de classes e possuem um estado.
Objetos
 Temos dois tipos de objetos

Objetos persistentes: quando um objeto é gravado em memória persistente, ou seja a memoria
secundaria. Exemplo de persistência é a gravação de um objeto em um DB e a serialização.

Objetos transitórios: Utilizado em memória no computador.
Atributos
 São as propriedade que definem os objetos, o atributo pode ser comparado a uma variável.
 Os atributos são divididos em duas categorias.

Atributos de classe: Podem ser acessados por todos os objetos dessa classe, dessa forma o atributo é
compartilhado dessa mesma classe. Em Java definimos esse tipo de atributo como utilizando a palavra
reservada static. Semelhante a esse conceito temos os métodos de classe.

Atributos de instancia: São atributos definidos no objeto e gerenciados pelo próprio objeto que
tema a responsabilidade de manipular o seu valor. Semelhante a esse conceito temos os métodos de
instância.
Método
 É uma forma que permite alterar características de atributos, efetuar controles lógicos
que refletirão em ações.
 Os métodos devem permitir manipular estados de variáveis através de funcionalidades.
 Exemplo: métodos que calcula o debito de uma conta.
 Os métodos são subprogramas que definem operações em objetos da classe.
Herança
 Oferece a possibilidade de solução para um problema pois uma nova classe pode herdar dados e
funcionalidades de uma classe já existente.
 A nova classe pode adicionar, modificar dados e funcionalidades.
 Uma classe herdada é chamada de classe derivada, subclasse, classe filha.
 Temos dois tipos de herança

Herança simples: Quando uma nova classe é uma subclasse de uma única classe pai. Linguagem
como Java, Delphi, C# permitem somente herança simples.
Herança

Herança múltipla: Quando uma nova classe é uma subclasse de mais de uma classe pai.
 Diferenças entre classe pai e classe filha.

A classe pai pode ter métodos privados que não são visíveis a classe filha.

A classe filha pode adicionar membros novo a ela.

A classe filha pode modificar comportamento de métodos herdados da classe pai.
 A herança também pode ser chamada de generalização pelo fato de dar a possibilidade de herdar as
características da classe pai pela classe filha dando a capacidade de transmitir automaticamente as
propriedades e características a classe herdada.
 Em Java utilizado a palavra reservada extends para fazer a herança.
Encapsulamento
 É a forma como é definido o modo de visualização (escopo de visibilidade) de atributos e métodos de
uma classe em relação a seus objetos.
 Dessa forma podemos ocultar recursos que não são de interesse da classe que usa esse recursos.
 Dessa forma temos recursos visíveis e invisíveis.
 Classificação do encapsulamento.

Seção pública: acesso total aos atributos e métodos.

Seção privada: acesso somente na própria classe dos atributos e métodos.

Seção protegida: esta relacionada a herança e permite que os atributos e métodos estejam visíveis na
própria classe e nas classes herdadas.
Encapsulamento
 Tabela que mostra o escopo de visibilidade do Java
Modificador
Classe
Pacote
Subclasse Globalmente
public
sim
sim
sim
sim
protected
sim
sim
sim
não
Sem Modificador (Padrão)
sim
sim
não
não
private
sim
não
não
não
Interfaces
 Uma interface é uma estrutura muito parecida com classes abstratas, porém na interface os
métodos não tem implementação

Uma interface não tem construtor e não pode ser declarado variáveis.
 Quando uma classe herda uma interface todos os métodos da interface devem ser implantados
na classe.
 Interfaces são utilizadas para implementar herança múltipla em Java.
Polimorfismo
 A palavra polimorfismo significa ter muitas formas, e isso em programação ser refere a
possiblidade de um método ter varias implementações ou assinaturas.
 Métodos são polimórficos quando derivam de classes concretas, classe abstratas e interfaces.
 É de responsabilidade do compilador atribuir a assinatura adequada de um método polimórfico.
 Em Java utilizamos a anotação @Override para deixar explicito que um método é polimórfico.
Exercícios e Prática
Download

Slides