Orientação a objetos.

41
Orientação a objetos. Caio Argolo Luiz Daud Jorge Roberto

description

Orientação a objetos. Caio Argolo Luiz Daud Jorge Roberto. 1 - Tipos abstratos de dados. O que é abstração? Empresa x Academia Vamos abstrair? Quais atributos importantes em cada contexto?. Abstração de processos e de dados. Quais são os processos ? Quando vieram os dados ?. - PowerPoint PPT Presentation

Transcript of Orientação a objetos.

Page 1: Orientação a objetos.

Orientação a objetos.Caio ArgoloLuiz DaudJorge Roberto

Page 2: Orientação a objetos.

1 - Tipos abstratos de dados• O que é abstração?• Empresa x Academia• Vamos abstrair?• Quais atributos importantes em cada contexto?

Page 3: Orientação a objetos.

Abstração de processos e de dados• Quais são os processos?• Quando vieram os dados? 

Page 4: Orientação a objetos.

O escalonamento• Como facilitar a vida de um programador? • A modularização (processos, containers, módulos• E quando a coisa é muito grande?• As unidades de compilação!• O grande trunfo do escalonamento!!!

Page 5: Orientação a objetos.

Tipos abstratos de dados• É um encapsulamento que inclui somente a

representação dos dados de um tipo específico de dado e os subprogramas relacionados a ele.

•  Cuma?•  Classes e objetos!•  E assim surgiu a orientação a objetos!

Page 6: Orientação a objetos.

O caso do float!• E ele é um dado abstrato?•  E quem aceita ele?•  O que fazemos com ele?•  A revelação!

Page 7: Orientação a objetos.

Trabalhando com os dados abstratos• As unidades sintáticas.•  Iteradores – Permissão de acesso a todos os

dados do objeto de forma segura (Get e Set);• Construtores – Permissão de criação de uma

instância do objeto respeitando normas internas do tipo de dado abstrato.

• Destrutores – Indicadores de descarte de instâncias.  

Page 8: Orientação a objetos.

Simula 67• Abstração de dados!• Encapsulamento! • Garbage collection!• Ocultação da informação.

Page 9: Orientação a objetos.

Ada• Abstração de dados! • Encapsulamento!• Garbage collection! • Ocultação da informação.• Tipos de dados (private, limited private)• Acesso e modificação!

Page 10: Orientação a objetos.

2 - Programação Orientada a Objetos (POO)• Simula• Smalltalk• O que define se o paradigma é orientação a

objetos?• Tipos de dados abstratos• Herança• Vinculação dinâmica

Page 11: Orientação a objetos.

A Herança• Aumentando a produtividade • Estabelecimento de um padrão• A coexistência de tipos de dados semelhantes• Vamos criar então as subclassses!• Classe pai = Superclasse• Classe filho = Subclasse• E esses tais métodos?• E essas tais mensagens?  • Que história é essa de sobrecarga?

Page 12: Orientação a objetos.

Um exemplo de arquitetura• Classe FrenchGothic que tem um método com o

estilo de fachada. • Suas subclasses terão particularidades nesse

método de estilo, cada uma com seus toques especiais.

• Então as subclasses Reims, Amien e Chartres terão métodos diferentes da classe pai.

Page 13: Orientação a objetos.

Cuidado com a herança...• Jamais limite a liberdade oferecida pela utilização

de dados abstratos.• Fique atento a hierarquização para não causar

dependência!• Herança simples - Há somente uma classe pai• Herança múltipla - Há várias classes pai C++ &

Python• O curioso caso do Java!• Mas desde quando interfaces são classes?

Page 14: Orientação a objetos.

Interfaces• São pseudo-classes, definem um tipo, métodos e

propriedades. As classes que implementarem essa interface deverão adquirir também seus métodos. Não podemos restringir acesso aos membros da interface, isso só é possível nas classes nas quais elas forem implementadas.

Page 15: Orientação a objetos.

Classes abstratas• São classes que podem possuir métodos ou

propriedades não implementados quanto alguns já implementados. É o meio termo entre interfaces e classes. Não podem ser instanciadas, apenas utilizadas como superclasses. Durante gerações de herança os métodos podem ou não ser implementados, mas a classe só deixará de ser abstrata quando estiver com todos os métodos implementados.

Page 16: Orientação a objetos.

Polimorfismo• Classes diferentes• Métodos de mesmo nome• Reutilizando os métodos!• E as classes abstratas?• A economia de tempo!• Pode-se comparar a orientação a objetos a uma

sinulação onde a computação é separada entre diferentes computadores. Cada objeto seria um computador que representa um elemento do mundo real, com suas características, métodos e afins.

Page 17: Orientação a objetos.

Um rápido exemplo• public class OperacaoMatematica {• calculaCoisa(float a, float b) {• }• }•  • public class Multiplica extends OperacaoMatematica{• calculaCoisa(float a, float b){• return a*b;• }• }•  • public class Soma extends OperacaoMatematica{• calculaCoisa(float a, float b){• return a+b;• }• }

Page 18: Orientação a objetos.

Vinculação estática e dinâmica• Quando nos referimos a vinculação dos métodos

aos objetos através das mensagens, a vinculação será dinâmica. Caso o programador opte por vincular estaticamente, estará ganhando tempo de execução em troca de tempo de produção.

Page 19: Orientação a objetos.

3 - Exemplos de Orientação a objetos

Page 20: Orientação a objetos.

3.1 – Suporte em C++

3 - Exemplos de Orientação a objetos

Page 21: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.1 – Suporte em C++• 3.1.1 – Características Gerais:• Compatibilidade quase completa com C original.• Linguagem Híbrida:• Estrutura de Classes da orientação a objetos.• Tipos das linguagens imperativas tradicionais.

• Objetos alocados no mesmo lugar que as variáveis.• Toda classe tem um método construtor.• A maioria das definições de classe incluem um método

destrutor.• Fornece controle de acesso sobre variáveis e métodos,

diferentemente do SmallTalk.

Page 22: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.1 – Suporte em C++• 3.1.2 – Herança.• Um classe pode ser derivada de outra.• Diferente do SmallTalk um classe do C++ pode ser

independente de um Superclasse• Alguns ou todos os dados e funções da Superclasse

podem ser herdados pelas subclasses.• A acessibilidade aos membros da subclasses podem

ser diferentes da classe “Pai”.• Assim que as classes do C++ podem ser impedidas de

serem subtipos.

• O modo de acesso a uma classe pode ser public ou private.

Page 23: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.1 – Suporte em C++• 3.1.2 – Herança.• Se uma classe Pai é pública e uma classe filha é

pública.• Os métodos públicos e protegidos da Pai serão públicos e

protegidos na filha.

• Em uma classe derivada privada.• Os membros públicos e protegidos da classe básica são

privados.• A classe privada derivada interrompe o acesso a todos os

membros de todas as classes ancestrais e suas sucessoras e os protegidos podem ou não ser acessíveis às classes subsequentes.

Page 24: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.1 – Suporte em C++• 3.1.3 – Vinculação Dinâmica.• Numa vinculação estática, uma chamada de função é

vinculada estaticamente a uma definição de função.• No C++ uma variável ponteiro ou referência que tenha

como tipo uma classe pai pode apontar para objetos de qualquer classe filha.

• Para chamar uma função da classe filha a partir de uma dessas variáveis utiliza-se a palavra virtual na declaração da função.

Page 25: Orientação a objetos.

Clique no ícone para adicionar uma imagem

3 - Exemplos de Orientação a objetos3.1 – Suporte em C++3.1.3 – Vinculação Dinâmica.

Page 26: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.1 – Suporte em C++• 3.1.3 – Vinculação Dinâmica.• A função da classe pai não deve ter corpo pois será

uma função virtual pura.• Apenas as funções das derivadas terão corpo pois

serão chamadas dinamicamente a partir da referencia feita pela classe pai

• Uma classe que inclui uma função virtual pura é uma classe abstrata e não pode ser instanciada.

• Esse recurso permite alterações ou adições na função desenhar das classes filhas sem grandes alterações de código.

Page 27: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.1 – Suporte em C++• 3.1.4 – Avaliação.• A herança do C++ é mais confusa que a do SmallTalk• No C++ o programador deve especificar a vinculação

estática ou dinâmica• A verificação estática de tipos do C++ é muito mais

eficiente que dinâmica do SmallTalk• SmallTalk preza pela elegância enquanto C++ pela

retrocomptibilidade com o C e desempenho.• C++ chegou a ser 10 vezes mais rápida que o

SmallTalk em benchmarks.

Page 28: Orientação a objetos.

3.2 – Suporte em Java

3 - Exemplos de Orientação a objetos

Page 29: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.2 – Suporte em Java• 3.2.1 – Características gerais.• Não utiliza apenas objetos• Tipos primitivos não são objetos

• Não possui tipos enumeração ou registro.• Arrays são objetos.• As classes sempre tem um pai ao contrario do C++• Todas as classes derivam da classe object ou de

alguma filha dela.• Todos os objetos em java são heap-dinâmicos

explícitos.• Utiliza coletor de lixo.

Page 30: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.2 – Suporte em Java

• 3.2.2 – Herança.• Diretamente Java suporta apenas herança simples.• Existe uma um tipo de classe virtual, a interface, que implementa uma

espécie de herança múltipla.• Interfaces definem apenas a especificação de uma classe.• Um classe pode herdar de uma classe pai e implementar um interface.• Um exemplo de herança são os Applets.• Quando um applet implementa uma animação é normalmente definida

para rodar em seu próprio Thread.• Porém uma classe não pode herdar de Applet e Thread ao mesmo tempo• Por isso utiliza-se a interface predefinida Runnable.• Public class Clock extends Applet implementes Runnable.

• No java um método pode ser declarado como final, assim ele não pode ser sobrescrito em nenhuma classe descendente.

• Quando um classe é declarada final em sua definição ela não pode ser pai de nenhuma classe.

Page 31: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.2 – Suporte em Java• 3.2.3 – Vinculação Dinâmica.• Todas as chamadas de métodos são Vinculadas

dinamicamente.• Métodos declarados como final não podem ser

sobrescritos por isso possuem vinculação estática.• Diferente do C++ que é preciso declarar um método

como virtual para utilizar vinculação dinâmica.• Aqui a vinculação estática precisa de declaração.

Page 32: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.2 – Suporte em Java• 3.2.4 – Encapsulamento.• Dois tipos Classes e Pacotes• Pacotes são um Encapsulamento lógico.• Um pacote cria um novo nome de espaço.• Variáveis sem modificador de acesso tem um escopo

de pocte.• Todos os métodos e variáveis privados não declarados

são visíveis em todo o pacote no qual são declarados• Ampliação do conceito de protegido do C++• Alternativa aos amigos no C++

Page 33: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.2 – Suporte em Java• 3.2.5 – Avaliação.• Projeto similar ao C++• Mas tem diferenças• Ausência de funções.• Não permite classes sem pais.• Vinculação dinâmica é normal• Controles de acesso simplificados, Variando de controles

de derivação a funções amigas.

Page 34: Orientação a objetos.

3.3 – Suporte em ADA 95

3 - Exemplos de Orientação a objetos

Page 35: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.3 – Suporte em ADA 95

• 3.3.1 – Características gerais.• Derivada do ADA 83, mas com extensões significativas.• Projetada para suportar orientação o objetos.• ADA 83 já possuía suporte a tipos abstratos.• Implementaram apenas suporte a vinculação dinâmica e herança.• Tinha o objetivo de mudar o mínimo no ADA 83• E manter a verificação de tipos estática.• Classes como uma nova categoria, tipos marcados.• Esses tipos podem ser registros ou tipos privados.• São encapsulados em pacotes que permitem compilação separada.• OS tipos são chamados marcados porque incluem implicitamente

uma tag.• O subprograma que define as operações em um tipo-marcado

aparece na mesma lista da declaração que a do tipo.

Page 36: Orientação a objetos.

Clique no ícone para adicionar uma imagem3 - Exemplos de Orientação a objetos3.3 – Suporte em ADA 953.3.1 – Características gerais.

Page 37: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.3 – Suporte em ADA 95• 3.3.2 – Herança.• Os tipos derivados baseiam-se em tipos marcados.• Novas entidades são adicionadas às herdadas incluindo

uma definição de registro.• Essa nova classe é definida em um pacote separado,

para não exigir a recompilarão do tipo-pai.• Por esse mecanismo de herança não existe nenhuma

maneira de impedir que as entidades da classe-pai sejam incluídas na derivada.

• Classes derivadas podem somente estender classes-pai, e portanto são subtipos.

Page 38: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.3 – Suporte em ADA 95• 3.3.3 – Vinculação Dinâmica.• Oferece tanto vinculação dinâmica quanto estática.• A vinculação dinâmica é forçada utilizando tipos de

classe ampla.• Três tipos básicos puramente abstratos podem ser

definidos no ADA 95.• Basta declarar como abstract nas definições de tipos• As definições de subprogramas não podem ter corpos.

Page 39: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.3 – Suporte em ADA 95• 3.3.4 – Avaliação.• Não é possível comparar ADA 95 com C++, baseando

apenas no que foi apresentado.• Elas são muito diferentes.• Porém as classes C++ tem seu próprio sistemas de tipos

usual herdado do C• C++ oferece melhor suporte a herança múltipla.• ADA não inclui suporte a construtores e destrutores.• ADA não restringe a vinculação dinâmica apenas a

ponteiros e referências. E sim aos próprios objetos.

Page 40: Orientação a objetos.

3.4 – Considerações Finais

3 - Exemplos de Orientação a objetos

Page 41: Orientação a objetos.

3 - Exemplos de Orientação a objetos• 3.4 – Considerações Finais• A programação Orientada a a objetos inclui três conceitos

fundamentais:• Tipos de dados abstratos.• Herança.• Vinculação Dinâmica.

• Paradigma suportado com:• Classes• Métodos• Objetos• Passagem de mensagens

• Alguma linguagens são Puramente OO (SmallTalk)• Outras Híbridas (C++)• E outras controversas (Java)