Orientação a Objetos Thiago Messias Evangelista UESC Universidade Estadual de Santa Cruz Version 2012-11-08 1
Abordagens História; ; Benefícios / Limitações; Referências; 2
História Tudo tem um começo... 3
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
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
História Daí pra frente, surgem: Smalltalk; C++; Delphi; C#; Python; Ruby; Java; Ada; 6
- E agora? O que preciso saber para programar O.O.? - Aluno do 3º semestre de Computação 7
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
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
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
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
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
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
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
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
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
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
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
Polimorfismo: Universal: Inclusão: Exemplo: 19
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
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
Benefícios / Limitações 22
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
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
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