MCG126 – Programação de Computadores II

 0  0  96  2019-02-06 08:02:01 Report infringing document

  Prof. Isac Mendes Lacerda (material original cedido gentilmente pela Professora Janaína Gomide)

  MCG126

  • – Programação de Computadores II
Orientação a Objetos

  • • Orientação a Objetos (OO) é uma abordagem de

  modelagem e de desenvolvimento de software. Python é uma linguagem que suporta os conceitos de OO;

  • A origem dos conceitos vem da década de 1960;
  • Esse paradigma foi desenvolvido para, principalmente:
    • Facilitar modificações nos sistemas, sejam grandes, pequenos, simples ou complexos
    • – Contribuir para a reutilização de código
    programação

  • Até agora... Usamos o paradigma de

  procedural (estrutural/imperativo) . Caracterizada por: – Foco na escrita de funções que operam sobre os dados.

  • – Os dados não pertencem às funções, eles são passados como parâmetros.
  • – Utiliza três tipos de estrutura:

  Animal Vaca Cachorro

  Programação Orientada a Objetos (POO) , busca-se compreender um problema como uma coleção de objetos que interagem por mensagens. Caracterizada por:

  • Na
    • Objetos são estruturas que contêm tanto estado (dados ou atributos) como comportamento (funções ou métodos)
    • Objetos devem representar o mundo real;
    • Objetos são categorizados por Classes .

  Programação O. Objetos Programação Estruturada Função 1 Função 2 Função n ... Dados da Aplicação

  X CLASSE 1 Objeto 1 Dados Funções Objeto 2 Dados Funções Objeto n Dados Funções ... CLASSE 2 Objeto 1 Dados Funções Objeto 2 Dados Funções Objeto n Dados Funções ... CLASSE n Objeto 1 Dados Funções Objeto 2 Dados Funções Objeto n Dados ... Estado ou Atributos Comportamento

Programação O. Objetos Programação Estruturada

  X NOME_FUNđấO(PARÂMETROS) Função 1 Função 2 Função n ... Dados da Aplicação CLASSE n Objeto 1 Dados Funções Objeto 2 Dados Funções Objeto n Dados Funções ...

  Até agora...

  • • Escrevemos funções e chamamos usando uma sintaxe

    como:

  calculeArea(círculo)

  • • Sugere que a função é um agente ativo, que diz algo

    como: “Ei, função calculeArea! Aqui está um objeto círculo para você calcular a área.

  ” Na programação orientada a objetos...

  • Os objetos são agentes ativos.
  • Por exemplo, nós escrevemos círculo.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!

  

A vantagem mais importante da POO é que ela é mais

adequada ao nosso processo mental de agrupamento e

mais perto da nossa experiência do mundo real.

  No mundo real:

  • cozinhar é parte do nosso forno de microondas
  • - telefonar, enviar SMS ou desligar são métodos do

    telefone celular
  • • 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.

  • Em Python, tudo é na verdade 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).

  Exemplo: Carro Corcel II do meu avô:

  Um objeto Atributos: Cor: marrom

  Estado do Fabricante: Ford

  Objeto Modelo: Corcel II Funções/Métodos: Comportamento Acelerar() do Objeto

  Frear() Baixar_vidros() Abrir_portamalas() Ligar_faróis()

  Classe: CARRO

  • • Em muitos casos precisaremos criar objetos de dados

  relacionados ao problema trabalhado

  • Precisaremos criar nossas próprias classes

  Exemplo: considere o conceito de um ponto matemático.

  • • Em 2 dimensões, um ponto é representado por dois

  números (coordenadas) que são tratados em conjunto como um único objeto.

  • • Os pontos são escritos entre parênteses com uma

    vírgula separando as coordenadas.
  • • Por exemplo (0,0) representa a origem e (x,y) representa

    o ponto x unidades para direita e y unidades para cima

  • O estado do ponto é (x,y)

  

Exemplo: considere o conceito de um ponto matemático.

  • O estado do ponto é (x,y)

  origem, ou a partir de outro ponto, ou encontrar um ponto médio de dois pontos...

  Exemplo: considere o conceito de um ponto matemático.

  • Algumas operações típicas que se associam com pontos:
    • pedir o ponto a sua coordenada x (getX),
    • pedir sua coordenada y (getY)

  • Também pode calcular a distância de um ponto a partir da

  • As definições de classe podem aparecer em qualquer lugar em um programa, mas são geralmente perto do início (após os comandos import)
  • Há um cabeçalho que começa com a palavra-chave class seguido pelo nome da classe e terminando com dois pontos “:”

  • Toda classe deve ter um método com nome especial __init__
  • É um método de inicialização, também chamado de

  construtor

  • É chamado automaticamente sempre que uma nova

  instância de Ponto é criada

  • Configura os atributos necessários dentro da nova instância
  • O parâmetro self é definido automaticamente para referenciar o objeto recém-criado que precisa ser inicializado

  • Durante a inicialização dos objetos, criamos 2 atributos

  chamados x e y para cada um, ambos com valor 0

  • Ao executar o programa, dois Pontos foram criados, cada um com coordenadas x e y com valor 0.
  • Como não pedimos aos pontos para fazerem alguma coisa,

  • O operador is retorna Falso o que significa que eles são objetos diferentes.
  • O operador is retorna Falso o que significa que eles são objetos diferentes
  • As variáveis p e q recebem referências a dois novos objetos

  Ponto

  • A classe Ponto cria uma nova instância do objeto. O método

  __init__ é chamado de construtor (cada classe fornece

  automaticamente uma função construtora com o mesmo nome)

  • Uma classe é uma fábrica que faz objetos
  • A classe em si não é uma instância de um ponto, mas

  contém estrutura para fazer pontos

  • Cada vez que chamar o construtor, está pedindo à fábrica para lhe fazer um novo objeto
  • À medida que o objeto sai da linha de produção, o seu

  método de inicialização é executado para inicializá-lo com a configuração padrão de fábrica

  • O processo combinado de “criar um novo objeto” e

  “inicializar com a configuração padrão” é chamado de

  instanciação

  • Até agora o nosso construtor só pode criar pontos na posição

  (0,0)

  • Para criar um ponto na posição (7,6) é preciso fornecer alguma capacidade adicional para passar informações para o construtor
  • Podemos usar parâmetros para fornecer as informações específicas...

  • Podemos acrescentar métodos para a classe Ponto que são

  úteis para trabalhar com pontos

  • Criar uma classe como Ponto traz uma “capacidade de

  organizar

  ” os nossos programas e nosso pensamento

  • Podemos agrupar as operações (métodos) que fazem sentido e os tipos de dados a que pertencem, e cada instância da classe pode ter seu próprio estado
  • Um método se comporta como uma função
  • Os métodos são executados em um objeto específico
  • Vamos adicionar 2 métodos simples para permitir que um ponto forneça informações sobre seu estado:

  • – O método getX irá retornar o valor da coordenada x
  • – O método getY irá retornar o valor da coordenada y
    • Todo método definido em uma classe que opere em objetos dessa classe terá self como seu primeiro parâmetro.

  • Vamos adicionar outro método, distanciaDaOrigem
  • Esse método vai calcular a distância do ponto até a origem (0,0).

  • Vamos adicionar outro método, distanciaDaOrigem

  • Podemos passar um objeto como um argumento da forma habitual (função comum)
  • Observe a função distancia que envolve objetos Ponto • Note que distancia não é um método da classe Ponto

  • A função print produz um string que representa o Ponto p
  • O padrão fornecido por Python diz que p é um objeto do tipo

  Ponto

  • Para melhorar esta representação incluímos o método

  especial __str__

  • Observe que este método usa a mesma convenção de nomes

  como o construtor, que é dois sublinhados antes e depois do

  nome

  • O método __str__ é responsável por retornar uma representação na forma de um string
  • Em outras palavras, como programador a gente deve escolher como o Ponto deve ser impresso
  • Nesse caso, decidimos que a representação em string irá incluir os valores de x e y e um texto de identificação.
  • É necessário que o método __str__ retorne um string

  chamado com a construção do objeto Método especial, chamado quando print() é executada

  • Quando executar o programa observe que a função print agora mostra a string que escolhemos
  • O Python fornece muitas implementações padrão para métodos que nós, como programadores, desejamos alterar
  • Quando mudamos o significado de um método especial dizemos que substituímos o método.
  • Funções e métodos podem retornar objetos
  • Isso não é novidade, pois tudo em Python é objeto
  • A diferença aqui é que nós queremos que o método crie um objeto usando o construtor e depois que retorne o novo objeto como valor do método
  • Suponha que você tenha um objeto ponto e deseja encontrar o ponto médio entre ele e algum outro ponto alvo
  • Vamos escrever um método, chamado metadeDoCaminho que recebe outro Ponto como parâmetro e retorna o Ponto que está a meio do caminho entre o ponto e o alvo

  O método cria e retorna um objeto

  • Atributo Um dos itens nomeados de dados que compõem uma instância
  • Classe Um tipo composto definido pelo usuário. Uma classe também pode ser pensada como um modelo para objetos que são instâncias da mesma. Ex. iPhone é uma classe. O seu iPhone é uma instância.
  • Construtor Cada classe tem uma

  “fábrica”, chamada pelo mesmo nome da classe, por fazer novas instâncias.

  • Instância Um objeto cujo tipo é de uma classe. Instância e objeto são sinônimos
  • Instanciar Significa criar um objeto de uma classe
  • Linguagem orientada a objetos Uma linguagem que fornece recursos, como classes definidas pelo usuário e herança, que facilitam a programação orientada a objetos
  • Método Uma função que é definida dentro da fronteira de uma classe e é chamada em instâncias a partir dessa classe
  • Objeto Um tipo de dado composto que é frequentemente usado para modelar uma coisa ou conceito do mundo real. Ele agrupa dados e as operações que são relevantes para esse tipo de dados.
  • Programação orientada a objetos Um estilo poderoso de programação em que os dados e as operações que os manipulam são organizados em classes e

  1) Implemente a classe ao lado,

PONTO

  considerando que seus atributos

  X (Abscissa) devem ser informados pelo usuário. Y (Ordenada)

  O método getX ()deve imprimir a

  __init__

  coord. de X, getY() deve imprimir a coord. de Y, distânciaOrigem() deve

  __str__

  calcular a distância desse ponto para

  getX()

  a origem e reflexoX() deve retornar

  getY()

  um novo ponto que é a reflexão do

  distânciaOrigem()

  ponto no eixo x. Por exemplo, o

  reflexoX() reflexo de (3,5) é (-3,5).

  1) Altere o programa anterior de

PONTO

  modo que dois pares de coordenadas

  X (Abscissa)

  sejam informados pelo usuário (x1,

  Y (Ordenada)

  y1, x2, y2).Com isso, adicione o

  __init__

  método distOutroPonto() que deve calcular a distância entre os pontos

  __str__ informados. getX() getY() distânciaOrigem() reflexoX() distOutroPonto()

  1) Crie a classe para representar

FRAđấO

  frações. Quais atributos são

  Atributos:

  necessários? Os atributos devem ser

  ????

  informados pelo usuário. Implemente

  Métodos: pelo menos dois métodos. ????

  1) Crie a classe Televisão com os

TV

  respectivos atributos e métodos. A

  Ligada=False

  mudança de canais deve estar

  Canal=2 limitada entre 2 e 10. __init__ Ligar_desligar() Mudar_canal_cima() Mudar_canal_baixo() Escreva um programa Orientado a Objetos que corresponda ao fluxograma abaixo (comumente usado para a programação estruturada):

  Obter altura Início do retângulo Obter base do retângulo Calcular área do retângulo Calcular perímetro Mostrar área e

  • Vamos desenvolver uma classe para representar uma fração incluindo alguns dos métodos mais comuns
  • Quais seriam os atributos do objeto Fracao? Qual seu

  estado?

  • O que fazemos com fração? Quais seriam seus métodos?

  • 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.

  • Podemos começar a implementação da classe Fracao com o método __init__ que permitirá que o usuário forneça o numerador e o denominador da fração a ser criada....

  • Podemos começar a implementação da classe Fracao com o método __init__ que permitirá que o usuário forneça o numerador e o denominador da fração a ser criada....

  ....

  • Nós podemos mudar o estado de um objeto fazendo uma atribuição a uma das variáveis da instância.
  • Por exemplo, pode-se alterar o numerador da fração através da atribuição a um novo valor para o self.num.

  1) Crie uma classe para representar um retângulo. Quais são os atributos? 2) Crie os métodos get para cada atributo 3) Escreva o método perimetro na classe Retangulo para que retorne o valor do perímetro de uma instância de Retangulo 4) Escreva o método area na classe Retangulo que retorne o valor da área

  • Principais conceitos:
    • – Abstração
    • – Classes – Objetos – Herança
    • – Polimorfismo – Encapsulamento

  • Abstração:
    • – “A abstração é o processo de filtragem de detalhes sem importância do objeto, para que apenas as características 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 objetivos, sua visão.
  • Classes:

  • – É um conjunto de objetos que pode ser definido por propriedades e comportamentos.

  Classe de animais Classes de carros Classe de móveis Classe de frutas

  • Classes:
    • – A definição da classe consiste na definição dos

  atributos (propriedades) e métodos (comportamentos) dos objetos desta classe; – Um atributo é uma característica de uma classe.

  Atributos não apresentam comportamento, eles definem a estrutura da classe;

  • Métodos caracterizam o comportamento de um objeto, e são um meio de acessar, manipular e modificar os atributos de um objeto.
  • Classes de Animais:

  • – Atributos:
    • Possui corpo
    • Possui aparelho digestivo

  • – Comportamentos:
    • Nascem e morrem
    • Respiram • Se alimentam
    • Procriam

  • Classes de Carros:
    • – Comportamentos:
    • – Atributos:

    >Aceleram • Possui motor
  • Freiam • Possui rodas
  • Buzinam

  • Objetos: – Particularização de um elemento de uma classe.

  O cachorro do Alfredo O carro do Diretor A mesa da sala A maça da sobremesa

  • – Diz-se que um objeto é uma instância de uma classe.
  • – Objetos comunicam-se entre si utilizando mensagens.

  • Herança: de absorver características e
    • – Capacidade comportamentos de outra classe. Uma classe herda de outra classe, que é chamada superclasse.
    • – Animais

  • Mamíferos
    • – Cachorro – homem

  • Ave
    • – Beija-Flor
    • 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

  • 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?

  Exercício: implemente as classes Homem, Ave e Beija-Flor.

  • – Pense nos atributos e métodos de cada um
  • – Crie um objeto de cada tipo e chame algum método

  Outro exemplo: Avô, Pai e Filho.

  Avô Pai Pai Pai

Filho 1 Filho Filho

Filho 2

  Avô Pai

  Filho 1 A ausência do comando super().__init__() no construtor faz com que não haja atributos herdados, mas apenas comportamentos

  

Eletrônico

ligado=False ligar() desligar() get_ligado()

  Tablet volume=0 aumentar_volume() diminuir _volume() get_volume() Rádio tocando_música=False tocar_música() parar_música() get_tocando_música()

  

Implemente as classes e os métodos, aplicando o conceito de herança, de acordo

com o diagrama abaixo. Crie instâncias de cada uma das classes e teste os seus

métodos.

  • Polimorfismo:
    • – Significa muitas formas
    • – Ocorre quando uma classe possui um método com o

  mesmo nome e assinatura (número, tipo e ordem de parâmetros) de um método na sua superclasse, mas diferencia-se 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
    • Polimorfismo:

  

Implemente as classes e os métodos, aplicando o conceito de polimorfismo, de

acordo com o diagrama abaixo. Crie instâncias de cada uma das classes e teste os

seus métodos.

  Funcionário calcular_salário(): salário_base-10% nome de imposto salário_base calcular_salário() calcular_salário(): calcular_salário():

mostrar_salário()

  (salário_base-10%) + dias_trabalhados * comissão valor_dia

  Vendedor Freelancer comissão dias_trabalhados valor_dia calcular_salário() calcular_salário()

  • Encapsulamento:
    • – Esconder os detalhes da implementação de um objeto
    • – A capacidade de um objeto possuir uma parte privada, acessível somente através dos métodos definidos na sua interface pública;
    • – Não se deve permitir acesso direto aos atributos de uma classe;

  • Encapsulamento: – Atributos e métodos podem ser públicos ou privados.
    • Público significa que ele pode ser visível/alterável fora da classe que o define.
    • Privado indica que ele só é visível/alterável dentro da classe que o define.

  nome do

  • – Python difere um do outro através do nome, se o atributo/método iniciar com dois traços inferiores ele será considerado privado .
  • – Desta forma, você protege o uso dos atributos/métodos.

  Atributo e método acessados por dentro da classe

  • Exemplo: TV

  Quais atributos?

  • Exemplo: TV

  Quais atributos? Quais métodos?

  • Exemplo: TV
  • Exemplo: TV

  • Exemplo: TV

  #.....

  • Exemplo: TV

  E para fazer uma Televisão 3D?

  • Exemplo: TV

  E para fazer uma Televisão 3D?

  • Atributos de classe:

  o Trabalhamos até aqui com atributos do objeto, lembrando que sempre usamos o pré-fixo self. para utilizá-lo. 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 existirá 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.

  • Exemplo: TV

  Como controlar quantas TVs são construídas?

  • Exemplo: TV

  Como controlar quantas TVs são construídas?

  • Usar o atributo de classe para contar quantas TVs foram criadas.

  Prof. Isac Mendes Lacerda (material original cedido gentilmente pela Professora Janaína Gomide)

  MCG126

  • – Programação de Computadores II

RECENT ACTIVITIES
Autor
Tags

MCG126 – Programação de Computadores II

Livre

Feedback