Orientação a Objetos Thiago Messias Evangelista UESC – Universidade Estadual de Santa Cruz Version 2012-11-08 1 LibreOffice Productivity Suite Abordagens História; Conceitos; Benefícios / Limitações; Referências; 2 LibreOffice Productivity Suite História Tudo tem um começo... 3 LibreOffice Productivity Suite História O.O. não é uma idéia nova - 1960s; Alan Kay, criador do termo: “Programação Orientada a Objetos”; Ivan Sutherland(Computação Gráfica) Já utilizara no glossário do Sketchpad(1963) definições de “objeto” e “instância” Kristen Nygaard e Ole-Johan Dahl Simula 67 – 60's; Primeira linguagem a realmente utilizar os conceitos de O.O.; 4 LibreOffice Productivity Suite História Simula 67 – 60's Uma revisão melhorada do Simula I; Introduzia: Noções de classe, instância e objetos; Subclasses; Métodos Virtuais; Co-rotinas; Possuia um “garbage collection” que foi “emprestado” da linguagem funcional Lisp; Usada para Modelagem Física; Utilizada para a criação de modelos para estudo e melhora do movimento de navios e de seus conteúdos através dos portos de carga; Mais tarde iria influenciar linguagens como: Smalltak, Object Pascal e C++; 5 LibreOffice Productivity Suite História Daí pra frente, surgem: Smalltalk; C++; Delphi; C#; Python; Ruby; Java; Ada; 6 LibreOffice Productivity Suite Conceitos “- E agora? O que preciso saber para programar O.O.?” - Aluno do 3º semestre de Computação 7 LibreOffice Productivity Suite Conceitos Tipos Abstratos de Dados: Propoe reduzir a informação necessária para a criação de um algoritmo através da abstração das variáveis envolvidas em uma única entidade fechada; Proporciona: Melhor compreensão dos algoritmos; Os projetos puderam alcançar alta complexidade mantendo-se a legibilidade; Conceito altamente recomendado; Posteriormente, essa metodologia foi incorporada à LP: A conhecida Orientação a Objetos 8 LibreOffice Productivity Suite Conceitos Classe: Define: Um tipo de “coisa”(Objeto / Instância); O que esses objetos possuem como características(Atributos); O tipo de ações que esses objetos são capazes de realizar(Métodos); Objeto: Observe que uma classe “não tem vida”, ela é um conceito; Já os Objetos(felinos, humanos... Da classe Mamíferos) poussem; 9 LibreOffice Productivity Suite Conceitos Atributos: É o trecho da instância, onde estão especificados (quantativa ou qualitativamente) as características dele; Seguindo o exemplo, poderíamos ter: Classe Account Objeto Xico's Account Atributos Holder: Xico Bruno Number: 64.123-1 Credit Line: Banco da Praça Balance: + R$ 1053,73 10 LibreOffice Productivity Suite Conceitos Métodos: Serão as ações que poderão ser excutadas no/com objetos da classe; Eles serão importantes para o Encapsulamento(Métodos Get/Set); Construtores / Destrutores: São os responsáveis por incializar os atributos do objeto que está sendo instanciado; Em algumas linguagens é necessário que sejam criados destrutores para “destruir” instâncias; 11 LibreOffice Productivity Suite Conceitos Encapsulamento: Consiste na separação de aspectos internos e externos de um objeto; Os famosos Modificadores de Acesso; Exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom); Isso permite que o programador possa determinar a forma como os dados poderão ser “vistos” e modificados; 12 LibreOffice Productivity Suite Conceitos Encapsulamento: Public: O modificador public deixará visível a classe ou membro para todas as outras classes, subclasses e pacotes do projeto Java. Private: O modificador private deixará visível o atributo apenas para a classe em que este atributo se encontra. Protected: O modificador protected deixará visível o atributo para todas as outras classes e subclasses que pertencem ao mesmo pacote. A principal diferença é que apenas as classes do mesmo pacote tem acesso ao membro. O pacote da subclasse não tem acesso ao membro. Padrão: Por padrão, a linguagem Java permite acesso aos membros apenas ao pacote em que ele se encontra. 13 LibreOffice Productivity Suite Conceitos Encapsulamento: Em Java, podemos encontrar a seguintes visiblidades: Modificador Classe Pacote Subclasse Global Public sim sim sim sim Protected sim sim sim não Vazio (Padrão) sim sim não não Private sim não não não 14 LibreOffice Productivity Suite Conceitos Herança: É o mecanismo pelo qual uma classe (sub-classe) pode estender outra classe (super-classe), aproveitando seus comportamentos (métodos) e variáveis possíveis (atributos). Super-Classe: Mamífero Sub-Classe: Humano O mesmo se aplica na Herança Múltipla, contudo não são todas as linguagens que implementam totalmente essa funcionalidade; 15 LibreOffice Productivity Suite Conceitos Polimorfismo: Poli(Muitas) + Morfa(Forma); Existem 4 tipos, contudo nem todas as linguagens O.O. as implementam; Polimorfismo Universal Paramétrico Ad-Hoc Inclusão Sobrecarga Coerção 16 LibreOffice Productivity Suite Conceitos Polimorfismo: Universal: Trabalha potencialmente num conjunto infinito de tipos de modo disciplinado; Possui duas formas: paramétrico e inclusão; Ad-Hoc Não existe um modo único e sistemático de determinar o tipo de resultado de uma função em termos dos tipos dos seus argumentos de entrada; É uma forma limitada de polimorfismo; Possui duas formas: coerção e sobrecarga; 17 LibreOffice Productivity Suite Conceitos Polimorfismo: Universal: Paramétrico: Um mesmo objeto pode ser utilizado uniformemente como parametro em diferentes contextos sem necessidade de alteração; Métodos com essas características (chamados de métodos genéricos); O PHP, por exemplo, não requer isso, já que não utiliza a tipagem explícita: $var pode receber uma string, tornando-se no tipo string e em seguida receber um inteiro, tornando-se um em um tipo inteiro; Inclusão: Se uma classe-mãe Brinquedo se especializa em uma classe-filha Carro, uma outra classe ControleRemoto, que possui um atributo do tipo Brinquedo poderá reconhecer uma instancia da classe-filha; Exemplo a seguir: -> 18 LibreOffice Productivity Suite Conceitos Polimorfismo: Universal: Inclusão: Exemplo: 19 LibreOffice Productivity Suite Conceitos Polimorfismo: Ad-Hoc: Coerção: Meio utilizado para contornar a rigidez dos tipos monomórficos(Algol68); Existe um mapeamento interno entre tipos; Exemplo: Se o operador soma é definido como tendo 2 parâmetros reais. Um inteiro e um real são passados como parâmetros, o inteiro é “coargido” para um real; Sobrecarga: Permite que um nome de função seja utilizado mais do que uma vez com diferentes tipos de parâmetros Exemplo: Uma função soma pode ser sobrecarregada para operar com dois parâmetros inteiros e dois reais. 20 LibreOffice Productivity Suite Conceitos Interface: É o alicerce da programação modular; Na O.O., a interface de um objeto consiste de um conjuto de métodos que um objeto deve suportar(O que ocorre com o Java); 21 LibreOffice Productivity Suite Benefícios / Limitações 22 LibreOffice Productivity Suite Benefícios / Limitações Benefícios: Divisão de código um pouco mais lógica e melhor encapsulada do que a empregada nos sistemas não orientados a objetos; Isto torna a manutenção e extensão do código mais fácil e com menos riscos de inserção de bugs; Fácil reaproveitamento de código; Limitações: Dificilmente uma linguagem orientada a objetos obterá um desempenho superior à uma linguagem não orientada a objetos; (Fator Aprendizagem) O programador inciante precisa ter bem estabelecido uma série de conceitos sobre o paradigma; 23 LibreOffice Productivity Suite Referências http://www.python-course.eu/object_oriented_programming.php http://en.wikipedia.org/wiki/Object-oriented_programming http://en.wikipedia.org/wiki/Sketchpad http://www.dca.fee.unicamp.br/cursos/POOCPP/node1.html http://www.hardware.com.br/artigos/programacao-orientada-objetos/ http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos http://pt.wikipedia.org/wiki/Simula_67 http://pt.wikipedia.org/wiki/Tipo_Abstrato_de_Dado http://www.tiexpert.net/programacao/java/public-private-protected.php http://pt.wikipedia.org/wiki/PHP#Polimorfismo_Param.C3.A9trico http://www.metropoledigital.ufrn.br/aulas/disciplinas/poo/aula_12.html 24 LibreOffice Productivity Suite Obrigado Dúvidas? Sugestões? All text and image content in this document is licensed under the Creative Commons Attribution-Share Alike 3.0 License (unless otherwise specified). "LibreOffice" and "The Document Foundation" are registered trademarks. Their respective logos and icons are subject to international copyright laws. The use of these therefore is subject to the trademark policy. 25 LibreOffice Productivity Suite