Produtividade e qualidade em Python através da metaprogramação

Tamanho: px
Começar a partir da página:

Download "Produtividade e qualidade em Python através da metaprogramação"

Transcrição

1 Produtividade e qualidade em Python através da metaprogramação ou a visão radical na prática Luciano Ramalho

2 Fluent Python (O Reilly) Early Release: out/2014 First Edition: jul/2015 ~ 700 páginas Data structures Functions as objects Classes and objects Control flow Metaprogramming

3 PythonPro: escola virtual Instrutores: Renzo Nuccitelli e Luciano Ramalho Na sua empresa ou online ao vivo com Adobe Connect: Python Prático Python Birds Objetos Pythônicos Python para quem sabe Python

4 Simply Scheme: preface

5 Nosso objetivo Expandir o vocabulário com uma idéia poderosa: descritores de atributos

6 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

7

8 ➊ o primeiro doctest ======= Passo 1 ======= Um pedido de alimentos a granel é uma coleção de ``ItemPedido``. Cada item possui campos para descrição, peso e preço:: >>> from granel import ItemPedido >>> ervilha = ItemPedido('ervilha partida', 10, 3.95) >>> ervilha.descricao, ervilha.peso, ervilha.preco ('ervilha partida', 10, 3.95) Um método ``subtotal`` fornece o preço total de cada item:: >>> ervilha.subtotal() 39.5

9 ➊ 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 o método inicializador é conhecido como dunder init

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() 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 -

11 ➊ a solução clássica class ItemPedido(object): def init (self, descricao, peso, preco): self.descricao = descricao self.set_peso(peso) self.preco = preco def subtotal(self): return self.get_peso() * self.preco def get_peso(self): return self. peso def set_peso(self, valor): if valor > 0: self. peso = valor else: raise ValueError('valor deve ser > 0') mudanças na interface atributo protegido

12 ➊ porém, a API foi alterada >>> ervilha.peso Traceback (most recent call last):... AttributeError: 'ItemPedido' object has no attribute 'peso' Antes podíamos acessar o peso de um item escrevendo apenas item.peso, mas agora não... Isso quebra código das classes clientes Python oferece outro caminho...

13

14 ➋ o segundo doctest O peso de um ``ItemPedido`` deve ser maior que zero:: >>> ervilha.peso = 0 Traceback (most recent call last):... ValueError: valor deve ser > 0 >>> ervilha.peso 10 peso não foi alterado parece uma violação de encapsulamento mas a lógica do negócio é preservada

15 ➋ validação com property O peso de um ``ItemPedido`` deve ser maior que zero:: >>> ervilha.peso = 0 Traceback (most recent call last):... ValueError: valor deve ser > 0 >>> ervilha.peso 10 peso agora é uma property

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. peso atributo def peso(self, valor): if valor > 0: self. peso = valor else: raise ValueError('valor deve ser > 0')

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') no init a property já está em uso

18 ➋ 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

19 ➋ 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?

20

21 ➌ os atributos gerenciados (managed attributes) ItemPedido descricao peso {descriptor} preco {descriptor} init subtotal usaremos descritores para gerenciar o acesso aos atributos peso e preco, preservando a lógica de negócio

22 ➌ validação com descriptor peso e preco são atributos da classe ItemPedido a lógica fica em get e set, podendo ser reutilizada

23 ➌ implementação do descritor classe new-style class Quantidade(object): contador = 0 def init (self): prefixo = self. class. name chave = self. class. contador self.nome_alvo = '%s_%s' % (prefixo, chave) self. class. contador += 1 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 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

24 ➊ a classe produz instâncias classe instâncias

25 ➌ a classe descriptor instâncias classe

26 ➌ uso do descriptor a classe ItemPedido tem duas instâncias de Quantidade associadas a ela

27 ➌ implementação do descriptor class Quantidade(object): contador = 0 def init (self): prefixo = self. class. name chave = self. class. contador self.nome_alvo = '%s_%s' % (prefixo, chave) self. class. contador += 1 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 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

28 ➌ 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 a classe ItemPedido tem duas instâncias de Quantidade associadas a ela

29 ➌ 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

30 ➌ 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 todos os acessos a peso e preco passam pelos descritores

31 ➌ implementar o descriptor class Quantidade(object): contador = 0 def init (self): prefixo = self. class. name chave = self. class. contador self.nome_alvo = '%s_%s' % (prefixo, chave) self. class. contador += 1 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

32 ➌ implementar o descriptor class Quantidade(object): contador = 0 def init (self): prefixo = self. class. name chave = self. class. contador self.nome_alvo = '%s_%s' % (prefixo, chave) self. class. contador += 1 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)

33 ➌ implementar o descriptor class Quantidade(object): contador = 0 def init (self): prefixo = self. class. name chave = self. class. contador self.nome_alvo = '%s_%s' % (prefixo, chave) self. class. contador += 1 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

34 ➌ implementar o descriptor class Quantidade(object): contador = 0 def init (self): prefixo = self. class. name chave = self. class. contador self.nome_alvo = '%s_%s' % (prefixo, chave) self. class. contador += 1 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

35 ➌ implementar o descriptor get e set manipulam o atributo-alvo no objeto ItemPedido

36 ➌ implementar o descriptor class Quantidade(object): contador = 0 def init (self): prefixo = self. class. name chave = self. class. contador self.nome_alvo = '%s_%s' % (prefixo, chave) self. class. contador += 1 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

37 ➌ descriptor implementation cada instância de descritor gerencia um atributo específico das instâncias de ItemPedido e precisa de um nome_alvo específico

38 ➌ inicialização do descritor 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 quando um descritor é instanciado, o atributo ao qual ele será vinculado ainda não existe exemplo: o atributo preco só passa a existir após a atribuição

39 ➌ implementar o descriptor class Quantidade(object): contador = 0 def init (self): prefixo = self. class. name chave = self. class. contador self.nome_alvo = '%s_%s' % (prefixo, chave) self. class. contador += 1 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 gerar um nome para o atributo-alvo onde será armazenado o valor na instância de ItemPedido

40 ➌ implementar o descriptor class Quantidade(object): contador = 0 def init (self): prefixo = self. class. name chave = self. class. contador self.nome_alvo = '%s_%s' % (prefixo, chave) self. class. contador += 1 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') cada instância de Quantidade precisa criar e usar um nome_alvo diferente

41 ➌ implementar o descriptor >>> ervilha = ItemPedido('ervilha partida',.5, 3.95) >>> ervilha.descricao, ervilha.peso, ervilha.preco ('ervilha partida',.5, 3.95) >>> dir(ervilha) ['Quantidade_0', 'Quantidade_1', ' class ', ' delattr ', ' dict ', ' doc ', ' format ', ' getattribute ', ' hash ', ' init ', ' module ', ' new ', ' reduce ', ' reduce_ex ', ' repr ', ' setattr ', ' sizeof ', ' str ', ' subclasshook ', ' weakref ', 'descricao', 'peso', 'preco', 'subtotal'] Quantidade_0 e Quantidade_1 são os atributos-alvo

42 ➌ os atributos alvo ItemPedido descricao Quantidade_0 Quantidade_1 init subtotal «peso» «preco» «get/set atributo alvo» «descriptor» Quantidade nome_alvo init get set Quantidade_0 armazena o valor de peso Quantidade_1 armazena o valor de preco

43 ➌ os atributos gerenciados ItemPedido descricao peso {descriptor} preco {descriptor} init subtotal clientes da classe ItemPedido não precisam saber como peso e preco são gerenciados E nem precisam saber que Quantidade_0 e Quantidade_1 existem

44 ➌ próximos passos Seria melhor se os atributos-alvo fossem atributos protegidos _ItemPedido peso em vez de _Quantitade_0 Para fazer isso, precisamos descobrir o nome do atributo gerenciado (ex. peso) isso não é tão simples quanto parece pode ser que não valha a pena complicar mais

45 ➌ o desafio quando cada descritor é instanciado, a 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 classe ItemPedido não existe, e nem os atributos gerenciados

46 ➌ o desafio 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 por exemplo, o atributo peso só é criado depois que Quantidade() é instanciada

47 Próximos passos Se o descritor precisar saber o nome do atributo gerenciado (talvez para salvar o valor em um banco de dados, usando nomes de colunas descritivos, como faz o Django)...então você vai precisar controlar a construção da classe gerenciada com uma...

48 Acelerando...

49

50 ➎ metaclasses criam classes metaclasses são classes cujas instâncias são classes

51 ➏ simplicidade aparente

52 ➏ 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

53 ➏ 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

54 ➏ esquema final +

55 ➏ o poder da abstração

56 Referências Raymond Hettinger s Descriptor HowTo Guide Alex Martelli s Python in a Nutshell, 2e. David Beazley s Python Essential Reference, 4 th edition (covers Python 2.6)

Descritores de atributos em Python

Descritores de atributos em Python Descritores de atributos em Python outubro/2012 Luciano Ramalho luciano@ramalho.org Ritmo desta palestra Recomendação: manter os olhos abertos Pré-requistos da palestra Para acompanhar os slides a seguir,

Leia mais

Python para quem sabe Python

Python 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 mais

Luciano Ramalho dezembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python

Luciano 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 mais

Luciano Ramalho setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python

Luciano 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 mais

Luciano 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 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 mais

Curso de Python em 5 Horas

Curso 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 mais

Python: Exceções, Iteradores e Geradores. Claudio Esperança

Python: 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 mais

Luciano 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 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 mais

Aplicaçõ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 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 mais

Tipo 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 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 mais

Computação II (MAB 225)

Computaçã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 mais

Luciano 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 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 mais

Computaçã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 - 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 mais

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

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 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 mais

Programação procedimental

Programaçã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 mais

Listas, conjuntos e dicionários

Listas, conjuntos e dicionários Listas, conjuntos e dicionários 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 mais

Funções. Prof. Alberto Costa Neto Programação em Python

Funçõ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 mais

Python para quem sabe Python

Python 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 mais

Python: Classes. Claudio Esperança

Python: 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 mais

Padrão para a codificação em Python

Padrã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 mais

Luciano Ramalho luciano@ramalho.org @ramalhoorg. Iteráveis, geradores & cia: o caminho pythonico

Luciano 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 mais

Dicionários. Prof. Alberto Costa Neto Programação em Python

Dicioná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 mais

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Linguagem 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 mais

Computação 2. Aula 7 Teórica professor: Leonardo Carvalho

Computaçã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 mais

Computação 1 - Python Aula 6 - Teórica: Listas 1/ 28

Computaçã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 mais

Entrada e saída. Marco A L Barbosa malbarbo.pro.br. Departamento de Informática Universidade Estadual de Maringá

Entrada e saída. Marco A L Barbosa malbarbo.pro.br. Departamento de Informática Universidade Estadual de Maringá Entrada e saída 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 mais

DURAÇÃO DA PROVA: 2 horas

DURAÇÃ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 mais

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé) e Adapter Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé) O que vimos na última aula? Factory Method Abstract Factory 2 O que veremos hoje? (padrão de criaçã) Adapter

Leia mais

Algoritmos e estrutura de dados

Algoritmos e estrutura de dados Algoritmos e estrutura de dados Introdução Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. Conteúdo A linguagem Python

Leia mais

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Encapsulamento 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 mais

C com introdução a OO

C com introdução a OO ... Centro Integrado de Tecnologia da Informação C com introdução a OO ... Centro Integrado de Tecnologia da Informação Aula 9 Ronald Dener - Instrutor Matheus Soares - Monitor 17 / outubro 17 / outubro

Leia mais

Aula 4 Encapsulamento e Relacionamento Cleverton Hentz

Aula 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 mais

Orientação a Objetos parte 2 ENCAPSULAMENTO, CLASSES, HERANÇAS

Orientaçã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 mais

VB.NET - Orientação a objetos : conceitos básicos em 10

VB.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 mais

Algoritmos e estrutura de dados

Algoritmos 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

Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2005/2006

Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2005/2006 Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Uniersidade de Coimbra Ano Lectio 2005/2006 FICHA 8 CLASSES E OBJECTOS 8. Objectios Objectios que

Leia mais

Programação com objectos

Programação com objectos Capítulo 11 Programação com objectos Nos exercícios deste capítulo, deve validar os argumentos dos construtores, mas não deve validar os argumentos dos outros métodos, a não ser que isso seja pedido explicitamente.

Leia mais

Introdução à Programação / Programação I

Introdução à Programação / Programação I Introdução à Programação / Programação I Aula 14: Deteção e correção de erros Rita P. Ribeiro 2017/2018 Departamento de Ciência de Computadores Nesta aula 1. Erros sintáticos 2. Erros de execução 3. Erros

Leia mais

Introdução à Programação Aula 20 Definição de classes

Introdução à Programação Aula 20 Definição de classes Introdução à Programação Aula 20 Definição de classes Pedro Vasconcelos DCC/FCUP 2014 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 20 Definição de classes 2014 1 / 23 Nesta aula 1 Definição

Leia mais

Fundamentos da Programação

Fundamentos 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 mais

Introdução à Programação

Introduçã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 mais

Computaçã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 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 mais

Programação I Aula 19 Aritmética com racionais Pedro Vasconcelos DCC/FCUP

Programaçã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 mais

INTRODUÇÃ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 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 mais

Computação II (MAB 225)

Computaçã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 mais

È um tipo estruturado homogêneo

È um tipo estruturado homogêneo Em Java, arrays são objetos que possuem componentes. Estes componentes devem ser todos do mesmo tipo e podem ser primitivos ou outros objetos. Os arrays têm tamanho fixo È um tipo estruturado homogêneo

Leia mais

Luciano Ramalho setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python

Luciano 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 mais

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

PROGRAMAÇÃ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 mais

Modificadores de acesso e atributos de classe

Modificadores de acesso e atributos de classe Modificadores de acesso e atributos de classe 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/

Leia mais

Engenharia de Software

Engenharia de Software UNIVERSIDADE DE LISBOA INSTITUTO SUPERIOR TÉCNICO Engenharia de Software LEIC/LETI, 3 o Ano, 2 o Semestre Repescagem 1 o Teste, 7 de Julho de 2017 Duração: 90 minutos Nome: Número: Este teste tem um conjunto

Leia mais

Prova Final de Linguagens de Programação - DCC024B -

Prova Final de Linguagens de Programação - DCC024B - Prova Final de Linguagens de Programação - DCC024B - Ciência da Computação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem consulta.

Leia mais

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

Classes 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 mais

Aula passada. Aula passada... Sequências Funções puras e modificadores. Listas Tuplos

Aula 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

Computação 2. Aula 8 Teórica professor: Leonardo Carvalho

Computaçã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 mais

Introdução à Programação Aula 17 Deteção e correção de erros

Introdução à Programação Aula 17 Deteção e correção de erros Introdução à Programação Aula 17 Deteção e correção de erros Pedro Vasconcelos DCC/FCUP 2015 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 17 Deteção e correção de erros 2015 1 / 31 Nesta

Leia mais

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

CIÊ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 mais

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Aula 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 mais

MAB224 Programação de Computadores II. Prof. Franklin Marquezino Universidade Federal do Rio de Janeiro

MAB224 Programação de Computadores II. Prof. Franklin Marquezino Universidade Federal do Rio de Janeiro MAB224 Programação de Computadores II Prof. Franklin Marquezino Universidade Federal do Rio de Janeiro Parte IV Conceitos de Orientação a Objetos em Python Atenção: Slides em constante atualização. Consultem

Leia mais

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Aula 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 mais

Computaçã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. 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 mais

[Desenvolvimento OO com Java] Modificadores de acesso e atributos de classe

[Desenvolvimento OO com Java] Modificadores de acesso e atributos de classe Centro Tecnológico Departamento de Informática Prof. Vítor E. Silva Souza http://www.inf.ufes.br/~vitorsouza Este obra está licenciada com uma licença Creative Commons Atribuição- CompartilhaIgual 4.0

Leia mais

Implementando subprogramas

Implementando subprogramas Implementando subprogramas Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Leia mais

1/ 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 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 mais

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Linguagem 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 mais

Fundamentos da Programação

Fundamentos 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 mais

MCG126 Programação de Computadores II

MCG126 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 mais

Computação I - Python Aula 1 - Teórica: Manipulação de Strings, Tuplas e Listas

Computação I - Python Aula 1 - Teórica: Manipulação de Strings, Tuplas e Listas Computação I - Python Aula 1 - Teórica: Manipulação de Strings, Tuplas e Listas 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 mais

Prova Final de Linguagens de Programação - DCC024 - Sistemas de Informação

Prova Final de Linguagens de Programação - DCC024 - Sistemas de Informação Prova Final de Linguagens de Programação - DCC024 - Sistemas de Informação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem consulta.

Leia mais

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente): Algoritmos e Programação 2 Baseado no material do Prof. Júlio Machado Objetos e Classes em Java Revisão Classes: encapsulam dados (atributos) e operações sobre os dados (métodos) Objetos: instâncias de

Leia mais

Objetivos do mini curso. Conhecer a linguagem. Noção de programação utilizando Python. Aprender o báscio.

Objetivos do mini curso. Conhecer a linguagem. Noção de programação utilizando Python. Aprender o báscio. Objetivos do mini curso Conhecer a linguagem. Noção de programação utilizando Python. Aprender o báscio. Conteúdo Uma visão da linguagem: O modo python de programar O interpretador dinâmico Salvando e

Leia mais

Programação orientada a objetos: exemplo com frações (conclusão)

Programaçã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 mais

Computação 2. Aula 11 Teórica professor: Leonardo Carvalho

Computação 2. Aula 11 Teórica professor: Leonardo Carvalho Computação 2 Aula 11 Teórica professor: Leonardo Carvalho SciPy 2 SciPy Conjunto de algoritmos matemáticos usados com frequência por cientistas e engenheiros. Alguns submódulos: cluster: algoritmos de

Leia mais

Computação I - Python Aula 1 - Prática: Primeiros Passos- Função

Computaçã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 mais

Laboratório de Programação 1 Aula 04

Laborató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 mais

Implementação de subprogramas

Implementação de subprogramas Implementação de subprogramas 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 mais

Orientação a Objetos. Encapsulamento ArrayLists. Gil Eduardo de Andrade

Orientação a Objetos. Encapsulamento ArrayLists. Gil Eduardo de Andrade Orientação a Objetos Encapsulamento ArrayLists Gil Eduardo de Andrade O Conceito de Encapsulamento O que é Encapsulamento? Encapsulamento é o ato de esconder os detalhes de implementação de uma classe;

Leia mais

Análise Semântica. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 40

Análise Semântica. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 40 Análise Semântica Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Outubro, 2016 1 / 40 Sumário 1 Conceitos 2 A linguagem Cool 3 Análise semântica Símbolos Tipos

Leia mais

Computaçã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 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 mais

GRASP. Nazareno Andrade (baseado em Hyggo Almeida e Jacques Sauvé)

GRASP. Nazareno Andrade (baseado em Hyggo Almeida e Jacques Sauvé) GRASP Nazareno Andrade (baseado em Hyggo Almeida e Jacques Sauvé) O que vimos na última aula? Introdução a padrões O que são? Por que utilizá-los? Padrões GRASP O que são? Quais serão apresentados na disciplina?

Leia mais

Sistemas de Informação e Bases de Dados 2012/2013. Modelo Relacional. Alberto Sardinha 2012 IST

Sistemas de Informação e Bases de Dados 2012/2013. Modelo Relacional. Alberto Sardinha 2012 IST Sistemas de Informação e Bases de Dados 2012/2013 Modelo Relacional Alberto Sardinha Bibliografia Raghu Ramakrishnan, Database Management Systems, Cap. 3 1 Sumário Modelo Relacional Conversão Modelo EA

Leia mais

Java Standard Edition (JSE)

Java Standard Edition (JSE) Java Standard Edition (JSE) Capítulo 05. Encapsulamento, Modificadores de acesso e atributos de classe Esp. Márcio Palheta MSN: marcio.palheta@hotmail.com 1 Agenda Revisão da aula anterior; Motivação Organização;

Leia mais

Sabemos que a classe é responsável por definir a estrutura e o comportamento de seus objetos. Portanto, os objetos são instâncias das classes.

Sabemos que a classe é responsável por definir a estrutura e o comportamento de seus objetos. Portanto, os objetos são instâncias das classes. JAVA ENCAPSULAMENTO Na linguagem de programação Java, a classe é o alicerce para o encapsulamento, o qual é definido como uma técnica que faz com que os atributos da classe permaneçam ocultos, pois desta

Leia mais

Computação II (MAB 225)

Computação II (MAB 225) Computação II (MAB 225) Fabio Mascarenhas - 2015.1 http://www.dcc.ufrj.br/~fabiom/pythonoo Introdução No curso de Computação I vocês viram os conceitos básicos de programação em Python: expressões e comandos,

Leia mais

Testes de correção (de defeitos)

Testes de correção (de defeitos) Testes de correção (de defeitos) Revelam a presença de erros, mas NÃO a ausência Um teste bem sucedido é aquele que descobre o maior número de erros existentes. Deve ser utilizado em conjunto com técnicas

Leia mais

Computação 2. Aula 6 Teórica professor: Leonardo Carvalho

Computaçã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 mais

Python. Resumo e Exercícios P3

Python. Resumo e Exercícios P3 Python Resumo e Exercícios P3 Resuminho Teórico Classes e Objetos Tudo em python é um objeto, objetos são instâncias de classes, como int, float, list, etc. a = 5 # a é um objeto da classe int b = 2.0

Leia mais

Padrão: Versionamento

Padrão: Versionamento Padrão: Versionamento Nomes: Flávia Rainone N.USP: 3286141 Stefan Neusatz Guilhen N.USP: 3286332 Intenção Prover um mecanismo simples para gerenciamento de versões de objetos, de modo a esconder dos clientes

Leia mais

Projeto de Linguagem. Linguagens de Programação

Projeto 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 mais

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla. Java First-Tier: plicações Orientação a Objetos em Java (III) Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Herança: Simples Múltipla O tipo de herança que usamos até agora é chamado

Leia mais

Collections Framework

Collections Framework Collections Framework 1 Arrays p Manipular array é bastante trabalhoso. p Dificuldades aparecem em diversos momentos: n não podemos redimensionar um array em Java; n é impossível buscar diretamente por

Leia mais

INF011 Padrões de Projeto. 21 Memento

INF011 Padrões de Projeto. 21 Memento INF011 Padrões de Projeto 21 Memento Sandro Santos Andrade sandroandrade@ifba.edu.br Instituto Federal de Educação, Ciência e Tecnologia da Bahia Departamento de Tecnologia Eletro-Eletrônica Graduação

Leia mais

TÍ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 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 mais

Programação de Computadores

Programação de Computadores Programação de Computadores Instituto de Computação UFF Departamento de Ciência da Computação Otton Teixeira da Silveira Filho Conteúdo Mais um tipo numérico print() formatado: clássico pythônico Tuplas

Leia mais

Java para Desktop. Programação Orientada à Objetos 2 JSE

Java 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 mais

Programação de Jogos em Python

Programaçã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 mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Aula 11 Collections Professores: Elaine Araújo/ Rhavy Maia Baseado no material de aula do professor Frederico Costa Guedes Pereira Introdução Arrays podem dar trabalho...

Leia mais

Computação II MAB 225. Brunno Goldstein.

Computaçã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 mais

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

UNIVERSIDADE 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 mais