A escolha da linguagem de programação correta é uma parte crucial de qualquer projeto, e pode levar a um desenvolvimento fluido e agradável ou a um pesadelo completo. Portanto, seria melhor se você usasse a linguagem mais adequada para seu caso de uso.
Essa é a principal razão para aprender programação orientada a objetos em Python, que é também uma das linguagens de programação mais populares.
Um exemplo de programa Python
Antes de aprofundar no assunto, vamos fazer uma pergunta: você já escreveu um programa Python como o que está abaixo?
secret_number = 20
while True:
number = input('Guess the number: ')
try:
number = int(number)
except:
print('Sorry that is not a number')
continue
if number != secret_number:
if number secret_number:
print(number, 'is greater than the secret number')
elif number secret_number:
print(number, 'is less than the secret number')
else:
print('You guessed the number:', secret_number)
break
Este código é um simples adivinhador de números. Tente copiá-lo em um arquivo Python e executá-lo em seu sistema. Ele cumpre perfeitamente seu propósito.
Mas aí vem um enorme problema: e se lhe pedíssemos para implementar um novo recurso? Poderia ser algo simples – por exemplo:
“Se a entrada for um múltiplo do número secreto, dê uma dica ao usuário”.
O programa se tornaria rapidamente complexo e pesado à medida que você aumentasse o número de características e, portanto, o número total de condicionais aninhados.
É exatamente isso que a programação orientada a objetos tenta resolver.
Requisitos para aprender Programação orientada a objetos Python
Antes de entrar na programação orientada a objetos, recomendamos fortemente que você tenha uma compreensão firme dos conceitos básicos de Python.
Classificar tópicos considerados “básicos” pode ser difícil. Por causa disso, projetamos uma checklist com todos os principais conceitos necessários para aprender programação orientada a objetos em Python.
Variável: Nome simbólico que aponta para um objeto específico (veremos o que os objetos significam através do artigo).
Operadores aritméticos: Adição (+), subtração (-), multiplicação (*), divisão (/), divisão inteira (//), modulo (%).
Tipos de dados incorporados: Numéricos (inteiros, flutuadores, complexos), Seqüências (strings, listas, tuplas), Booleanos (True, False), Dicionários, e Conjuntos.
Expressões booleanas: Expressões em que o resultado é True ou False.
Condicional: Avalia uma expressão booleana e faz algum processo dependendo do resultado. Manipulado por declarações if/else.
Loop: Execução repetida de blocos de código. Pode ser um loop for ou while.
Funções: Bloco de código organizado e reutilizável. Você os cria com a palavra-chave def.
Argumentos: Objetos passados para uma função. Por exemplo: sum([1, 2, 4])
Execute um script Python: Abra um terminal ou uma linha de comando e digite “python nome do arquivo”.
Abra uma shell Python: Abra um terminal e digite python ou python3, dependendo do seu sistema.
Agora que você tem estes conceitos cristalinos, você pode avançar com a compreensão da programação orientada a objetos.
O que é Programação Orientada a Objetos em Python?
A Programação Orientada a Objetos (OOP) é um paradigma de programação no qual podemos pensar em problemas complexos como objetos.
Um paradigma é uma teoria que fornece a base para a solução de problemas.
Portanto, quando falamos de OOP, estamos nos referindo a um conjunto de conceitos e padrões que usamos para resolver problemas com objetos.
Um objeto em Python é uma única coleção de dados (atributos) e comportamento (métodos). Você pode pensar em objetos como coisas reais ao seu redor. Por exemplo, considere as calculadoras:
Como você pode notar, os dados (atributos) são sempre substantivos, enquanto os comportamentos (método) são sempre verbos.
Esta compartimentação é o conceito central da Programação Orientada a Objetos. Você constrói objetos que armazenam dados e contêm tipos específicos de funcionalidade.
Por que usamos programação orientada a objetos em Python?
OOP permite que você crie um software seguro e confiável. Muitas estruturas Python e bibliotecas usam este paradigma para construir sua base de código. Alguns exemplos são Django, Kivy, pandas, NumPy, e TensorFlow.
Vejamos as principais vantagens de usar a orientação de objetos Python.
Vantagens da orientação a objetos Python
As seguintes razões farão com que você opte pelo uso de programação orientada a objetos em Python.
Todas as Linguagens de Programação Moderna usam orientação a objetos
Este paradigma é independente do idioma. Se você aprender OOP em Python, você será capaz de usá-lo no seguinte:
Java
PHP (certifique-se de ler a comparação entre PHP e Python)
Ruby
Javascript
C#
Kotlin
Todos essas linguagens ou são nativamente orientados a objetos ou incluem opções de funcionalidade orientada a objetos. Se você quiser aprender qualquer uma delas após Python, será mais fácil – você encontrará muitas semelhanças entre as linguagens que trabalham com objetos.
Programação orientada a objetos permite que você codifique mais rápido
Codificar mais rápido não significa escrever menos linhas de código. Significa que você pode implementar mais recursos em menos tempo, sem comprometer a estabilidade de um projeto.
A programação orientada a objetos permite a reutilização do código através da implementação da abstração. Este princípio torna seu código mais conciso e legível.
Como você deve saber, os programadores passam muito mais tempo lendo o código do que escrevendo-o. É a razão pela qual a legibilidade é sempre mais importante do que obter recursos o mais rápido possível.
Você verá mais sobre o princípio da abstração mais tarde.
Orientação a objetos ajuda você a evitar o código Spaghetti
Você se lembra do programa de adivinhação de números no início deste artigo?
Se você continuar acrescentando recursos, você terá muitas declarações if aninhados no futuro. Este emaranhado de infinitas linhas de código é chamado de código spaghetti, e você deve evitá-lo o máximo possível.
Orientação a objetos nos dá a possibilidade de comprimir toda a lógica nos objetos, evitando assim longos trechos de “if” aninhados.
Orientação a objetos melhora sua análise de qualquer situação
Uma vez que você tenha alguma experiência com OOP, você será capaz de pensar em problemas como objetos pequenos e específicos.
Este entendimento leva a uma rápida inicialização do projeto.
Programação Estruturada vs Programação Orientada a Objetos
A programação estruturada é o paradigma mais utilizado pelos iniciantes porque é a maneira mais simples de construir um pequeno programa.
Envolve a execução sequencial de um programa Python. Isso significa que você está dando ao computador uma lista de tarefas e depois executando-as de cima para baixo.
Vamos ver um exemplo de programação estruturada com um programa de cafeteria.
small = 2
regular = 5
big = 6
user_budget = input('What is your budget? ')
try:
user_budget = int(user_budget)
except:
print('Please enter a number')
exit()
if user_budget 0:
if user_budget = big:
print('You can afford the big coffee')
if user_budget == big:
print('It\'s complete')
else:
print('Your change is', user_budget - big)
elif user_budget == regular:
print('You can afford the regular coffee')
print('It\'s complete')
elif user_budget = small:
print('You can buy the small coffee')
if user_budget == small:
print('It\'s complete')
else:
print('Your change is', user_budget - small)
O código acima age como um vendedor de café. Ele lhe pedirá um orçamento e então “venderá” o maior café que você puder comprar.
Tente rodá-lo no terminal. Ele executará passo a passo, dependendo da sua entrada.
Este código funciona perfeitamente, mas temos três problemas:
Tem uma lógica muito repetida.
Utiliza muitos condicionamentos if.
Vai ser difícil ler e modificar.
A orientação a objetos foi inventado como uma solução para todos esses problemas.
Vamos ver o programa acima implementado com a orientação a objetos. Não se preocupe se você ainda não o entendeu. É apenas para comparar programação estruturada e programação orientada a objetos.
class Coffee:
# Constructor
def __init__(self, name, price):
self.name = name
self.price = float(price)
def check_budget(self, budget):
# Check if the budget is valid
if not isinstance(budget, (int, float)):
print('Enter float or int')
exit()
if budget 0:
print('Sorry you don\'t have money')
exit()
def get_change(self, budget):
return budget - self.price
def sell(self, budget):
self.check_budget(budget)
if budget = self.price:
print(f'You can buy the {self.name} coffee')
if budget == self.price:
print('It\'s complete')
else:
print(f'Here is your change {self.get_change(budget)}$')
exit('Thanks for your transaction')
Nota: Todos os conceitos a seguir serão explicados mais profundamente através do artigo.
O código acima representa uma classe chamada “Coffee”. Ele tem dois atributos – “nome” e “preço” – e ambos são utilizados nos métodos. O método primário é “vender”, que processa toda a lógica necessária para completar o processo de venda.
Se você tentar administrar essa classe, não obterá nenhum resultado. Isso ocorre principalmente porque estamos apenas declarando o “modelo” para os cafés, não os cafés em si.
Vamos implementar essa classe com o seguinte código:
small = Coffee('Small', 2)
regular = Coffee('Regular', 5)
big = Coffee('Big', 6)
try:
user_budget = float(input('What is your budget? '))
except ValueError:
exit('Please enter a number')
for coffee in [big, regular, small]:
coffee.sell(user_budget)
Aqui estamos fazendo instâncias, ou objetos de café, da classe “Coffee”, chamando então o método “vender” de cada café até que o usuário possa pagar qualquer opção.
Obteremos o mesmo resultado com ambas as abordagens, mas podemos estender a funcionalidade do programa muito melhor com o OOP.
Abaixo está uma tabela comparando a programação orientada a objetos e a programação estruturada:
OOP Structured Programming
Mais fácil de manter Difícil de manter
Não se repita (DRY) Código repetido em muitos lugares
Pequenos trechos de código reutilizados em muitos lugares Uma grande quantidade de código em poucos lugares
Abordagem por objetos Abordagem por código de bloco
Mais fácil de depurar Mais difícil de depurar
Grande curva de aprendizagem Curva de aprendizagem mais simples
Utilizado em grandes projetos Otimizado para programas simples
Para concluir a comparação de paradigmas:
Nenhum dos dois paradigmas é perfeito (o OOP pode ser esmagador para ser usado em projetos simples).
Estas são apenas duas maneiras de resolver um problema; existem outras por aí.
Orientação a objetos é usado em grandes bases de código, enquanto a programação estruturada é principalmente para projetos simples.
Vamos passar a objetos embutidos em Python.
Tudo é um objeto em Python
Vamos lhe contar um segredo: você tem usado o OOP o tempo todo sem se dar conta.
Mesmo quando se usa outros paradigmas em Python, ainda se usa objetos para fazer quase tudo.
Isso porque, em Python, tudo é um objeto.
Lembre-se da definição de objeto: Um objeto em Python é uma única coleção de dados (atributos) e comportamento (métodos).
Isso corresponde a qualquer tipo de dado em Python.
Uma string é uma coleção de dados (caracteres) e comportamentos (upper(), lower(), etc.). O mesmo se aplica a inteiros, flutuante, booleanos, listas e dicionários.
Antes de continuar, vamos rever o significado dos atributos e métodos.
Conclusão
A programação orientada a objetos é um paradigma no qual resolvemos problemas pensando neles como objetos. Se você entende Python OOP, você também pode aplicá-lo facilmente em linguagens como Java, PHP, Javascript, e C#.
Neste artigo, você tomou conhecimento:
O conceito de orientação a objetos em Python
Vantagens da programação orientada a objetos sobre a programação estruturada
Noções básicas de programação orientada a objetos em Python
Conceito de classes e como utilizá-las no Python
O construtor de uma classe em Python
Métodos e atributos em Python
Os quatro pilares do OOP
Implementar abstraction, inheritance e polimorfismo em um projeto
O Avance Network é uma comunidade fácil de usar que fornece segurança de primeira e não requer muito conhecimento técnico. Com uma conta, você pode proteger sua comunicação e seus dispositivos. O Avance Network não mantém registros de seus dados; portanto, você pode ter certeza de que tudo o que sai do seu dispositivo chega ao outro lado sem inspeção.