13 Python - OO Parte 1

Propaganda
Python–Orientaçãoa
Objetos–Parte1
IntroduçãoàProgramação
SI1
Conteúdo
•  Orientaçãoaobjetos
– Objeto
– Classe
– Herança
– Encapsulamento
– Polimorfismo
2
Motivação
•  RealidadeAtual
– Sistemasdealtacomplexidade
– Sistemasmaiores,maiscomplexosemais
voláteis
•  Amudançaparaalcançaraqualidadee
produFvidadeestána…
3
ReuFlização
Paradigma OO
•  Umparadigmaéumaformadeabordar
umproblema
•  O paradigma da orientação a objetos
surgiunofimdosanos60
•  Hoje em dia, praFcamente suplantou o
paradigma anterior, o paradigma
estruturado...
5
Paradigma OO
•  Umparadigmaéumaformadeabordar
umproblema
•  AlanKay,umdospaisdoparadigmada
orientaçãoaobjetos,formuloua
chamadaanalogiabiológica
•  “Comoseriaumsistemadeso=wareque
funcionassecomoumservivo?”
6
Paradigma OO
•  Cada“célula”interagecomoutrascélulas
atravésdoenviodemensagenspararealizar
umobjeFvocomum
– Cadacélulasecomportacomoumaunidade
autônoma
•  Deumaformamaisgeral,Kaypensouem
comoconstruirumsistemadeso=warea
parFrdeagentesautônomosqueinteragem
entresi
•  Comisso,estabeleceuosprincípiosda
orientaçãoaobjetos
7
Análise e Programação
OO
•  Análiseorientadaaobjetos
•  Programaçãoorientadaaobjetos
– ConsisteemuFlizarobjetoscomputacionais
paraimplementarasfuncionalidadesdeum
sistema.
8
Princípios OO
Tudoéumobjeto!
9
Objetos
•  EnFdadesquepossuemdadose
instruçõessobrecomomanipularestes
dados.
•  Estãoligadosàsoluçãodoproblema.
10
Modelagem de Objetos
•  SoYwareGráfico
– Objetos:Círculos,Linhas,etc.
•  SoYwareBD
– Objetos:Tabelas,Linhas,Campos,etc.
•  SoYwareComercial
– Objetos:Pedidos,Produtos,Clientes.
11
Princípios OO
•  Tudoéumobjeto
•  Penseemumobjetocomoumasupervariável:
–  O objeto armazena dados, também pode-se fazer
requisições a esse objeto, pedindo que ele execute
operações
•  Elementosconceituaisnoproblemaquevocêestá
tentando resolver (cachorros, livros, sócios,
emprésFmos, etc.) como um objeto de um
programa
12
Exemplo
>>> s = "quem parte e reparte, fica com a
maior parte"
>>> s.find("parte")‫‏‬
5
13
Princípios OO
•  Umprogramaéumacoleçãodeobjetos
dizendounsaosoutrosoquefazer
•  Para fazer uma requisição a um objeto
envia-seumamensagemparaesteobjeto
•  Uma mensagem é uma chamada de um
método pertencente a um objeto em
parFcular
14
Princípios OO
•  TodoobjetotemumKpo
•  Cada objeto é uma instância de uma
classe,ondeaclassedefineumFpo
– Classeprofessor,objetoJones
15
Classes
¡ Podemosdescrever
ocachorroBilúem
termosdeseus
atributosfsicos:
§  épequeno
§  suacorprincipalé
castanha
§  olhospretos
§  orelhaspequenase
caídas,
§  rabopequeno
16
Classes
¡  Podemostambém
descreveralgumasações
queelefaz(temosaquios
métodos):
¡  balançaorabo
¡  fogeesedeitaquandoleva
reclamação
¡  latequandoouveum
barulhoouvêumcãoou
gato
¡  atendequandoo
chamamospeloseunome
17
Classes
¡ Representaçãodo
cachorroBilú:
§ Propriedades:[Cordo
corpo:castanha;cordos
olhos:pretos;altura:15
cm;comprimento:38cm
largura:24cm]
§ Métodos:[balançaro
rabo,laFr,correr,deitar,
sentar]
18
Representação de
Classe
Cachorro
Atributos
Métodos
cor:str
corOlhos:str
altura:float
comprimento:float
peso:float
laFr()
correr()
sentar()
comer()
19
ClasseeObjetos
Cachorro
cor:str
corOlhos:str
altura:float
comprimento:float
peso:float
laFr()
correr()
sentar()
comer()
20
Objeto
•  Umobjetoéqualquercoisa,realouabstrata,
sobreaqualarmazenamosdadoserealizamos
operaçõesquemanipulamtaisdados
•  Pertencemaclasses
•  Unidadebásicademodularizaçãodeum
sistemaOO
•  Umobjetodeumaclassepossui:
•  AtributosàcaracterísFcasoupropriedadesque
definemoobjeto.
•  Comportamentoàconjuntodeaçõespré-definidas
(métodos)
21
Objetos - Exemplos
•  Pássaro
CaracterísKcas:
cores
formadobico
Fpodovôo
Comportamento:
voar()
piar()
•  Pessoa
CaracterísKcas:
cordosolhos:azuis
datanascimento:16/02/70
peso:70kg
altura:1,70m
Comportamento:
andar
falar
comer
rir
22
Exemplo
•  Telefone
CaracterísKcas:
cor:azul
discagem:tone
Comportamento:
tocar()
discar()
23
Exemplo
•  Ônibus
CaracterísKcas:
cor:amarela qtdAssentos:30
combusFvel:diesel
Comportamento:
frear
andar
correr
buzinar
acelerar
24
OO
•  Emresumo,aexpressãoorientadaa
objetossignificaque
– oaplicaFvoéorganizadocomoumacoleção
deobjetosqueincorporamtantoa
estruturacomoocomportamentodos
dados
•  Objetospertencemàclasses
25
Classe
•  AbstraçõesuFlizadaspararepresentar
umconjuntodeobjetoscom
caracterís(casecomportamento
idên(cos
•  Umaclassepodeservistacomouma
“fábricadeobjetos”
26
Classe
•  Objetossão“instâncias”deumaclasse
– Todososobjetossãoinstânciasdealguma
classe
•  Todososobjetosdeumaclassesão
idênKcosnoquedizrespeitoasua
interfaceeimplementação
– oquedifereumobjetodeoutroéseu
estadoesuaidenKdade
27
Classe - Exemplo
classe
instância da
classe (objeto)
CaracterísKcas:
corPenas:azuis
formatoBico:fino
velocidadeVoo:rápida
Comportamento:
voar
piar
28
Classe Exemplo
CaracterísKcas:
marca:Siemens
número:2576-0989
discagem:pulso
classe
instânciadaclasse
(objeto)
Comportamento:
tocar
discar
29
Classe Exemplo
CaracterísKcas:
marca:Nokia
número:99193467
discagem:tom
Comportamento:
tocar
discar
classe
instânciadaclasse
(objeto)
30
Classes
Classe
Instâncias
(objetos)
31
Classe - Atributos
•  DescrevemascaracterísKcasdasinstânciasdeuma
classe
•  Seusvaloresdefinemoestadodoobjeto
•  Oestadodeumobjetopodemudaraolongodesua
existência
•  AidenFdadedeumobjeto,contudo,nuncamuda
Funcionário_Helena
Nome=Helena Reis
Nasc=28/01/1965
Salário = 4.000
InformarSalário
CalcularIdade
Funcionário_Mário
Nome=Mário Sá
Nasc=16/02/1970
Salário = 3.000
InformarSalário
CalcularIdade
32
Classe - Operações
•  Representamocomportamentodasinstânciasde
umaclasse
•  Correspondemàsaçõesdasinstânciasdeumaclasse
Funcionário_Helena
3000
Nome=Helena Reis
Nasc=28/01/1965
Salário = 4.000
InformarSalário
CalcularIdade
Informar
Salário?
Funcionário_Mário
Nome=Mário Sá
Nasc=16/02/1970
Salário = 3.000
4000
InformarSalário
CalcularIdade
33
34
Classe em Python
•  Amaneiramaissimplesé:
class nomeClasse:
var = valor
...
var = valor
def metodo (self, ... arg):
...
def metodo (self, ... arg):
...
35
Classe em Python
•  Osmétodossempretêmselfcomoprimeiro
argumento
– self serefereaumainstânciadaclasse
•  Umanovainstânciadaclasseécriadausando
nomeClasse()
36
Classe em Python
•  Asvariáveiseosmétodossãoescritos
precedidospelonomedaclasseeporum
ponto(.)
– AvariavelvdefinidanumaclasseCéescritaC.v
•  Osmétodossempretêmselfcomoprimeiro
argumento
– self serefereaumainstânciadaclasse
•  Umanovainstânciadaclasseécriadausando
nomeClasse()
37
Construtores
•  Ométodoiniciafoiusadoparainicializar
atributoseéconhecidocomoconstrutorda
classe
•  Pythonsuportaconstrutoresquepodemser
chamadosautomaKcamentenacriaçãode
instâncias
– Bastadefinirnaclasseummétodochamado
__init__
– EstemétodoéchamadoautomaKcamente
duranteacriaçãodeumnovainstânciadaclasse,
sendoqueosargumentossãopassadosentre
parêntesesapósonomedaclasse
38
Atributos
•  Umatributoattrassociadoauma
instânciaobjtemnomeobj.attr
•  Sequeremosnosreferiraumatributo
attrdeumobjetodentrodaprópria
classe,usamosonomeself.attr
39
Exemplo
>>> class Exemplo:
def __init__(self,a=2,b=3):
self.a = a
self.b = b
def f(self,x):
return self.a*x+self.b
>>> obj1 = Exemplo()
>>> obj1.a
2
>>> obj1.b
3
>>> obj2 = Exemplo(8,1)
>>> obj2.b
1
>>> obj1.f(7)‫‏‬
17
>>> obj2.f(7)‫‏‬
57
40
Exemplo
>>> class Retangulo:
lado_a = None
lado_b = None
def __init__(self, lado_a, lado_b):
self.lado_a = lado_a
self.lado_b = lado_b
print "Criada uma nova instância Retangulo“
def calcula_area(self):
return self.lado_a * self.lado_b
def calcula_perimetro(self):
return 2 * self.lado_a + 2 * self.lado_b
41
Exemplo
>>> obj = Retangulo(4,6)
Criada uma nova instancia Retangulo
>>> obj.lado_a
4
>>> obj.lado_b
6
>>> obj.calcula_area()
24
>> obj.calcula_perimetro()
20
42
Exemplo
>>> class ContaCorrente:
def __init__(self, numero):
self.numero = numero
self.saldo = 0.0
def debitar(self, valor):
self.saldo = self.saldo – valor
def creditar(self, valor):
self.saldo = self.saldo + valor
43
Exemplo
>>> c = ContaCorrente("1234")
>>> c.saldo
0.0
>>> c.creditar(1000)
>>> c.saldo
1000.0
>>> c.debitar(342)
>>> print(c.numero, c.saldo)
1234 658.0
44
Classe – Exemplo 1
45
Classe – Exemplo 2
46
Classe – Exemplo 3
47
Encapsulamento
•  Naterminologiadaorientaçãoaobjetos,dizsequeumobjetopossuiumainterface.
•  Ainterfacedeumobjetoécomoeleaparece
paraosdemaisobjetos:
– SuascaracterísFcas,semdetalhesinternos
•  A interface de um objeto define os serviços
que ele pode realizar e conseqüentemente
asmensagensqueelerecebe
– Umobjetoé“visto”atravésdeseusmétodos
48
Encapsulamento
•  Encapsulamentoéaproteçãodos
atributosoumétodosdeumaclasse.
•  EmPythonexistemsomenteopubliceo
privateeelessãodefinidosnopróprio
nomedoatributooumétodo.
•  Atributosoumétodosiniciadosporno
máximodoissublinhados(underline)são
privadosetodasasoutrasformassão
públicas
49
Exemplo
class Teste1:
>>> t1 = Teste1()
>>> print(t1.a)
a = 1 # atributo publico
__b = 2 # atributo privado da 1
>>> t2 = Teste2()
classe Teste1
1
3
class Teste2(Teste1):
__c = 3 # atributo privado da
classe Teste2
>>> print(t2.__b)
# Erro, pois __b é privado a
def __init__(self):
classe A.
print self.a
print self.__c
>>> print(t2.__c)
# Erro, __c é um atributo privado,
somente acessado pela classe
EXERCÍCIOS
51
Exercícios
1.ClasseTriangulo:Crieumaclassequemodele
umtriangulo:
–  Atributos:LadoA,LadoB,LadoC
–  Métodos:calcularPerímetro,getMaiorLado;
CrieumprogramaqueuFlizeestaclasse.Eledeve
pediraousuárioqueinformeasmedidasdeum
triangulo.Depois,devecriarumobjetocomas
medidaseimprimirsuaáreaemaiorlado.
52
Exercícios
2. Classe Funcionário: Implemente a classe
Funcionário. Um funcionário tem um nome e um
salário. Escreva um construtor com dois parâmetros
(nome e salário) e o método aumentarSalario
(porcentualDeAumento) que aumente o salário do
funcionário em uma certa porcentagem. Exemplo de
uso:
h a r r y = f u n c i o n á r i o ( " H a r r y " , 2 5 0 0 0 )
harry.aumentarSalario(10)
Facaumprogramaquetesteométododaclasse.
53
3.CrieumaclasseLivroquepossuios
atributosnome,qtdPaginas,autorepreço.
– CrieosmétodosgetPrecoparaobterovalor
doprecoeométodosetPrecoparasetar
umnovovalordopreco.
Crieumcodigodeteste
54
Exercício
4.ImplementeumaclasseAluno,quedeveteros
seguintesatributos:nome,curso,tempoSemDormir
(emhoras).Essaclassedeveráterosseguintes
métodos:
–  estudar(querecebecomoparâmetroaqtddehorasde
estudoeacrescentatempoSemDormir)
–  Dormir(querecebecomoparâmetroaqtddehorasde
sonoereduztempoSemDormir)
Crieumcódigodetestedaclasse,criandoumobjeto
daclassealunoeusandoosmétodosestudaredormir.
Aofinalimprimaquantotempooalunoestásem
dormir
55
Exercícios
5.Classecarro:ImplementeumaclassechamadaCarrocomas
seguintespropriedades:
• Umveículotemumcertoconsumodecombus}vel(medidosemkm/litro)e
umacertaquanFdadedecombus}velnotanque.
• Oconsumoéespecificadonoconstrutoreoníveldecombus}velinicialé0.
• Forneçaummétodoandar()quesimuleoatodedirigiroveículoporuma
certadistância,reduzindooníveldecombus}velnotanquedegasolina.Esse
métodorecebecomoparâmetroadistânciaemkm.
• ForneçaummétodoobterGasolina(),queretornaonívelatualde
combus}vel.
• ForneçaummétodoadicionarGasolina(),paraabastecerotanque.
• FaçaumprogramaparatestaraclasseCarro.Exemplodeuso:
meuFusca=Carro(15);#15quilômetrosporlitrodecombus}vel.
meuFusca.adicionarGasolina(20);#abastececom20litrosde
combus}vel.
meuFusca.andar(100);#anda100quilômetros.
meuFusca.obterGasolina()#Imprimeocombus}velquerestano
tanque.
56
Exercícios
6.CrieumaclasseAluno,quepossuicomoatributoumnomee
cpf.CrieoutraclassechamadaEquipe,quepossuicomo
atributoumalistadeparFcipantesdoFpoAlunoeoutro
atributochamadoprojeto.
CrieumaterceiraclassechamadaGerenciadorEquipes.Essa
classepossuicomoatributoumalistadetodasasequipes
formadas.EladeverápossuirométodocriarEquipe,querecebe
umalistadealunosdeumaequipeedizseaequipepodeser
formadaounão.Casonãohajanenhumalunodaequipeaser
formadaemumaoutraequipecomomesmoprojeto,entãoa
equipeécriadaeacrescentadaàlista.Casocontrárioé
informadaqueaequipenãopodesercriada.
57
Bibliografia
n 
Livro“ComopensarcomoumCienFstadeComputação
usandoPython”–Capítulo12
n  h€p://pensarpython.incubadora.fapesp.br/portal
n 
PythonTutorial
n  h€p://www.python.org/doc/current/tut/tut.html
DiveintoPython
n  h€p://www.diveintopython.org/
PythonBrasil
n  h€p://www.pythonbrasil.com.br/moin.cgi/
DocumentacaoPython#head5a7ba2746c5191e770383
0e02d0f5328346bcaac
n 
n 
58
Download