Programação Orientada a Objetos em Python
Diego Silveira Costa Nascimento
Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte
[email protected] 23 de junho de 2017
Ementa do Curso
1 Introdução
2 Abstração
3 Encapsulamento
4 Herança
5 Polimorfismo
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 2 / 30
Ementa do Curso
1 Introdução
2 Abstração
3 Encapsulamento
4 Herança
5 Polimorfismo
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 3 / 30
Motivações
O desenvolvimento de aplicações de software estão cada vez mais
complexas;
Cresceram as demandas por metodologias que pudessem abstrair e
modularizar as estruturas básicas de programas; e
A maioria das linguagens de programação suportam orientação a
objetos: Haskell, Java, C++, Python, PHP, Ruby, Pascal, entre
outras.
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 4 / 30
História
Em 1967, Kristen Nygaard e Ole-Johan Dahl, do Centro Norueguês de
Computação em Oslo, desenvolveram a linguagem Simula 67 que
introduzia os primeiros conceitos de orientação a objetos;
Em 1970, Alan Kay, Dan Ingalls e Adele Goldberg, do Centro de
Pesquisa da Xerox, desenvolveram a linguagem totalmente orientada a
objetos;
Em 1979–1983, Bjarne Stroustrup, no laboratório da AT & T,
desenvolveu a linguagem de programação C++, uma evolução da
linguagem C; e
Maior divulgação a partir de 1986 no primeiro workshop
“Object-Oriented Programming Languages, Systems and Applications”.
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 5 / 30
Principais Vantagens
Aumento de produtividade;
Reúso de código;
Redução das linhas de código programadas;
Separação de responsabilidades;
Componentização;
Maior flexibilidade do sistema; e
Facilidade na manutenção.
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 6 / 30
Objetos
É a metáfora para se compreender a tecnologia orientada a objetos;
Estamos rodeados por objetos: mesa, carro, livro, pessoa, etc; e
Os objetos do mundo real têm duas características em comum:
Estado – representa as propriedades (nome, peso, altura, cor, etc.); e
Comportamento – representa ações (andar, falar, calcular, etc.).
Ilustações
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 7 / 30
Orientação a Objetos
Definição
É um paradigma para o desenvolvimento de software que basea-se na
utilização de componentes individuais (objetos) que colaboram para
construir sistemas mais complexos.
A colaboração entre os objetos é feita através do envio de mensagens;
Descreve uma série de técnicas para estruturar soluções para
problemas computacionais; e
É um paradigma de programação no qual um programa é estruturado
em objetos.
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 8 / 30
Os Quatros Pilares
1 Abstração;
2 Encapsulamento;
3 Herança; e
4 Polimorfismo.
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 9 / 30
Ementa do Curso
1 Introdução
2 Abstração
3 Encapsulamento
4 Herança
5 Polimorfismo
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 10 / 30
Classes
A estrutura fundamental para definir novos objetos é a classe; e
Uma classe é definida em código-fonte.
Ilustração
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 11 / 30
Classe em Python
Estrutura
class nome_da_classe:
atributos
construtor
métodos
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 12 / 30
Demonstração de Classe
Exemplo
class Conta :
numero = None
saldo = None
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 13 / 30
Instância
Uma instância é um objeto criado com base em uma classe definida;
Classe é apenas uma estrutura, que especifica objetos, mas que não
pode ser utilizada diretamente;
Instância representa o objeto concretizado a partir de uma classe;
Uma instância possui um ciclo de vida:
Criada;
Manipulada; e
Destruída.
Estrutura
variável = Classe()
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 14 / 30
Demonstração de Instância
Exemplo
conta = Conta ()
conta . numero = 1
conta . saldo = 10
print ( conta . numero )
print ( conta . saldo )
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 15 / 30
Construtor
Determina que ações devem ser executadas quando da criação de um
objeto; e
Pode possuir ou não parâmetros.
Estrutura
def __init__(self,parâmetros):
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 16 / 30
Demonstração de Construtor
Exemplo
class Conta :
def __init__ ( self , numero ):
self . numero = numero
self . saldo = 0.0
conta = Conta (1)
print ( conta . numero )
print ( conta . saldo )
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 17 / 30
Métodos
Representam os comportamentos de uma classe;
Premitem que acessemos os atributos, tanto para recuperar os valores,
como para alterá-los caso necessário;
Podem retornam ou não algum valor; e
Podem possuir ou não parâmetros.
Estrutura
def nome_do_método(self,parâmetros):
Importante
O parâmetro self é obrigatório.
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 18 / 30
Demonstração de Métodos
Exemplo
class Conta :
def __init__ ( self , numero ):
self . numero = numero
self . saldo = 0.0
def c on su ltar_saldo ( self ):
return self . saldo
def creditar ( self , valor ):
self . saldo += valor
def debitar ( self , valor ):
self . saldo -= valor
def transferir ( self , conta , valor ):
self . saldo -= valor
conta . saldo += valor
conta1 = Conta (1)
conta1 . creditar (10)
conta2 = Conta (2)
conta2 . creditar (5)
print ( conta1 . consultar_saldo ())
print ( conta2 . consultar_saldo ())
conta1 . transferir ( conta2 ,5)
print ( conta1 . consultar_saldo ())
print ( conta2 . consultar_saldo ())
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 19 / 30
Ementa do Curso
1 Introdução
2 Abstração
3 Encapsulamento
4 Herança
5 Polimorfismo
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 20 / 30
Encapsulamento
Consiste em separar os aspectos externos de um objeto dos detalhes
internos de implementação;
Evita que dados específicos de uma aplicação possa ser acessado
diretamente; e
Protege os atributos ou métodos de uma classe.
Ilustração
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 21 / 30
Modificadores de Acesso
Em Python, existem dois tipos de modificadores de acesso para
atributos e métodos:
Público; ou
Privado.
Atributos ou métodos iniciados por dois sublinhados são privados e
todas as outras formas são públicas.
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 22 / 30
Demonstração de Encapsulamento
Exemplo
class Conta :
def __init__ ( self , numero ):
self . __numero = numero
self . __saldo = 0.0
def c on su ltar_saldo ( self ):
return self . __saldo
def creditar ( self , valor ):
self . __saldo += valor
def debitar ( self , valor ):
self . __saldo -= valor
def transferir ( self , conta , valor ):
self . __saldo -= valor
conta . __saldo += valor
conta = Conta (1)
conta . creditar (100)
conta . __saldo = 200.0 # N ã o é poss í vel alterar o saldo da conta
print ( conta . c onsultar_saldo ())
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 23 / 30
Ementa do Curso
1 Introdução
2 Abstração
3 Encapsulamento
4 Herança
5 Polimorfismo
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 24 / 30
Herança
É uma forma de abstração utilizada na orientação a objetos;
Pode ser vista como um nível de abstração acima da encontrada entre
classes e objetos;
Na herança, classes semelhantes são agrupadas em hierarquias;
Cada nível de uma hierarquia pode ser visto como um nível de
abstração;
Cada classe em um nível da hierarquia herda as características das
classes nos níveis acima;
É uma forma simples de promover reuso através de uma generalização;
Facilita o compartilhamento de comportamento comum entre um
conjunto de classes semelhantes; e
As diferenças ou variações de uma classe em particular podem ser
organizadas de forma mais clara.
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 25 / 30
Herança
Estrutura
class nome_da_classe(classe_pai_1, classe_pai_2, classe_pai_n):
atributos
métodos
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 26 / 30
Demonstração de Herança
Exemplo
class Poupanca ( Conta ):
def __init__ ( self , numero ):
super (). __init__ ( numero )
self . __rendimento = 0.0
def c o n s u l t a r _ r e n d i m e n t o ( self ):
return self . __rendimento
def g e r a r _rendimento ( self , taxa ):
self . __rendimento += super (). consultar_saldo () * taxa / 100
conta = Poupanca (1)
conta . creditar (200.0)
conta . g e r a r _ r endimento (10)
print ( conta . c onsultar_saldo ())
print ( conta . c o n s u l t a r _ r e n d i m e n t o ())
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 27 / 30
Ementa do Curso
1 Introdução
2 Abstração
3 Encapsulamento
4 Herança
5 Polimorfismo
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 28 / 30
Polimorfismo
É originário do grego e significa “muitas formas” (poli = muitas,
morphos = formas);
Indica a capacidade de abstrair várias implementações diferentes em
uma única interface;
É o princípio pelo qual duas ou mais classes derivadas de uma mesma
superclasse podem invocar métodos que têm a mesma identificação
(assinatura) mas comportamentos distintos; e
Quando polimorfismo está sendo utilizado, o comportamento que será
adotado por um método só será definido durante a execução.
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 29 / 30
Demonstração de Polimorfismo
Exemplo
class Poupanca ( Conta ):
def __init__ ( self , numero ):
super (). __init__ ( numero )
self . __rendimento = 0.0
def c o n s u l t a r _ r e n d i m e n t o ( self ):
return self . __rendimento
def g e r a r _rendimento ( self , taxa ):
self . __rendimento += super (). consultar_saldo () * taxa / 100
def c on su ltar_saldo ( self ):
return super (). consultar_saldo () + self . __rendimento
conta = Poupanca (1)
conta . creditar (200.0)
conta . g e r a r _ r endimento (5)
print ( conta . c onsultar_saldo ())
Diego S. C. Nascimento (IFRN) Programação Orientada a Objetos 23 de junho de 2017 30 / 30