Introdução
Bem-vindo ao ano de 2100, onde a humanidade alcançou as estrelas e estabeleceu prósperas cidades espaciais entre o cosmos. Neste cenário futurista, você é um Arquiteto de Cidades Espaciais pioneiro, encarregado de criar soluções inovadoras para se adaptar às necessidades em constante evolução dessas metrópoles celestiais.
Como arquiteto responsável por projetar blocos de construção robustos de uma cidade espacial, você precisará empregar o conceito avançado de polimorfismo (polymorphism). Este princípio de programação permitirá que suas criações interajam e se comuniquem perfeitamente com vários sistemas da cidade espacial usando uma interface comum, apesar de suas diferenças subjacentes.
Seu objetivo neste laboratório é aproveitar o poder do polimorfismo Python para criar código flexível e sustentável para os componentes de infraestrutura da cidade. Através disso, você garantirá o crescimento e a adaptabilidade da cidade pelos séculos vindouros. Prepare-se para estar na vanguarda do desenvolvimento urbano espacial, arquiteto!
Entendendo o Polimorfismo em Python
Nesta etapa, você explorará os fundamentos do polimorfismo Python. O polimorfismo nos permite definir métodos na classe filha com o mesmo nome definido em sua classe pai. Como resultado, a classe filha herda suas propriedades e comportamentos. No entanto, se você precisar fazer certos ajustes ou adições, o polimorfismo permite alterações sem alterar a estrutura da classe pai.
Comece criando uma classe base que represente a interface para interagir com diferentes módulos do sistema da cidade.
Em seguida, adicione o seguinte conteúdo ao seu ~/project/infrastructure.py:
## infrastructure.py
class CitySystem:
def power_on(self):
raise NotImplementedError("Subclass must implement this abstract method")
class TransportationSystem(CitySystem):
def power_on(self):
print("Transportation System is now activated.")
class WasteManagementSystem(CitySystem):
def power_on(self):
print("Waste Management System is now activated.")
## This function represents the city initialization sequence
def initiate_city_systems(systems):
for system in systems:
system.power_on()
## Let’s see polymorphism in action
if __name__ == "__main__":
city_systems = [TransportationSystem(), WasteManagementSystem()]
initiate_city_systems(city_systems)
Para testar se os sistemas iniciam corretamente com polimorfismo, execute o seguinte comando:
python3 ~/project/infrastructure.py
Você deve ver a saída indicando que tanto o Sistema de Transporte quanto o Sistema de Gerenciamento de Resíduos foram ativados:
Transportation System is now activated.
Waste Management System is now activated.
Adicionando Novos Sistemas
Agora que você entende como o polimorfismo funciona, é hora de expandir a funcionalidade da nossa cidade espacial. Sua tarefa é adicionar um novo sistema para Alocação de Recursos (ResourceAllocation) sem interromper a base de código existente.
No mesmo arquivo infrastructure.py, adicione uma nova classe chamada ResourceAllocationSystem com seu próprio método power_on que imprime uma mensagem única quando ativado.
class ResourceAllocationSystem(CitySystem):
def power_on(self):
print("Resource Allocation System is now activated.")
Não se esqueça de atualizar o array city_systems e incluir uma instância do recém-criado ResourceAllocationSystem, e então testar a sequência de inicialização. A etapa final é executar o script:
python3 ~/project/infrastructure.py
As informações abaixo devem ser exibidas no seu terminal:
Transportation System is now activated.
Waste Management System is now activated.
Resource Allocation System is now activated.
Resumo
Neste laboratório, aventuramo-nos no reino do Polimorfismo Python, descobrindo seu papel vital na criação de estruturas de código versáteis e sustentáveis para aplicações complexas, como a infraestrutura de uma cidade espacial futurista. Começamos com conceitos básicos, praticados ao projetar uma sequência universal de inicialização (power-on) para diferentes sistemas, e progredimos para expandir as capacidades da nossa cidade, integrando perfeitamente novos sistemas — graças ao polimorfismo.
Ao abraçar os recursos orientados a objetos do Python, aprimoramos nossas habilidades como desenvolvedores e Arquitetos da Cidade Espacial, estabelecendo as bases para um software modular e adaptável que resiste ao teste do tempo interestelar.



