Skip to content
53 changes: 53 additions & 0 deletions Resposta_10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Resposta 10 - Relatório dos Erros Encontrados e Soluções

## Erro 1: Nome da classe `pessoa`
- **Descrição do problema**: O nome da classe `pessoa` não segue a convenção de nomenclatura do Python (PEP 8), que recomenda o uso de PascalCase para nomes de classes.
- **Solução**: Renomeei a classe para `Pessoa`.
- **Conceito POO**: Convenção de nomenclatura.

---

## Erro 2: Atributo `nome` não inicializado corretamente
- **Descrição do problema**: No construtor da classe `pessoa`, o atributo `nome` foi atribuído diretamente ao parâmetro, sem usar `self`.
- **Solução**: Corrigi a inicialização para `self.nome = nome`.
- **Conceito POO**: Inicialização de atributos.

---

## Erro 3: Atributo privado `__cpf` não utilizado
- **Descrição do problema**: O atributo `__cpf` foi declarado, mas não foi utilizado ou acessado em nenhum lugar do código.
- **Solução**: Mantive o atributo como privado, respeitando o encapsulamento, mas ele pode ser acessado futuramente com métodos `getter` e `setter`.
- **Conceito POO**: Encapsulamento.

---

## Erro 4: Método `apresentar` sem o parâmetro `self`
- **Descrição do problema**: O método `apresentar` não possui o parâmetro `self`, o que impede o acesso aos atributos da instância.
- **Solução**: Adicionei o parâmetro `self` ao método.
- **Conceito POO**: Definição de métodos.

---

## Erro 5: Construtor da classe `Estudante` não chama o construtor da superclasse
- **Descrição do problema**: O construtor da classe `Estudante` não chama o construtor da superclasse `Pessoa`, o que resulta na ausência de inicialização dos atributos herdados.
- **Solução**: Adicionei a chamada ao construtor da superclasse com `super().__init__(nome, idade)`.
- **Conceito POO**: Herança e uso de `super()`.

---

## Erro 6: Divisão por zero no método `calcular_media`
- **Descrição do problema**: O método `calcular_media` não trata o caso em que a lista de notas está vazia, o que pode causar uma divisão por zero.
- **Solução**: Adicionei uma verificação para retornar `0` caso a lista de notas esteja vazia.
- **Conceito POO**: Lógica de negócio.

---

## Erro 7: Método `calcular_media` chamado sem adicionar notas
- **Descrição do problema**: No exemplo de uso, o método `calcular_media` é chamado antes de adicionar notas ao estudante, o que resulta em uma lista vazia.
- **Solução**: Adicionei notas ao estudante antes de chamar o método `calcular_media`.
- **Conceito POO**: Lógica de negócio.

---

## Conclusão
Após corrigir os 7 erros, o código agora segue as boas práticas de Programação Orientada a Objetos, respeitando os princípios de encapsulamento, herança, inicialização de atributos e lógica de negócio.
48 changes: 48 additions & 0 deletions Resposta_10.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
class Pessoa: # Corrigido: Nome da classe com letra maiúscula (convenção PEP 8)
def __init__(self, nome, idade):
self.nome = nome # Corrigido: Atributo `self.nome` foi corretamente inicializado
self.idade = idade
self.__cpf = None # Mantido como atributo privado (encapsulamento)

def apresentar(self): # Corrigido: Adicionado `self` como parâmetro do método
return f"Olá, sou {self.nome}"


class Estudante(Pessoa): # Corrigido: Nome da classe com letra maiúscula e herança corrigida
def __init__(self, nome, idade, curso):
super().__init__(nome, idade) # Corrigido: Chamada ao construtor da superclasse
self.curso = curso
self.notas = []

def adicionar_nota(self, nota):
if 0 <= nota <= 10: # Mantida a validação de nota
self.notas.append(nota)

def calcular_media(self):
if len(self.notas) == 0: # Corrigido: Tratamento para evitar divisão por zero
return 0
return sum(self.notas) / len(self.notas)


class Professor(Pessoa): # Corrigido: Nome da classe com letra maiúscula e herança corrigida
def __init__(self, nome, idade, departamento, salario):
super().__init__(nome, idade) # Corrigido: Chamada ao construtor da superclasse
self.departamento = departamento
self.salario = salario

def apresentar(self):
return f"Olá, sou o professor {self.nome} do departamento {self.departamento}"


# Testando o código corrigido
estudante = Estudante("João", 20, "Engenharia")
professor = Professor("Dr. Silva", 45, "Computação", 8000)

# Adicionando notas ao estudante
estudante.adicionar_nota(8)
estudante.adicionar_nota(9)

# Exibindo as apresentações e a média do estudante
print(estudante.apresentar())
print(professor.apresentar())
print(f"Média do estudante: {estudante.calcular_media()}")
23 changes: 23 additions & 0 deletions respExercicio01.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso

def info_aluno(self):
return f"Nome: {self.nome}, Matrícula: {self.matricula}, Curso: {self.curso}"

class Disciplina:
def __init__(self, nome, codigo, carga_horaria):
self.nome = nome
self.codigo = codigo
self.carga_horaria = carga_horaria

def info_displina(self):
return f"Nome {self.nome}, Código: {self.codigo}, Carga Horária: {self.carga_horaria}"

aluno1 = Aluno("João", 6325225, "ADS")
discplina1 = Disciplina("Cloud", 12112025, 25)

print(aluno1.info_aluno())
print(discplina1.info_displina())
44 changes: 44 additions & 0 deletions respExercicio02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso
self.notas = []

def info_aluno(self):
return f"Nome: {self.nome}, Matrícula: {self.matricula}, Curso: {self.curso}"

def adicionar_nota(self, nota):
self.notas.append(nota)

def calcular_media(self):
if len(self.notas) == 0:
return 0

return sum(self.notas) / len(self.notas)

def status(self):
media = self.calcular_media()
if media >= 7:
return "Aprovado!"
else:
return "Reprovado!"

class Disciplina:
def __init__(self, nome, codigo, carga_horaria):
self.nome = nome
self.codigo = codigo
self.carga_horaria = carga_horaria

def info_displina(self):
return f"Nome {self.nome}, Código: {self.codigo}, Carga Horária: {self.carga_horaria}"

aluno = Aluno("João Silva", "2023001", "Engenharia de Software")

aluno.adicionar_nota(8.5)
aluno.adicionar_nota(7.0)
aluno.adicionar_nota(9.2)

print(f"Média: {aluno.calcular_media()}")

aluno.status()
64 changes: 64 additions & 0 deletions respExercicio03.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso
self.notas = []

def info_aluno(self):
return f"Nome: {self.nome}, Matrícula: {self.matricula}, Curso: {self.curso}"

def adicionar_nota(self, nota):
self.notas.append(nota)

def calcular_media(self):
if len(self.notas) == 0:
return 0

return sum(self.notas) / len(self.notas)

def status(self):
media = self.calcular_media()
if media >= 7:
return "Aprovado!"
else:
return "Reprovado!"

class Professor:
def __init__(self, nome, departamento, salarioInicial):
self.nome = nome
self.departamento = departamento
self._salario = salarioInicial

def getSalario(self): # getter
return self._salario

def setSalario(self, novoSalario): #setter
if novoSalario > 0:
self._salario = novoSalario
else:
return "Erro! O novo salário não pode ser uma valor negativo."

class Disciplina:
def __init__(self, nome, codigo, carga_horaria):
self.nome = nome
self.codigo = codigo
self.carga_horaria = carga_horaria

def info_displina(self):
return f"Nome {self.nome}, Código: {self.codigo}, Carga Horária: {self.carga_horaria}"

# Exemplo de Uso

prof = Professor("Dr. Silva", "Computação", 5000.0)

# Usando o getter para obter o salário atual
print(f"Salário atual: R$ {prof.getSalario()}")

# Usando o setter para alterar o salário
prof.setSalario(6000.0) # Deve funcionar
print(f"Novo salário: R$ {prof.getSalario()}")

# Tentando definir um salário inválido
prof.setSalario(-1000.0) # Deve dar erro
print(f"Salário após tentativa inválida: R$ {prof.getSalario()}")
82 changes: 82 additions & 0 deletions respExercicio04.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
class Pessoa:
def __init__(self, nome, cpf, data_nascimento):
self.nome = nome
self.cpf = cpf
self.data_nascimento = data_nascimento

def apresentar(self):
return f"Olá! Meu nome é {self.nome}, o meu CPF é {self.cpf} e eu nasci em {self.data_nascimento}."

class Funcionario(Pessoa):
def __init__(self, nome, cpf, data_nascimento, cargo):
super().__init__(nome, cpf, data_nascimento)
self.cargo = cargo

def apresentar(self):
return f"Olá! Meu nome é {self.nome}, o meu CPF é {self.cpf}, eu nasci em {self.data_nascimento} e sou {self.cargo}."

class Tutor(Pessoa):
def __init__(self, nome, cpf, data_nascimento, area_atuacao):
super().__init__(nome, cpf, data_nascimento)
self.area_atuacao = area_atuacao

def apresentar(self):
return f"Olá! Meu nome é {self.nome}, o meu CPF é {self.cpf}, eu nasci em {self.data_nascimento} e atuo na área de {self.area_atuacao}."

class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso
self.notas = []

def info_aluno(self):
return f"Nome: {self.nome}, Matrícula: {self.matricula}, Curso: {self.curso}"

def adicionar_nota(self, nota):
self.notas.append(nota)

def calcular_media(self):
if len(self.notas) == 0:
return 0

return sum(self.notas) / len(self.notas)

def status(self):
media = self.calcular_media()
if media >= 7:
return "Aprovado!"
else:
return "Reprovado!"

class Professor:
def __init__(self, nome, departamento, salarioInicial):
self.nome = nome
self.departamento = departamento
self._salario = salarioInicial

def getSalario(self): # getter
return self._salario

def setSalario(self, novoSalario): #setter
if novoSalario > 0:
self._salario = novoSalario
else:
return "Erro! O novo salário não pode ser uma valor negativo."

class Disciplina:
def __init__(self, nome, codigo, carga_horaria):
self.nome = nome
self.codigo = codigo
self.carga_horaria = carga_horaria

def info_displina(self):
return f"Nome {self.nome}, Código: {self.codigo}, Carga Horária: {self.carga_horaria}"

# Exemplo de Uso

funcionario = Funcionario("João Silva", "123.456.789-00", "01/01/1990", "Secretário")
tutor = Tutor("Maria Santos", "987.654.321-00", "15/05/1985", "Programação")

print(funcionario.apresentar())
print(tutor.apresentar())
Loading