Fundamentos de Orientação a Objetos em Python: Classes, Herança e Composição

Mecanismos de Importação de Módulos

Em Python, a organização do código em múltiplos arquivos é fundamental para a manutenção de projetos. Para utilizar classes definidas em outros módulos, existem três abordagens principais de importação:

  • import aviation: Importa o módulo inteiro, exigindo o uso do prefixo do módulo para acessar as classes (ex: aviation.Aircraft).
  • from aviation import Aircraft: Importa uma classe específica diretamente para o namespace atual, simplificando a sintaxe de enstanciação.
  • from aviation import *: Importa todas as classes e funções do módulo. Esta prática deve ser evitada em produção para prevenir conflitos de nomes e tornar as dependências obscuras.

Construção de Classes, Herança e Composição

A orientação a objetos permite modelar entidades e suas interações. A herança possibilita que uma classe derivada herde atributos e métodos de uma classe base, promovendo reutilização de código. Já a composição permite que uma classe contenha instâncias de outras classses como atributos, oferecendo uma alternativa flexível à herança múltipla e reduzindo o acoplamento rígido.

A implementação abaixo demonstra uma classe base, uma classe independente para compor objetos e uma classe derivada que integra ambos os conceitos:

class Aircraft:
    def __init__(self, manufacturer, model, year):
        self.manufacturer = manufacturer
        self.model = model
        self.year = year
        self.flight_hours = 0

    def get_full_description(self):
        return f"{self.year} {self.manufacturer} {self.model}"

    def log_flight_hours(self, hours):
        if hours > 0:
            self.flight_hours += hours
        else:
            print("O registro de horas de voo deve ser um valor positivo.")

class Engine:
    def __init__(self, thrust_capacity=50000):
        self.thrust_capacity = thrust_capacity

    def display_specs(self):
        print(f"Motor com capacidade de empuxo de {self.thrust_capacity} lbs.")

    def calculate_max_altitude(self):
        altitude = 40000 if self.thrust_capacity >= 50000 else 30000
        print(f"Altitude máxima estimada: {altitude} pés.")

class Jet(Aircraft):
    def __init__(self, manufacturer, model, year):
        super().__init__(manufacturer, model, year)
        # Aplicando composição: a classe Jet possui um objeto Engine
        self.propulsion = Engine()

    def display_engine_info(self):
        self.propulsion.display_specs()

Instanciação e Manipulação de Objetos

Após a definição da estrutura, os objetos podem ser instanciados e seus métodos invocados. A composição permite acessar e manipular métodos da classe interna diretamente através do atributo da classe externa, mantendo a coesão do código:

# Instanciando a classe derivada
my_jet = Jet('Boeing', '737 MAX', 2023)

# Utilizando métodos herdados da classe base
print(my_jet.get_full_description())
my_jet.log_flight_hours(150)
print(f"Horas de voo acumuladas: {my_jet.flight_hours}")

# Utilizando métodos que interagem com a classe composta
my_jet.display_engine_info()
my_jet.propulsion.calculate_max_altitude()

Tags: Python orientação-a-objetos Herança composicao modulos

Publicado em 6-16 23:33