Prof. Natalia Castro Fernandes
Engenharia de Telecomunicações – UFF
2º semestre/2012
Introdução
 Forma de programar
 Programação não estruturada


Programas simples e pequenos
Ex: Cartões
 Programação Estruturada (ou Modular)
 Programas divididos em módulos
 Módulos com estruturas de dados internas
Introdução
 Programação Orientada à Objetos




Programas estruturados pelos dados e não pelas operações
Dados, chamados de classe, especificam as operações válidas
Módulos agrupados por dados e suas representações
Unifica as ideias de algoritmos e estruturas de dados através
do conceito de Objeto
Programas organizados pelo comportamento dos objetos e não como
uma simples sequência de comando e chamadas desconectadas.
Classe
 É a representação de um tipo abstrato de dados
 Especifica:


Atributos
Métodos (funções)
 Define as propriedades e o comportamento dos
conjuntos de objetos.
Objeto
 É uma instância de uma classe
 Identificado univocamente pelo seu nome
 Possui estado, determinado pelo valor dos atributos ao
longo do tempo
 Estado modificado pela aplicação dos métodos

Mudança de estados define comportamento do objeto
Orientação a objetos em Python
 Classe
 “Fábrica” de objetos
 A rigor, em Python, uma classe também é um objeto

Uso de módulo.método é uma forma de usar um módulo como um objeto. O
mesmo se aplica às classes
 Definição de uma classe
class nome:
var = valor
...
var = valor
def metodo (self, ... arg):
...
def metodo (self, ... arg):
...
Definição de classes
 Na definição dos métodos, os atributos são chamados como
nome_da_classe.atributo
 O primeiro argumento de qualquer método é sempre self
 O self é uma referência a própria instância da classe


É uma forma de a classe dizer que se refere a si mesma
Atributos da classe podem ser chamados também como self.atributo
 Um objeto de uma classe é criado usando nome_da_classe()
Exemplos – Criação de classes
Exemplos – Criação de classes
Exemplos (o que não fazer)
Exemplos – Uso do self
Exemplos – Atributos internos e
externos
Exemplos - Reescrevendo
Atenção: o.extra() daria erro. Por que?
Exercícios
 Crie uma classe que represente um carro. Essa classe deve
ter pelo menos dois atributos (placa e cor) e pelo menos
três métodos: seguir, virar_esquerda, virar_direita
 Crie uma classe motorista, que deve ter o método
dirigir(carro, direção)
 Crie um script que faça um motorista, em posse de um
carro, dirigir gerando 3 eventos consecutivos. O evento, que
pode ser seguir em frente, virar à esquerda ou virar à direita,
deve ser escolhido aleatoriamente. Os métodos de cada um
dos objetos criados devem imprimir uma mensagem na tela
toda vez que forem evocados.
Construtores em Python
 Chamados automaticamente na criação de instâncias
 Utilizados declarando-se um método __init__
Exemplo
Exemplo
Destrutores
 A linguagem Python já apresenta um ‘coletor de lixo’
 Gerenciamento de memória alocada feita de forma
automática
 Uso dos destrutores para:
 Fechar sockets
 Fechar conexões com banco de dados
 Fechar arquivos
 Etc;
 Formato:
 __del__
 Destrutores são chamados após o fim do escopo no qual o
objeto está inserido
Atenção: As mensagens do
destrutor podem não aparecer
no console que você está
usando.
(mensagens impressas apenas
no sys.stderr )
Se houver necessidade de criar
logs, usar arquivos e colocar
exit no final do código.
Herança e Polimorfismo
 Para uma classe herdar atributos e métodos de outra,
basta declarar isso na definição da classe
 Formato: Class Filha(Classe_Pai):

Filha é uma sub-classe ou uma derivada de Classe_Pai e
Classe_Pai é uma superclasse ou base de C
 É possível adicionar novos métodos e atributos à classe
Filha, assim como é possível modificar métodos da
Classe_Pai.
Herança e Polimorfismo
 Caso um método ou um atributo seja redefinido e seja
necessário chamar esse método ou atributo da
superclasse, colocar essa chamada de forma explicita
 Construtores e destrutores da classe e da superclasse
precisam ser chamados pelo construtor da nova classe
Declaração de
herança
Declaração de
novos atributos
Redefinição de
método
Atributo definido
na classe pai
Uso da função
pela definição do
pai e do filho
Redefinição de
atributo
Uso de atributo do pai e do filho
Descomentando a linha
pai.__init__(self)
Construtores e herança
 O construtor da classe pai apenas atua sobre os
atributos da classe filha
 Os atributos do pai chamados como pai.atributo não
serão impactados pelo construtor do pai

Cuidado ao sobrescrever indevidamente atributos
Herança de múltiplas classes
 Uma classe pode ter vários pais
 Herda os atributos e métodos de todas as classes pais

Se duas classes pais possuírem o mesmo método ou o mesmo
atributo, vale o atributo da classe declarada primeiro
Exercício
 Crie uma calculadora, utilizando o esquema de classes
a seguir.
Módulo operador
 Permite reescrever o uso de comparações de objetos,
operações lógicas e matemáticas, operações de
sequência e testes de tipo abstrato
 Com isso, é possível reescrever o que deve ser feito
quando se deseja somar ou subtrair dois objetos, por
exemplo
Módulo operador
 Principais funções
 operator.lt(a, b) ou operator.__lt__(a, b)
 operator.le(a, b) ou operator.__le__(a, b)
 operator.eq(a, b) ou operator.__eq__(a, b)
 operator.ne(a, b) ou operator.__ne__(a, b)
 operator.ge(a, b) ou operator.__ge__(a, b)
 operator.gt(a, b) ou operator.__gt__(a, b)
Módulo operador
 Principais funções
 operator.is_(a, b) = Return a is b
 operator.abs(obj)

operator.__abs__(obj)
 operator.add(a, b)
 operator.__add__(a, b)
 operator.and_(a, b)
 operator.__and__(a, b)
 operator.div(a, b)
 operator.__div__(a, b)
 operator.mod(a, b)
 operator.__mod__(a, b)
Módulo operador
 Mais informações em:
http://docs.python.org/library/operator.html
Exercício
 Crie uma classe matriz que, com seu construtor, cria
uma matriz m x n. Essa classe deve sobrescrever os
métodos para adição, subtração, multiplicação e
divisão, de tal forma que as operações sejam realizadas
nas matrizes de forma adequada.
Download

Document