Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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