1 / 60

Programação Avançada Orientação a objetos

Programação Avançada Orientação a objetos. Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012. Introdução. Forma de programar Programação não estruturada Programas simples e pequenos Ex: Cartões Programação Estruturada (ou Modular)

merrill
Download Presentation

Programação Avançada Orientação a objetos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programação AvançadaOrientação a objetos Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012

  2. Introdução • Forma de programar • Programação não estruturada • Programas simples e pequenos • Ex: Cartões • Programação Estruturada (ou Modular) • Programas divididos em módulos • Módulos com estruturas de dados internas

  3. Introdução • Programação Orientada à Objetos • Programas estruturados pelos dados e não pelas operações • Dados, chamados de classe, especificam as operações válidas • Módulos agrupados por dados e suas representações • Unifica as ideias de algoritmos e estruturas de dados através do conceito de Objeto Programas organizados pelo comportamento dos objetos e não como uma simples sequência de comando e chamadas desconectadas.

  4. Classe • É a representação de um tipo abstrato de dados • Especifica: • Atributos • Métodos (funções) • Define as propriedades e o comportamento dos conjuntos de objetos.

  5. Objeto • É uma instância de uma classe • Identificado univocamente pelo seu nome • Possui estado, determinado pelo valor dos atributos ao longo do tempo • Estado modificado pela aplicação dos métodos • Mudança de estados define comportamento do objeto

  6. Conceitos de Orientação a Objetos • Abstração • Encapsulamento • Hierarquia de classes e herança • Polimorfismo • Construtores e destrutores

  7. Abstração • Objeto pode ser utilizado conhecendo-se apenas a sua interface • Detalhes de implementação são ignorados • Encapsulamento de dados e algoritmos • Definidos dentro do objeto, não havendo necessidade de serem expostos na interface do objeto

  8. Encapsulamento • Forma de definição dos objetos • Classificação de atributos e métodos de acordo com o controle de acesso • Classe composta de várias seções • Privada – Podem ser acessados apenas pelos métodos do objeto • Pública – Podem ser acessados por outros objetos • Protegida – Podem ser acessados por métodos definidos na classe ou nas classes derivadas Em Python, tudo é público, mas existem meios para usar o privado. Veja mais em: http://docs.python.org/tutorial/classes.html

  9. Hierarquia de Classes e herança • Pode-se desenvolver uma hierarquia de classe • Criação de uma classe-raiz e diversas subclasses ou classes derivadas • As classes-raiz representam as tarefas mais generalizadas • As subclasses representam tarefas mais específicas • Herdam as características das classes ascendentes Vantagem: Reaproveitamento de código!

  10. Herança • Herança simples • Uma classe tem apenas um pai • Herança múltipla • Uma classe tem vários pais

  11. Polimorfismo • Uma mesma função pode ser definida de forma diferente por uma família de classes • Comportamento definido pela definição do método em cada classe • Exemplos • Listas, tuplas e strings podem ser indexadas por um número entre colchetes e suportam o método len • Se usarmos len(x), podemos passar uma lista, uma tupla ou uma string sem modificações ou indicações no código • Redefinição de métodos de uma classe pai • A classe enlace pode ter um método trata_erro genérico • Esse método pode ser tratado de forma mais especifica dentro das classes filhas, que redefinem a função

  12. Construtores e destrutores • São métodos especiais das classes • O construtor é ativado quando se instancia o objeto de uma classe • Faz as atribuições iniciais da classe • Tem o nome da classe • O destrutor da classe é ativado quando termina o escopo de um objeto • Faz as ações finais antes de o objeto ser eliminado • Quando não são declarados, o construtor apenas cria a área de memória necessária ao objeto e o destrutor a libera

  13. Orientação a objetos em Python • Classe • “Fábrica” de objetos • A rigor, em Python, uma classe também é um objeto • Uso de módulo.método é uma forma de usar um módulo como um objeto. O mesmo se aplica às classes • Definição de uma classe class nome: var = valor ... var = valor def metodo (self, ... arg): ... def metodo (self, ... arg): ...

  14. Definição de classes • Na definição dos métodos, os atributos são chamados como nome_da_classe.atributo • O primeiro argumento de qualquer método é sempre self • O self é uma referência a própria instância da classe • É uma forma de a classe dizer que se refere a si mesma • Atributos da classe podem ser chamados também como self.atributo • Um objeto de uma classe é criado usando nome_da_classe()

  15. Exemplos – Criação de classes

  16. Exemplos – Criação de classes

  17. Exemplos (o que não fazer)

  18. Exemplos – Uso do self

  19. Exemplos – Atributos internos e externos

  20. Exemplos - Reescrevendo Atenção: o.extra() daria erro. Por que?

  21. Exercício • Imagine que você está programando um site que deve vender pizza. A loja, o vendedor, o cliente, a pizza e o cardápio precisam ser representados. Crie as classes, com seus métodos (apenas imprimem o que deveriam fazer, mas recebem os argumentos corretos) e atributos.

  22. Construtores em Python • Chamados automaticamente na criação de instâncias • Utilizados declarando-se um método __init__

  23. Exemplo

  24. Exemplo

  25. Destrutores • A linguagem Python já apresenta um ‘coletor de lixo’ • Gerenciamento de memória alocada feita de forma automática • Uso dos destrutores para: • Fechar sockets • Fechar conexões com banco de dados • Fechar arquivos • Etc; • Formato: • __del__ • Destrutores são chamados após o fim do escopo no qual o objeto está inserido

  26. Atenção: As mensagens do destrutorpodem não aparecer no console que você está usando. (mensagens impressas apenas no  sys.stderr ) Se houver necessidade de criar logs, usar arquivos e colocar exit no final do código.

  27. Exercício • Crie uma classe para lidar com strings que tenha um construtor e um destrutor. A classe pode ter tantos argumentos você achar necessário, mas deve ter pelo menos um método.

  28. Encapsulamento • Atributos públicos • Todos os atributos de uma classe, por padrão • Atributos privados • Representados com __ na frente do nome

  29. Exemplos

  30. Exemplos

  31. Exercício • Dois objetos de classes distintas, A e B, interagem da seguinte forma. Enquanto A não recebe um número primo do usuário, ele fica recebendo novos números. Quando recebe um número primo, ele ativa um atributo privado de B, de tal forma que B passa a pedir números para o usuário até receber um número não primo. Quando número é recebido, B seta um atributo privado de A, de tal forma que A volta para a operação inicial. • Atenção: Utilize threads para representar o funcionamento das duas classes.

  32. Herança e Polimorfismo • Para uma classe herdar atributos e métodos de outra, basta declarar isso na definição da classe • Formato: Class Filha(Classe_Pai): • Filha é uma sub-classe ou uma derivada de Classe_Pai e Classe_Pai é uma superclasse ou base de C • É possível adicionar novos métodos e atributos à classe Filha, assim como é possível modificar métodos da Classe_Pai.

  33. Herança e Polimorfismo • Caso um método ou um atributo seja redefinido e seja necessário chamar esse método ou atributo da superclasse, colocar essa chamada de forma explicita • Construtores e destrutores da classe e da superclasse precisam ser chamados pelo construtor da nova classe

  34. Declaração de herança Declaração de novos atributos Redefinição de método Atributo definido na classe pai Uso da função pela definição do pai e do filho

  35. Redefinição de atributo Uso de atributo do pai e do filho

  36. Descomentando a linha pai.__init__(self)

  37. Construtores e herança • O construtor da classe pai apenas atua sobre os atributos da classe filha • Os atributos do pai chamados como pai.atributo não serão impactados pelo construtor do pai • Cuidado ao sobrescrever indevidamente atributos

  38. Classes sem herança • Classes que não herdam de outra classe do usuário podem ser definidas da seguinte forma: • class sem_pai(object): • Isso permite algumas propriedades especiais para a classe que não serão discutidas agora • Mais informações em: http://docs.python.org/release/2.2.3/whatsnew/sect-rellinks.html

  39. Herança de múltiplas classes • Uma classe pode ter vários pais • Herda os atributos e métodos de todas as classes pais • Se duas classes pais possuírem o mesmo método ou o mesmo atributo, vale o atributo da classe declarada primeiro

  40. Exercício • Crie um conjunto de classes, utilizando o conceito de herança, para representar as pessoas que interagem entre si em uma empresa.

  41. Módulo operador • Permite reescrever o uso de comparações de objetos, operações lógicas e matemáticas, operações de sequência e testes de tipo abstrato • Com isso, é possível reescrever o que deve ser feito quando se deseja somar ou subtrair dois objetos, por exemplo

  42. Módulo operador • Principais funções • operator.lt(a, b) ou operator.__lt__(a, b) • operator.le(a, b) ou operator.__le__(a, b) • operator.eq(a, b) ou operator.__eq__(a, b) • operator.ne(a, b) ou operator.__ne__(a, b) • operator.ge(a, b) ou operator.__ge__(a, b) • operator.gt(a, b) ou operator.__gt__(a, b)

  43. Módulo operador • Principais funções • operator.is_(a, b) = Return a is b • operator.abs(obj) • operator.__abs__(obj) • operator.add(a, b) • operator.__add__(a, b) • operator.and_(a, b) • operator.__and__(a, b) • operator.div(a, b) • operator.__div__(a, b) • operator.mod(a, b) • operator.__mod__(a, b)

  44. Módulo operador • Principais funções • operator.neg(obj) • operator.__neg__(obj) • operator.or_(a, b) • operator.__or__(a, b) • operator.pos(obj) • operator.__pos__(obj) • operator.pow(a, b) • operator.__pow__(a, b) • operator.concat(a, b) • operator.__concat__(a, b) • operator.contains(a, b) • operator.__contains__(a, b)

  45. Módulo operador • operator.iadd(a, b) • operator.__iadd__(a, b)a = iadd(a, b)  • a += b. • operator.iand(a, b) • operator.__iand__(a, b) • a &= b. • operator.iconcat(a, b) • operator.__iconcat__(a, b) • a += b for a and b sequences. • operator.idiv(a, b) • operator.__idiv__(a, b) • a /= b

More Related