Neste projeto, vamos criar um sistema de hierarquia de funcionários usando os conceitos de herança, atributos e métodos em Python. O objetivo é aplicar os princípios da Programação Orientada a Objetos para estruturar uma organização fictícia.
Passo 1: Definir a Classe Base Funcionario
Vamos começar por definir uma classe base chamada Funcionario
. Esta classe terá alguns atributos comuns a todos os funcionários, como nome e salário.
class Funcionario:
def __init__(self, nome, salario): # Método de instância
self.nome = nome
self.salario = salario
def mostrar_informacoes(self): # Método de instância
return f'Nome: {self.nome}, Salário: {self.salario}'
@classmethod
def criar_com_salario_base(cls, nome): # Método de classe
return cls(nome, 1500)
Passo 2: Criar Subclasses Específicas
Vamos criar subclasses para diferentes tipos de funcionários: Manager
e Tecnico
.
Classe Manager
A classe Manager
herda de Funcionario
. Adicionamos um atributo extra para o departamento que o gerente supervisiona.
class Manager(Funcionario):
def __init__(self, nome, salario, departamento):
super().__init__(nome, salario)
self.departamento = departamento
def mostrar_informacoes(self):
info_basica = super().mostrar_informacoes()
return f'{info_basica}, Departamento: {self.departamento}'
Classe Tecnico
A classe Tecnico
também herda de Funcionario
. Adicionamos um atributo para a especialidade do técnico.
class Tecnico(Funcionario):
def __init__(self, nome, salario, especialidade):
super().__init__(nome, salario)
self.especialidade = especialidade
def mostrar_informacoes(self):
info_basica = super().mostrar_informacoes()
return f'{info_basica}, Especialidade: {self.especialidade}'
Passo 3: Adicionar Métodos Específicos
Cada classe pode ter métodos específicos que são exclusivos para o tipo de funcionário.
Na classe Tecnico
, podemos adicionar um método para mostrar a especialidade:
class Tecnico(Funcionario):
def __init__(self, nome, salario, especialidade):
super().__init__(nome, salario)
self.especialidade = especialidade
def mostrar_informacoes(self):
info_basica = super().mostrar_informacoes()
return f'{info_basica}, Especialidade: {self.especialidade}'
def realizar_tarefa(self, tarefa):
return f'{self.nome} está a realizar {tarefa} usando a sua especialidade: {self.especialidade}'
Passo 4: Criar Instâncias e Testar
Vamos criar algumas instâncias das nossas classes e testar os métodos para garantir que tudo está a funcionar corretamente.
# Criando instâncias
funcionario1 = Funcionario.criar_com_salario_base("Alice")
gerente1 = Manager("Bob", 3000, "Vendas")
tecnico1 = Tecnico("Carlos", 2000, "Redes")
# Mostrando informações
print(funcionario1.mostrar_informacoes()) # Output: Nome: Alice, Salário: 1500
print(gerente1.mostrar_informacoes()) # Output: Nome: Bob, Salário: 3000, Departamento: Vendas
print(tecnico1.mostrar_informacoes()) # Output: Nome: Carlos, Salário: 2000, Especialidade: Redes
# Realizando uma tarefa
print(tecnico1.realizar_tarefa("instalação de servidor")) # Output: Carlos está a realizar instalação de servidor usando a sua especialidade: Redes
Resumo
Neste capítulo, aplicámos o conceito de herança para criar uma hierarquia de funcionários em Python, utilizando classes, atributos e métodos. Vimos como é possível estender funcionalidades de classes base para subclasses e adicionar métodos específicos.
Quiz
-
O que acontece quando chamamos o método
self.mostrar_informacoes()
em uma subclasse que herda deFuncionario
?- a) Chamamos o método da classe base.
- b) Chamamos o método
mostrar_informacoes
da subclasse, se tiver sido sobrescrito. - c) Ambos, dependendo de como o método é implementado.
-
Como definimos um método de classe em Python?
- a) Utilizando o decorador
@classmethod
. - b) Utilizando o decorador
@staticmethod
. - c) Utilizando o decorador
@property
.
- a) Utilizando o decorador
-
Qual é a função do método
super()
numa subclasse?- a) Permitir que a subclasse aceda aos métodos e atributos da classe base.
- b) Criar um método estático.
- c) Aumentar o salário dos funcionários.
-
Na classe
Tecnico
, o que faz o métodorealizar_tarefa
?- a) Aumenta o salário do técnico.
- b) Mostra as tarefas que o técnico pode realizar.
- c) Descreve uma tarefa específica que o técnico está a realizar.