Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
36 changes: 36 additions & 0 deletions resExer/Resposta_10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
## Erro 1 – Nome da classe fora da convenção
**Descrição:** A classe foi declarada como `class pessoa`, começando com letra minúscula.
**Solução:** Renomeada para `class Pessoa`.
**Conceito POO:** Convenção e boas práticas (legibilidade e padronização).


## Erro 2 – Atributo não atribuído ao objeto
**Descrição:** Dentro do `__init__`, o código fazia `nome = nome`, sem usar `self`.
**Solução:** Corrigido para `self.nome = nome`.
**Conceito POO:** Encapsulamento / inicialização correta de atributos.


## Erro 3 – Uso incorreto de atributo privado
**Descrição:** Foi usado `self.__cpf`, mas nunca foi utilizado ou acessado. Além disso, o duplo underscore causa name mangling desnecessário.
**Solução:** Ajustado para `self._cpf`, que indica atributo protegido.
**Conceito POO:** Encapsulamento.


## Erro 4 – Método `apresentar()` sem parâmetro `self`
**Descrição:** O método foi declarado como `def apresentar():`, impossibilitando acessar atributos.
**Solução:** Corrigido para `def apresentar(self):`.
**Conceito POO:** Estrutura de métodos de instância.


## Erro 5 – Classe filha não chama o construtor da classe Pai
**Descrição:** `Estudante` ignora `super().__init__()` e redefine atributos manualmente.
**Solução:** Corrigido para `super().__init__(nome, idade)`.
**Conceito POO:** Herança e uso correto de `super()`.


## Erro 6 – Cálculo de média sem tratar lista vazia
**Descrição:** `sum(self.notas) / len(self.notas)` causava erro quando a lista estava vazia.
**Solução:** Adicionada verificação:
```python
if len(self.notas) == 0:
return 0.0
47 changes: 47 additions & 0 deletions resExer/Resposta_10.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
class Pessoa: # Correção do Erro 1
def __init__(self, nome, idade):
self.nome = nome # Correção do Erro 2
self.idade = idade
self._cpf = None # Correção do Erro 3

def apresentar(self): # Correção do Erro 4
return f"Olá, sou {self.nome}"


class Estudante(Pessoa):
def __init__(self, nome, idade, curso):
super().__init__(nome, idade) # Correção do Erro 5
self.curso = curso
self.notas = []

def adicionar_nota(self, nota):
if 0 <= nota <= 10:
self.notas.append(nota)

def calcular_media(self):
if len(self.notas) == 0: # Correção do Erro 6
return 0.0
return sum(self.notas) / len(self.notas)


class Professor(Pessoa):
def __init__(self, nome, idade, departamento, salario):
super().__init__(nome, idade)
self.departamento = departamento
self.salario = salario

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


# Código corrigido
if __name__ == "__main__":
estudante = Estudante("João", 20, "Engenharia")
professor = Professor("Dr. Silva", 45, "Computação", 8000)

estudante.adicionar_nota(8)
estudante.adicionar_nota(9)

print(estudante.apresentar())
print(professor.apresentar())
print(f"Média do estudante: {estudante.calcular_media()}")
19 changes: 19 additions & 0 deletions resExer/respExercicio01.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso

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

print ("--Aluno--")
aluno1 = Aluno("João Silva", "2023001", "Engenharia")
aluno2 = Aluno("Maria Oliveira", "2023002", "Medicina")

print ("--Disciplina--")
matricula1 = Disciplina("Cálculo I", "MAT101", 60)
matricula2 = Disciplina("Anatomia", "MED201", 80)
32 changes: 32 additions & 0 deletions resExer/respExercicio02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
class Aluno:
def __init__(self, nome, matricula, curso, notas=None):
self.nome = nome
self.matricula = matricula
self.curso = curso
self.notas = [] if notas is None else notas

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

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

def status(self):
media = self.calcular_media()
if media >= 7.0:
print("Aprovado")
else:
print("Reprovado")


# Exemplo de uso
if __name__ == "__main__":
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():.2f}")
aluno.status()
24 changes: 24 additions & 0 deletions resExer/respExercicio03.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
class Professor:
def __init__(self, nome, departamento, salario):
self.nome = nome
self.departamento = departamento
self._salario = salario
@property
def salario(self):
return self._salario
@salario.setter
def salario(self, valor):
if valor > 0:
self._salario = valor
else:
print("Erro: Salário deve ser um valor positivo!")
# Exemplo de uso
if __name__ == "__main__":
prof = Professor("Dr. Silva", "Computação", 5000.0)
print(f"Salário atual: R$ {prof.salario}")

prof.salario = 6000.0
print(f"Novo salário: R$ {prof.salario}")

prof.salario = -1000.0
print(f"Salário após tentativa inválida: R$ {prof.salario}")
23 changes: 23 additions & 0 deletions resExer/respExercicio04.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
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á, sou {self.nome}, CPF: {self.cpf}"


class Funcionario(Pessoa):
def __init__(self, nome, cpf, data_nascimento, cargo):
super().__init__(nome, cpf, data_nascimento)
self.cargo = 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á, sou {self.nome}, CPF: {self.cpf}, atuo na área de {self.area_atuacao}"
20 changes: 20 additions & 0 deletions resExer/respExercicio05.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
class Pessoa:
def __init__(self, nome, cpf, data_nascimento):
self.nome = nome
self.cpf = cpf
self.data_nascimento = data_nascimento


class Funcionario(Pessoa):
def __init__(self, nome, cpf, data_nascimento, cargo, salario):
super().__init__(nome, cpf, data_nascimento) # chama o construtor da classe Pai
self.cargo = cargo
self.salario = salario

def exibir_dados(self):
print("=== Dados do Funcionário ===")
print(f"Nome: {self.nome}")
print(f"CPF: {self.cpf}")
print(f"Data de Nascimento: {self.data_nascimento}")
print(f"Cargo: {self.cargo}")
print(f"Salário: R$ {self.salario}")
36 changes: 36 additions & 0 deletions resExer/respExercicio06.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
class Disciplina:
def __init__(self, nome, codigo, carga_horaria):
self.nome = nome
self.codigo = codigo
self.carga_horaria = carga_horaria

class Curso:
def __init__(self, nome, codigo):
self.nome = nome
self.codigo = codigo
self.disciplinas = []

def adicionar_disciplina(self, disciplina):
self.disciplinas.append(disciplina)

def listar_disciplinas(self):
print(f" Disciplinas do Curso: {self.nome} ")
for disc in self.disciplinas:
print(f"- {disc.nome} ({disc.codigo})")

def carga_horaria_total(self):
total = 0
for disc in self.disciplinas:
total += disc.carga_horaria
return total

if __name__ == "__main__":
curso = Curso("Engenharia de Software", "ES001")
disciplina1 = Disciplina("Programação Orientada a Objetos", "POO001", 60)
disciplina2 = Disciplina("Banco de Dados", "BD001", 80)

curso.adicionar_disciplina(disciplina1)
curso.adicionar_disciplina(disciplina2)

curso.listar_disciplinas()
print(f"Carga horária total: {curso.carga_horaria_total()}h")
53 changes: 53 additions & 0 deletions resExer/respExercicio07.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso
self.disciplinas_inscritas = []

def listar_disciplinas(self):
print(f"=== Disciplinas de {self.nome} ===")
if not self.disciplinas_inscritas:
print("Nenhuma disciplina inscrita.")
return
for disc in self.disciplinas_inscritas:
print(f"- {disc.nome} ({disc.codigo})")

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

def listar_alunos(self):
print(f"=== Alunos matriculados em {self.nome} ===")
if not self.alunos_matriculados:
print("Nenhum aluno matriculado.")
return
for aluno in self.alunos_matriculados:
print(f"- {aluno.nome} ({aluno.matricula})")

class Secretaria:
@staticmethod
def inscrever_aluno(aluno, disciplina):

if disciplina not in aluno.disciplinas_inscritas:
aluno.disciplinas_inscritas.append(disciplina)

if aluno not in disciplina.alunos_matriculados:
disciplina.alunos_matriculados.append(aluno)

# Exemplo de uso
if __name__ == "__main__":
aluno1 = Aluno("João Silva", "2023001", "Engenharia de Software")
aluno2 = Aluno("Maria Santos", "2023002", "Ciência da Computação")
disciplina1 = Disciplina("POO", "POO001", 60)
disciplina2 = Disciplina("Banco de Dados", "BD001", 80)

Secretaria.inscrever_aluno(aluno1, disciplina1)
Secretaria.inscrever_aluno(aluno1, disciplina2)
Secretaria.inscrever_aluno(aluno2, disciplina1)

aluno1.listar_disciplinas()
disciplina1.listar_alunos()
40 changes: 40 additions & 0 deletions resExer/respExercicio08.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
class Departamento:
def __init__(self, nome, sigla):
self.nome = nome
self.sigla = sigla
self.professores = []

@classmethod
def criar_departamento_exatas(cls, nome):
return cls(nome, "EXA")

@classmethod
def criar_departamento_humanas(cls, nome):
return cls(nome, "HUM")

def adicionar_professor(self, professor):
self.professores.append(professor)

def listar_professores(self):
print(f"=== Professores do Departamento {self.nome} ===")
if not self.professores:
print("Nenhum professor cadastrado.")
return
for prof in self.professores:
print(f"- {prof}")

# Exemplo de uso
if __name__ == "__main__":
dept_exatas = Departamento.criar_departamento_exatas("Matemática e Computação")
dept_humanas = Departamento.criar_departamento_humanas("Letras e Filosofia")

print(f"Departamento: {dept_exatas.nome} - Sigla: {dept_exatas.sigla}")
print(f"Departamento: {dept_humanas.nome} - Sigla: {dept_humanas.sigla}")


dept_exatas.adicionar_professor("Professor João")
dept_exatas.adicionar_professor("Professora Amanda")
dept_humanas.adicionar_professor("Professora Helena")

dept_exatas.listar_professores()
dept_humanas.listar_professores()
39 changes: 39 additions & 0 deletions resExer/respExercicio09.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
class Aluno:
def __init__(self, nome, matricula, curso):
self.nome = nome
self.matricula = matricula
self.curso = curso

def apresentar(self):
return f"Olá, sou o aluno {self.nome} e estudo no curso {self.curso}."

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

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

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

def apresentar(self):
return f"Olá, sou o funcionário {self.nome} e meu cargo é {self.cargo}."

# Exemplo de uso
if __name__ == "__main__":
pessoas = [
Aluno("João Silva", "2023001", "Engenharia de Software"),
Professor("Dr. Maria", "Computação", 8000.0),
Funcionario("Carlos Santos", "123.456.789-00", "01/01/1980", "Secretário", 3000.0)
]

for pessoa in pessoas:
print(pessoa.apresentar())
Loading