Programação Orientada a Objetos. Atualização material aula 01.
Transcript of Programação Orientada a Objetos. Atualização material aula 01.
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.
É 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”.
Programação Orientada a Objetos
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
É 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.
Classes
Exemplos de classes
Exemplos de declaração de
classes
Ruby
Python
Object Pascal
C++
PHP
Java
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.
Objetos
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.
Atributos
É 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.
Método
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.
Herança
É 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
Encapsulamento
Modificador Classe PacoteSubclass
eGlobalment
e
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
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.
Interfaces
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.
Polimorfismo
Exercícios e Prática