É uma disciplina da programação que busca unificar a idéia de algoritmos (sequências de instruções) e estrutura de dados através do conceito de Objeto (unidade de software que encapsula os algoritmos e os dados que ele atua).
Alguns conceitos importantes da OOP:
- Poliformismo: permite que dois objetos diferentes possam ser usados de maneira parecida.
- Abstração ou Encapsulamento: é o que permite que um objeto seja utilizado sabendo apenas sua interface, não sendo necessário saber sobre a implementação dos métodos.
- Herança: é o que permite construir objetos que são as especializações de outros objetos.
A linguagem Python suporta orientação à objetos através de classes.
- Classes: pode ser definida como uma fábrica de objetos, todos com as mesmas características.
- Instâncias: concretização de uma classe.
As principais entidades da oop do python são as classes e as instâncias da classe. Observe a figura ao lado. A fabrica representa as classes e os ursinhos as instâncias das suas respectivas classes. Os atributos das classes são as estruturas particulares de cada instância como a cor ou pata.
- Declaração de uma classe:
Para criar uma classe é usado a seguinte sintaxe:
class nome:
var valor
...
var valor
def método (self, arg1, arg2, ...)
...
* as classes sempre tem o self como primeiro argumento.
* self = se refere a uma instância da classe.
Exemplo 01:
>> 2
>> 5
>> 11
- Atributos das instâncias:
No exemplo 01, as variáveis a e b são atributos da classe matematica, portanto pode ser usadas por qualquer instância matematica.
Um atributo attr associado a uma instância objeto é representado por objeto.attr.
Para usar o atributo attr de um objeto dentro de um método, é utilizado o self.attr
- Atributos herdados de classes:
Se uma classe define o atributo de classe, uma instância recebe o atributo de classe como um atributo de instância.
Exemplo 02:
>> 15
>> 33
- Construtores:
No exemplo acima, o método init é usado para iniciar o atributo da instância. Ele é chamado de construtor da classe.
Para chamar um construtor automaticamente na criação de instâncias é utilizado o método: __init__
O método __init__ é um "método mágico" invocado de maneira não padronizada.
Exemplo 03:
>> Kitty: Miau!
>> Tibby: Au! Au!
>> Tibby: Au! Au!
- Especialização de classes:
Para fazer com que a classe B herde a A, é usado a seguinte sintaxe: B(A), onde B é a sub-classe de A e A é a super-classe de B.
Para especializar a classe B basta adicionar novos atributos (variáveis e métodos) ou alterar os métodos.
Para invocar um método x de A na classe B, basta declarar A.x
Exemplo 04:
>> 20
>> 225
>> 101
- Construtores de classes derivadas:
O construtor de uma classe B derivada de A, precisa chamar o contrutor da classe A. Ele permite inicializar elementos da classe A que não tem na classe B. Sintaxe: A.__init__(self, arg1, ...)
- Herança Múltipla:
Uma classe D pode herdar outras classes como A, B, C, etc, onde a classe derivada herda todos os atributos das outras classe-base. Se as duas classes tiverem um atributo com o mesmo nome, a classe herdada primeira prevalece.
Sintaxe: class D(A, B, C):
Exemplo 05:
>> total = 26
- Atributos privados:
É possível restringir o acesso aos atributos de uma instância, que é indicado por dois underlines __ . Ex: __x
- Métodos para reescrever classes:
É possível reescrever as classes através dos métodos:
__init__(self, args, ...) # construtor
chamada: obj nomeclasse(args)
chamada: obj nomeclasse(args)
__del__(self) # deleta um objeto
chamada: dell obj
chamada: dell obj
__repr__(self) # chamado quando um objeto é impresso
chamada: repr(obj)
chamada: repr(obj)
__str__(self) # representação impressa da string
chamada: str(obj)
chamada: str(obj)
__cmp__(self, x) # comparação de objetos
chamada: cmp(obj, x)
chamada: cmp(obj, x)
>> Vetor (11, 8)
- Protocolos:
É uma especificação de poliformismo informal. Por exemplo strings, listas e tuplas possuem em comum o fato de poderem interagir com vários elementos.
__len__(self) # retorna o comprimento da sequência
chamada: len(obj)
__getitem__(self, key) # retorna um elemento na posição key
chamada: objeto[key]
__setitem__(self, key, value) # apenas para sequências mutáveis
chamada: obj[key]=value
__del__(self, key) # apenas para algumas sequências mutáveis
chamada: del obj[key]
É isso ai!!! O artigo ficou um pouco grande pois fui escrevendo enquanto estava estudando e minha intenção foi colocar todos os tópicos para ficar completo. Espero ter ajudado!!! ;P
* Fontes:
en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programminghttp://www.tutorialspoint.com/python/python_classes_objects.htm
Python - Classes - Cláudio Esperança
Core Python Programming 2nd Edition - Weley J. Chun
0 comentários:
Postar um comentário