Orientação a Objetos em Python
Quando começamos a programar em qualquer linguagem de programação, temos que seguir um padrão de escrita de código, essa forma de construir nosso algoritmo é chamado de paradigma.
Existem diversos paradigmas de programação: Estrutural, Procedural, Imperativo, Declarativo, Funcional e Orientado a Objetos. Este último é o que abordaremos neste artigo.
O que é?
A Programação Orientada a Objetos foi conceituada por Alan Kay, que se baseou em conceitos de biologia e matemática, pois fazia parte da formação do Alan. Além de idealizar esta a POO, ele criou a primeira linguagem que implementava a Orientação a Objetos, a linguagem Smalltalk.
A ideia de Kay é trazer para a computação o mundo real, físico, partindo do pressuposto de que tudo no mundo real é um objeto, que interage com outros objetos, e estes podem ser classificados.
Definição
Como tudo em nosso mundo, os objetos precisam ser criados a partir de algo, uma fôrma, uma classe.
Os objetos em nosso mundo possuem características individuais, uma pessoa é identificada por um CPF, RG e nome, estes são seus atributos. Mas estes podem também ter comportamentos, ações, como um controle de TV, que liga, desliga a TV, muda de canal, altera o volume, uma forma, um método deste objeto interagir.
Com isto em mente, já temos os alicerces da OO: Classes, Objetos, Atributos e Métodos. Mas estes conceitos são para construir formar a ideia de POO, mas para considerar que uma linguagem é OO devem ser levados em consideração os pilares deste paradigma: Abstração, Herança, Encapsulamento e Polimorfismo.
Implementação
Uma classe Pessoa em Python:
class Person:
def __init__(self, first_name, last_name, document):
self.first_name = first_name
self.last_name = last_name
self.document = document
def full_name(self):
return f'{self.first_name} {self.last_name}'
Uma vantagem no Python é sua sintaxe muito parecida com a humana, logo, usamos a palavra-chave class
e o nome que queremos dar a nossa classe. Em seguida, definimos o método inicializador (também chamado de construtor, em outras linguagens) que é executado assim que criamos um objeto da classe Pessoa, que recebe os atributos que são atribuídos à instância de Pessoa, por meio do parâmetro self
. Também definimos um método full_name
para retorna o nome completo de uma Pessoa.
class Worker(Person):
def __init__(self, work):
Person().__init__(self)
self.work = work
robert = Person('Robert', 'Perteson', '65778901934')
bill = Worker('Bill', 'Gates', '23490856721', 'Ex Microsoft CEO')
people = (robert, bill)
for person in people:
print(person.full_name())
Temos agora uma classe Trabalhador que herda os mesmos atributos e método de Pessoa, apenas com um novo atributo que é seu ‘trabalho’. Instanciamos ao final dois objetos de cada classe em uma tupla, e iteramos sobre a mesma. Note que acessamos cada valor da tupla e executamos um método que é comum as estes objetos, independente da forma da classe, tendo este método, será executado, isto é polimofismo.
O encapsulamento é basicamente se um dado, seja atributo ou método, deve ser escondido de quem utilizará tal classe. Um dado pode ter um de três modos de acesso: público, privado e protegido. Voltemos a nossa classe Pessoa e Work.
class Person:
def __init__(self, first_name, last_name, document):
self.first_name = first_name
self.last_name = last_name
self._document = document
def full_name(self):
return f'{self.first_name} {self.last_name}'
class Worker(Person):
def __init__(self, work, salary):
Person().__init__(self)
self.work = work
self.__salary = salary
Em Python, usamos uma convenção (um padrão na comunidade e linguagem) que todo método ou atributo com um ‘_’ (underscore) é protegido, com 2 ‘_’ é privado, quando não possui, então é público. Em Pessoa, o ‘documento’ é protegido, acessado apenas pela classe e quem herda ela. Mas o ‘salário’ é acessível apenas pela classe/objeto Trabalhador, logo, privado.
Conclusão
A essência do Python é a Orientação a Objetos, e de longe, é uma das linguagem que implementa de forma mais fácil e compreensível, outra muito legal que também é OO é Ruby, que recomendo dar uma pesquisada. Por fim, espero ter esclarecido este assunto de POO com Python. Até a próxima.
Referências
POO: tudo sobre Programação Orientada a Objetos!
Encapsulation in Python – GeeksforGeeks