Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Programando em Python - Classes, Notas de estudo de Informática

Classe e POO em python

Tipologia: Notas de estudo

2011

Compartilhado em 25/03/2011

samuel-santos-22
samuel-santos-22 🇧🇷

4.6

(41)

262 documentos

1 / 32

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Claudio Esperança
Python:
Classes
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20

Pré-visualização parcial do texto

Baixe Programando em Python - Classes e outras Notas de estudo em PDF para Informática, somente na Docsity!

Claudio Esperança

Python:

Classes

Orientação a Objetos

 É uma disciplina de programação assim como a

Programação Estruturada

 Tenta unificar as idéias de algoritmos e estruturas de

dados através do conceito de Objeto

 Um objeto é uma unidade de software que encapsula algoritmos e os dados sobre o qual os algoritmos atuam

 Os seguintes conceitos são importantes quando falamos

de orientação a objetos:

 Polimorfismo  Abstração  Herança

Abstração (ou encapsulamento)

 É o que permite que um objeto seja utilizado sabendo-se

sobre ele apenas a sua interface

 Em particular, não precisamos conhecer a implementação dos seus métodos

 Em OO a abstração tem mais alcance pois um objeto

encapsula tanto dados como algoritmos

 Assim, podemos atribuir objetos ou passar objetos como argumentos, sem necessariamente saber como o objeto está implementado

Herança

 É o que permite construir objetos que são especializações

de outro objeto

 Isso permite o reuso de software já que objetos especializados herdam dos objetos genéricos uma série de atributos comuns

 Por exemplo, considere um objeto que representa uma

forma geométrica. Então, ele pode ter características tais

como área, perímetro, centróide, etc.

 Um polígono é uma forma geométrica,  Portanto, herda todas as características de formas geometricas  Deve suportar também características específicas como número de lados e comprimento de arestas

Declaração de uma classe

 A maneira mais simples é:

class nome : var = valor ... var = valor def metodo (self , ... arg): ... def metodo (self , ... arg): ...  As variáveis e os métodos são escritos precedidos pelo nome da classe e por um ponto (.)  Assim, uma variavel v definida numa classe c é escrita c. v  Os métodos sempre têm self como primeiro argumento  self se refere a uma instância da classe

 Uma nova instância da classe é criada usando nome ()

Exemplo

class C: a = 2 b = 3 def f(self,x): return C.a*x+C.b

C.a 2 C.b 3 obj=C() obj.f(7) 17

Exemplo

class C: def init(self,a=2,b=3): self.a = a self.b = b def f(self,x): return self.a*x+self.b

obj1 = C() obj1.init(2,3) obj2 = C() obj2.init(8,1) obj1.f(7) 17 obj2.f(7) 57

Atributos herdados da classe

 Se uma classe define atributos de classe, as

instâncias herdam esses atributos da classe como

atributos de instância

 Ex.:

class C: a = 1 def f(self,x): self.a += x

c = C() c.f(2) c.a 3 C.a 1

Exemplo

class C: def init(self,a=2,b=3): self.a = a self.b = b def f(self,x): return self.a*x+self.b

obj1 = C() obj2 = C(8,1) obj1.f(7) 17 obj2.f(7) 57

Especialização de classes

 Para fazer uma classe C herdar de outra B , basta declarar C como: class C ( B ):

...  Diz-se que C é sub-classe (ou derivada ) de B ou que B é super-classe (ou base ) de C

C herda todos os atributos de B

 A especialização de C se dá acrescentando-se novos atributos (variáveis e métodos) ou alterando-se métodos

 Se, ao escrever um método de C, precisamos invocar um método m de B , pode-se usar a notação B.m para diferenciar de m simplesmente, que se refere a C.m

Construtores de classes derivadas

 O construtor de uma classe D derivada de C precisa

chamar o construtor de C

 Permite inicializar os elementos de C não específicos a D  Usa-se a notação C.init(self, ...)

Construtores de classes derivadas

 Exemplo:

class C: obj1.f(7) 17 >>> obj2.f(7) 57 ## Atributos herdados da classe ##  Se uma classe define atributos de classe, as ## instâncias herdam esses atributos da classe como ## atributos de instância ##  Ex.: >>> class C: a = 1 def f(self,x): self.a += x >>> c = C() >>> c.f(2) >>> c.a 3 >>> C.a 1 ## Exemplo >>> class C: def init(self,a=2,b=3): self.a = a self.b = b def f(self,x): return self.a*x+self.b >>> obj1 = C() >>> obj2 = C(8,1) >>> obj1.f(7) 17 >>> obj2.f(7) 57 ## Especialização de classes  Para fazer uma classe C herdar de outra B , basta declarar C como: class C ( B ): ...  Diz-se que C é sub-classe (ou derivada ) de B ou que B é super-classe (ou base ) de CC herda todos os atributos de B  A especialização de C se dá acrescentando-se novos atributos (variáveis e métodos) ou alterando-se métodos  Se, ao escrever um método de C, precisamos invocar um método m de B , pode-se usar a notação B.m para diferenciar de m simplesmente, que se refere a C.m ## Construtores de classes derivadas ##  O construtor de uma classe D derivada de C precisa ## chamar o construtor de C  Permite inicializar os elementos de C não específicos a D  Usa-se a notação C.init(self, ...) ## Construtores de classes derivadas ##  Exemplo: >>> class C: ... def init(self): ... self.x = 1 ... class D(C): ... def init(self): ... C.init(self) ... self.y = 2 ... d=D() d.x 1 d.y 2

Herança múltipla

 É possível construir uma classe que herda de duas ou

mais outras. Ex.:

 class C(A,B): ...

 Nesse caso, a classe derivada herda todos os atributos

de ambas as classes-base

 Se ambas as classes base possuem um atributo com

mesmo nome, aquela citada primeiro prevalece

 No exemplo acima, se A e B possuem um atributo x, então C.x se refere ao que foi herdado de A

Exemplo

class C: def init(self,a,b): self.a, self.b = a,b def f(self,x): return self.a*x+self.b class D: def init(self,legenda): self.legenda = legenda def escreve(self,valor): print self.legenda,'=',valor class E(C,D): def init(self,legenda,a,b): C.init(self,a,b) D.init(self,legenda) def escreve(self,x): D.escreve(self,self.f(x)) e = E("f",10,3) e.escreve(4) f = 43