• Nenhum resultado encontrado

MCG126 – Programação de Computadores II

N/A
N/A
Protected

Academic year: 2019

Share "MCG126 – Programação de Computadores II"

Copied!
96
0
0

Texto

(1)

MCG126

Programação de

Computadores II

Prof. Isac Mendes Lacerda

(2)
(3)

Programação orientada 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

(4)

Programação orientada a objetos

Até agora... Usamos o paradigma de

programação

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.

(5)

Programação orientada a objetos

Na

Programação Orientada a Objetos (POO)

, busca-se

compreender um problema como uma

coleção de

objetos

que interagem por mensagens. Caracterizada

por:

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

.

Animal

(6)

Programação O. Objetos

Programação

Estruturada

Programação orientada a objetos

(7)

Programação O. Objetos

Programação

Estruturada

Programação orientada a objetos

(8)

Mudança de perspectiva

Até agora...

Escrevemos funções e chamamos usando uma sintaxe

como:

calculeArea(círculo)

(9)

Mudança de perspectiva

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

(10)

Mudança de perspectiva

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

(11)
(12)

Mudança de perspectiva

As funcionalidades de um objeto do mundo real tendem

a ser intrínsecas a esse objeto.

(13)

Objetos

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

(14)

Classe: CARRO

Objetos

Exemplo: Carro

Corcel II do meu avô:

Atributos:

Cor: marrom Fabricante: Ford Modelo: Corcel II

(15)

Classes definidas pelo usuário

Em muitos casos precisaremos

criar objetos

de dados

relacionados ao problema

trabalhado

(16)

Classes definidas pelo usuário

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

(17)

Classes definidas pelo usuário

Exemplo

: considere o conceito de um

ponto matemático

.

(18)

Classes definidas pelo usuário

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

(19)

Classes definidas pelo usuário

(20)

Classes definidas pelo usuário

(21)

Classes definidas pelo usuário

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

(22)
(23)

Classes definidas pelo usuário

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.

(24)
(25)

Classes definidas pelo usuário

(26)

Classes definidas pelo usuário

• 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

(27)

Classes definidas pelo usuário

• 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

(28)

Melhorando o nosso construtor

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

(29)
(30)

Adicionando outros métodos

• 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

(31)

Adicionando outros métodos

• 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

(32)
(33)

Adicionando outros métodos

• Vamos adicionar outro método, distanciaDaOrigem

(34)

Adicionando outros métodos

(35)

Objetos como argumentos e parâmetros

• Podemos passar um objeto como um argumento da forma habitual (função comum)

• Observe a função distancia que envolve objetos Ponto

(36)

Conversão de um objeto para um string

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

(37)

Conversão de um objeto para um string

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

(38)

Método especial, chamado quando print() é executada

(39)

Conversão de um objeto para um string

• 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

(40)

Instâncias e Valores de Retorno

• 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

(41)

Instâncias e Valores de Retorno

(42)

Alguns nomes...

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

(43)

Alguns nomes...

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

(44)

Alguns nomes...

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.

(45)

Exercício

1) Implemente a classe ao lado, considerando que seus atributos

devem ser informados pelo usuário. O método getX ()deve imprimir a coord. de X, getY() deve imprimir a coord. de Y, distânciaOrigem() deve calcular a distância desse ponto para a origem e reflexoX() deve retornar um novo ponto que é a reflexão do ponto no eixo x. Por exemplo, o

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

(46)

Exercício

1) Altere o programa anterior de

modo que dois pares de coordenadas sejam informados pelo usuário (x1, y1, x2, y2).Com isso, adicione o

(47)

Exercício

1) Crie a classe para representar frações. Quais atributos são

necessários? Os atributos devem ser informados pelo usuário. Implemente pelo menos dois métodos.

FRAÇÃO

Atributos:

????

(48)

Exercício

1) Crie a classe Televisão com os respectivos atributos e métodos. A mudança de canais deve estar

limitada entre 2 e 10.

(49)

Exercício

Início

Escreva um programa Orientado a Objetos que corresponda ao fluxograma abaixo (comumente usado para a programação

estruturada):

Obter altura do retângulo

Obter base do retângulo

Calcular área do retângulo

(50)

Frações

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

(51)

Frações

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

(52)

Frações

(53)

Frações

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

(54)
(55)

Objetos são mutáveis

• Nós podemos mudar o estado de um objeto fazendo uma atribuição a uma das variáveis da instância.

(56)

Exercício

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

(57)

Orientação a Objetos

Principais conceitos:

– Abstração

– Classes

– Objetos

– Herança

– Polimorfismo

(58)

Orientação a Objetos

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)

(59)

Orientação a Objetos

Classes

:

É um conjunto de objetos que pode ser definido por

propriedades e comportamentos.

Classe de animais

Classes de carros

Classe de móveis

(60)

Orientação a Objetos

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

(61)

Orientação a Objetos

Classes de Animais

:

Atributos:

• Possui corpo

• Possui aparelho digestivo

Comportamentos:

• Nascem e morrem

• Respiram

• Se alimentam

(62)

Orientação a Objetos

Classes de Carros

:

Atributos:

• Possui motor

• Possui rodas

Comportamentos:

• Aceleram

• Freiam

(63)

Orientação a Objetos

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.

(64)
(65)

Orientação a Objetos

Herança

:

Capacidade

de

absorver

características

e

comportamentos de outra classe. Uma classe herda

de outra classe, que é chamada superclasse.

(66)

Orientação a Objetos

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

(67)

Orientação a Objetos (herança)

Herança

:

– Vamos implementar a classe Animal, Mamífero e Cachorro

– Quais atributos devem ter?

– Quais atributos um mamífero tem a mais?

(68)
(69)
(70)
(71)
(72)

Exercício

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

– Pense nos atributos e métodos de cada um

(73)

Orientação a Objetos (herança)

Outro exemplo: Avô, Pai e Filho.

Avô

Pai

Filho 1

Filho 2

Pai

Filho

Pai

(74)

Avô

Pai

Filho 1

A ausência do comando

super().__init__() no

construtor faz com que não haja atributos herdados, mas

(75)

Exercício (herança)

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()

(76)

Orientação a Objetos

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

(77)

Orientação a Objetos

(78)

Exercício (polimorfismo)

Funcionário nome salário_base calcular_salário() mostrar_salário() Vendedor comissão Freelancer dias_trabalhados

(79)

Orientação a Objetos

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;

(80)

Orientação a Objetos

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.

– Python difere um do outro através do nome, se o nome do atributo/método iniciar com dois traços inferiores ele será considerado privado.

(81)
(82)
(83)

Método público e privado

(84)

Orientação a Objetos

Exemplo: TV

(85)

Orientação a Objetos

Exemplo: TV

Quais atributos?

(86)

Orientação a Objetos

(87)

Orientação a Objetos

(88)

Orientação a Objetos

(89)

Orientação a Objetos

(90)

Orientação a Objetos

Exemplo: TV

(91)

Orientação a Objetos

Exemplo: TV

(92)

Orientação a Objetos

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.

(93)

Orientação a Objetos

Exemplo: TV

(94)

Orientação a Objetos

Exemplo: TV

Como controlar quantas TVs são construídas?

(95)
(96)

MCG126

Programação de

Computadores II

Prof. Isac Mendes Lacerda

Referências

Documentos relacionados

Ainda segundo Gil (2002), como a revisão bibliográfica esclarece os pressupostos teóricos que dão fundamentação à pesquisa e às contribuições oferecidas por

i) Anexo V – Termo de Autorização de divulgação de imagem e voz de estudante em ambiente virtual de estudos adotados pelo IFMA;.. Para os classificados para as vagas pelo Sistema

Mas, se a experiência não tiver, além do seu caráter subjetivo, uma natureza objetiva que possa ser apreendida de diversos pontos de vista, então como se poderia supor que um

Mas se a experiência não tem, além do seu carácter subjectivo, uma natureza objectiva que possa ser apreendida de muitos pontos de vista diferentes, como se poderá

estatuto dos factos acerca de como é ser um humano, ou um morcego, ou um marciano, parece que estes são factos que corporizam um ponto de vista particular. O ponto

Segundo Kaplan e Anderson (2007, p.9), o modelo “simplifica o processo de custeio, ao eliminar a necessidade de pesquisas e de entrevistas com os empregados, para a alocação dos

Se o incumprimento diz respeito a não-pagamento da renda em relação a um contrato de Arrendamento de 6 meses ou mais, deve ser emitido um aviso, informando o inquilino que está

Os parâmetros devem respeitar as regras de conversão para data (mês entre 1 e 12, etc.), sendo year, month e day obrigatórios.... Classe datetime