25
1 LibreOffice Productivity Suite Orientação a Objetos Thiago Messias Evangelista UESC – Universidade Estadual de Santa Cruz Version 2012-11-08

Thiago Messias Evangelista UESC – Universidade Estadual de ...ppgsc.ufrn.br/~rogerio/material_auxiliar/CLP20122_POO_teoria.pdf · Dificilmente uma linguagem orientada a objetos

Embed Size (px)

Citation preview

1LibreOffice Productivity Suite

Orientação a Objetos

Thiago Messias EvangelistaUESC – Universidade Estadual de Santa CruzVersion 2012-11-08

2LibreOffice Productivity Suite

Abordagens

História;Conceitos;Benefícios / Limitações;Referências;

3LibreOffice Productivity Suite

História

Tudo tem um começo...

4LibreOffice 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.;

5LibreOffice Productivity Suite

História

Simula 67 – 60'sUma 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++;

6LibreOffice Productivity Suite

História

Daí pra frente, surgem:Smalltalk;C++;Delphi;C#;Python;Ruby;Java;Ada;

7LibreOffice Productivity Suite

Conceitos

“- E agora? O que preciso saber para programar O.O.?”

- Aluno do 3º semestre de Computação

8LibreOffice 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

9LibreOffice 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;

10LibreOffice 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:

Account

Atributos

Holder: Xico BrunoNumber: 64.123-1Credit Line: Banco da PraçaBalance: + R$ 1053,73

Xico's AccountObjeto

Classe

11LibreOffice 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;

12LibreOffice 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;

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

14LibreOffice Productivity Suite

Conceitos

Encapsulamento:Em Java, podemos encontrar a seguintes visiblidades:

Global

simPublic

Modificador Pacote SubclasseClasse

Protected

Vazio (Padrão)

sim

sim

sim

sim

sim

sim

sim

sim sim

nãoPrivate não não

não

não

não

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

O mesmo se aplica na Herança Múltipla, contudo não são todas as linguagens que implementam totalmente essa funcionalidade;

Super-Classe:Mamífero

Sub-Classe:Humano

16LibreOffice Productivity Suite

Conceitos

Polimorfismo:Poli(Muitas) + Morfa(Forma);

Existem 4 tipos, contudo nem todas as linguagens O.O. as implementam;

Polimorfismo

Paramétrico Inclusão Sobrecarga Coerção

Universal Ad-Hoc

17LibreOffice 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;

18LibreOffice 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: ->

19LibreOffice Productivity Suite

Conceitos

Polimorfismo:Universal:

Inclusão:

Exemplo:

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

21LibreOffice 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);

22LibreOffice Productivity Suite

Benefícios / Limitações

23LibreOffice 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;

24LibreOffice 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

25LibreOffice Productivity Suite

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.

Obrigado

Dúvidas?Sugestões?