Executando verificação de segurança...
9

Orientação a Objetos e SOLID - Resumo para discussão

Quando procurei não encontrei nenhum resumo que realmente tivesse me trazido clareza suficiente sobre esses assuntos, trouxe a síntese que eu fiz e que me ajudou a compreendê-los melhor.

Em seguida, um bate-papo breve sobre minha trajetória na programação que pode ajudar quem estiver buscando entender e aplicar esses conhecimentos, e por último alguns vídeos que também me ajudaram.

Síntese

Orientação a Objetos

As formas que aprendi para usar a Orientação à Objetos nas Classes Python:

  1. Associação de Classes
    Uma classe recebe como tipo de dados um objeto de outra classe.
    def metodo(self, objeto_da_outra_classe: Type[OutraClasse]):
  2. Injeção de Dependência
    É uma forma explícita de associação entre as classes fazendo com que a classe dependente só posso ser inicializada com um objeto da classe independente.
    def __init__(self, objeto_da_outra_classe: Type[OutraClasse]):
  3. Herança
    Uma subclasse herda todos os estados e métodos de uma superclasse.
    class SubClasse(SuperClasse):
    Os atributos exigidos para inicialização da superclasse são passados no inicializador da subclasse assim:
    super().__init__(atributo)
  4. Implementação por Interface
    Uma subclasse pode depender de uma classe inteiramente abstrata.
    from abc import ABC, abstractmethod
    class ClasseAbstrataInterface(ABC)
    @abstractmethod
    def metodo(self): pass
  5. Agregação de Classes
    Acontece quando uma classe recebe como tipo de dados uma coleção (pode ser uma lista) de objetos de outras classes.
  6. Composição de Classes
    Acontece quando se instancia objetos de outras classes diretamente na inicialização da subclasse tendo acesso aos métodos das outras classes.

SOLID

  1. Singule Responsability - uma classe deve ter apenas uma responsabilidade e um motivo para ser alterada.
  2. Open/Closed - uma classe deve estar aberta para novas funcionalidades e fechada para alteração.
  3. Liskov Substitution - uma superclasse deve poder ser substituída por uma de suas subclasses.
  4. Interface Segregation - criar interfaces mais específicas ao invés de depender de interfaces mais genéricas.
  5. Dependency Inversion - as classes que implementos os detalhes da aplicação (classes de baixo nível) devem ser subclasses de classes abstratas (interfaces) e as classes que implementam as regras de negócio (classes de alto nível) devem depender dessas classes abstratas.

Bate-papo

Faz um tempo que não apareço por aqui. Sou economista e trabalho com análise e ciências de dados. Do ano passado pra cá, tenho me aventurado diretamente com a programação e com projetos para desenvolver sistemas mais robustos do que os que eu já fiz até o momento.

Estudo cada assunto sozinho com base nas documentações e vídeos conforme minha demanda vai exigindo. Sempre tive a impressão que pro meu caso era mais eficiente do que fazer cursos, mas depois deste episódio, ao perceber que eu tinha uma lacuna grande de conhecimento, fiquei na dúvida.

Desde quando comecei a estudar sobre programação sempre foi com foco na análise e visualização de dados. Porém, comecei a perceber que os sistemas que eu estava desenvolvendo estavam ficados insustentáveis para que eu mesmo desse manutenção e os evoluísse, terceirizar essas tarefas estava praticamente fora de cogitação.

Ainda comecei desenvolver usando Django e achei incrível a produtividade que ele traz. Contudo, percebi que com ele é muito fácil e rápido fazer o básico e genérico mas funcionalidades mais específicas, ao menos pra mim, parecem que ganham um nível de complexidade desnecessário e ficamos com possibilidades relativamente limitadas.

Nesse contexto, decidi dar um tempo e pensar em como eu poderia conseguir ganhar sustentabilidade no que estava desenvolvendo. Iniciei um sideproject de um Bot para o Telegram com dois objetos, primeiro, que futuramente serviria para notificar sobre eventos e receber comandos para os sistemas que eu ainda vou desenvolver.

Segundo e principalmente, fiz a primeira versão dele proceduralmente com a intenção de fazer uma segunda versão usando Orientação a Objetos para que fosse possível que ele evoluísse com uma sustentabilidade mínima. Depois que terminei a segunda versão, algumas fichas caíram.
Primeiro, fiz um “balaio de gato” misturei o paradigma procedural ao orientado, percebi que acabei criando alguns “conceitos abstratos” que quem, porventura, fosse tentar mexer no código posteriormente teria que aprender e seguir. Tornei o sistema mais complexo e, no final das contas, não consegui trazer sustentabilidade e clareza. Por fim, percebi que nesse ritmo eu teria que ter vários anos de experiência para desenvolver uma metodologia minimamente consistente. Foi quando senti na prática a necessidade da arquitetura de software.

Daí, esbarrei numa playlist sobre Arquitetura Limpa do Canal Programador Lhama. Achei fantástica, parecia ser exatamente o que eu precisava e realmente é muito boa, o melhor e mais prático conteúdo sobre o assunto que achei em português no YouTube Clean Architecture em Python (Remake).

No começo, foi tranquilo pra acompanhar, porém minha dificuldade foi aumentando e quando cheguei em cerca de dois terços da playlist caiu a ficha que eu sabia apenas teórica e superficialmente Programação Orientada a Objetos. Percebi que tinha que dar mais um passo atrás.

Por sorte, e mais uma vez pra salvar meu projeto e otimizar meu tempo, surge novamente o Programador Lhama com a Playlist Orientação a Objetos. Com ela finalmente consegui compreender as formas de implementar a Orientação a Objetos em Python e cair a ficha sobre os Princípios SOLID.

Estou fazendo os exercícios da Playlist Dojo: Exercícios em Orientação a Objetos. Para posteriormente retomar sobre Arquitetura Limpa.

Vídeos relevantes

Programação Orientada a Objetos (POO) // Dicionário do Programador
https://www.youtube.com/watch?v=QY0Kdg83orY
DOMINANDO a Programação Orientação a Objetos com PYTHON
https://www.youtube.com/watch?v=yZ83sZUvLVw&t=1611s
SOLID fica FÁCIL com Essas Ilustrações
https://www.youtube.com/watch?v=6SfrO3D4dHM&t=1s
SOLID (O básico para você programar melhor) // Dicionário do Programador
https://www.youtube.com/watch?v=mkx0CdWiPRA

Carregando publicação patrocinada...
1

Excelente artigo. Muito informativo e excelente resumo dos conceitos apresentados.

Acho que seria maneiro ser você escrevesse um artigo para detalhar cada um desses assuntos agora :)

Isso iria fixar ainda mais o conhecimento e trazer mais conteúdo de valor para a plataforma.

2
1

Que artigo, Daniel.

Nunca havia encontrado tantas informações sobre temas em Orientação a Objetos de uma forma tão resumida e didáticamente bem apresentada.

Belo trabalho!!!

0