danilo borges da silva daniloborges @hotmail · flutuante (decimais) e dos números complexos tipos...

58
Danilo Borges da Silva [email protected]

Upload: others

Post on 25-Jun-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

Danilo Borges da [email protected]

Page 2: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Simples o suficiente para um curso introdutório� Muitos recursos� Orientação a Objetos

Escalável (módulos, classes, controle de exceções)

Biblioteca embutida extensa e grande número de módulos fornecidos por terceiros

� Grande variedade de aplicações� Linguagem interpretada (script)� Multi-plataforma� Gratuito� Comunidade bastante desenvolvida

Page 3: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos
Page 4: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� São categorias de valores que são processados de forma semelhante

� Por exemplo, números inteiros são processados de forma diferente dos números de ponto flutuante (decimais) e dos números complexos

� Tipos primitivos: são aqueles já embutidos no núcleo da linguagem◦ Simples: numéricos (int, long, float, complex) e cadeias

de caracteres (strings)◦ Compostos: listas, dicionários, tuplas e conjuntos

� Tipos definidos pelo usuário: são correspondentes a classes (orientação objeto)

Page 5: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� São áreas de memória reservadas para armazenamentos de dados

� Os nomes de variáveis são identificadores: ◦ Nomes podem ser compostos de algarismos (0-9), letras (a-z ou

A-Z) ou sublinhado ( _ )◦ O primeiro caractere não pode ser um algarismo◦ Não Palavras reservadas (if, while, etc) são proibidas

� Servem para:◦ Guardar valores intermediários◦ Construir estruturas de dados

� Uma variável é modificada usando o comando de atribuição:◦ Var = expressão

� É possível também atribuir a várias variáveis simultaneamente:◦ var1,var2,...,varN = expr1,expr2,...,exprN

Page 6: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Variáveis são criadas dinamicamente e destruídas quando não mais necessárias, por exemplo, quando saem fora de escopo (veremos isso mais tarde)

� O tipo de uma variável muda conforme o valor atribuído, i.e., int, float, string, etc.

Page 7: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Há vários tipos numéricos que se pode usar em python:◦ Int: números inteiros de precisão fixa

1 , 2 , 15 , -19◦ Long: números inteiros de precisão arbitrária

1L , 10000L , -9999999L◦ Floats: números racionais de precisão variável

1.0 , 10.5 , -19000.00005 , 15e-5 ◦ Complex: números complexos

1+1j , 20j , 1000+100J

Page 8: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� São cadeias de caracteres� Constituem outro tipo fundamental do python� Constantes string são escritas usando aspas

simples ou duplasEx.: "a" ou 'a‘

� O operador “+” pode ser usado para concatenar stringsEx.: "a"+"b" é o mesmo que "ab"

� O operador “*” pode ser usado para repetir stringsEx.: "a"*10 é o mesmo que "aaaaaaaaaa"

Page 9: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Python usa a tabela de caracteres default do S.O.Ex.: ASCII, UTF-8

� Caracteres não imprimíveis podem ser expressos usando notação “barra-invertida” (\)

\n é o mesmo que new line\r é o mesmo que carriage return\t é o mesmo que tab\b é o mesmo que backspace\\ é o mesmo que \\x41 é o mesmo que o caractere cujo código

hexadecimal é 41 (“A” maiúsculo)

Page 10: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� A notação barra-invertida (\) pode ser desabilitada desde que a constante string seja precedida por um r (erre minúsculo)◦ São chamadas strings raw (cruas)

� Também é possível escrever constantes string em várias linhas incluindo as quebras de linha usando três aspas como delimitadores

Page 11: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Notação para separar trechos de uma string◦ Notação: string[índice1:índice2]◦ Retorna os caracteres desde o de índice1 (inclusive)

até o de índice2 (exclusive)◦ Se o primeiro índice é omitido, é assumido 0◦ Se o último índice é omitido, é assumido o fim da

string

Page 12: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Também chamadas expressões lógicas� Resultam em verdadeiro (True) ou falso (False)� São usadas em comandos condicionais e de

repetição� Servem para analisar o estado de uma

computação e permitir escolher o próximo passo � Operadores mais usados◦ Relacionais: > , < , ==, !=, >=, <=◦ Booleanos: and, or, not

� Avaliação feita em “Curto-circuito”◦ Expressão avaliada da esquerda para a direita◦ Se o resultado (verdadeiro ou falso) puder ser

determinado sem avaliar o restante, este é retornado imediatamente

Page 13: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� As constantes True e False são apenas símbolos convenientes

� Qualquer valor não nulo é visto como verdadeiro enquanto que 0 (ou False) é visto como falso

� O operador or retorna o primeiro operando se for vista como verdadeiro, caso contrário retorna o segundo

� O operador and retorna o primeiro operando se for vista como falso, caso contrário retorna o segundo

� Operadores relacionais são avaliados antes de not, que é avaliado antes de and, que é avaliado antes de or

Page 14: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Além dos operadores, é possível usar funções para computar valores

� As funções podem ser definidas:◦ Pelo programador◦ Em módulos da biblioteca padrão◦ Por default: são as funções embutidas (built-in)� Na verdade, fazem parte do módulo __builtins__, que é

sempre importado em toda aplicação

Page 15: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Muitas funções importantes são disponibilizadas em módulos da biblioteca padrão◦ Ex.: o módulo math tem funções como sin, cos, exp e

outras� Um módulo pode conter não só funções mas

também variáveis ou classes◦ Por exemplo, o módulo math define a constante pi

� Para usar os elementos de um módulo, pode-se usar o comando import◦ Formatos:� import modulo� from modulo import nome,...,nome� from modulo import *

Page 16: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos
Page 17: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Comandos condicionais� Comandos de repetição � Definição e uso de procedimentos

(subprogramas)� Definição e uso de classes e objetos

(programação OO)

Page 18: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Forma geral: print expr,expr,...� Os valores das expressões são escritos um

após o outro sem pular de linha: >>> print "1.001 ao quadrado é ",1.001**2

1.001 ao quadrado é 1.002001� Se o comando terminar com vírgula, o

próximo print escreverá na mesma linha.

Page 19: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� O programa que computa elementos da série de Fibonacci termina quando atinge um elemento com valor superior a uma constante

� Podemos tornar o programa mais flexível se ao usuário for permitido estipular o valor máximo

� O comando input permite perguntar ao usuário um valor (normalmente é atribuído a uma variável)◦ Formato: input(pergunta)◦ onde pergunta é uma string opcional que será exibida

para indicar o valor que se espera (i.e., prompt)

Page 20: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� É o comando condicional por excelência� Formatos:◦ if expressao:

comandos◦ if expressao:

comandos1else:

comandos2◦ if expressao1:

comandos1elif expressao2:

comandos2else:

comandos(N)

Page 21: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Repete uma seqüência de comandos enquanto uma dada expressão booleana é avaliada como verdadeira

� Formato: while expressão:

comando...comando

Page 22: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos
Page 23: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Maneira de organizar dados de maneira a facilitar seu acesso

� Algumas formas são clássicas:◦ Listas◦ Arrays (vetores e matrizes)◦ Tuplas (registros)◦ Árvores

� Linguagens freqüentemente possuem primitivas para construção dessas E.D.◦ Estruturas de dados embutidas

� Outras E.D. mais complexas podem ser construídas combinando as E.D. clássicas

Page 24: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� São arranjos seqüenciais de informações mais simples

� Caracterizam-se por permitir o acesso eficiente aos seus elementos em ordem seqüencial

� A definição clássica de uma lista como estrutura de dados abstrata compreende:◦ Operação de construção de uma lista vazia◦ Operação que testa se uma dada lista é vazia◦ Operação para obter o primeiro elemento de uma lista◦ Uma operação para adicionar um novo elemento no

início de uma lista◦ Operação para retirar o elemento inicial de uma lista

Page 25: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Retorna uma progressão aritmética de inteiros numa lista

� Forma geral: range (início, parada, incremento)◦ início (opcional) é o primeiro valor a ser gerado

(default: 0)◦ parada é o limite da progressão: a progressão

termina no último valor antes de parada◦ incremento (opcional) é o passo da progressão

(default:1)

Page 26: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Permite iterar sobre os elementos de uma lista

� Forma geral: for var in lista : comandos◦ Os comandos são repetidos para cada valor de lista◦ Durante a repetição, var possui o valor corrente da

lista

� Uma grande utilidade da função range é construir a lista de iteração

� Ex.:>>>for i in range(1,7): print i,

Page 27: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos
Page 28: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� São estruturas de dados parecidas com listas, mas com a particularidade de serem imutáveis

� Tuplas são seqüências e, assim como listas, podem ser indexadas e fatiadas, mas não é possível modificá-las

� Uma tupla vazia se escreve ()� Os parênteses são opcionais se não

provocarem ambigüidade� Uma tupla contendo apenas um elemento

deve ser escrita com uma vírgula ao final

Page 29: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Manipulação de strings é uma atividade freqüente em programas Python

� Existe um módulo chamado string que contém uma grande quantidade de funcionalidades para trabalhar com strings◦ Para usá-las:� from string import *

� Entretanto, strings pertencem à classe str e a maior parte do que existe no módulo string aparece como métodos da classe str

Page 30: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos
Page 31: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� São estruturas de dados que implementam mapeamentos

� Um mapeamento é uma coleção de associações entre pares de valores◦ O primeiro elemento do par é chamado de chave e

o outro de conteúdo� De certa forma, um mapeamento é uma

generalização da idéia de acessar dados por índices, exceto que num mapeamento os índices (ou chaves) podem ser de qualquer tipo imutável

Page 32: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Considere que queiramos representar um caderno de telefones

� Uma solução é ter uma lista de nomes e outra de telefones◦ Telefone de nome[i] armazenado em telefone[i]◦ Acrescentar “Joao” com telefone “20122232”:

nome+= “Joao” telefone+=“20122232”◦ Para encontrar o telefone de “Joao”:

Tel = telefone[nome.index[“Joao”]]� Dicionários tornam isso mais fácil e eficiente◦ telefone[“Joao”] = “20122232”◦ Tel = telefone[“Joao”]

Page 33: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Uma constante do tipo dicionário é escrita { chave1:conteúdo1, ... chaveN:conteúdoN}

� Uma variável do tipo dicionário pode ser “indexada” da maneira habitual, isto é, usando colchetes

� O conteúdo associado a uma chave pode ser alterado atribuindo-se àquela posição do dicionário

� Novos valores podem ser acrescentados a um dicionário fazendo atribuição a uma chave ainda não definida

� Não há ordem definida entre os pares chave/conteúdo de um dicionário

Page 34: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� get(chave,valor)◦ Obtém o conteúdo de chave◦ Não causa erro caso chave não exista: retorna valor◦ Se valor não for especificado chaves inexistentes

retornam None

Page 35: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� items() retorna uma lista com todos os pares chave/conteúdo do dicionário

� keys() retorna uma lista com todas as chaves do dicionário

� values() retorna uma lista com todos os valores do dicionário

� pop (chave)◦ Obtém o valor correspondente a chave e remove o

par chave/valor do dicionário

Page 36: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos
Page 37: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� É uma técnica de programação que nos permite pensar num problema em diversos níveis

� A idéia é que quando estamos pensando num problema macroscopicamente, não estamos preocupado com minúcias

� Dividir para conquistar:◦ Um problema é dividido em diversos sub-

problemas◦ As soluções dos sub-problemas são combinadas

numa solução do problema maior

Page 38: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Em Python, sub-programas têm o nome de funções

� Formato geral:def nome (arg, arg, ... arg):

comando. . . comando

� Onde:◦ nome é o nome da função◦ args são especificações de argumentos da função� Uma função pode ter 0, 1 ou mais argumentos

� comandos contêm as instruções a ser executadas quando a função é invocada

Page 39: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos
Page 40: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� É 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

Page 41: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� É o que permite que dois objetos diferentes possam ser usados de forma semelhante◦ Por exemplo, tanto listas quanto tuplas ou strings

podem ser indexadas por um número entre colchetes e suportam o método len◦ Assim, se escrevemos ...

for i in range(len(X)): print i, X[i]◦ ...não é possível saber de antemão se X é uma tupla,

uma lista ou uma string� Desta forma, se escrevemos um algoritmo para

ser aplicado um objeto X, então também pode ser aplicado a um objeto Y desde que Y seja suficientemente polimórfico a X

Page 42: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� É 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

Page 43: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� É 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

geométricas� Deve suportar também características específicas como

número de lados e comprimento de arestas

Page 44: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� A maneira mais simples é:class nome:

var = valor...var = valordef 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 ()

Page 45: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

>>> class C:a = 2b = 3def f(self,x):

return C.a*x+C.b>>> C.a = 99>>> C.b3>>> obj=C()>>> obj.f(7)17

Page 46: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� No exemplo anterior, a e b eram atributos da classe C e portanto usáveis por qualquer instância de C

� Mais freqüentemente, precisamos de atributos associados a instâncias individuais

� Um atributo attr associado a uma instância obj tem nome obj.attr

� Se queremos nos referir a um atributo attr de um objeto dentro de algum de seus métodos, usamos o nome self.attr

Page 47: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

>>> class C:def init(self,a=2,b=3):

self.a = aself.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

Page 48: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Se uma classe define atributos de classe, as instâncias herdam esses atributos da classe como atributos de instância

� Ex.:>>> class C:

a = 1def f(self,x):

self.a += x>>> c = C()>>> c.f(2)>>> c.a3>>> C.a1

Page 49: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Um método como init do exemplo anterior é bastante útil para inicializar atributos da instância e é conhecido como construtor da classe

� Na verdade, Python suporta construtores que podem ser chamados automaticamente na criação de instâncias◦ Basta definir na classe um método chamado __init__◦ Este método é chamado automaticamente durante a criação

de um nova instância da classe, sendo que os argumentos são passados entre parênteses após o nome da classe

� Obs.: o método __init__ é apenas um exemplo de “método mágico” que é invocado de maneira não padrão (veremos outros adiante)

Page 50: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

>>> class C:def __init__(self,a=2,b=3):

self.a = aself.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

Page 51: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� 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, um método de C, precisa invocar um método m de B, pode-se utilizar a notação B.m para diferenciar do m de C, referido como C.m

Page 52: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

>>> class B:n = 2def f(self,x): return B.n*x

>>> class C(B):def f(self,x): return B.f(self,x)**2def g(self,x): return self.f(x)+1

>>> b = B()>>> c = C()>>> b.f(3)6>>> c.f(3)36>>> c.g(3)37>>> B.n = 5>>> c.f(3)225

Page 53: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� O construtor de uma classe D derivada de C precisa chamar o construtor de C

� A chamada do construtor de C não é feita por default

� Permite inicializar os elementos de C que não são específicos de D

� Usa-se a notação C.__init__(self, ...)

Page 54: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� É 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

Page 55: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Framework web, escrito em Python� Focado em desenvolvimento ágil� “Nós fazemos a parte repetitiva, você faz o

que interessa.”

Page 56: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos

� Veremos o desenvolvimento de uma aplicação web utilizando o framework.

� Nome do projeto: Controle de estoque de um bar.

Page 57: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos
Page 58: Danilo Borges da Silva daniloborges @hotmail · flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos