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