Programação Orientada a Objetos (Teoria)

Propaganda
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
Download