1 / 41

Orientação a objetos.

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 ?.

arnon
Download Presentation

Orientação a objetos.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. 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!!!

  5. 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!

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

  7. 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.  

  8. Simula 67 • Abstração de dados! • Encapsulamento! • Garbagecollection! • Ocultação da informação.

  9. Ada • Abstração de dados! • Encapsulamento! • Garbagecollection! • Ocultação da informação. • Tipos de dados (private, limitedprivate) • Acesso e modificação!

  10. 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

  11. 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?

  12. 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.

  13. 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?

  14. 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.

  15. 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.

  16. 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.

  17. Um rápido exemplo • publicclassOperacaoMatematica { • calculaCoisa(float a, float b) { • } • } • publicclass Multiplica extendsOperacaoMatematica{ • calculaCoisa(float a, float b){ • return a*b; • } • } • publicclass Soma extendsOperacaoMatematica{ • calculaCoisa(float a, float b){ • returna+b; • } • }

  18. 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.

  19. 3 - Exemplos de Orientação a objetos

  20. 3 - Exemplos de Orientação a objetos 3.1 – Suporte em C++

  21. 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.

  22. 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.

  23. 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.

  24. 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 virtualna declaração da função.

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

  26. 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.

  27. 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.

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

  29. 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.

  30. 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. • PublicclassClockextendsAppletimplementesRunnable. • 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.

  31. 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.

  32. 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++

  33. 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.

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

  35. 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.

  36. 3 - Exemplos de Orientação a objetos 3.3 – Suporte em ADA 95 3.3.1 – Características gerais.

  37. 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.

  38. 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.

  39. 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.

  40. 3 - Exemplos de Orientação a objetos 3.4 – Considerações Finais

  41. 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)

More Related