-
Notifications
You must be signed in to change notification settings - Fork 1
Classes
No paradigma de programação procedural, ou programação imperativa, as programação acontece através de um conjunto de instruções que mudam o estado das estruturas de dados. Nesse paradigma as instruções, também chamados de rotinas ou funções, e os dados têm uma divisão clara. Por exemplo:
def split_string(text):
'''Essa função divide uma string em uma lista de palavras
'''
lista = []
word = ""
for c in text:
if c == " ":
lista.append(word)
word = ""
else:
word += c
if word: lista.append(word)
return lista
print(split_string("Heaven is a place on Earth with you"))
Na função acima, uma string é passada como parâmetro para uma lista a função que retorna uma lista, onde cada um dos elementos é uma palavra (substrings separadas por espaço), gerando o seguinte output:
>> ["Heaven", "is", 'a', "place", "on", "Earth", "with", "you"]
A programação orientada a objetos se baseia no conceito de objetos, onde cada objeto possui um grupo de características e uma utilidade. Na programação orientada a objetos, as instruções que interagem com os objetos estão contidas (encapsuladas) dentro do próprio objeto.
A implementação da split_string
, pode ser feita dentro da classe str
, assim a chamada da função é transformada em uma chamada de método.
print("Heaven is a place on Earth with you".split())
>> ["Heaven", "is", 'a', "place", "on", "Earth", "with", "you"]
Imagine, por exemplo, um forno. Um forno possui os comandos para ligar o forno, aumentar e diminuir a temperatura e desligar o forno. Enquanto na programação orientada a objetos estas funções seriam como botões presentes no forno, na programação estruturada essas funções seriam controladas de forma externa ao forno. O encapsulamento das funções nos objetos não só facilita na hora da consulta como torna mais intuitiva a construção dessas funções.
Como dito anteriormente, objetos possuem características e funções. Na programação orientada a objetos essas características são os atributos e essa funções são os métodos. De forma simplificada imagine os atributos como sendo variáveis que dizem algo sobre o seu objeto. Assim como os métodos que seriam funções que o seu objeto seria capaz de realizar.
Em Python os objetos pertencem a uma classe. Uma classe representa um molde do seu objeto, isto é, todos os objetos de uma determinada classe se comportam de forma similar. A inicialização de uma nova classe é feita através do palavra reservada class
.
class Pessoa:
pass
O comportamento de métodos e atributos também é definido dentro do contexto da classe. Para determinar a construção da classe usa-se um método especial do Python, o método __init__
, ou método construtor:
class Pessoa:
def __init__(self, nome):
self.nome = nome
No exemplo anterior, a classe Pessoa
possui um método chamado __init__
. O método __init__
determina como acontece o processo de instanciação de um objeto do tipo Pessoa
. Isto é, o que acontece quando um novo objeto do tipo Pessoa
é criado.
No método do exemplo anterior, o método init precisa de um parâmetro, o nome. Este por sua vez é salvo em um atributo do método, o self.nome.
Entenda a palavra self como uma referência ao próprio objeto. A linha de código self.nome = nome
.