Baixe o app para aproveitar ainda mais
Prévia do material em texto
MCG126'–'Programação'de' Computadores'II' ' ' Profa.'Janaína'Gomide' ' 1'Janaína'Gomide'09:57:22' ' ' Orientação'a'Objetos' ! ! ' 2'09:57' Janaína'Gomide' Até'agora...' Usamos'o'paradigma'de'Programação'Estruturada.' ' • Na'programação'estruturada'o' foco'é'na'escrita'de' funções' ou'procedimentos'que'operam'sobre'os'dados' • Estruturas' básicas' de' controle:' sequência,' comandos' condicionais'e'comandos'de'repeRção' • Modularização' • Tipos'Abstrados'de'Dados'(dados'+'métodos)' ' Ex:'C,'Fortran,'Pascal' 3'09:57:23' Janaína'Gomide' • Escrevemos' funções' e' chamamos' usando' uma' sintaxe' como:' !calculeArea(circulo)! ! • Sugere' que' a' função' é' um' agente' aRvo,' que' diz' algo' como:' “Ei,' função' calculeArea!' Aqui' está' um' objeto' circulo'para'você'calcular'a'área.”' ' 4'10:05:56' Janaína'Gomide' Até'agora...' Programação'orientada'à'objetos' • Python' é' uma' linguagem' de' Programação' Orientada' à' Objetos'(POO)' • POO'tem'suas'origens'na'década'de'1960' • Esse'paradigma'foi'desenvolvido'para:' – tratar' o' rápido' aumento' no' tamanho' e' complexidade' dos' sistemas'de'soeware'' – facilitar'a'modificação'desses'sistemas'grandes'e'complexos' 5'09:57:23' Janaína'Gomide' Programação'orientada'à'objetos' • Aproximação'do'mundo'real' • Na' programação' orientada' à' objetos' o' foco' é' a' criação' de' objetos'que'possuem'tanto'dados'quanto'as'funcionalidades' (métodos).' ' • Objeto' corresponde' a' algum' objeto' ou' conceito' no'mundo' real' • As' funcionalidades' (métodos)' que' operam' sobre' tal' objeto' correspondem'as'formas'que'os'objetos'reais'interagem.' 6'10:11:15' Janaína'Gomide' Mudança'de'perspecRva' Na'programação'orientada'à'objetos...' ' • Os'objetos'são'agentes'aRvos.' • Por'exemplo,'nós'escrevemos'circulo.calculaArea()' • Que'pede'para'o'círculo'calcular'a'sua'área' Transferir' a' responsabilidade' da' função' para' um' objeto' torna' possível' escrever' funções'mais' versáteis' e' facilita' a' manutenção'e'o'reuso'do'código!' ' 7'09:57:23' Janaína'Gomide' Mudança'de'perspecRva' 8'10:19:20' Janaína'Gomide' Estruturada ' ' ' ' 'POO' ' Função' Função' Função' Função' Aplicação' Dados' Aplicação' Dados' Métodos' Objeto' Dados' Métodos' Objeto' Dados' Métodos' Objeto' Mudança'de'perspecRva' A' principal' vantagem' da' POO' é' ser' mais' adequada' ao' nosso' processo' mental' de' agrupamento' e' mais' perto' da' nossa'experiência'do'mundo'real.' ' No'mundo'real:'' k cozinhar'é'parte'do'nosso'forno'de'microondas' k telefonar,' enviar! SMS' ou' desligar' são' métodos' do' telefone'celular! 9'10:13:19' Janaína'Gomide' Mudança'de'perspecRva' 10'Danilo'Freitas'09:57:23' Mudança'de'perspecRva' ' • As'funcionalidades'de'um'objeto'do'mundo'real'tendem' a'ser'intrínsecas'a'esse'objeto.' ' • POO'nos'permite'representar'essas'funcionalidades'com' precisão'ao'organizar'nossos'programas.' 11'09:57:23' Janaína'Gomide' Objetos' ' • Em'Python,'todo'valor'um'objeto' • Uma' lista,' uma' tupla' ou'mesmo' um' inteiro,' todos' são' objetos' • Programas' manipulam' esses' objetos' realizando' computações' diretamente' com' eles' ou' chamando' seus' métodos' (ou'seja,'pedindo'que'esses'objetos'executem' seus'métodos).' 12'09:57:23' Janaína'Gomide' Principais'conceitos'POO' – Abstração'' – Classes' – Objetos' – Encapsulamento' – Herança' – Polimorfismo' 13'11:20:20' Janaína'Gomide' Abstração' – “A' abstração' é' o' processo' de' filtragem' de' detalhes' sem' importância' do' objeto,' para' que' apenas' as' caracterísRcas' apropriadas'que'o'descrevem'permaneçam”' (Peter'Van'Der'Linden)' ' – Um' mesmo' objeto' pode' ser' visto' e' detalhado' de' formas' diferentes'dependendo'de'quem'o'descreve,'suas'experiências,' seus'objeRvos,'sua'visão.'' 14'10:27:13' Janaína'Gomide' Classes' – É'um'conjunto'de'objetos'que'pode'ser'definidos'por' propriedades'e'comportamentos.' ! Classe'de'animais' ! Classes'de'carros' ! Classe'de'móveis' ! Classe'de'frutas' 15'10:27:13' Janaína'Gomide' Classes' – A' definição' da' classe' consiste' na' definição' dos' atributos' (propriedades)' e' operações' (comportamentos)' dos' objetos'desta'classe' – Um'atributo'é'uma'caracterísRca'de'uma'classe.'Atributos' não' apresentam' comportamento,' eles' definem' a' estrutura'da'classe' – Operações'caracterizam'o'comportamento'de'um'objeto,' e' são'o'único'meio'de'acessar,'manipular' e'modificar'os' atributos'de'um'objeto' 16'10:27:13' Janaína'Gomide' Exemplo'classe'cachorro' • Classe&cachorro:' ' 17'10:27:13' Janaína'Gomide' Exemplo'classe'carro' • Classe&de&Carro:' – Atributos:' • Cor' • Placa' • Marca' • Modelo' 18'Danilo'Freitas'10:27:13' – Comportamentos:' • Aceleram' • Freiam' • Buzinam' Objetos' – ParRcularização'de'um'elemento'de'uma'classe.' ! O'cachorro'do'Alfredo' ! O'carro'do'Diretor' ! A'mesa'da'sala' ! A'maça'da'sobremesa' ' – Dizkse'que'um'objeto'é'uma'instância'de'uma'classe.' – Objetos'comunicamkse'entre'si'uRlizando'mensagens.' 19'10:32:38' Janaína'Gomide' Objetos' 20'10:38:11' Janaína'Gomide' knome'='Pluto' kpeso'='10kg' kcor'do'pêlo'='amarelo' knome'='ScoobykDoo' kpeso'='20kg' kcor'do'pêlo'='marrom' knome'='Bidu' kpeso'='6kg' kcor'do'pêlo'='azul' Objetos' 21'10:33:23' Janaína'Gomide' Objetos' 22'10:44:51' Janaína'Gomide' Carro' k Cor' k Placa' k Marca' k Modelo' k Acelerar' k Estacionar' k Freiar' k cor:'“azul”' k Placa:'“MM2359”' k Marca:'“BMW”' k Modelo:'“M2”' k cor:'“prata”' k Placa:'“SMB1158”' k Marca:'“Mercedes”' k Modelo:'“A200”' Objetos' • Um'objeto'possui'um'estado'e'uma'coleção'de'métodos' que'ele'pode'executar' • estado:!representa'as'coisas'que'o'objeto'sabe'sobre'si' mesmo' Ex.:' objeto' como' retângulo' sabe' sua' largura' e' sua' altura.' Cada'retângulo' também'tem'a'capacidade'de'calcular'sua' área'e'seu'perímetro.'' Cada' retângulo' é' diferente' pois,' embora' sejam' todos' retângulos,' cada' um' tem' um' estado' diferente' (como' largura'e'altura).' 23'10:24:00' Janaína'Gomide' Definindo'classes'em'Python' 24'10:54:50' Janaína'Gomide' Criando'objetos'em'Python' 25'10:55:37' Janaína'Gomide' knome'='Pluto' kpeso'='10kg' kcor'do'pêlo'='amarelo' Classes'e'Objetos'em'Python' 26'10:58:01' Janaína'Gomide' Exercício' 27'11:00:58' Janaína'Gomide' Pessoa' k Nome' k Data'nascimento' k CPF' k olá' k idade' 1)'Crie'a'classe'Pessoa' k Método'olá:'“Olá,'meu'nome'é'...”' k Método'idade:'retorna'idade'da'pessoa' 2)'Crie'4'objetos'do'Rpo'Pessoa' 3)'Chame'o'método'olá'dos'4'objetos' ' ' Exercício' 28'11:09:07' Janaína'Gomide' Pessoa' k Nome' k Data'nascimento' k CPF' k Cachorros' k olá' k idade' k adotarCachorro' k passear' 4)'Modifique'a'classe'Pessoa'para'que'ela'possa' ter'cachorros.'Obs:'atributo'lista'de'objetos'do'' Rpo'cachorros' 5)'Crie'método'“adotarCachorro”'em'que'a'pessoa'' vai'ter'um'novo'cachorro.'Esse'método'deve' receber'um'objeto'do'Rpo'cachorro'e'acrescentáklo' na'lista'de'cachorros'dessa'pessoa' 6)'Crie'método'passear'que'deve'imprimir'na'tela' seguinte'texto:'“Saindo'para'passear'com'X,'...,'Y”' sendo'X,'...,'Y'o'nome'dos'cachorros'que'' dessa'pessoa' ' ' Principais'conceitos'POO' " Abstração'' " Classes' " Objetos' – Encapsulamento' – Herança' – Polimorfismo' 29'11:21:23' Janaína'Gomide' Encapsulamento' – Um'atributo'pode'ser'público'ou'privado.' • Público:'atributo'é'visível'e'alterável'fora'da'classe'que'o'define' • Privado:' atributo' só' é' visível' e' alterável' dentro' da' classe' que' o' define' – O' Python' difere' um' do' outro' através' do' nome' do' atributo,'se' o' nome' do' atributo' iniciar' com' dois' traços' inferiores'ele'será'considerado'privado.' – Desta'forma,'você'protege'o'uso'das'suas'variáveis.'' 30'11:20:00' Encapsulamento' – ObjeRvo:' ocultar' os' detalhes' da' implementação' de' um'objeto' – Dados' ficam' escondidos' e' só' podem' ser' acessados' através' dos' métodos' definidos' na' sua' interface' pública' – Não' se' deve' permiRr' acesso' direto' aos' atributos' privados'de'uma'classe' ' 31'11:20:00' Janaína'Gomide' 32'Danilo'Freitas'11:52:45' Como'para'acessar'o'atributo'b?' Encapsulamento' – Para'deixar'o'conteúdo'do'atributo'acessível'para'fora'da' classe,' criamos' dois' métodos' get' e' set,' que' expõe' e' permite'alteração'de'valores.' 33'11:20:00' Encapsulamento' 34'11:30:15' Exercício' 35'11:32:25' Janaína'Gomide' Pessoa' k Nome' k Data'nascimento' k CPF' k Cachorros' k olá' k idade' k adotarCachorro' k passear' 7)'Modifique'a'classe'Pessoa'de'forma'que'seus' atributos'sejam'privados' ' 8)'O'atributo'Data'de'nascimento'e'CPF'nunca'poderão' ser'alterados'(nem'pelo'método'set)' ' 9)'Crie'um'objeto'Pessoa'e'chame'o'método'olá.' Modifique'o'nome'da'pessoa'e'chame'o'método'olá' novamente' ' Exercício' 36'11:36:47' Janaína'Gomide' Produto' k Descrição' k Preço' k Estoque' k atualizarPreço' k vendeu' k comprou' 10)'Crie'a'classe'produto'com'todos'os'atributos'' privados' ' 11)'O'atributo'preço'deve'ser'atualizado'apenas'por' meio'do'método'atualizarPreço.'' (Faça'método'get'para'preço)' ' 12)'O'atributo'estoque'deve'ser'atualizado'apenas' por'meio'dos'métodos'vendeu'(diminui'estoque)'e' comprou'(aumenta'estoque).'Esses'métodos'devem' receber'um'número'inteiro'com'parâmetro'para' atualizar'o'estoque.'(Faça'método'get'para'estoque)' ' 13)'Faça'método'get'e'set'para'Descrição' ' 14)'Crie'3'produtos'e'chame'todos'os'métodos'que'' implementou.' Exemplo:'Frações' 37'09:57:23' Janaína'Gomide' ' ' ' • Uma'fração'é'mais'comumente'vista'como'dois' inteiros,'um' sobre'o'outro,'com'uma'linha'separando'os'dois.' • O' número' da' parte' superior' é' o' numerador' e' da' parte' inferior'é'o'denominador.' • Para' projetar' a' nossa' classe,' nós' precisamos' usar' essas' observações' para' perceber' que' o' estado' do' objeto' fração' pode'ser'completamente'descrito'por'2'números'inteiros'que' o'representam.' Frações' 38'09:57:23' Janaína'Gomide' ' ' ' • Podemos' começar' a' implementação' da' classe' Fracao' e' o' método' __init__' que' permiRrá' que' o' usuário' forneça' o' numerador'e'o'denominador'da'fração'a'ser'criada....' Frações' 39'09:57:23' Janaína'Gomide' ' ' ' • Podemos' começar' a' implementação' da' classe' Fracao' e' o' método' __init__' que' permiRrá' que' o' usuário' forneça' o' numerador'e'o'denominador'da'fração'a'ser'criada....' '''''''''''''....' Frações' 40'09:57:23' Janaína'Gomide' ' ' ' ' Objetos'são'mutáveis' 41'09:57:23' Janaína'Gomide' ' ' ' '• Nós' podemos' mudar' o' estado' de' um' objeto' fazendo' uma' atribuição'a'uma'das'variáveis'da'instância.' • Por'exemplo,'podekse'alterar'o'numerador'da'fração'através' da'atribuição'a'um'novo'valor'para'o'self.num.'' • Quando' queremos' simplificar' uma' fração' alteramos' o' numerador' e' denominador' para' que' não' comparRlhem' fatores'comuns.'Ex:'12/16'por'3/4' • Vamos' acrescentar' o' método' simplifica' dentro' da' classe' Fracao' '''''''''''''' Objetos'são'mutáveis' 42'09:57:23' Janaína'Gomide' ' ' ' '• Para' simplificar' uma' fração' precisamos' saber' quem' é' o' máximo'divisor'comum' • Um' método' iteraRvo' que' resolve' esse' problema' está' implementado'abaixo:' '''''''''''''' Objetos'são'mutáveis' 43'09:57:23' Janaína'Gomide' ' ' ' ' • Agora'vamos'implementar'um'método'chamado'simplifica'que'vai' simplificar' a' fração,' alterando' o' seu' numerador' e' denominador.' Ou'seja,'alterando'seu'estado' '''''''''''''' Objetos'são'mutáveis' 44'09:57:23' Janaína'Gomide' ' ' ' ' • Agora'vamos'implementar'um'método'chamado'simplifica'que'vai' simplificar' a' fração,' alterando' o' seu' numerador' e' denominador.' Ou'seja,'alterando'seu'estado' '''''''''''''' Igualdade' 45'09:57:23' Janaína'Gomide' ' ' ' ' • O'significado'da'palavra'mesmo'parece'claro'até'que'a'gente' pense'um'pouco'mais'e'então'perceba'que'há'mais'do'que' você'imaginava.' • Por' exemplo,' se' você'diz,' João' e' eu' temos'o'mesmo' carro,' você'quer'dizer'que'seu'carro'e'o'dele'são'da'mesma'marca'e' modelo,'mas'que'eles'são'dois'carros'diferentes.' • Se'você'diz,'João'e'eu'temos'a'mesma'mãe,'você'quer'dizer' que'sua'mãe'e'a'mãe'do'João'são'a'mesma'pessoa' '''''''''''''' Igualdade' 46'09:57:23' Janaína'Gomide' ' ' ' ' • Quando'estamos' tratando'de'objetos,'há'uma'ambiguidade' similar.' ' • Por' exemplo,' se' dois' objetos' Fracao' são' os' mesmos,' isso' significa' que' eles' contêm' os' mesmos' dados' (o' mesmo' numerador'e'mesmo'denominador),'o'que'são,'na'verdade,'o' mesmo'objeto?' '''''''''''''' Igualdade' 47'09:57:23' Janaína'Gomide' ' ' ' ' '''''''''''''' 48'12:04:21' Janaína'Gomide' ' ' ' ' '''''''''''''' minhaFracao' suaFracao' suaFracao' minhaFracao' Igualdade' 49'09:57:23' Janaína'Gomide' ' ' ' ' • Esse'Rpo'de' igualdade'é' igualdade!rasa'porque'só'compara' as'referências,'e'não'o'conteúdo'dos'objetos' • Usando' o' perador' ==' para' verificar' a' igualdade' entre' dois' objetos'retornará'o'resultado'da'igualdade'rasa' • Ou' seja,' os' objetos' Fracao' são' iguais' (==)' se' eles' são' o' mesmo'objeto' '''''''''''''' Igualdade' 50'09:57:23' Janaína'Gomide' ' ' ' '• Podemos'(e'devemos)'definir'a'igualdade'para'significar'que' as'frações'têm'o'mesmo'numerador'e'mesmo'denominador.' • Para'isso'definimos'o'método'__eq__'na'classe'Fracao' '''''''''''''' Igualdade' 51'09:57:23' Janaína'Gomide' ' ' ' ' '''''''''''''' Igualdade' 52'09:57:23' Janaína'Gomide' ' ' ' ' • Esse' Rpo' de' igualdade' é' chamada' de' igualdade! profunda' pois' compara' valores' “profundos”' no' objeto,' não' apenas' a' referência'ao'objeto' • Obviamente,'se'duas'variáveis'se'referem'ao'mesmo'objeto,' elas'tem'igualdade'rasa'e'profunda.' '''''''''''''' Métodos'aritméRcos' 53'09:57:23' Janaína'Gomide' ' ' ' ' • Vamos'acrescentar'mais'alguns'métodos'na'classe'Fracao' • Considere' o' que' significa' adicionar' duas' frações:' como' implementar?' '''''''''''''' Métodos'aritméRcos' 54'09:57:24' Janaína'Gomide' ' ' ' ' • Vamos'acrescentar'mais'alguns'métodos'na'classe'Fracao' • Considere' o' que' significa' adicionar' duas' frações:' como' implementar?' • Para'somar'precisamos'igualar'os'denominadores.'A'maneira' mais' fácil' de' encontrar' um' denominador' comum' é' mulRplicar'os'dois'denominadores.'Tudo'o'que'fazemos'para' o'denominador'precisa'ser'feito'para'o'numerador:' ' a/b'+'c/d'='(a*d'+'c*b)/'b*d' '''''''''''''' Métodos'aritméRcos' 55'09:57:24' Janaína'Gomide' ' ' ' '• Vamos'implementar'o'método'soma'na'classe'Fracao'que'vai' receber'como'parâmetro'uma'outra'Fracao.! '''''''''''''' Métodos'aritméRcos' 56'09:57:24' Janaína'Gomide' ' ' ' '• Vamos'implementar'o'método'soma'na'classe'Fracao'que'vai' receber'como'parâmetro'uma'outra'Fracao.! '''''''''''''' Métodos'aritméRcos' 57'09:57:24' Janaína'Gomide' ' ' ' ' '''''''''''''' Métodos'aritméRcos' 58'09:57:24' Janaína'Gomide' ' ' ' ' • Uma' modificação' final' para' esse' método' irá' ser' bastante' úRl...' • Em'vez'de'invocar'o'médoto'add','podemos'usar'o'operador' de'adição'‘+’'' • Isso'acontece'se'implementarmos'a'função'usando'o'método'especial'__add__'' '''''''''''''' Principais'conceitos'POO' " Abstração'' " Classes' " Objetos' " Encapsulamento' – Herança' – Polimorfismo' 59'12:05:57' Janaína'Gomide' Herança' – Capac idade' de' absorver' caracter í sRcas' e' comportamentos' de' outra' classe.' Uma' classe' herda' de'outra'classe,'que'é'chamada'superclasse.' – Animais' • Mamíferos' – Cachorro' – Homem' • Ave' – BeijakFlor' 60'Danilo'Freitas'09:57:25' Herança' – Uma'classe'pode'herdar'a'definição'de'outra'classe' – Permite'o'uso'ou'extensão'de'métodos'e'atributos' previamente'definidos'por'outra'classe' – Nova'classe:'subclasse' – Original:'classe'pai,'ancestral'ou'superclasse' – Para'definir'uma'subclasse,'coloque'o'nome'da'superclasse' entre'parênteses'depois'do'nome'da'subclasse'na'primeira' linha'da'definição' 61'Danilo'Freitas'09:57:25' Herança' – Vamos'implementar'a'classe'Animal,'Mamífero'e'Cachorro' – Quais'atributos'devem'ter?' – Quais'atributos'um'mamífero'tem'a'mais?' – Quais'atributos'um'cachorro'tem'a'mais?' 62'Danilo'Freitas'09:57:25' Orientação'a'Objetos' 63'Danilo'Freitas'09:57:25' Orientação'a'Objetos' 64'Danilo'Freitas'09:57:25' Orientação'a'Objetos' 65'Danilo'Freitas'09:57:25' 66'Danilo'Freitas'09:57:26' Orientação'a'Objetos' Exercício:'implemente'as'classes'Homem,'Ave'e'BeijakFlor.' – Pense'nos'atributos'e'métodos'de'cada'um' – Crie'uma'variável'de'cada'Rpo'e'chame'algum'método' 67'Danilo'Freitas'09:57:26' Principais'conceitos'POO' " Abstração'' " Classes' " Objetos' " Encapsulamento' " Herança' – Polimorfismo' 68'12:07:11' Janaína'Gomide' Polimorfismo' – Significa'muitas'formas' – Ocorre'quando'uma'classe'possui'um'método'com'o' mesmo'nome'e'assinatura'(número,'Rpo'e'ordem'de' parâmetros)'de'um'método'na'sua'superclasse,'mas' diferenciakse'pela'lógica'de'implementação.' – Ex:'Operador'“+”'em'Python' • Funciona'de'um'jeito'para'inteiros'e'decimais'e'de'outra' forma'para'string'e'caracteres' ' 69'09:57:26' Janaína'Gomide' Exemplo'polimorfismo' 70'09:57:26' Janaína'Gomide' Exemplo:'TV' Quais'atributos?' &' 71'09:57:26' Exemplo:'TV' Quais'atributos?' ' ' ' ' ' Quais'métodos?' &' 72'09:57:26' Orientação'a'Objetos' • Exemplo:&TV& ' ' ' ' ' &' 73'09:57:27' Orientação'a'Objetos' • Exemplo:&TV& ' ' ' ' ' &' 74'09:57:27' Orientação'a'Objetos' • Exemplo:&TV& ' ' ' ' ' &' 75'09:57:27' Orientação'a'Objetos' 76'09:57:27' #.....' Exemplo:'TV' ' ' ' E'para'fazer'uma'Televisão'3D?! &' 77'09:57:27' Exemplo:'TV' ' ' ' E'para'fazer'uma'Televisão'3D?! &' 78'09:57:27' Orientação'a'Objetos' • Atributos&de&classe:' o Trabalhamos'até'aqui'com'atributos'do'objeto,'lembrando' que'sempre'usamos'o'prékfixo'self.'para'uRlizáklo.' o Podemos' também' criar' um' atributo' de' classe.' Significando' que' este' atributo' pertence' a' classe' e' não' a' um'objeto'específico.' o O' atributo' de' classe' pode' ser' acessado' por' qualquer' objeto,' mas' exisRrá' um' único' atributo' para' a' classe' específica.'' o Observe'que'o'atributo'de'classe'não'é'prefixado'por'self' (não'pertence'ao'objeto)'e'sim'pelo'nome'da'classe.' 79'09:57:27' Janaína'Gomide' Orientação'a'Objetos' • Exemplo:&TV& ' ' ' Como'controlar'quantas'TVs'são'construídas?' ! &' 80'09:57:27' Orientação'a'Objetos' • Exemplo:&TV& ' ' ' Como'controlar'quantas'TVs'são'construídas?' k'Usar'o'atributo'de'classe'para'contar'quantas'TVs'foram' criadas.' ! &' 81'09:57:27' 82'Danilo'Freitas'09:57:27' MCG126'–'Programação'de' Computadores'II' ' ' Profa.'Janaína'Gomide' ' 83'Janaína'Gomide'09:57:28'
Compartilhar