Descritores de atributos em Python
|
|
- Camila de Lacerda
- 5 Há anos
- Visualizações:
Transcrição
1 Descritores de atributos em Python outubro/2012 Luciano Ramalho
2 Ritmo desta palestra Recomendação: manter os olhos abertos
3 Pré-requistos da palestra Para acompanhar os slides a seguir, é preciso saber como funciona o básico de orientação a objetos em Python. Especificamente: contraste entre atributos de classe e de instância herança de atributos de classe (métodos e campos) atributos protegidos: como e quando usar como e quando usar a função super
4 Roteiro da palestra A partir de um cenário inicial, implementamos uma classe muito simples A partir daí, evoluímos a implementação em seis etapas para controlar o acesso aos campos das instâncias, usando propriedades, descritores e finalmente uma metaclasse Nos slides, as etapas são identificadas por números: ➊, ➋, ➌...
5 O cenário Comércio de alimentos a granel Um pedido tem vários itens Cada item tem descrição, peso (kg), preço unitário (p/ kg) e sub-total
6 ➊ mais simples, impossível class ItemPedido(object): def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * self.preco
7 ➊ a classe produz instâncias classe instâncias
8 ➊ mais simples, impossível class ItemPedido(object): o método inicializador é conhecido como dunder init def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * self.preco
9 ➊ porém, simples demais >>> ervilha = ItemPedido('ervilha partida',.5, 7.95) >>> ervilha.descricao, ervilha.peso, ervilha.preco ('ervilha partida',.5, 7.95) >>> ervilha.peso = -10 >>> ervilha.subtotal() isso vai dar problema na hora de cobrar...
10 ➊ porém, simples demais >>> ervilha = ItemPedido('ervilha partida',.5, 7.95) >>> ervilha.descricao, ervilha.peso, ervilha.preco ('ervilha partida',.5, 7.95) >>> ervilha.peso = -10 >>> ervilha.subtotal() We found that customers could order a negative quantity of books! And we would credit their credit card with the price... Jeff Bezos isso vai dar problema na hora de cobrar... Jeff Bezos of Amazon: Birth of a Salesman WSJ.com -
11 ➊ porém, simples demais >>> ervilha = ItemPedido('ervilha partida',.5, 7.95) >>> ervilha.descricao, ervilha.peso, ervilha.preco ('ervilha partida',.5, 7.95) >>> ervilha.peso = -10 >>> ervilha.subtotal() Descobrimos que os clientes conseguiam encomendar uma quantidade negativa de livros! E nós creditávamos o valor em seus cartões... Jeff Bezos isso vai dar problema na hora de cobrar... Jeff Bezos of Amazon: Birth of a Salesman WSJ.com -
12 ➋ validação com property >>> ervilha = ItemPedido('ervilha partida',.5, 7.95) >>> ervilha.descricao, ervilha.peso, ervilha.preco ('ervilha partida',.5, 7.95) >>> ervilha.peso = -10 Traceback (most recent call last):... ValueError: valor deve ser > 0 parece uma violação de encapsulamento mas a lógica do negócio está preservada: peso agora é uma property
13 ➋ implementar property class ItemPedido(object): def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * def peso(self): return self. def peso(self, valor): if valor > 0: self. peso = valor else: raise ValueError('valor deve ser > 0')
14 ➋ implementar property class ItemPedido(object): def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * def peso(self): return self. def peso(self, valor): if valor > 0: self. peso = valor else: raise ValueError('valor deve ser > 0') atributo protegido
15 ➋ implementar property class ItemPedido(object): def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * def peso(self): return self. peso no init a property já está em def peso(self, valor): if valor > 0: self. peso = valor else: raise ValueError('valor deve ser > 0')
16 ➋ implementar property class ItemPedido(object): def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * def peso(self): return self. def peso(self, valor): if valor > 0: self. peso = valor else: raise ValueError('valor deve ser > 0') o atributo protegido peso só é acessado nos métodos da property
17 ➋ implementar property class ItemPedido(object): def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * def peso(self): return self. def peso(self, valor): if valor > 0: self. peso = valor else: raise ValueError('valor deve ser > 0') e se quisermos a mesma lógica para o preco? teremos que duplicar tudo isso?
18 ➌ validação com descriptor peso e preco são atributos da classe ItemPedido a lógica fica em get e set, podendo ser reutilizada
19 ➌ validação com descriptor instâncias classe
20 ➌ class Quantidade(object): def init (self): prefixo = self. class. name chave = id(self) self.nome_alvo = '%s_%s' % (prefixo, chave) def get (self, instance, owner): return getattr(instance, self.nome_alvo) implementação do descriptor def set (self, instance, value): if value > 0: setattr(instance, self.nome_alvo, value) else: raise ValueError('valor deve ser > 0') class ItemPedido(object): peso = Quantidade() preco = Quantidade() def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * self.preco
21 ➌ uso do descriptor a classe ItemPedido tem duas instâncias de Quantidade associadas a ela
22 ➌ uso do descriptor class ItemPedido(object): peso = Quantidade() preco = Quantidade() def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco a classe ItemPedido tem duas instâncias de Quantidade associadas a ela def subtotal(self): return self.peso * self.preco
23 ➌ uso do descriptor class ItemPedido(object): peso = Quantidade() preco = Quantidade() def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * self.preco cada instância da classe Quantidade controla um atributo de ItemPedido
24 ➌ implementar o descriptor class Quantidade(object): def init (self): prefixo = self. class. name chave = id(self) self.nome_alvo = '%s_%s' % (prefixo, chave) def get (self, instance, owner): return getattr(instance, self.nome_alvo) def set (self, instance, value): if value > 0: setattr(instance, self.nome_alvo, value) else: raise ValueError('valor deve ser > 0') uma classe com método get é um descriptor
25 ➌ implementar o descriptor class Quantidade(object): def init (self): prefixo = self. class. name chave = id(self) self.nome_alvo = '%s_%s' % (prefixo, chave) def get (self, instance, owner): return getattr(instance, self.nome_alvo) def set (self, instance, value): if value > 0: setattr(instance, self.nome_alvo, value) else: raise ValueError('valor deve ser > 0') self é a instância do descritor (associada ao preco ou ao peso)
26 ➌ implementar o descriptor class Quantidade(object): def init (self): prefixo = self. class. name chave = id(self) self.nome_alvo = '%s_%s' % (prefixo, chave) def get (self, instance, owner): return getattr(instance, self.nome_alvo) def set (self, instance, value): if value > 0: setattr(instance, self.nome_alvo, value) else: raise ValueError('valor deve ser > 0') self é a instância do descritor (associada ao preco ou ao peso) instance é a instância de ItemPedido que está sendo acessada
27 ➌ implementar o descriptor class Quantidade(object): def init (self): prefixo = self. class. name chave = id(self) self.nome_alvo = '%s_%s' % (prefixo, chave) def get (self, instance, owner): return getattr(instance, self.nome_alvo) def set (self, instance, value): if value > 0: setattr(instance, self.nome_alvo, value) else: raise ValueError('valor deve ser > 0') nome_alvo é o nome do atributo da instância de ItemPedido que este descritor (self) controla
28 ➌ implementar o descriptor get e set manipulam o atributo-alvo no objeto ItemPedido
29 ➌ implementar o descriptor class Quantidade(object): def init (self): prefixo = self. class. name chave = id(self) self.nome_alvo = '%s_%s' % (prefixo, chave) def get (self, instance, owner): return getattr(instance, self.nome_alvo) def set (self, instance, value): if value > 0: setattr(instance, self.nome_alvo, value) else: raise ValueError('valor deve ser > 0') get e set usam getattr e setattr para manipular o atributo-alvo na instância de ItemPedido
30 ➌ inicialização do descritor class ItemPedido(object): peso = Quantidade() preco = Quantidade() quando um descritor é instanciado, o atributo ao qual ele será vinculado ainda não existe! def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * self.preco exemplo: o atributo preco só passa a existir após a atribuição
31 ➌ implementar o descriptor class Quantidade(object): def init (self): prefixo = self. class. name chave = id(self) self.nome_alvo = '%s_%s' % (prefixo, chave) def get (self, instance, owner): return getattr(instance, self.nome_alvo) def set (self, instance, value): if value > 0: setattr(instance, self.nome_alvo, value) else: raise ValueError('valor deve ser > 0') temos que inventar um nome para o atributo-alvo onde será armazenado o valor na instância de ItemPedido
32 ➌ implementar o descriptor >>> ervilha = ItemPedido('ervilha partida',.5, 3.95) >>> ervilha.descricao, ervilha.peso, ervilha.preco ('ervilha partida',.5, 3.95) >>> dir(ervilha) ['Quantidade_ ', 'Quantidade_ ', ' class ', ' delattr ', ' dict ', ' doc ', ' format ', ' getattribute ', ' hash ', ' init ', ' module ', ' new ', ' reduce ', ' reduce_ex ', ' repr ', ' setattr ', ' sizeof ', ' str ', ' subclasshook ', ' weakref ', 'descricao', 'peso', 'preco', 'subtotal'] nesta implementação, os nomes dos atributos-alvo não são descritivos, dificultando a depuração
33 ➍ usar nomes descritivos ItemPedido. new invoca «quantidade».set_nome para redefinir o nome_alvo
34 ➍ usar nomes descritivos ItemPedido. new invoca «quantidade».set_nome «quantidade».set_nome redefine o nome_alvo
35 ➍ usar nomes descritivos class ItemPedido(object): peso = Quantidade() preco = Quantidade() def new (cls, *args, **kwargs): for chave, atr in cls. dict.items(): if hasattr(atr, 'set_nome'): atr.set_nome(' ' + cls. name, chave) return super(itempedido, cls). new (cls, *args, **kwargs) def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * self.preco ItemPedido. new invoca «quantidade».set_nome
36 ➍ usar nomes descritivos class Quantidade(object): def init (self): self.set_nome(self. class. name, id(self)) def set_nome(self, prefix, key): self.nome_alvo = '%s_%s' % (prefix, key) def get (self, instance, owner): return getattr(instance, self.nome_alvo) def set (self, instance, value): if value > 0: setattr(instance, self.nome_alvo, value) else: raise ValueError('valor deve ser > 0') «quantidade».set_nome redefine o nome_alvo
37 ➍ usar nomes descritivos class ItemPedido(object): peso = Quantidade() preco = Quantidade() def new (cls, *args, **kwargs): for chave, atr in cls. dict.items(): if hasattr(atr, 'set_nome'): atr.set_nome(' ' + cls. name, chave) return super(itempedido, cls). new (cls, *args, **kwargs) def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * self.preco Quando init executa, o descritor já está configurado com um nome de atributo-alvo descritivo
38 ➍ usar nomes descritivos ItemPedido. new invoca «quantidade».set_nome
39 ➍ usar nomes descritivos «quantidade».set_nome redefine o nome_alvo
40 ➍ nomes descritivos >>> ervilha = ItemPedido('ervilha partida',.5, 3.95) >>> ervilha.descricao, ervilha.peso, ervilha.preco ('ervilha partida', 0.5, 3.95) >>> dir(ervilha) [' ItemPedido_peso', ' ItemPedido_preco', ' class ', ' delattr ', ' dict ', ' doc ', ' format ', ' getattribute ', ' hash ', ' init ', ' module ', ' new ', ' reduce ', ' reduce_ex ', ' repr ', ' setattr ', ' sizeof ', ' str ', ' subclasshook ', ' weakref ', 'descricao', 'peso', 'preco', 'subtotal'] nesta implementação e nas próximas, os nomes dos atributosalvo seguem a convenção de atributos protegidos de Python
41 ➍ funciona, mas custa caro ItemPedido aciona new para construir cada nova instância Porém a associação dos descritores é com a classe ItemPedido: o nome do atributo-alvo nunca vai mudar, uma vez definido corretamente
42 ➍ funciona, mas custa caro Isso significa que para cada nova instância de ItemPedido que é criada, «quantidade».set_nome é invocado duas vezes Mas o nome do atributo-alvo não tem porque mudar na vida de uma «quantidade»
43 ➍ funciona, mas custa caro versão 1 versão 2 versão 3 versão 4 Número de instâncias de ItemPedido criadas por segundo (MacBook Pro 2011, Intel Core i7)
44 ➎ como evitar trabalho inútil ItemPedido. new resolveu mas de modo ineficiente. Cada «quantidade» deve receber o nome do seu atributo-alvo apenas uma vez, quando a própria classe ItemPedido for criada Para isso precisamos de uma...
45 ➎ metaclasses criam classes! metaclasses são classes cujas instâncias são classes
46 ➎ metaclasses criam classes! metaclasses são classes cujas instâncias são classes ItemPedido é uma instância de type type é a metaclasse default em Python: a classe que normalmente constroi outras classes
47 ➎ nossa metaclasse antes depois
48 ➎ nossa metaclasse ModeloMeta é a metaclasse que vai construir a classe ItemPedido ModeloMeta. init fará apenas uma vez o que antes era feito em ItemPedido. new a cada nova instância
49 ➎ nossa metaclasse class ModeloMeta(type): def init (cls, nome, bases, dic): super(modelometa, cls). init (nome, bases, dic) for chave, atr in dic.items(): if hasattr(atr, 'set_nome'): atr.set_nome(' ' + nome, chave) class ItemPedido(object): metaclass = ModeloMeta peso = Quantidade() preco = Quantidade() def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * self.preco Assim dizemos que a classe ItemPedido herda de object, mas é uma instância (construida por) ModeloMeta
50 ➎ nossa metaclasse class ModeloMeta(type): def init (cls, nome, bases, dic): super(modelometa, cls). init (nome, bases, dic) for chave, atr in dic.items(): if hasattr(atr, 'set_nome'): atr.set_nome(' ' + nome, chave) class ItemPedido(object): metaclass = ModeloMeta peso = Quantidade() preco = Quantidade() def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco def subtotal(self): return self.peso * self.preco Este init invoca «quantidade».set_nome, para cada descritor, uma vez só, na inicialização da classe ItemPedido
51 ➎ nossa metaclasse em ação
52 ➎ nossa metaclasse em ação
53 ➎ nossa metaclasse em ação +
54 ➎ desempenho melhor mesmo desempenho, nomes amigáveis versão 1 versão 2 versão 3 versão 4 versão 5 Número de instâncias de ItemPedido criadas por segundo (MacBook Pro 2011, Intel Core i7)
55 ➏ simplicidade aparente
56 ➏ o poder da abstração from modelo import Modelo, Quantidade class ItemPedido(Modelo): peso = Quantidade() preco = Quantidade() def init (self, descricao, peso, preco): self.descricao = descricao self.peso = peso self.preco = preco
57 ➏ módulo modelo.py class Quantidade(object): def init (self): self.set_nome(self. class. name, id(self)) def set_nome(self, prefix, key): self.nome_alvo = '%s_%s' % (prefix, key) def get (self, instance, owner): return getattr(instance, self.nome_alvo) def set (self, instance, value): if value > 0: setattr(instance, self.nome_alvo, value) else: raise ValueError('valor deve ser > 0') class ModeloMeta(type): def init (cls, nome, bases, dic): super(modelometa, cls). init (nome, bases, dic) for chave, atr in dic.items(): if hasattr(atr, 'set_nome'): atr.set_nome(' ' + nome, chave) class Modelo(object): metaclass = ModeloMeta
58 ➏ esquema final +
59 ➏ esquema final
60 Oficinas Turing: computação para programadores Próximos lançamentos: 4ª turma de Python para quem sabe Python 3ª turma de Objetos Pythonicos 1ª turma de Aprenda Python com um Pythonista
Produtividade e qualidade em Python através da metaprogramação
Produtividade e qualidade em Python através da metaprogramação ou a visão radical na prática Luciano Ramalho ramalho@python.pro.br @ramalhoorg Fluent Python (O Reilly) Early Release: out/2014 First Edition:
Leia maisPython para quem sabe Python
Python para quem sabe Python Turma 0, aula 4 Metaclasses, programação funcional e programação assíncrona Exercício: execucao.py Para entender como o interpretador Python lê um arquivo.py Tudo é executável
Leia maisLuciano Ramalho dezembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python
Luciano Ramalho luciano@ramalho.org dezembro/2012 Objetos Pythonicos Orientação a objetos e padrões de projeto em Python Exemplo prático com funções geradoras Funções geradoras para desacoplar laços de
Leia maisCurso de Python em 5 Horas
Curso de Python em 5 Horas Classes e Trabalhando com Arquivo Gustavo Sverzut Barbieri GPSL - UNICAMP 12 de maio de 2005 ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de
Leia maisLuciano Ramalho setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python
Luciano Ramalho luciano@ramalho.org setembro/2012 Objetos Pythonicos Orientação a objetos e padrões de projeto em Python Aula 3 Variáveis e referências + Iteráveis, iteradores e geradores Objetivos desta
Leia maisComputação II (MAB 225)
Computação II (MAB 225) Fabio Mascarenhas - 2015.1 http://www.dcc.ufrj.br/~fabiom/pythonoo Classes abstratas Até agora, usamos interfaces toda vez que queríamos representar algum conceito abstrato em nosso
Leia maisOrientação a Objetos parte 2 ENCAPSULAMENTO, CLASSES, HERANÇAS
Orientação a Objetos parte 2 ENCAPSULAMENTO, CLASSES, HERANÇAS Encapsulamento Proteger a integridade da classe escondendo certas informações dos usuários dessa classe e mostrar somente aquilo que é necessário
Leia maisPython: Exceções, Iteradores e Geradores. Claudio Esperança
Python: Exceções, Iteradores e Geradores Claudio Esperança Exceções Quando um programa encontra dificuldades não previstas, diz se que uma condição excepcional ou uma exceção ocorreu Um erro é uma exceção
Leia maisPadrão para a codificação em Python
Padrão para a codificação em Python Bonito é melhor que feio. Explícito é melhor que implícito. Simples é melhor que complexo. Complexo é melhor que complicado. Esparso é melhor que denso. Legibilidade
Leia maisLuciano Ramalho luciano@ramalho.org. setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python
Luciano Ramalho luciano@ramalho.org setembro/2012 Objetos Pythonicos Orientação a objetos e padrões de projeto em Python Aula 4 Recapitulando iteráveis etc. Herança múltipla, MRO e super Propriedades Polimorfismo
Leia maisComputação 1 - Python Aula 10 - Teórica: Estrutura de Dados - Dicionário. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 18
Computação 1 - Python Aula 10 - Teórica: Estrutura de Dados - 1/ 18 Considere que você precisa fazer uma função que guarde o nome e o telefone de seus amigos. Sua função também deve permitir a consulta
Leia maisLuciano Ramalho luciano@ramalho.org. setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python
Luciano Ramalho luciano@ramalho.org setembro/2012 Objetos Pythonicos Orientação a objetos e padrões de projeto em Python Aula 2 Introdução à Orientação Objetos em Python (continuação) Objetivos desta aula
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/lp Recursão aberta Delegação permite reutilizar a implementação dos métodos do objeto counter na implementação dos métodos
Leia maisAplicações de Dicionários. Prof. Alberto Costa Neto Programação em Python
Aplicações de Dicionários Prof. Alberto Costa Neto Programação em Python Qual é o nome mais comum? alberto pedro maria luiz maria lucia clara pedro Qual é nome mais comum? alberto pedro maria luiz maria
Leia maisPython: Classes. Claudio Esperança
Python: Classes Claudio Esperança 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
Leia maisLuciano Ramalho luciano@ramalho.org. setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python
Luciano Ramalho luciano@ramalho.org setembro/2012 Objetos Pythonicos Orientação a objetos e padrões de projeto em Python Para me encontrar Juntem-se a Oficinas Turing no Google Groups solicite um convite
Leia maisEncapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos
Encapsulamento e Métodos (Construtores e Estáticos) Sobrecarga de Métodos João Paulo Q. dos Santos joao.queiroz@ifrn.edu.br Roteiro Conceitos sobre Encapsulamento; Variável this; Métodos Construtores;
Leia maisPython para quem sabe Python
Python para quem sabe Python Turma 1: 3ª/5ª 21h-23h (29/11; 1,6,8,13,15/12) Primeiras turmas Agradeço a confiança, mesmo! Satisfação garantida Estou sempre à disposição E-mail: luciano@ramalho.org Cel:
Leia maisDURAÇÃO DA PROVA: 2 horas
MAC2166 Introdução à Computação Grande Áreas Civil, Mecânica, Petróleo e Química Escola Politécnica Terceira Prova 21 de junho de 2016 Nome: Assinatura: N o USP: Turma: Professor: Instruções: 1. Não destaque
Leia maisClasses e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010
Classes e Objetos SCC0604 - Programação Orientada a Objetos Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade
Leia maisConceitos de Programação Orientada a Objetos
Conceitos de Programação Orientada a Objetos Tatyana Bitencourt Com as técnicas de orientação a objeto, é possível obter resultados considerados impossíveis pensando de maneira estruturada. Como Java não
Leia maisLinguagem de Programação Orientada a Objeto Abstração - Encapsulamento
Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento Professora Sheila Cáceres Variáveis locais Campos são um tipo de variável. Eles: armazenam valores por toda a vida de um objeto; e
Leia maisFundamentos da Programação
Fundamentos da Programação Segundo Teste 18 de Junho de 2014 15:00 16:30 1. (1.0) Diga quais as fases por que passa o desenvolvimento de um programa no modelo estudado e o que se faz em cada uma delas.
Leia maisAula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU
Aula 5 POO 1 Encapsulamento Profa. Elaine Faria UFU - 2019 Sobre o Material Agradecimentos Aos professores José Gustavo e Fabiano, por gentilmente terem cedido seus materiais. Os slides consistem de adaptações
Leia maisTipo Abstrato de Dados (TAD) Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo
Tipo Abstrato de Dados (TAD) Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo tmelo@uea.edu.br www.tiagodemelo.info Observações O conteúdo dessa aula é parcialmente proveniente do Capítulo
Leia maisComputação 2. Aula 7 Teórica professor: Leonardo Carvalho
Computação 2 Aula 7 Teórica professor: Leonardo Carvalho Abstração 2 Abstração Do latim abstracione, que significa separação Ação de isolar um elemento de um todo 3 Exemplo O que você vê neste vídeo? 4
Leia maisComputação 1 - Python Aula 6 - Teórica: Listas 1/ 28
Computação 1 - Python Aula 6 - Teórica: Listas 1/ 28 Listas - Fatias Podemos usar a notação de fatias (slices) em listas: [start : end] : vai do índice start até o índice end-1 [start : ] : vai de start
Leia maisProgramação I Aula 19 Aritmética com racionais Pedro Vasconcelos DCC/FCUP
Programação I Aula 19 Aritmética com racionais DCC/FCUP DCC/FCUP 2019 1/ 30 Nesta aula 1 Aritmética com racionais 2 Simplificação 3 Operações 4 Comparações DCC/FCUP 2019 2/ 30 Aritmética com racionais
Leia maisProgramação orientada a objetos
Programação orientada a objetos Python fornece suporte para programação orientada a objetos: foco na criação de objetos, contendo simultaneamente dados e funcionalidade definição de objetos corresponde
Leia maisProjeto de Linguagem. Linguagens de Programação
Projeto de Linguagem Renato Ferreira Linguagens de Programação Linguagens são adotadas para preencher uma demada Facilitar uma aplicação outrora difícil/impossível Independente da qualidade da linguagem
Leia maisProgramação procedimental
Prof. André Backes Programação procedimental Também chamada de programação procedural Contêm um conjunto de passos computacionais a serem executados Problemas são decompostos em sub-problemas Modularização
Leia maisFunções. Prof. Alberto Costa Neto Programação em Python
Funções Prof. Alberto Costa Neto Programação em Python Passos armazenados (e reusados) def imprimir(): Programa: imprimir() print 'Zip' imprimir() print 'Hello' print 'Fun' def imprimir(): print 'Hello'
Leia maisComputadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004
Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004 FICHA 8 CLASSES E OBJECTOS 8. Objectivos Objectivos
Leia maisA Linguagem Python: Uma visão geral. Prof. Alberto Costa Neto Programação em Python
A Linguagem Python: Uma visão geral Prof. Alberto Costa Neto Programação em Python Python é a linguagem do interpretador Python e daqueles que são capazes de conversar com ele. Um indivíduo que fala Python
Leia maisComputação I - Python Aula 4 - Teórica: Variáveis e Atribuição, Strings
Computação I - Python Aula 4 - Teórica: Variáveis e Atribuição, Strings João C. P. da Silva Carla A. D. M. Delgado Ana Luisa Duboc Dept. Ciência da Computação - UFRJ http://www.dcc.ufrj.br/ pythonufrj/
Leia maisComputação 2. Aula 6 Teórica professor: Leonardo Carvalho
Computação 2 Aula 6 Teórica professor: Leonardo Carvalho Quando é a prova? 2 13/01/2016 3 Códigos grandes são difíceis de manipular 4 Vamos organizar melhor nossos códigos! 5 Separe o código em módulos
Leia maisComputação II (MAB 225)
Computação II (MAB 225) Fabio Mascarenhas - 2015.1 http://www.dcc.ufrj.br/~fabiom/pythonoo Sobrecarga de operadores Quase todos os operadores de Python são como == e!=: podemos definir métodos para sobrecarregá-los
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp Objetos sem classes Um objeto tem duas visões: a de fora e a de dentro Visto de fora, um objeto é uma entidade opaca,
Leia mais1/ 26. Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função
1/ 26 Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função Python - Modo Interativo Experiência com programação e uso do computador 2/ 26 Primeiros Passos - Operadores adição + subtração multiplicação
Leia maisLaboratório de Programação 1 Aula 04
Laboratório de Programação 1 Aula 04 Mário Hozano professor@hozano.com Ciência da Computação UFAL - Arapiraca Relembrando a aula anterior... O que são valores, tipos e variáveis? Descreva os tipos int,
Leia maisProgramação Orientada a Objetos em Python
Programação Orientada a Objetos em Python Diego Silveira Costa Nascimento Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte diego.nascimento@ifrn.edu.br 23 de junho de 2017 Ementa
Leia maisLuciano Ramalho luciano@ramalho.org @ramalhoorg. Iteráveis, geradores & cia: o caminho pythonico
Luciano Ramalho luciano@ramalho.org Iteráveis, geradores & cia: o caminho pythonico Luciano Ramalho Arquiteto de soluções Web desde 1994 1º diretor técnico do Brasil Online, na Abril S/A Muitos clientes
Leia maisInterfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.
Interfaces Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Interfaces É utilizada para agrupar conceitos em
Leia maisQCon Rio Matando um Sistema Monolítico Rumo Aos Microservices. Bernardo Fontes. Rio de Janeiro/RJ 27 de Agosto de 2015
QCon Rio 2015 Matando um Sistema Monolítico Rumo Aos Microservices Bernardo Fontes Rio de Janeiro/RJ 27 de Agosto de 2015 Olar! twitter.com/bbfontes github.com/berinhard garimpo.fm pessoas.cc bernardoxhc@gmail.com
Leia maisComputação 1 - Python Aula 4 - Teórica Variáveis e Atribuição, Strings. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 30
Computação 1 - Python Aula 4 - Teórica Variáveis e Atribuição, Strings 1/ 30 Variáveis e Atribuição Dados a hora, minuto e segundo em que um corredor de uma maratona partiu, e dados a hora, minuto e segundos
Leia maisPROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO
COLÉGIO ESTADUAL ULYSSES GUIMARÃES CURSO TÉCNICO PROFISSIONALIZANTE EM INFORMÁTICA ERINALDO SANCHES NASCIMENTO PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO FOZ DO IGUAÇU 2013 LISTA
Leia maisMC-102 Aula 02 Shell Interativa, Programa Básico, Variáveis, Atribuições, Tipos Simples. Instituto de Computação Unicamp
MC-102 Aula 02 Shell Interativa, Programa Básico, Variáveis, Atribuições, Tipos Simples Instituto de Computação Unicamp 2016 Roteiro 1 Shell Interativa 2 Estrutura de um Programa em Python 3 Variáveis
Leia maisHerança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.
Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Possibilita o reuso de classes (código-fonte) Usar quando:
Leia maisComputação I - Python Aula 1 - Prática: Primeiros Passos- Função
Computação I - Python Aula 1 - Prática: Primeiros Passos- Função João C. P. da Silva Carla A. D. M. Delgado Ana Luisa Duboc Dept. Ciência da Computação - UFRJ http://www.dcc.ufrj.br/ pythonufrj/ Computação
Leia maisLinguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces
Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces Professora Sheila Cáceres Polimorfismo Polimorfismo Polimorfismo é a característica única de linguagens orientadas
Leia mais1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores
Nesta aula... Conteúdo 1 Expressões, valores e tipos 1 2 Variáveis e atribuições 5 1 Expressões, valores e tipos Expressões e valores Tipos programas calculam expressões para produzir valores cálculo de
Leia maisCIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO
REVISÃO POO INTRODUÇÃO À LINGUAGEM JAVA CRIANDO CLASSES EM JAVA Convenção de Nomes em Java Classes iniciam com letras maiúsculas Métodos, atributos e variáveis locais iniciam com minúsculas. Declaração
Leia maisIntrodução à Programação
Introdução à Programação Aula 21: Programação com objetos Rita P. Ribeiro 2017/2018 Departamento de Ciência de Computadores Nesta aula 1. Programação com objetos 2. Exemplo: módulo turtle 3. Tipos de dados
Leia maisComputação 2. Aula 8 Teórica professor: Leonardo Carvalho
Computação 2 Aula 8 Teórica professor: Leonardo Carvalho Exercício Escreva uma função que recebe uma lista L de valores inteiros e retorna uma lista contendo o triplo de cada valor em L. def triplos(l):
Leia maisUNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS
Data final de entrega 16/09/2014, até às 23h59min Enviar o arquivo de respostas em formato PDF e o arquivozip com códigos fontes para o e-mail motafernandomaia@gmailcom, insira no assunto do e-mail [Lista
Leia maisJava para Desktop. Programação Orientada à Objetos 2 JSE
Java para Desktop Programação Orientada à Objetos 2 JSE Encapsulamento significa "ocultar informações, ele define que cada objeto contém todos os detalhes de implementação necessários sobre como ele funciona
Leia maisOrientação a Objetos Básica
Orientação a Objetos Básica Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/ 1 Objetivos
Leia maisComputação 1 - Python Aula 4 - Teórica: Variáveis e Atribuição, Strings 1/ 26
Computação 1 - Python Aula 4 - Teórica: Variáveis e Atribuição, Strings 1/ 26 Variáveis e Atribuição Variáveis são usadas para guardar dados intermedidários nas funções. 2/ 26 Variáveis e Atribuição Variável:
Leia maisINTRODUÇÃO A CLASSES E ORIENTAÇÃO A OBJETOS EM PYTHON. George Gomes Cabral
INTRODUÇÃO A CLASSES E ORIENTAÇÃO A OBJETOS EM PYTHON George Gomes Cabral O PARADIGMA DA ORIENTAÇÃO A OBJETOS Um paradigma é uma forma de abordar um problema. Em Python, tudo é objeto!! Objetos armazenam
Leia maisInformática. Professor: Diego Oliveira. Conteúdo 04: Orientação a Objetos
Informática Professor: Diego Oliveira Conteúdo 04: Orientação a Objetos Conteúdo da Aula Introdução à Programação Orientada a Objetos Linguagem Java Classes Objetos Atributos Métodos e Construtores Parâmetros
Leia maisProgramação orientada a objetos: exemplo com frações (conclusão)
Programação orientada a objetos: exemplo com frações (conclusão) Nesta aula vamos desenvolver mais métodos para a classe Fraction; Fração: construtor Métodos especiais class Fraction: def init (self,top,bottom):
Leia maisClasses e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos
INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II Classes e Objetos Objetos Um conjunto de estados e comportamentos Classes Um modelo para a criação de objetos 1 Pacotes e Java API Pacotes Um conjunto
Leia maisLista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }
Lista 05 Herança 1. Analisando a classe Java abaixo podemos observar que a mesma possui apenas um atributo, um construtor e dois métodos. Perceba que dentro do método main estão sendo invocados métodos
Leia maisIntrodução à Programação / Programação I
Introdução à Programação / Programação I Aula 3: Primeiros Programas Rita P. Ribeiro 2018/2019 Departamento de Ciência de Computadores Nesta aula 1. Tipos básicos 2. Variáveis e atribuições 3. Programas
Leia maisPython. 17 Maio 2005, Teste e Qualidade de Software. Faculdade de Engenharia da Universidade do Porto. Ferramentas de teste para a linguagem.
Faculdade de Engenharia da Universidade do Porto 17 Maio 2005, Teste e Qualidade de Software Estrutura da apresentação 1 à 2 Ferramentas para testes unitários 3 Ferramentas para cobertura de 4 Ferramentas
Leia maisDesenvolvimento Web II
Desenvolvimento Web II Linguagem PHP PHP Orientado a Objeto / Banco de Dados (PDO) https://secure.php.net/manual/pt_br/ Gil Eduardo de Andrade PHP Orientado a Objeto O PHP é uma linguagem de script que
Leia maisFundamentos da Programação
Fundamentos da Programação Segundo Teste 10 de Janeiro de 2014 09:00 10:30 Nome: Número: Esta prova, individual e sem consulta, tem 8 páginas com 12 perguntas. A cotação de cada pergunta está assinalada
Leia maisDicionários. Prof. Alberto Costa Neto Programação em Python
Dicionários Prof. Alberto Costa Neto Programação em Python O que é uma Coleção? Uma coleção permite colocar vários valores em um única variável Coleções são práticas porque permitem carregar muitos valores
Leia maisMCG126 Programação de Computadores II
MCG126 Programação de Computadores II Turma: B Professor: Isac Mendes Lacerda (Material original cedido gentilmente pela professora Janaína Gomide) 1 Outro Teste... Escreva um programa que receba um texto
Leia maisO Pronome PARENT 5.1. O Objeto que Declarou o Objeto Corrente da Execução
5 O Pronome PARENT Neste capítulo, é explorado o pronome PARENT. Na Seção 5.1, a relação entre o objeto corrente e o objeto que o declarou é explicada. Na Seção 5.2, são mostradas as transformações de
Leia maisSo she went on, wondering more and more at every step, as everything turned into a tree the moment she came up to it.
Capítulo 14 Árvores So she went on, wondering more and more at every step, as everything turned into a tree the moment she came up to it. Lewis Carroll, Through the Looking Glass A árvore é um tipo estruturado
Leia maisIntrodução à Programação Aula 3 Primeiros programas
Introdução à Programação Aula 3 Primeiros programas Pedro Vasconcelos DCC/FCUP 2015 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 3 Primeiros programas 2015 1 / 23 Nesta aula... 1 Tipos básicos
Leia maisNomes, vinculações e escopos
Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Leia maisVB.NET - Orientação a objetos : conceitos básicos em 10
lições. VB.NET - Orientação a objetos : conceitos básicos em 10 Lição 1 - Como criar classe e métodos. Instanciando um objeto e acessando o método da classe. - Para criar uma classe basta usar a palavra
Leia maisLinguagem de Programação III
Linguagem de Programação III Aula-7 Reutilização de Classes Prof. Esbel Tomás Valero Orellana Até Aqui Introdução a POO e sua implementação em Java Atributos, métodos e encapsulamento dos mesmos Trabalhando
Leia maisComputação II MAB 225. Brunno Goldstein.
Computação II MAB 225 OO Brunno Goldstein bfgoldstein@cos.ufrj.br www.cos.ufrj.br/~bfgoldstein Ementa Programação Orientada a Objetos Tratamento de Exceções Módulos Manipulação de Arquivos Interface Gráfica
Leia maisOrientação a Objetos - Herança
Orientação a Objetos - Herança 1 Repetindo Código p Todo banco tem funcionário. A classe funcionario ficaria da seguinte forma; class Funcionario { String nome; String cpf; double salario; // métodos devem
Leia maisProgramação de Jogos em Python
Programação de Jogos em Python Exemplo Prático - Resolvedor de Labirintos Gustavo Sverzut Barbieri GPSL - UNICAMP 28 de abril de 2005 ustavo Sverzut Barbieri (GPSL - UNICAMP) Programação de Jogos em Python
Leia mais1/ 23. Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função
1/ 23 Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função Python - Modo Interativo Experiência com programação e uso do computador 2/ 23 Primeiros Passos - Operadores adição + subtração multiplicação
Leia maisComputação 1 - Python 1/ 41
Computação 1 - Python Aula 2 - Teórica: Função 1/ 41 Função Exercício: Calcule a área da coroa circular (anel) formada por dois círculos de raios r1 e r2 (r1 > r2 e Pi = 3.14). 2/ 41 Função Exercício:
Leia maisAula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias
SCC 12 - Introdução à Programação para Engenharias Tipos de Dados e Variáveis Professor: André C. P. L. F. de Carvalho, ICMC-USP Pos-doutorando: Isvani Frias-Blanco Monitor: Henrique Bonini de Britto Menezes
Leia maisIntrodução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.
Introdução Atributos, métodos e encapsulamento joao@ecomp.uefs.br Atributos Ipos de acesso: private, public, protected e default Encapsulamento Métodos Construtores Criando objetos Departamento de Ciências
Leia maisTÍTULO: UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
TÍTULO: UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY CATEGORIA: EM ANDAMENTO ÁREA: CIÊNCIAS EXATAS E DA TERRA SUBÁREA: COMPUTAÇÃO E INFORMÁTICA INSTITUIÇÃO: FACULDADE ANHANGUERA
Leia maisLuciano Ramalho setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python
Luciano Ramalho luciano@ramalho.org setembro/2012 Objetos Pythonicos Orientação a objetos e padrões de projeto em Python Aula 5 Metaprogramação e o Python Data Model Sobrecarga de operadores Objetos invocáveis
Leia maisHerança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos
e Ligação Dinâmica Programação Orientada a Objetos e Polimorfismo A é a contribuição original do paradigma de programação orientado a objetos Fundamentos chave do paradigma OO: Abstração de Dados A herança
Leia maisModelo do Mundo Real. Abstração. Interpretação
Modelo do Mundo Real Mundo Real Abstração Interpretação Sistema de Software Modelo Algoritmo Abstração: O modelo precisa capturar apenas as características do mundo real que são importantes para o sistema
Leia maisLinguagem de Programação IV Introdução
Linguagem de Programação IV Introdução Prof. Alessandro Borges 2 Tópicos Orientação a objetos Classe Objeto Abstração Encapsulamento Herança Polimorfismo Plataforma Java 3 4 POO é um paradigma de programação
Leia maisDaniel Wildt
Orientação a Objetos 1 Daniel Wildt http://danielwildt.blogspot.com Agenda 2 Orientação a Objetos Classe x Objeto Representação classe Atributos / operações Construtores e Destrutores Liberando memória
Leia maisAula 4 Encapsulamento e Relacionamento Cleverton Hentz
Aula 4 Encapsulamento e Relacionamento Cleverton Hentz Sumário } Encapsulamento } Propriedades } Relacionamentos } Composição } Herança 2 O que é encapsulamento? } O que vocês entendem por encapsular?!
Leia maisProgramação por Objectos. Java
Programação por Objectos Java Parte 6: Herança e Polimorfismo LEEC@IST Java 1/50 Herança revisão (1) A herança é um mecanismo em que a subclasse constitui uma especialização da superclasse. A superclasse
Leia maisAlgoritmos e estrutura de dados
Algoritmos e estrutura de dados Listas Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. Conteúdo Listas Listas encadeadas
Leia mais} Instalando o Ruby. } Conceitos básicos do Ruby. } Métodos. } Classes. } Módulos. } Arrays e Hashes. } Estruturas de Controle. } Expressões regulares
Brayan Neves } Instalando o Ruby } Conceitos básicos do Ruby } Métodos } Classes } Módulos } Arrays e Hashes } Estruturas de Controle } Expressões regulares } Ruby } Netbeans 6.9.1 } Nomes no Ruby (Padrões)
Leia maisComputação I - Python
Computação I - Python Aula 2 - Teórica: João C. P. da Silva Carla A. D. M. Delgado Ana Luisa Duboc Dept. Ciência da Computação - UFRJ http://www.dcc.ufrj.br/ pythonufrj/ Computação I - Python Aula 2 1
Leia maisComputação 1 - Python Aula 2 - Teórica. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 39
Computação 1 - Python Aula 2 - Teórica Função 1/ 39 Calcule a área da coroa circular (anel) formada por dois círculos de raios r1 e r2 (r1 > r2 e Pi = 3.14). 2/ 39 Calcule a área da coroa circular (anel)
Leia maisNomes, vinculações e escopos
Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Leia maisEncapsulamento. Alberto Costa Neto DComp - UFS
Encapsulamento Alberto Costa Neto DComp - UFS 1 Motivação O que aprendemos até agora? O que diferencia a POO da Programação Imperativa? Estas informações são suficientes para construir um projeto OO eficiente?
Leia maisAula passada. Aula passada... Sequências Funções puras e modificadores. Listas Tuplos
Aula passada Listas Listas 1 Listas em compreensão Alguns idiomas úteis conjuntos ordenado de valores, cada um dos quais identificado por um índice; Operações com listas: semelhantes a operações com strings;
Leia mais