Danilo Borges da Silva daniloborges_@hotmail.com



Documentos relacionados
Python: Comandos Básicos. Claudio Esperança

Programação de Computadores

JSP - ORIENTADO A OBJETOS

Introdução à Linguagem

Python: Funções. Claudio Esperança

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

Orientação a Objetos

e à Linguagem de Programação Python

Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Minicurso de Python Aula 1. Raphael Lupchinski Marcelo Millani

Organização de programas em Python. Vanessa Braganholo

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Algoritmos com VisuAlg

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Introdução à Programação

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

INF 1005 Programação I

Componentes da linguagem C++

Tuplas e Dicionários. Vanessa Braganholo vanessa@ic.uff.br

CURSO DE PROGRAMAÇÃO EM JAVA

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

INTRODUÇÃO À LINGUAGEM C++

2 echo "PHP e outros.";

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Informática I. Aula 6. Aula 6-12/09/2007 1

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Javascript 101. Parte 2

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Algoritmos em Javascript

O código JavaScript deve ser colocado entre tags de comentário para ficar escondido no caso de navegadores antigos que não reconhecem a linguagem.

Introdução aos cálculos de datas

INF 1005 Programação I

Resolução de problemas e desenvolvimento de algoritmos

Capítulo 2: Introdução à Linguagem C

PYTHON LISTAS. Introdução à Programação SI2

Unidade IV: Ponteiros, Referências e Arrays

Busca. Pesquisa sequencial

Programação WEB I Estruturas de controle e repetição

Começando com Ruby on

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

3 Classes e instanciação de objectos (em Java)

Noções sobre Objetos e Classes

JavaScript (ou JScript)

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Programação: Tipos, Variáveis e Expressões

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

AMBIENTE DE PROGRAMAÇÃO PYTHON

Programação Elementar de Computadores Jurandy Soares

Sintaxe Básica de Java Parte 1

Aluísio Eustáquio da Silva

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Geração de código intermediário. Novembro 2006

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Java. Marcio de Carvalho Victorino

Python Funções. Introdução à Programação SI1

Programação Básica em Arduino Aula 2

Internet e Programação Web

APOSTILA PHP PARTE 1

AULA Uma linguagem de programação orientada a objetos

Linguagem C: Estruturas de Controle. Prof. Leonardo Barreto Campos 1

Introdução à Lógica de Programação

Polimorfismo. Prof. Leonardo Barreto Campos 1

Banco de Dados. Microsoft Access

Linguagem algorítmica: Portugol

Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos.

2 Orientação a objetos na prática

Introdução à Lógica de Programação

Estruturas de controle no nível de sentença

Algoritmos e Programação

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Estruturas de Dados Pilhas, Filas e Deques

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Fundamentos de Programação II. Introdução à linguagem de programação C++

FBV - Linguagem de Programação II. Um pouco sobre Java

Prof. Esp. Adriano Carvalho

Processamento da Informação Teoria. Algoritmos e Tipos de dados

JavaScript 2.0X X

Introdução a Java. Hélder Nunes

Implementando uma Classe e Criando Objetos a partir dela

Programação de Computadores - I. Profª Beatriz Profº Israel

Criar a classe Aula.java com o seguinte código: Compilar e Executar

Estrutura de Dados Básica

Aula de JavaScript 05/03/10

Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo:

Roteiro do Programa e Entrada/Saída

20 Caracteres - Tipo char

DEFINIÇÃO DE MÉTODOS

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Transcrição:

Danilo Borges da Silva daniloborges_@hotmail.com

Simples o suficiente para um curso introdutório Muitos recursos Orientação a Objetos Escalável (módulos, classes, controle de exceções) Biblioteca embutida extensa e grande número de módulos fornecidos por terceiros Grande variedade de aplicações Linguagem interpretada (script) Multi-plataforma Gratuito Comunidade bastante desenvolvida

São categorias de valores que são processados de forma semelhante Por exemplo, números inteiros são processados de forma diferente dos números de ponto flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos (int, long, float, complex) e cadeias de caracteres (strings) Compostos: listas, dicionários, tuplas e conjuntos Tipos definidos pelo usuário: são correspondentes a classes (orientação objeto)

São áreas de memória reservadas para armazenamentos de dados Os nomes de variáveis são identificadores: Nomes podem ser compostos de algarismos (0-9), letras (a-z ou A-Z) ou sublinhado ( _ ) O primeiro caractere não pode ser um algarismo Não Palavras reservadas (if, while, etc) são proibidas Servem para: Guardar valores intermediários Construir estruturas de dados Uma variável é modificada usando o comando de atribuição: Var = expressão É possível também atribuir a várias variáveis simultaneamente: var1,var2,...,varn = expr1,expr2,...,exprn

Variáveis são criadas dinamicamente e destruídas quando não mais necessárias, por exemplo, quando saem fora de escopo (veremos isso mais tarde) O tipo de uma variável muda conforme o valor atribuído, i.e., int, float, string, etc.

Há vários tipos numéricos que se pode usar em python: Int: números inteiros de precisão fixa 1, 2, 15, -19 Long: números inteiros de precisão arbitrária 1L, 10000L, -9999999L Floats: números racionais de precisão variável 1.0, 10.5, -19000.00005, 15e-5 Complex: números complexos 1+1j, 20j, 1000+100J

São cadeias de caracteres Constituem outro tipo fundamental do python Constantes string são escritas usando aspas simples ou duplas Ex.: "a" ou 'a O operador + pode ser usado para concatenar strings Ex.: "a"+"b" é o mesmo que "ab" O operador * pode ser usado para repetir strings Ex.: "a"*10 é o mesmo que "aaaaaaaaaa"

Python usa a tabela de caracteres default do S.O. Ex.: ASCII, UTF-8 Caracteres não imprimíveis podem ser expressos usando notação barra-invertida (\) \n é o mesmo que new line \r é o mesmo que carriage return \t é o mesmo que tab \b é o mesmo que backspace \\ é o mesmo que \ \x41 é o mesmo que o caractere cujo código hexadecimal é 41 ( A maiúsculo)

A notação barra-invertida (\) pode ser desabilitada desde que a constante string seja precedida por um r (erre minúsculo) São chamadas strings raw (cruas) Também é possível escrever constantes string em várias linhas incluindo as quebras de linha usando três aspas como delimitadores

Notação para separar trechos de uma string Notação: string[índice1:índice2] Retorna os caracteres desde o de índice1 (inclusive) até o de índice2 (exclusive) Se o primeiro índice é omitido, é assumido 0 Se o último índice é omitido, é assumido o fim da string

Também chamadas expressões lógicas Resultam em verdadeiro (True) ou falso (False) São usadas em comandos condicionais e de repetição Servem para analisar o estado de uma computação e permitir escolher o próximo passo Operadores mais usados Relacionais: >, <, ==,!=, >=, <= Booleanos: and, or, not Avaliação feita em Curto-circuito Expressão avaliada da esquerda para a direita Se o resultado (verdadeiro ou falso) puder ser determinado sem avaliar o restante, este é retornado imediatamente

As constantes True e False são apenas símbolos convenientes Qualquer valor não nulo é visto como verdadeiro enquanto que 0 (ou False) é visto como falso O operador or retorna o primeiro operando se for vista como verdadeiro, caso contrário retorna o segundo O operador and retorna o primeiro operando se for vista como falso, caso contrário retorna o segundo Operadores relacionais são avaliados antes de not, que é avaliado antes de and, que é avaliado antes de or

Além dos operadores, é possível usar funções para computar valores As funções podem ser definidas: Pelo programador Em módulos da biblioteca padrão Por default: são as funções embutidas (built-in) Na verdade, fazem parte do módulo builtins, que é sempre importado em toda aplicação

Muitas funções importantes são disponibilizadas em módulos da biblioteca padrão Ex.: o módulo math tem funções como sin, cos, exp e outras Um módulo pode conter não só funções mas também variáveis ou classes Por exemplo, o módulo math define a constante pi Para usar os elementos de um módulo, pode-se usar o comando import Formatos: import modulo from modulo import nome,...,nome from modulo import *

Comandos condicionais Comandos de repetição Definição e uso de procedimentos (subprogramas) Definição e uso de classes e objetos (programação OO)

Forma geral: print expr,expr,... Os valores das expressões são escritos um após o outro sem pular de linha: >>> print "1.001 ao quadrado é ",1.001**2 1.001 ao quadrado é 1.002001 Se o comando terminar com vírgula, o próximo print escreverá na mesma linha.

O programa que computa elementos da série de Fibonacci termina quando atinge um elemento com valor superior a uma constante Podemos tornar o programa mais flexível se ao usuário for permitido estipular o valor máximo O comando input permite perguntar ao usuário um valor (normalmente é atribuído a uma variável) Formato: input(pergunta) onde pergunta é uma string opcional que será exibida para indicar o valor que se espera (i.e., prompt)

É o comando condicional por excelência Formatos: if expressao: comandos if expressao: comandos1 else: comandos2 if expressao1: comandos1 elif expressao2: comandos2 else: comandos(n)

Repete uma seqüência de comandos enquanto uma dada expressão booleana é avaliada como verdadeira Formato: while expressão: comando... comando

Maneira de organizar dados de maneira a facilitar seu acesso Algumas formas são clássicas: Listas Arrays (vetores e matrizes) Tuplas (registros) Árvores Linguagens freqüentemente possuem primitivas para construção dessas E.D. Estruturas de dados embutidas Outras E.D. mais complexas podem ser construídas combinando as E.D. clássicas

São arranjos seqüenciais de informações mais simples Caracterizam-se por permitir o acesso eficiente aos seus elementos em ordem seqüencial A definição clássica de uma lista como estrutura de dados abstrata compreende: Operação de construção de uma lista vazia Operação que testa se uma dada lista é vazia Operação para obter o primeiro elemento de uma lista Uma operação para adicionar um novo elemento no início de uma lista Operação para retirar o elemento inicial de uma lista

Retorna uma progressão aritmética de inteiros numa lista Forma geral: range (início, parada, incremento) início (opcional) é o primeiro valor a ser gerado (default: 0) parada é o limite da progressão: a progressão termina no último valor antes de parada incremento (opcional) é o passo da progressão (default:1)

Permite iterar sobre os elementos de uma lista Forma geral: for var in lista : comandos Os comandos são repetidos para cada valor de lista Durante a repetição, var possui o valor corrente da lista Uma grande utilidade da função range é construir a lista de iteração Ex.: >>>for i in range(1,7): print i,

São estruturas de dados parecidas com listas, mas com a particularidade de serem imutáveis Tuplas são seqüências e, assim como listas, podem ser indexadas e fatiadas, mas não é possível modificá-las Uma tupla vazia se escreve () Os parênteses são opcionais se não provocarem ambigüidade Uma tupla contendo apenas um elemento deve ser escrita com uma vírgula ao final

Manipulação de strings é uma atividade freqüente em programas Python Existe um módulo chamado string que contém uma grande quantidade de funcionalidades para trabalhar com strings Para usá-las: from string import * Entretanto, strings pertencem à classe str e a maior parte do que existe no módulo string aparece como métodos da classe str

São estruturas de dados que implementam mapeamentos Um mapeamento é uma coleção de associações entre pares de valores O primeiro elemento do par é chamado de chave e o outro de conteúdo De certa forma, um mapeamento é uma generalização da idéia de acessar dados por índices, exceto que num mapeamento os índices (ou chaves) podem ser de qualquer tipo imutável

Considere que queiramos representar um caderno de telefones Uma solução é ter uma lista de nomes e outra de telefones Telefone de nome[i] armazenado em telefone[i] Acrescentar Joao com telefone 20122232 : nome+= Joao telefone+= 20122232 Para encontrar o telefone de Joao : Tel = telefone[nome.index[ Joao ]] Dicionários tornam isso mais fácil e eficiente telefone[ Joao ] = 20122232 Tel = telefone[ Joao ]

Uma constante do tipo dicionário é escrita { chave1:conteúdo1,... chaven:conteúdon} Uma variável do tipo dicionário pode ser indexada da maneira habitual, isto é, usando colchetes O conteúdo associado a uma chave pode ser alterado atribuindo-se àquela posição do dicionário Novos valores podem ser acrescentados a um dicionário fazendo atribuição a uma chave ainda não definida Não há ordem definida entre os pares chave/conteúdo de um dicionário

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

items() retorna uma lista com todos os pares chave/conteúdo do dicionário keys() retorna uma lista com todas as chaves do dicionário values() retorna uma lista com todos os valores do dicionário pop (chave) Obtém o valor correspondente a chave e remove o par chave/valor do dicionário

É uma técnica de programação que nos permite pensar num problema em diversos níveis A idéia é que quando estamos pensando num problema macroscopicamente, não estamos preocupado com minúcias Dividir para conquistar: Um problema é dividido em diversos subproblemas As soluções dos sub-problemas são combinadas numa solução do problema maior

Em Python, sub-programas têm o nome de funções Formato geral: def nome (arg, arg,... arg): comando... comando Onde: nome é o nome da função args são especificações de argumentos da função Uma função pode ter 0, 1 ou mais argumentos comandos contêm as instruções a ser executadas quando a função é invocada

É uma disciplina de programação assim como a Programação Estruturada Tenta unificar as idéias de algoritmos e estruturas de dados através do conceito de Objeto Um objeto é uma unidade de software que encapsula algoritmos e os dados sobre o qual os algoritmos atuam Os seguintes conceitos são importantes quando falamos de orientação a objetos: Polimorfismo Abstração Herança

É o que permite que dois objetos diferentes possam ser usados de forma semelhante Por exemplo, tanto listas quanto tuplas ou strings podem ser indexadas por um número entre colchetes e suportam o método len Assim, se escrevemos... for i in range(len(x)): print i, X[i]...não é possível saber de antemão se X é uma tupla, uma lista ou uma string Desta forma, se escrevemos um algoritmo para ser aplicado um objeto X, então também pode ser aplicado a um objeto Y desde que Y seja suficientemente polimórfico a X

É o que permite que um objeto seja utilizado sabendo-se sobre ele apenas a sua interface Em particular, não precisamos conhecer a implementação dos seus métodos Em OO a abstração tem mais alcance pois um objeto encapsula tanto dados como algoritmos Assim, podemos atribuir objetos ou passar objetos como argumentos, sem necessariamente saber como o objeto está implementado

É o que permite construir objetos que são especializações de outro objeto Isso permite o reuso de software já que objetos especializados herdam dos objetos genéricos uma série de atributos comuns Por exemplo, considere um objeto que representa uma forma geométrica. Então, ele pode ter características tais como área, perímetro, centróide, etc. Um polígono é uma forma geométrica, Portanto, herda todas as características de formas geométricas Deve suportar também características específicas como número de lados e comprimento de arestas

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

>>> class C: a = 2 b = 3 def f(self,x): return C.a*x+C.b >>> C.a = 9 9 >>> C.b 3 >>> obj=c() >>> obj.f(7) 17

No exemplo anterior, a e b eram atributos da classe C e portanto usáveis por qualquer instância de C Mais freqüentemente, precisamos de atributos associados a instâncias individuais Um atributo attr associado a uma instância obj tem nome obj.attr Se queremos nos referir a um atributo attr de um objeto dentro de algum de seus métodos, usamos o nome self.attr

>>> class C: def init(self,a=2,b=3): self.a = a self.b = b def f(self,x): return self.a*x+self.b >>> obj1 = C() >>> obj1.init(2,3) >>> obj2 = C() >>> obj2.init(8,1) >>> obj1.f(7) 17 >>> obj2.f(7) 57

Se uma classe define atributos de classe, as instâncias herdam esses atributos da classe como atributos de instância Ex.: >>> class C: a = 1 def f(self,x): self.a += x >>> c = C() >>> c.f(2) >>> c.a 3 >>> C.a 1

Um método como init do exemplo anterior é bastante útil para inicializar atributos da instância e é conhecido como construtor da classe Na verdade, Python suporta construtores que podem ser chamados automaticamente na criação de instâncias Basta definir na classe um método chamado init Este método é chamado automaticamente durante a criação de um nova instância da classe, sendo que os argumentos são passados entre parênteses após o nome da classe Obs.: o método init é apenas um exemplo de método mágico que é invocado de maneira não padrão (veremos outros adiante)

>>> class C: def init (self,a=2,b=3): self.a = a self.b = b def f(self,x): return self.a*x+self.b >>> obj1 = C() >>> obj2 = C(8,1) >>> obj1.f(7) 17 >>> obj2. f(7) 57

Para fazer uma classe C herdar de outra B, basta declarar C como: class C(B):... Diz-se que C é sub-classe (ou derivada) de B ou que B ésuper-classe (ou base) de C C herda todos os atributos de B A especialização de C se dá acrescentando-se novos atributos (variáveis e métodos) ou alterando-se métodos Se, um método de C, precisa invocar um método m de B, pode-se utilizar a notação B.m para diferenciar do m de C, referido como C.m

>>> class B: n = 2 def f(self,x): return B.n*x >>> class C(B): def f(self,x): return B.f(self,x)**2 def g(self,x): return self.f(x)+1 >>> b = B() >>> c = C() >>> b.f(3) 6 >>> c.f(3) 36 >>> c.g(3) 37 >>> B.n = 5 >>> c.f(3) 225

O construtor de uma classe D derivada de C precisa chamar o construtor de C A chamada do construtor de C não é feita por default Permite inicializar os elementos de C que não são específicos de D Usa-se a notação C. init (self,...)

É possível construir uma classe que herda de duas ou mais outras. Ex.: class C(A,B):... Nesse caso, a classe derivada herda todos os atributos de ambas as classes-base Se ambas as classes base possuem um atributo com mesmo nome, aquela citada primeiro prevalece No exemplo acima, se A e B possuem um atributo x, então C.x se refere ao que foi herdado de A

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

Veremos o desenvolvimento de uma aplicação web utilizando o framework. Nome do projeto: Controle de estoque de um bar.