image

Access unlimited bootcamps and 650+ courses

50
%OFF
Article image
Fernanda Araujo
Fernanda Araujo19/06/2025 17:41
Share
Savegnago - Lógica de ProgramaçãoRecommended for youSavegnago - Lógica de Programação

Paradigmas de Linguagens de Programação em Python: Python Orientado a Objetos (Part. 06)

  • #Python

A Programação Orientada a Objetos (POO) é muito mais do que uma técnica de codificação: ela representa uma forma de pensar e modelar problemas complexos de forma abstrata, aproximando o código da realidade. Como bem afirma Jaeger (1995), "a tecnologia baseada em objetos é mais do que apenas uma forma de programar", sendo um modo de pensar.

Neste artigo, vamos explorar profundamente o paradigma orientado a objetos com foco na linguagem Python, passando pelos pilares da POO, suas aplicações práticas, tratamento de exceções, e conceitos avançados como metaclasses e testes unitários.

Para ilustrar esse processo, vamos imaginar que somos Nico Robin, a arqueóloga de One Piece, tentando decifrar os antigos Poneglyphs. Assim como um desenvolvedor precisa entender, executar e corrigir seu código, Robin precisa interpretar símbolos, prever falhas e reagir a imprevistos durante a tradução de textos milenares.

Conceitos Fundamentais da POO

Diferente da programação convencional, que se baseia em fluxos sequenciais e estruturas como funções isoladas, a POO organiza o código em torno de objetos — entidades que combinam dados e comportamentos.

Na POO, pensamos nos elementos do sistema como entidades do mundo real: usuários, produtos, sensores, documentos. Isso permite maior clareza, modularidade, reaproveitamento e manutenção do código.

Pilares da Orientação a Objetos

A Programação Orientada a Objetos se apoia em quatro pilares principais:

  • Abstração: foca apenas nos detalhes essenciais, escondendo a complexidade desnecessária.
  • Encapsulamento: protege os dados, expondo apenas o que for necessário.
  • Herança: permite que classes compartilhem comportamentos e características.
  • Polimorfismo: permite múltiplas implementações com a mesma interface.

Classes e Objetos

Uma classe define a estrutura de um objeto. Já um objeto é uma instância dessa estrutura.

python

# Exemplo - Classe de artefato antigo decifrado por Robin
class Poneglyph:
  def __init__(self, localizacao):
      self.localizacao = localizacao


robin_descobriu = Poneglyph("Ilha Ohara")  # Objeto criado

Atributos e Métodos

  • Atributos: são características da classe (nome, idade).
  • Métodos: são comportamentos (falar, andar).
python

# Exemplo - Robin interpretando um Poneglyph
class Poneglyph:
  def __init__(self, conteudo):
      self.conteudo = conteudo


  def traduzir(self):
      return f"Robin está traduzindo: {self.conteudo}"


inscricao = Poneglyph("História do Século Perdido")
print(inscricao.traduzir())

Encapsulamento e Segurança dos Dados

O encapsulamento protege o acesso direto aos dados internos da classe:

python

# Exemplo - Protegendo o conteúdo de um Poneglyph secreto
class RegistroAntigo:
  def __init__(self, texto):
      self.__texto = texto  # atributo privado


  def ler_texto(self):
      return self.__texto


registro = RegistroAntigo("Mensagem sobre os Reis Antigos")
print(registro.ler_texto())

Métodos Acessores (@property)

Permitem o acesso controlado aos atributos:

python

# Exemplo - Controle do valor histórico atribuído a um artefato
class Artefato:
  def __init__(self, valor_historico):
      self._valor_historico = valor_historico


  @property
  def valor(self):
      return self._valor_historico


  @valor.setter
  def valor(self, novo_valor):
      if novo_valor > 0:
          self._valor_historico = novo_valor


artefato = Artefato(1000)
print("Valor atual:", artefato.valor)
artefato.valor = 1500
print("Novo valor:", artefato.valor)

Herança e Polimorfismo

Herança Simples e Múltipla

A herança permite reutilizar código entre classes.

python

# Exemplo - Herança de técnicas de tradução
class LinguagemAntiga:
  def interpretar(self):
      print("Decifrando símbolos genéricos...")


class PoneglyphRaro(LinguagemAntiga):
  def interpretar(self):
      print("Robin traduz símbolos do Século Perdido.")

Polimorfismo de Inclusão e Sobrecarga

  • Inclusão: sobrescreve métodos da superclasse.
  • Sobrecarga: permite múltiplos métodos com o mesmo nome (Python simula via parâmetros opcionais).
python 

# Exemplo - Sobrescrita de método
class Poneglyph:
  def ler(self):
      print("Texto indecifrável.")


class PoneglyphTraduzido(Poneglyph):
  def ler(self):
      print("Robin traduziu: 'O mundo foi governado por um antigo reino.'") 

Técnicas Avançadas em POO

Atributos e Métodos de Classe

# Exemplo - Contagem de artefatos encontrados
class Arqueologa:
  registros = 0  # atributo de classe


  def __init__(self, nome):
      self.nome = nome
      Arqueologa.registros += 1


  @classmethod
  def total_registros(cls):
      return cls.registros 

Métodos Estáticos

python

# Exemplo - Função auxiliar sem vínculo com instância
class FerramentasDeLeitura:
  @staticmethod
  def calcular_relevancia(simbolos):
      return len(simbolos) * 10 

Associação, Agregação e Referência na Memória

  • Associação: relação entre dois objetos.
  • Agregação: relação de “tem um”, mas com independência.
python

# Exemplo - Um pergaminho contendo um fragmento de Poneglyph
class Fragmento:
  pass


class Pergaminho:
  def __init__(self, fragmento):
      self.fragmento = fragmento 

A agregação é importante para manter a coerência e integridade dos dados sem misturar responsabilidades.

Classes Abstratas e Tratamento de Exceções

Classes Abstratas

Impedem a instanciação direta e exigem implementação de métodos:

python

# Exemplo - Classe abstrata para artefatos antigos
from abc import ABC, abstractmethod


class ArtefatoAntigo(ABC):
  @abstractmethod
  def identificar_origem(self):
      pass 

Tratamento de Exceções

python

# Exemplo - Erro ao dividir registros de um Poneglyph
try:
  resultado = 100 / 0
except ZeroDivisionError:
  print("Erro: Robin não pode dividir os registros por zero.")

Exceções Personalizadas

python

# Exemplo - Exceção para tentativas de saque de informação sem autorização
class AcessoNegado(Exception):
  pass


def acessar_segredo(nivel):
  if nivel < 5:
      raise AcessoNegado("Nível de acesso insuficiente para ler este Poneglyph.")

POO além da Teoria: Metaclasses, Design Patterns e Testes

Metaclasses

Permitem alterar a construção das classes:

python

# Exemplo - Criando uma nova estrutura de estudo com metaclasse
class MetaArqueologia(type):
  def __new__(cls, name, bases, dct):
      print(f"Nova classe de estudo criada: {name}")
      return super().__new__(cls, name, bases, dct)


class TraducaoPoneglyph(metaclass=MetaArqueologia):
  pass

Design Patterns

São soluções reutilizáveis para problemas comuns na arquitetura de software. Exemplos em POO:

  • Singleton
  • Factory
  • Observer
  • Strategy

Testes Unitários com unittest

python

# Exemplo - Testando a soma de caracteres interpretados
import unittest


class TesteDecifracao(unittest.TestCase):
  def test_tamanho_texto(self):
      self.assertEqual(len("Raftel"), 6)


if __name__ == "__main__":
  unittest.main()

🔚 Conclusão

A Programação Orientada a Objetos é um pilar essencial para o desenvolvimento moderno, e Python oferece ferramentas completas para explorar esse paradigma em toda sua profundidade — desde os conceitos básicos até aplicações avançadas com metaclasses, hierarquias de exceções e testes automatizados.

Compreender a orientação a objetos em Python é dar um passo decisivo rumo à maturidade como desenvolvedora ou desenvolvedor de software, capaz de modelar sistemas reais com clareza, segurança e manutenção eficiente.

Assim como Robin interpreta Poneglyphs para revelar os segredos do mundo antigo, dominar POO é decifrar a arquitetura invisível dos programas modernos — tornando cada linha de código uma chave para sistemas mais robustos, reutilizáveis e elegantes.

👉 No próximo artigo, vamos explorar Python Imperativo...

image

Share
Recommended for you
Suzano - Python Developer
BairesDev - Machine Learning Practitioner
Santander - Cibersegurança #2
Comments (2)
DIO Community
DIO Community - 23/06/2025 14:54

Fernanda, seu artigo sobre Programação Orientada a Objetos em Python está incrível! Você explicou de forma clara e envolvente os pilares fundamentais da POO, como abstração, encapsulamento, herança e polimorfismo, tornando fácil para qualquer pessoa, seja iniciante ou mais experiente, entender esses conceitos essenciais. Eu gostei especialmente dos exemplos práticos, que ajudam a visualizar como aplicar esses princípios no código.

Além disso, você tocou em aspectos mais avançados, como metaclasses, atributos e métodos de classe, e técnicas de tratamento de exceções, que são áreas importantes para quem deseja se aprofundar na POO. Sua abordagem equilibrada entre teoria e prática foi muito bem feita, e é algo que realmente facilita o aprendizado.

Quando você está desenvolvendo um sistema mais complexo em Python, como você decide entre usar herança simples ou múltipla? Quais seriam as vantagens e desvantagens de cada uma dessas abordagens no contexto de design de sistemas?

Otávio Guedes
Otávio Guedes - 19/06/2025 21:14

Adorei o seu artigo Fernanda. PARABÉNS!! vai ajudar muito na área de back-end quando quiser um código mais limpo ;)

Recommended for youSavegnago - Lógica de Programação