programação orientada a objetos

72
Programação Orientada a Objetos Eduardo Carvalho [email protected]

Upload: bruna-pereira

Post on 17-Dec-2015

27 views

Category:

Documents


2 download

DESCRIPTION

Programação Orientada a Objetos

TRANSCRIPT

  • Programao Orientada a ObjetosEduardo Carvalho

    [email protected]

  • Avaliao Nota 1 = (Prova 1 x 0.6) + (Trabalho A x 0.4)

    Nota 2 = (Prova 2 x 0.6) + (Trabalho B x 0.4)

    Nota Final = Nota 1 + Nota 2

    Se Nota Final 6.0 Aprovado

    Se Nota Final < 6.0 Prova Final Prova 1 - terica: 26/01/2015 - 2 feira.

    Prova 2 - terica: 02/03/2015 - 2 feira.

    Prova Final - terica: 11/03/2015 4 feira, matria toda.

  • Contedo previsto

    SWEBOK, 2014 Cap. 13:

    1. Tcnicas de resoluo de problemas

    2. Abstrao

    3. Fundamentos de programao

    BREVE INTRODUO LINGUAGEM PYTHON

    JAVA E ORIENTAO A OBJETOS:

    1. Captulo 4: Orientao a objetos bsica

    2. Captulo 6: Modificadores de acesso e atributos de classe

  • Contedo previsto

    ROBERT C. MARTIN (Uncle BOB), 1996-2002. PRINCPIOS QUE CONDUZEM CRIAO DE PROJETOS ORIENTADOS A OBJETO:

    1. Design Principles and Design Patterns, 2000

    2. Single Responsibility Principle, 2002

    3. Open Closed Principle, 1996

    4. Liskov Substitution Principle, 1996

    5. Interface Segregation Principle, 1996

    6. Dependency Inversion Principle, 1996

    www.objectmentor.com

  • Contedo previsto

    PHILLIPS, 2010. Python 3 Object Oriented Programming.:

    1. Cap. 1 - Projeto Orientado a Objeto

    2. Cap. 2 - Objetos em Python

    3. Cap. 3 - Quando objetos so iguais

    4. Cap. 5 - Quando usar Programao Orientada a Objetos

    5. Cap. 7 - Atalhos do Python Orientado a Objetos

    SILVEIRA, et al., 2012. Introduo Arquitetura e Design de Software: Uma viso sobre a plataforma JAVA:

    1. Cap. 3 - Tpicos de Orientao a Objetos

    2. Cap. 4 Separao de Responsabilidades

  • 1. Tcnicas de resoluo de problemas1.1 Definio Refere-se ao pensamento e atividades que conduzem resposta ou

    soluo de um problema.

    H muitas maneiras de abordar um problema e cada uma delas emprega diferentes ferramentas e processos.

    Enquanto diferentes problemas demandam distintas solues e podem exigir diferentes ferramentas e processos, as metodologias e tcnicas utilizadas na resoluo de problemas seguem algumas diretrizes e podem ser generalizadas como uma tcnica de resoluo de problemas.

    Ex.: Uma diretriz genrica para a resoluo de um problema de engenharia o uso do seguinte processo: (1) formular o problema real; (2) Analisar o problema; (3) Projetar uma estratgia de busca de soluo.

    SWEBOK, 2014

  • 1. Tcnicas de resoluo de problemas1.2 Formulando o problema real A declarao do problema especifica de forma explcita qual o

    problema. comum que esta declarao culmine com uma pergunta.

    O problema deve ser manifestado de uma forma que facilite o desenvolvimento da soluo.

    Tcnicas para auxiliar na formulao de problemas reais incluem: determinao da origem e da causa (ex.: Diagrama Ishikawa ou Espinha de Peixe ou de Causa e Efeito); reviso de declarao; anlise do estado presente e do estado desejado.

    SWEBOK, 2014

  • 1. Tcnicas de resoluo de problemas

  • 1. Tcnicas de resoluo de problemas

  • 1. Tcnicas de resoluo de problemas1.3 Analisando o problema Uma vez que a declarao do problema esteja disponvel, o prximo

    passo analis-la ou analisar a situao para ajudar a estruturar a busca por uma soluo.

    4 tipos de anlise:

    Anlise da situao: aspectos mais crticos so identificados primeiro.

    Anlise do problema: a causa do problema deve ser determinada. Anlise decisria: devem ser determinadas as aes necessrias para

    corrigir o problema ou eliminar suas causas. Anlise do problema em potencial: devem ser determinadas as

    aes necessrias para prevenir qualquer recorrncia do problema ou o surgimento de novos problemas.

    SWEBOK, 2014

  • 1. Tcnicas de resoluo de problemas1.4 Projetando uma estratgia de busca de soluo Uma vez que a anlise do problema esteja completa, possvel focar em

    estruturar uma estratgia de busca para encontrar a soluo.

    Com o intuito de encontrar a melhor soluo (ex.: mais rpida, mais barata, etc.) necessrio:

    eliminar caminhos que no levem solues viveis; projetar tarefas para proporcionar aes mais voltadas para a busca

    de uma soluo; e utilizar diversos atributos do estado final de resoluo para orientar

    as escolhas no processo de resoluo de futuros problemas similares.

    SWEBOK, 2014

  • 1. Tcnicas de resoluo de problemas1.5 Resoluo de problemas usando programas A resoluo de problemas na rea de computao singular por

    apresentar peculiaridades em relao resoluo de problemas de engenharia em termos gerais.

    Para resolver um problema usando computadores, deve-se responder as seguintes questes:

    i. Como descobrir o que dizer ao computador para fazer?

    ii. Como converter a declarao do problema em um algoritmo?

    iii. Como converter o algoritmo em instrues de mquina?

    SWEBOK, 2014

  • 1. Tcnicas de resoluo de problemas1.5 Resoluo de problemas usando programas

    I. Como descobrir o que dizer ao computador para fazer?

    Um problema deve ser expresso de uma forma que facilite o desenvolvimento de algoritmos e estrutura de dados para resolv-lo. O resultado desta tarefa a declarao de um problema.

    II. Como converter a declarao do problema em um algoritmo?

    Converter a declarao do problema num algoritmo que resolva o problema.

    III. Como converter o algoritmo em instrues de mquina?

    Quando o algoritmo encontrado o ltimo passo convert-lo em instrues de mquina que culminam na soluo final: software que resolva o problema.

    SWEBOK, 2014

  • 1. Tcnicas de resoluo de problemas1.5 Resoluo de problemas usando programas A resoluo de problemas usando um computador pode ser considerada

    como um processo de transformao de palavras uma transformao passo a passo da declarao do problema numa soluo para o problema.

    Para a disciplina de Engenharia de Software, o objetivo derradeiro da resoluo de problemas transformar um problema expresso em linguagem natural em eltrons que percorrem um circuito.

    Essa transformao pode ser quebrada em trs fases:

    a) Desenvolvimento de algoritmos a partir da declarao do problema.

    b) Aplicao de algoritmos voltados para o problema.

    c) Transformao dos algoritmos em cdigo.

    SWEBOK, 2014

  • 1. Tcnicas de resoluo de problemas1.5 Resoluo de problemas usando programas A converso da declarao de um problema em algoritmos e algoritmos

    em cdigo segue um passo-a-passo refinado - decomposio sistemtica.

    A decomposio sistemtica inicia-se com a declarao de um problema.

    Rescreve-se o problema como uma tarefa e decompe-se a tarefa de forma recursiva em poucas subtarefas mais simples at que a tarefa seja to simples que a soluo para ela seja igualmente simples.

    H trs maneiras de decompor: sequencial, condicional e iterativa.

    SWEBOK, 2014

  • 2. Abstrao

    SWEBOK, 2014

    Tcnica indispensvel associada resoluo de problemas.

    Refere-se ao processo de generalizao para sintetizar a informao um conceito, problema ou fenmeno observvel com o objetivo de concentrar-se num cenrio mais amplo.

    Uma das habilidades mais importantes da engenharia enquadrar os nveis de abstrao de forma apropriada.

    Atravs de abstrao vemos o problema e suas possveis vias de soluo a partir de um nvel mais alto de entendimento conceitual. Como resultado, podemos nos tornar melhor preparados para reconhecer possveis relaes entre diferentes aspectos do problema e assim gerar solues de projeto mais criativas. (Voland, 2003)

  • 2. Abstrao

    SWEBOK, 2014

    2.1 Nveis de abstrao Ao abstrair, concentra-se no nvel de um cenrio de

    cada vez com a confiana de que possvel conect-lo de forma efetiva aos cenrios de nveis superiores e inferiores.

    Embora o foco esteja em um nico nvel, abstrao no signifca o desconhecimento dos nveis adjacentes.

  • 2. Abstrao

    SWEBOK, 2014

    2.2 Encapsulamento um mecanismo usado para implementar abstrao.

    Ao lidar com um nico nvel de abstrao a informao relativa aos nveis superiores e inferiores est encapsulada. Esta informao pode ser o conceito, problema ou fenmeno observvel; ou podem ser as operaes admissveis nestas entidades relevantes.

    Encapsulamento vem com algum grau de ocultao da informao no qual alguns ou todos os detalhes implcitos esto escondidos do nvel acima da interface oferecida pela abstrao.

    Para um objeto a ocultao da informao significa que ns no precisamos saber os detalhes de como o objeto representado ou como as operaes naqueles objetos so implementadas.

    Jeff Elrods

  • 2. Abstrao

    SWEBOK, 2014

    2.3 Hierarquia Ao usar abstrao na formulao e na soluo de um problema pode-se

    usar diferentes abstraes em diferentes momentos. Ou seja, trabalha-se com diferentes nveis de abstrao de acordo com a situao.

    De forma geral, estes diferentes nveis de abstrao so organizados numa hierarquia e h muitas maneiras de estrutur-la. O critrio usado para determinar o contedo especfico de cada camada na hierarquia varia dependendo dos indivduos que desempenham o trabalho.

  • 2. Abstrao

    SWEBOK, 2014

    2.3 Hierarquia A hierarquia de abstrao pode ser organizada da seguinte forma:

    Sequencial: cada camada tem uma nica camada predecessora inferior e uma nica camada sucessora superior com exceo da camada suprema que no tem nehuma sucessora e da camada inferior extrema que no tem predecessora.

    Em rvore: cada camada pode ter mais de uma predecessora, mas apenas uma sucessora.

    Muitos-para-muitos: cada camada pode ter mltiplos predecessores e sucessores.

  • 2. Abstrao

    SWEBOK, 2014

    2.3 Hierarquia Uma hierarquia forma-se naturalmente ao decompor tarefas.

    Com frequncia, a anlise de uma tarefa pode ser decomposta de forma hierrquica, comeando pelas tarefas e objetivos mais amplos da organizao e quebrando cada uma delas em subtarefas menores que podem ser novamente subdivididas.

    Esta contnua diviso de tarefas em tarefas menores produz uma estrutura hierrquica de tarefas-subtarefas.

  • 2. Abstrao

    SWEBOK, 2014

    2.4 Alternar abstraes s vezes til ter vrias abstraes alternativas para o mesmo problema

    para que se possa manter diferentes perspectivas em mente.

    Exemplo: pode-se ter um diagrama de classe, uma mquina de estados finitos e um diagrama de sequncia para o mesmo software no mesmo nvel de abstrao. Estas abstraes alternativas no formam uma hierarquia, mas se complementam no sentido de ajudar a compreenso do problema e sua soluo.

    Embora seja benfico, difcil manter abstraes alternativas em sincronia.

  • 3. Fundamentos de programao

    SWEBOK, 2014

    Pode-se considerar a programao como o processo de projetar, escrever, testar, debugar e manter cdigos-fonte escritos em linguagem de programao.

    O processo de codificar requer o conhecimento do domnio da aplicao, estrutura de dados apropriada, boas tcnicas de programao e engenharia de software.

  • 3. Fundamentos de programao

    SWEBOK, 2014

    3.1 O processo de programar Envolve projeto, escrita, teste, debug e manuteno.

    Projeto: concepo ou inveno de um esquema que transforme os requisitos do consumidor em software operacional. Atividade que liga os requisitos da aplicao ao cdigo e debug.

    Escrita: codificao do projeto numa linguagem de programao apropriada.

    Teste: atividade para verificar se o cdigo escrito faz o que deveria fazer.

    Debug: atividade de encontrar e corrigir faltas no cdigo ou projeto. Manuteno: atividade de atualizar, corrigir e melhorar programas

    existentes.

  • 3. Fundamentos de programao

    SWEBOK, 2014

    3.2 Paradigmas de programao Programar uma atividade altamente imaginativa e, portanto, um

    pouco pessoal. Diferentes pessoas escrevem diferentes programas para os mesmos requisitos.

    Esta diversidade na programao causa muitas dificuldades na elaborao e manuteno de softwares complexos.

    Vrios paradigmas de programao tm sido desenvolvidos com o intuito de estabelecer alguns padres nesta atividade altamente criativa e pessoal.

    Quando algum programa pode usar um dos vrios paradigmas de programao para codificar.

  • 3. Fundamentos de programao

    SWEBOK, 2014

    3.2 Paradigmas de programao Programao no-estruturada: o programador segue sua intuio para

    codificar da maneira que quiser, desde que a funo esteja operacional. Trata-se de codificar para cumprir uma finalidade especfica, sem levar mais nada em conta. Tambm chamada de programao ad hoc.

    Programao estruturada, procedural ou imperativa: sua marca registrada o uso de estruturas de controle bem definidas, incluindo procedimentos e/ou funes que desempenham tarefas especficas. H interfaces entre os procedimentos para facilitar operaes de chamada. Os programadores seguem protocolos estabelecidos e regras do polegar ao codificar. Enfatiza as mudanas de estado.

  • 3. Fundamentos de programao

    SWEBOK, 2014

    3.2 Paradigmas de programao Programao Orientada a Objeto - POO: enquanto a programao

    procedural organiza programas em torno de procedimentos, a POO organiza o programa em torno de objetos - estruturas de dados abstratas que combinam dados e mtodos usados para acessar ou manipular os dados. Sua caracterstica primria que os objetos que representam vrias entidades abstratas e concretas so criados e interagem uns com os outros para cumprir, de forma coletiva, o propsito desejado.

  • 3. Fundamentos de programao

    SWEBOK, 2014

    3.2 Paradigmas de programao Programao Orientada a Aspecto: construda no topo da POO. Busca

    isolar funes secundrias da lgica de negcio do programa principal ao focar nas responsabilidades dos objetos sob uma perspectiva transversal. Sua motivao primria resolver o emaranhado e/ou a disperso de objetos da POO quando a interao entre objetos torna-se muito complexa. Sua essncia a separao de responsabilidades, que separa preocupaes ou lgicas funcionais perifricas em vrios aspectos.

  • 3. Fundamentos de programao

    SWEBOK, 2014

    3.2 Paradigmas de programao Programao Funcional: apesar de ser menos popular, to vivel

    quanto outros paradigmas na resoluo de problemas de programao. Este paradigma trata todas as computaes sob a avaliao de funes matemticas. Enfatiza a aplicao de funes.

  • 4. Programao Orientada a Objeto

    4.1 Histrico Os termos objeto e orientada no contexto da POO surgiram no

    Massachusetts Institute of Technology (MIT) no final dos anos 50 e incio dos anos 60.

    No mbito da inteligncia artificial incio dos anos 60 - objeto se referia a itens identificados como propriedades (atributos).

    O conceito formal de programao de objetos foi introduzido nos anos 60 em Simula 67, uma linguagem de programao projetada para simulao de eventos discretos, criada por Ole-Johan Dahl e Kristen Nygaard do Centro de Computao Noruegus em Oslo.

    O Simula introduziu, como parte de um paradigma de programao, as noes de classes; instncias ou objetos; sub-classes e outras.

  • 4. Programao Orientada a Objeto

    4.1 Histrico Os termos objeto e orientada no contexto da POO surgiram no

    Massachusetts Institute of Technology (MIT) no final dos anos 50 e incio dos anos 60.

    No mbito da inteligncia artificial incio dos anos 60 - objeto se referia a itens identificados como propriedades (atributos).

    O conceito formal de programao de objetos foi introduzido nos anos 60 em Simula 67, uma linguagem de programao projetada para simulao de eventos discretos, criada por Ole-Johan Dahl e Kristen Nygaard do Centro de Computao Noruegus em Oslo.

    O Simula introduziu, como parte de um paradigma de programao, as noes de classes; instncias ou objetos; sub-classes e outras.

  • 4. Programao Orientada a Objeto

    4.1 Histrico A linguagem Smalltalk - desenvolvida nos anos 70 na Xerox Palo Alto

    Research Center (PARC) por Alan Kay e outros usou o termo POO para representar o uso pervasivo de objetos e mensagens como base para a computao.

    Em 1981 Smalltalk e POO foram amplamente difundidos em artigos da Byte Magazine.

    No incio dos anos 90, quando as linguagens de programao passaram a suportar as tcnicas, a POO desenvolveu-se como uma metodologia de programao dominante.

  • 4. Programao Orientada a Objeto

    4.1 Histrico As caractersticas orientadas a objeto foram adicionadas muitas

    linguagens que j existiam, mas no foram projetadas para este paradigma, como BASIC, Fortran, Pascal e COBOL. Isso gerou problemas de compatibilidade e manuteno de cdigo.

    Depois surgiram linguagens fundamentadas no paradigma OO, mas tambm compatveis com o paradigma procedural. Exemplos: JAVA, Python, Ruby...

  • 4. Programao Orientada a Objeto

  • Trabalho A1:

    Lista 1 - nivelamento

    SILVEIRA, et al., 2012

  • 4. Programao Orientada a Objeto

    4.2 Introduo Na POO o cdigo no agrupado em funes, mas em classes de objetos.

    Esse paradigma permite manipular dados de forma mais natural.

    O cdigo era escrito como uma sequncia de instrues, parecido com uma receita. Ele era agrupado em blocos e funes. Seu fluxo era controlado usando condicionantes, loops e chamadas de funo. No entanto, esse paradigma no uma forma natural para ns pensarmos em dados.

    Com a POO, cdigo e dados so agrupados em objetos que interagem por mensagens enviadas e recebidas por interfaces expostas publicamente. Por exemplo, um objeto cliente pode verificar um objeto livro a partir de um objeto biblioteca.

    Com essa maneira orientada a objeto de pensar sobre programao podemos relacionar objetos e dados.

  • 4. Programao Orientada a Objeto

    4.2 Introduo O prprio Alan Kay, que cunhou o termo "programao orientada a

    objeto", ressalta que "o termo foi uma m escolha, pois diminui a nfase da ideia mais importante, a troca de mensagens."

    SILVEIRA, et al., 2012

  • 4. Programao Orientada a Objeto

    4.3 Classes e Objetos Classe: voc pode pensar numa classe como uma receita ou descrio de

    um tipo de objeto. Ex.: A receita de um bolo de chocolate no , propriamente, um bolo de chocolate, mas uma descrio de um tipo de bolo.

    Objeto: uma instncia especfica de uma classe. Ex.: cada vez que se faz um bolo seguindo a receita do bolo de chocolate, o resultado o bolo de chocolate. Apesar de usar a mesma receita para fazer os bolos, eles so todos sutilmente diferentes.

    Exerccio 1: Identifique os objetos e classes envolvidos em: enviar dinheiro de uma pessoa para outra via internet banking.

  • 4. Programao Orientada a Objeto

    4.3 Classes e Objetos Objeto como uma caixa preta que envia e recebe mensagens. Ele

    contm cdigo que uma sequncia de estruturas de computador e dados (informao onde as estruturas operam).

    Tradicionalmente cdigo e dados so mantidos parte. Ex.: Na linguagem C as unidades de cdigo so chamadas funes (unidades de cdigo = funes) e as unidades de dados so chamadas estruturas (unidades de dados = estruturas). Funes e estruturas no esto formalmente conectadas na linguagem C.

    Na POO cdigo e dados esto mesclados numa coisa simples e indivisvel: o objeto.

  • 4. Programao Orientada a Objeto

    4.3 Classes e Objetos

    cdigo

    dados

  • 4. Programao Orientada a Objeto

    4.3 Classes e Objetos Uma das regras primordiais da POO: como usurio de um objeto no

    se deve violar a caixa preta.

    Por que no se deve olhar dentro do objeto? Porque toda comunicao para ele j est sendo estabelecida por mensagens. O objeto para o qual a mensagem est sendo enviada chamado receptor de mensagem. A mensagem estabelece interface entre os objetos.

    Tudo que um objeto pode fazer representado por esta mensagem da interface. Portanto desejvel que no se saiba sobre o que est dentro da caixa preta para poder us-la.

  • 4. Programao Orientada a Objeto

    4.3 Classes e Objetos Olhar dentro do objeto caixa preta instiga voc a modificar diretamente

    aquele objeto. Se voc fizer isso, estar adulterando os detalhes de como o objeto funciona.

    Suponha que uma pessoa que programa um objeto decida mudar mais tarde alguns desses detalhes, assim voc estaria em apuros. Se voc usa aquele objeto na sua aplicao, seu software j no iria funcionar corretamente.

    Mas ao lidar com objetos como caixas pretas e via mensagens, o software ter garantia de funcionamento.

  • 4. Programao Orientada a Objeto

    4.3 Classes e Objetos Um objeto definido por sua classe que determina tudo ele. Objeto como

    instncias individuais de uma classe.

    Objetos so caixas pretas que enviam e recebem mensagens. Essa abordagem agiliza o desenvolvimento de novos programas e se utilizado de forma apropriada, melhora a manutenibilidade e reusabilidade do software.

    Um programa orientado a objeto consiste de muitos objetos bem encapsulados e interaes entre eles pelo envio de mensagens.

  • 4. Programao Orientada a Objeto

    4.4 Atributos So os componentes de dados do objeto - colees de variveis que

    armazenam valores. Uma mesma classe pode ter vrias instncias e o que as diferencia, sob a perspectiva do componente de dados, so os valores dos atributos.

    Suponha a criao de 3 objetos a partir da classe Contato. Ou seja, a criao de 3 instncias da classe Contato:

  • 4. Programao Orientada a Objeto

    4.4 Atributos Suponha a criao de 3 objetos a partir da classe Contato.

    Ou seja, a criao de 3 instncias da classe Contato.

    contato_1 = Contato("Eduardo", "Carvalho", [email protected]")contato_2 = Contato("Juliana", "Teles", "[email protected]")contato_3 = Contato("Beatriz", "Siqueira", "[email protected]")

  • 4. Programao Orientada a Objeto

    4.4 Atributos So os valores dos atributos (nome, sobrenome, email) que tornam cada

    objeto nico, e no seus atributos.

    Ao decidir sobre os atributos de uma classe, tente limitar os atributos da seguinte forma:

    1. Varivel que descreve a "coisa" que a classe est modelando.

    2. Varivel que torna a "coisa" nica.

    3. Varivel que descreve do que a "coisa" feita.

  • 4. Programao Orientada a Objeto

    EXEMPLO 1: EXEMPLO 2:

  • 4. Programao Orientada a Objeto

    4.4 Atributos No primeiro exemplo cada atributo , de fato, uma caracterstica da

    empresa fornecedora.

    No entanto, no exemplo 2, a classe incorporou caractersticas de outros objetos, como um empregado e produtos, alm de incluir o atributo numero_de_vendas que no , na verdade, uma caracterstica, mas um valor que computado a partir de outros dados.

  • 4. Programao Orientada a Objeto

    4.4 Atributos

    Visibilidade:

    privado (private): O atributo/funo acessvel entre as classes envolvidas na herana, mas no de fora dela.

    protegido (protected): O atributo/funo s acessvel de dentro da classe que ele foi definido.

    pblico (public): O atributo/funo acessvel de dentro ou de fora da classe/objeto.

  • 4. Programao Orientada a Objeto

    4.5 Funes At agora descreveu-se classe como um rtulo e conjunto de atributos.

    Isso equivale descrio de uma tabela da planilha. No entanto, o que torna um objeto especial o fato de que dados e funcionalidade coexistem. Portanto, alm dos atributos de uma classe, tambm necessrio definir as funes para esta classe. Exemplo:

  • 4. Programao Orientada a Objeto

    4.5 Funes Foram definidas algumas funes que queremos que nosso objeto

    desempenhe. Essas funes operam com os valores armazenados nos atributos para cada objeto desta classe. Toda vez que criado um objeto desta classe, ele possuir no apenas os atributos da classe, mas tambm as funes da classe.

  • 4. Programao Orientada a Objeto

    4.5 Funes Assim como os atributos, prudente escolher as funes para incluso

    com cuidado para que a definio da classe tenha um sentido lgico. Assim, devem ser includas apenas funes que tenham relao estreita com os atributos da classe, e aquelas funes que so inatas "coisa" modelada pela classe.

  • 4. Programao Orientada a ObjetoExerccio 1. Defina atributos e funes para as seguintes classes de objetos:

    1. Carro

    2. Atleta

    3. Televisor

    4. E-mail

  • 4. Programao Orientada a Objeto

    4.6 Classes e Objetos em Python A sintaxe para definir uma classe em Python:

  • 4. Programao Orientada a Objeto4.6 Classes e Objetos em Python

    QUESTES-CHAVE:

    1. Ao criar uma instncia (objeto) a partir da classe, o que acontece com os atributos de classe? E com os atributos de instncia (objeto)?

    2. desejvel que tanto o atributo de classe quanto o atributo de instncia sejam privados. A alterao de atributo deve ser feita por mtodos pblicos, pois sua alterao direta representa uma violao ao encapsulamento da classe.

    3. S devem existir mtodos gets e sets, em caso de real necessidade.

  • 4. Programao Orientada a Objeto4.7 Criando instncias de objetoalguma_variavel = MinhaClasse()

    A sintaxe acima roda a funo __init__() da classe; prepara as estruturas de dados contidas dentro da classe; e coloca um novo objeto na memria com a varivel apontando para aquele endereo.

    Com nossa classe Pagina do slide anterior, possvel criar exemplares (instncias) de pgina. Vamos criar 3:

    primeira = Pagina(1)

    segunda = Pagina(2)

    terceira = Pagina(3)

    Note que passamos um nmero inteiro para criar o objeto.

  • 4. Programao Orientada a Objeto4.7 Criando instncias de objeto def __init__(self, num_pag):

    self.__numero_pagina = num_pag

    Essa passagem de parmetro ocorreu porque a funo __init__() usa a varivel num_pag como um parmetro para a funo, atribuindo o valor desta varivel ao atributo de instncia __numero_pagina.

    Para acessar funes, usamos o identificador do objeto, seguido por um ponto (.), seguido pelo nome da funo. Ex.:

    primeira.adicionar_conteudo("Contedo primeira pgina")

    primeira.get_numero_pagina()

    1

    * Lembre-se que a alterao direta de atributos no deve ocorrer, isso representa uma violao ao encapsulamento. Situao que se ope aos preceitos da orientao a objeto. De acordo com os princpios previstos no paradigma OO, os atributos devem ser privados e caso haja a necessidade de alterao do contedo dos atributos, essa alterao deve ser feita por meio das funes/mtodos pblicos.

  • 4. Programao Orientada a Objeto4.8 Mtodos

    A funo retornar_dado pode ser chamada pela instncia de classe (self), mas no pela classe. Observe que o self refere-se a instncia de classe e no classe.

    class Klass(object):

    def __init__(self, dado):

    self.dado = dado

    def retornar_dado(self):

    return self, self.dado

    >>> Klass.retornar_dado()

    TypeError: unbound method retornar_dado() must be called with Klass instance as first argument (got nothing instead).

  • 4. Programao Orientada a Objeto4.8 Mtodos

    >>> k1 = Klass(1)

    Klass.retornar_dado(k1)

    (, 1)

    Ou

    >>> k1 = Klass(1)

    >>> k1.retornar_dado()

    (, 1)

    * Veja kls.py

  • 4. Programao Orientada a Objeto4.9 Mtodos Estticos

    So funes da classe que podem ser chamadas sem a necessidade de ter uma instncia da classe. No entanto, os mtodos estticos tambm podem ser chamados pela instncia da classe.

    class Klass(object):

    def __init__(self, dado):

    self.dado = dado

    @staticmethod

    def metodo_estatico(*args):

    print 'Metodo Estatico:', args

    Klass.metodo_estatico(valor_1, valor_2)

    Note que o primeiro parmetro no self. O termo self refere-se instncia da classe (objeto). Ou seja, nem self (instancia da classe) e nem cls (a classe) so passados de forma implicita como primeiro argumento. Veja kls.py

  • 4. Programao Orientada a Objeto4.10 Mtodos de classe

    Assim, como os mtodos estticos, esta funo tambm pode ser chamada tanto pela instncia de classe quanto pela classe.

    class Klass(object):

    def __init__(self, dado):

    self.dado = dado

    @classmethod

    def metodo_de_classe(*args):

    print 'Metodo de Classe:', args

    A diferena entre este e o mtodo esttico que quando o decorator @classmethod colocado, o objeto classe (cls) j passado de forma implcita como primeiro argumento.

  • 4. Programao Orientada a Objeto4.11 Herana (relacionamento um)

    Em programao a duplicao de cdigo fortemente contraindicada.

    H diversas formas de mesclar trechos de cdigo com funcionalidade similar e a mais conhecida delas a herana.

    A herana permite criar uma relao um entre duas ou mais classes, abstrair detalhes comuns dentro de superclasses e armazenar os detalhes especficos em subclasses.

    class ClasseFilha(ClassePai):

    # A definio de classe colocada aqui.

    Toda classe usa herana. Toda classe em Python subclasse de uma classe especial denominada objeto .

    Class MinhaSubClasse(object):

    pass

  • 4. Programao Orientada a Objeto

    >>> c = Contato("Alguem", "[email protected]")>>> f = Fornecedor("Algum Fornecedor", "[email protected]")>>> print(c.nome, c.email, f.nome, f.email)Alguem [email protected] Algum Fornecedor [email protected]

    >>> c.contatos[,]

    >>> c.solicitar_produto("Pizza")AttributeError: 'Contato' object has no attribute 'solicitar_produto'

    >>> f.solicitar_produto("Pizza")Pedido Pizza solicitado a Algum Fornecedor.

  • 4. Programao Orientada a Objeto4.11 Herana: extendendo built-ins

    Objetivo: adicionar funcionalidade a classes built-in.

    Como procurar um nome na lista?

    >>> c1 = Contato("Eduardo A", "[email protected]")>>> c2 = Contato("Eduardo B", "[email protected]")>>> c3 = Contato("Juliana C", "[email protected]")>>> [c.nome for c in Contato.contatos.procurar('Eduardo')]['Eduardo A', 'Eduardo B']

  • 4. Programao Orientada a Objeto4.11 Herana: sobrescrita

    A herana permite adicionar novos comportamentos a classes existentes. E se for necessrio mudar comportamentos?

    Qualquer metodo pode ser sobrescrito, no s o __init__.

    Exemplo: adicionar nmero do celular aos amigos mais prximos.

  • 4. Programao Orientada a Objeto4.11 Herana Mltipla

    Ocorre quando uma subclasse herda de mais de uma classe pai e capaz de acessar funcionalidade a partir delas.

    Na prtica muito menos til do que parece e muitos experts recomendam no us-la.

    Se voc acha que precisa de herana mltipla, voc provavelmente est errado, mas se voc sabe que precisa dela, provavelmente voc est certo.

    >>> from heranca_multipla import EmailParaContato>>> e = EmailParaContato("John Smith", "[email protected]")>>> e.enviar_email('Ola John!')Enviando e-mail para [email protected]

    Problema: repetidas chamadas a superclasse.

  • 4. Programao Orientada a Objeto4.12 Polimorfismo

    Significa muitas formas.

    Transmite a ideia de especializao e de flexibilidade de comportamento de acordo com as circunstncias apresentadas.

    O operador + pode assumir comportamentos distintos de acordo com os tipos que ele opera. Exemplo: clculo matemtico quando lida com inteiros (50 + 50) ou concatenao quando lida com strings (Ol + Mundo!).

    Um atleta tambm pode assumir comportamentos diversos de acordo com a modalidade esportiva que pratica. Ele pode ser um nadador se pratica natao ou um remador se pratica remo.

    Uma classe pessoa poderia ter dois comportamentos distintos: pessoa fsica (ser humano) ou pessoa jurdica (empresa).

    Veja polimorfismo.py

  • 4. Programao Orientada a Objeto4.12 Polimorfismo

  • 4. Programao Orientada a Objeto4.13 Abstrao em python

    Por conter mtodo abstrato (@abstractmethod) uma classe abstrata no pode ser instanciada como um objeto.

    from abc import ABCMeta, abstractmethod

    class Animal(object): __metaclass__ = ABCMeta @abstractmethod def diga_algo(self): pass

    class Gato(Animal):

    def diga_algo(self): return "Miauuu!"

    >>> a = Animal()

    Traceback (most recent call last): File "", line 1, in TypeError: Can't instantiate abstract class Animal with abstract methods diga_algo"

  • 4. Programao Orientada a Objeto4.13 Abstrao em python

    Isso fora o uso da(s) subclasse(s). Exemplo: No queremos que uma instncia de Animal seja criado, mas queremos que instncias de gato, cachorro, baleia, entre outros sejam criados.

    Essa tcnica favorece a consecuo de caractersticas desejveis pela perspectiva do paradigma orientado a objeto: o encapsulamento e a reduo do acoplamento. Por consequncia do encapsulamento, possvel observar a reduo do acoplamento. Veja abstracao.py e o pacote abstracao em java.

  • Trabalho A2 Prazo de entrega: 26/01/2015 (dia da P1). Escolha a linguagem de programao OO de sua preferncia.

    TAREFA 1: Utilize o programa abstracao.py ou o pacote abstrao em java como ponto de

    partida para fazer um novo programa com nivel de abstracao mais baixo, ou seja, com um nivel de detalhamento maior. Considere que as subclasses devem ser instanciadas com todos os atributos, exceto gasto calorico e duracao do sono pois estes sero computados.

    No novo programa tais atributos sero calculados tendo como referncia os seguintes dados: Natao: 900 Kcal/hora; Corrida: 500 Kcal/hora; Remo: 660 Kcal/hora.

    Supondo que a durao do sono para um indivduo sedentrio de 8 horas/dia, calcule quanto tempo cada atleta deve dormir a mais utilizando a frmula hipottica:

    tempo de sono complementar = gasto calorico/300 * duracao do treino.

  • Trabalho A2TAREFA 2:

    Implemente dois programas que usem classes abstratas.

    Cada programa deve ter um nivel de abstrao diferente.

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64Slide 65Slide 66Slide 67Slide 68Slide 69Slide 70Slide 71Slide 72