A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

POO - Classes Dilvan Moreira.

Apresentações semelhantes


Apresentação em tema: "POO - Classes Dilvan Moreira."— Transcrição da apresentação:

1 POO - Classes Dilvan Moreira

2 Lembrando:

3 Objetivos Aprender a criar Classes em Python. Leitura:
do livro “Introduction to Programming using Python” - Pasteur Institute Cap. 18

4 DNA Vamos descrever o DNA como um objeto:
Atributos são representados pelos retângulos internos:

5 Métodos DNA até o momento foi representado como um registro de dados.
Podemos usar uma lista ou dicionário: >>> seq_record = {’name’: ’seq1’, ’seq’: ’aaacaacttcggtata’} >>> seq_record[’name’] ’seq1’

6 Métodos Um objeto é mais que um registro de valores.
Ele pode fazer coisas, saber coisas ou ter um comportamento associado. Os comportamentos são associados a funções, associadas ao objeto, e comumente chamamos de métodos.

7 Métodos Nossa classe DNA pode executar operações: >>> s1.gc()
Ex. pode traduzir sua seqüência ou calcular a porcentagem GC por uma chamada de função: >>> s1.gc() 0.26

8 Método Os métodos disponíveis são aspectos importantes de um objeto.
A figura abaixo demonstra os métodos associados ao objeto DNA: Atenção: Um objeto é componente constituído de um grupo de valores e operações sobre esses valores!

9 Criando Objetos DNA Instanciando o objeto DNA:
Ao chamar a DNA(), retorna uma instancia da classe DNA na variável s1. Nós podemos também fornecer mais informações a instanciação: >>> s2 = DNA(’seq2’, ’acaagatgcgcccagtt’)

10 Criando Objetos DNA Alterando a forma de informar os paramentos:
>>> s2 = DNA(name=’seq2’, seq=’acaagatccattgtcccccggcc’) Após a instância do objeto, podemos usar os métodos disponíveis dessa classe. >>> s2.gc() 0.66

11 Criando Objetos DNA O método setname permite mudar o valor de um atributo de nosso objeto: >>> s2.setname(’SonicHedgeHog’) >>> s2.name ’SonicHedgeHog’

12 Definindo nossa Classe DNA
class DNA: def __init__(self, name=None, seq=None): self.name = name self.seq = lower(seq) def gc(self): count_c = self.seq.count(’c’) count_g = self.seq.count(’g’) return float(count_c + count_g) / len(self.seq) def setname(self, name):

13 Definindo nossa Classe DNA
O parâmetro self representa o próprio objeto. Usamos self sempre que queremos nos referenciar ao objeto. Veja o código do método gc: def gc(self): count_c = self.seq.count(’c’) count_g = self.seq.count(’g’) return float(count_c + count_g) / len(self.seq)

14 Definindo nossa Classe DNA
Definições de métodos devem ter um primeiro parâmetro self. Isso é necessário para acessarmos as variáveis e métodos do objeto dentro do método. Mas não é necessário especificar o argumento self na chamada do método, o python faz automaticamente isso.

15 Definindo nossa Classe DNA
Exemplo: >>> s2.gc() 0.66 É equivalente: >>> DNA.gc(s2)

16 Definindo nossa Classe DNA
Veja o código do método __init__: def __init__(self, name=None, seq=None): self.name = name self.seq = lower(seq) Ele é chamado na instanciação da classe, exemplo: >>> s2 = DNA(name=’seq2’, seq=’acaagatgccattgtcccccg’)

17 Definindo nossa Classe DNA
Para alterar um valor de um atributo, usamos um método, veja o setname abaixo: def setname(self, name): self.name = name

18 Um objeto para Proteína
Programas são feitos da combinação de vários objetos. A classe proteína, por exemplo, pode ser criado a partir de uma seqüência inicial de amino-ácidos, ou calculados pelo método translate do DNA. O objeto proteina poderia ter outros metodos, como hydrophobicity ou molecular weight.

19 Um objeto para Proteína
Diagrama da classe proteína.

20 Um objeto para Proteína
class Protein: weight = {"A":71.08,"C": default_prosite_file = ’prosite.dat’} def __init__(self, name=None, seq=None): self.name = name self.seq = upper(seq) def mw(self): molW = 0 for aa in self.seq: molW += Protein.weight[aa] #add water at the end of protein molW += 18.02 #convert in Kda molW = molW / 1000 return molW def setname(self, name):

21 Um objeto para Proteína
weight e default_prosite_file são variáveis que serão usadas em todas as instancias. No objeto Proteína, podemos colocar um objeto DNA. Isso vai ajudar na analisar da seqüência da Proteína mais tarde.

22 Um objeto para Proteína
Novo diagrama para Proteína:

23 Um objeto para Proteína
Novo método __init__ da classe Protein : def __init__(self, name=None, seq=None, dna=None): self.name = name self.seq = upper(seq) self.dna = dna

24 Namespaces Classes e instâncias têm os seus próprios namespaces.
Que é acessível com o operador ponto ('.'). Esses namespaces são implementados por dicionários. Um para cada instância, e outra para a classe.

25 Namespaces 1º - Atributos de Instâncias : >>> s1.name ’seq1’
Como vimos, uma classe pode definir atributos para as suas instâncias. Por exemplo, os atributos de s1, como o nome, estão disponíveis diretamente através do operador de ponto. >>> s1.name ’seq1’

26 Namespaces O dicionário das instância de atributos também é acessível por sua variável __dict__, ou pela função vars() >>> s1.__dict__ {’seq: ’aaacaacttcgtaagtata’, ’name’: ’seq1’} >>> vars(s1) {’seq’: ’aaacaacttcgtaagtata’, ’name’: ’seq1’}

27 Namespaces O comando dir() lista mais atributos. >>> dir(s1)
[’__doc__’, ’__init__’, ’__module__’, ’gc’, ’translate’, ’name’, ’seq’] Variáves + métodos

28 Namespaces É possível adicionar novos atributos a uma instância
Como o atributo annotation a seguir: >>> s1.annotation = ’an annotation’ >>> s1.__dict__ {’seq’: ’aaacaacttcgtaagtata’, ’name’:’seq1’, ’annotation’: ’an annotation’} Atenção: Só a instância s1 tem esse novo atributo!

29 Namespaces Adicionando atributos a objetos on-the-fly não é possível na maioria das linguagens de programação orientada a objetos! Atenção: Isso deve ser usado com cuidado, é perigoso: Ter instâncias da mesma classe que têm funcionalidade diferentes. Considerando que a lista de atributos definem uma funcionalidade.

30 Namespaces Atributos de Classes: Na classe Protein:
Também é possível definir atributos no nível de classe. Esses atributos serão compartilhadas por todas as instâncias. Na classe Protein: class Protein: weight = {"A":71.08,"C": default_prosite_file = ’prosite.dat’} def __init__(self, name=None, seq=None): self.name = name self.seq = upper(seq) ...

31 Namespaces Para acessar estes atributos é usado o ponto.
>>> Protein.default_prosite_file ’prosite.dat’ >>> Protein.weight {"A":71.08,"C": , ... ,"H":137.15} Você também pode acessar este atributo através desse exemplo: >>> p1.default_prosite_file

32 Namespaces Não se pode alterar o atributo, como no exemplo:
>>> p1.default_prosite_file = ’myfile.dat’ >>> Protein.default_prosite_file ’prosite.dat’

33

34 Perguntas?


Carregar ppt "POO - Classes Dilvan Moreira."

Apresentações semelhantes


Anúncios Google