diff --git a/respExercicio01.py b/respExercicio01.py new file mode 100644 index 0000000..279870a --- /dev/null +++ b/respExercicio01.py @@ -0,0 +1,23 @@ +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 + +aluno1 = Aluno("João Silva", "2023001", "Engenharia de Software") +aluno2 = Aluno("Maria Santos", "2023002", "Ciência da Computação") +aluno3 = Aluno("Feliciano Pinto", "2023003", "computação") + +disciplina1 = Disciplina("Programação I", "CS101", 60) +disciplina2 = Disciplina("Cálculo I", "MA101", 80) +disciplina3 = Disciplina("computadoria", "CS101", 60) + +print(f"Aluno: {aluno1.nome}, Matrícula: {aluno1.matricula},Curso: {aluno1.curso}" ", " f"Disciplina: {disciplina1.nome}, Código: {disciplina1.codigo}, Carga Horária: {disciplina1.carga_horaria}") +print(f"Aluno: {aluno2.nome}, Matrícula: {aluno2.matricula}, Curso: {aluno2.curso}" ", " f"Disciplina: {disciplina2.nome}, Código: {disciplina2.codigo}, Carga Horária: {disciplina2.carga_horaria}") +print(f"Aluno: {aluno3.nome}, Matrícula: {aluno3.matricula}, Curso: {aluno3.curso}" ", " f"Disciplina: {disciplina3.nome}, Código: {disciplina3.codigo}, Carga Horária: {disciplina3.carga_horaria}") diff --git a/respExercicio02.py b/respExercicio02.py new file mode 100644 index 0000000..52de211 --- /dev/null +++ b/respExercicio02.py @@ -0,0 +1,35 @@ +class Aluno: + def __init__(self, nome): + self.nome = nome + + def adicionar_nota1(self, nota1): + nota1 = float(nota1) + if 0 <= nota1 <= 10: + self.nota1 = nota1 + + def adicionar_nota2(self, nota2): + nota2 = float(nota2) + if 0 <= nota2 <= 10: + self.nota2 = nota2 + + def media (self): + media = (self.nota1 + self.nota2) / 2 + return media + + def aprovado(self): + if self.media() >= 7: + return True + else: + return False + + +aluno1 = Aluno("João Silva") +aluno1.adicionar_nota1(8.5) +aluno1.adicionar_nota2(7.0) + +aluno2 = Aluno("Maria Santos") +aluno2.adicionar_nota1(6.0) +aluno2.adicionar_nota2(5.5) + +print(f"Aluno: {aluno1.nome}, Nota 1: {aluno1.nota1}, Nota 2: {aluno1.nota2}, Média: {aluno1.media()}, Aprovado: {aluno1.aprovado()}") +print(f"Aluno: {aluno2.nome}, Nota 1: {aluno2.nota1}, Nota 2: {aluno2.nota2}, Média: {aluno2.media()}, Aprovado: {aluno2.aprovado()}") diff --git a/respExercicio03.py b/respExercicio03.py new file mode 100644 index 0000000..42f1064 --- /dev/null +++ b/respExercicio03.py @@ -0,0 +1,17 @@ +class professor(): + def __init__(self, nome, disciplina): + self.nome = nome + self.disciplina = disciplina + + def salario_professor(self, _salario, departamento): + self.salario = _salario + self.departamento = departamento + + if _salario > 1: + print(f"Professor: {self.nome}, Disciplina: {self.disciplina}, Salário: R${self.salario}, Departamento: {self.departamento}") + else: + print("Salário inválido. O valor deve ser positivo.") + +professor1 = professor("Carlos Eduardo", "Matemática") +professor1.salario_professor(4500, "Ciências Exatas") + diff --git a/respExercicio04.py b/respExercicio04.py new file mode 100644 index 0000000..d234b35 --- /dev/null +++ b/respExercicio04.py @@ -0,0 +1,38 @@ +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"Nome: {self.nome}, CPF: {self.cpf}, Data de Nascimento: {self.data_nascimento}" + +p1 = pessoa("João Silva", "123.456.789-00", "01/01/1990") + + +class funcionario(pessoa): + def __init__(self, nome, cpf, data_nascimento, salario, cargo): + super().__init__(nome, cpf, data_nascimento) + self.salario = salario + self.cargo = cargo + + def apresentar_funcionario(self): + info_pessoa = super().apresentar() + return f"{info_pessoa}, Cargo: {self.cargo}, Salário: R${self.salario:.2f}" + +f1 = funcionario("Maria Souza", "987.654.321-00", "15/05/1985", 3500.00, "Analista") + +class tutor(funcionario): + def __init__(self, nome, cpf, data_nascimento, salario, cargo, area_atucacao): + super().__init__(nome, cpf, data_nascimento, salario, cargo) + self.area_area_atucacao =area_atucacao + + def apresentar_tutor(self): + info_funcionario = super().apresentar_funcionario() + return f"{info_funcionario}, Disciplina: {self.area_area_atucacao}" + +t1 = tutor("Carlos Pereira", "555.666.777-88", "20/10/1980", 4500.00, "Tutor", "Matemática") + +print(p1.apresentar()) +print(f1.apresentar_funcionario()) +print(t1.apresentar_tutor()) \ No newline at end of file diff --git a/respExercicio05.py b/respExercicio05.py new file mode 100644 index 0000000..0641773 --- /dev/null +++ b/respExercicio05.py @@ -0,0 +1,24 @@ +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"Nome: {self.nome}, CPF: {self.cpf}, Data de Nascimento: {self.data_nascimento}" + +p1 = pessoa("João Silva", "123.456.789-00", "01/01/1990") + + +class funcionario(pessoa): + def __init__(self, nome, cpf, data_nascimento, salario, cargo): + super().__init__(nome, cpf, data_nascimento) + self.salario = salario + self.cargo = cargo + +f1 = funcionario("Maria Souza", "987.654.321-00", "15/05/1985", 5000.00, "Analista de Sistemas") + +class exibir_dados(): + print(p1.apresentar()) + print(f"Salário: {f1.salario}, Cargo: {f1.cargo}") + print(f1.apresentar()) diff --git a/respExercicio06.py b/respExercicio06.py new file mode 100644 index 0000000..2462a63 --- /dev/null +++ b/respExercicio06.py @@ -0,0 +1,30 @@ +class Curso(): + def __init__(self, nome, codigo, disciplinas): + self.nome = nome + self.codigo = codigo + self.disciplinas = disciplinas + + def adicionar_disciplina(self, disciplina): + self.disciplinas.append(disciplina) + + def listar_disciplinas(self): + for d in self.disciplinas: + print(f"Nome: {d['nome']}, Código: {d['codigo']}") + + def carga_horaria_total(self): + return sum(d['carga_horaria'] for d in self.disciplinas) + +class Disciplina(): + def __init__(self, nome, codigo, carga_horaria): + self.nome = nome + self.codigo = codigo + self.carga_horaria = carga_horaria + +curso = Curso("Engenharia de Software", "ES001", []) +disciplina1 = {"nome": "Programação Orientada a Objetos", "codigo": "POO001", "carga_horaria": 60} +disciplina2 = {"nome": "Banco de Dados", "codigo": "BD001", "carga_horaria": 80} + +curso.adicionar_disciplina(disciplina1) +curso.adicionar_disciplina(disciplina2) +curso.listar_disciplinas() +print(f"Carga horária total: {curso.carga_horaria_total()}h") \ No newline at end of file diff --git a/respExercicio07.py b/respExercicio07.py new file mode 100644 index 0000000..ef932d6 --- /dev/null +++ b/respExercicio07.py @@ -0,0 +1,52 @@ +class Aluno: + def __init__(self, nome, matricula, curso): + self.nome = nome + self.matricula = matricula + self.curso = curso + self.disciplinas_inscritas = [] + + def listar_disciplinas(self): + return [disciplina.nome for disciplina in self.disciplinas_inscritas] + + +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): + return [aluno.nome for aluno in self.alunos_matriculados] + + +class Secretaria: + @staticmethod + def inscrever_aluno(aluno, disciplina): + disciplina.alunos_matriculados.append(aluno) + aluno.disciplinas_inscritas.append(disciplina) + + @staticmethod + def listar_disciplinas_aluno(aluno): + return aluno.disciplinas_inscritas + + @staticmethod + def listar_alunos_disciplina(disciplina): + return disciplina.alunos_matriculados + + +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() + + +print("Disciplinas do aluno João Silva:", aluno1.listar_disciplinas()) +print("Alunos matriculados na disciplina POO:", disciplina1.listar_alunos()) diff --git a/respExercicio08.py b/respExercicio08.py new file mode 100644 index 0000000..52fa689 --- /dev/null +++ b/respExercicio08.py @@ -0,0 +1,29 @@ +class Departamento: + def __init__(self, nome, sigla, professores): + self.nome = nome + self.sigla = sigla + self.professores = 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): + return self.professores + + +dept_exatas = Departamento.criar_departamento_exatas("Matemática e Computação") +dept_humanas = Departamento.criar_departamento_humanas("Letras e Filosofia") + +dept_exatas.adicionar_professor("Professor A") +dept_humanas.adicionar_professor("Professor B") + +print(f"Departamento: {dept_exatas.nome} - Sigla: {dept_exatas.sigla} - Professores: {dept_exatas.listar_professores()}") +print(f"Departamento: {dept_humanas.nome} - Sigla: {dept_humanas.sigla} - Professores: {dept_humanas.listar_professores()}") \ No newline at end of file diff --git a/respExercicio09.py b/respExercicio09.py new file mode 100644 index 0000000..6b99dd4 --- /dev/null +++ b/respExercicio09.py @@ -0,0 +1,56 @@ +class Departamento: + def __init__(self, nome, sigla, professores): + self.nome = nome + self.sigla = sigla + self.professores = professores + + +class Pessoa: + def __init__(self, nome): + self.nome = nome + + def apresentar(self): + pass + + +class Aluno(Pessoa): + def __init__(self, nome, matricula, curso): + super().__init__(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(Pessoa): + def __init__(self, nome, departamento, salario): + super().__init__(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(Pessoa): + def __init__(self, nome, cpf, data_nascimento, cargo, salario): + super().__init__(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 +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()) \ No newline at end of file diff --git a/respExercicio10.py b/respExercicio10.py new file mode 100644 index 0000000..4e26b1b --- /dev/null +++ b/respExercicio10.py @@ -0,0 +1,38 @@ +class Pessoa: # Corrigido Erro 1 + def __init__(self, nome, idade): + self.nome = nome # Corrigido Erro 2 + self.idade = idade + + def apresentar(self): # Corrigido Erro 4 + return f"Olá, sou {self.nome}" + +class Estudante(Pessoa): # Corrigido Erro 1 + def __init__(self, nome, idade, curso): + super().__init__(nome, idade) # Corrigido 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 self.notas: # Corrigido Erro 6 + return sum(self.notas) / len(self.notas) + return 0.0 +class Professor(Pessoa): # Corrigido Erro 1 + 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}" + +# Testando o código +estudante = Estudante("João", 20, "Engenharia") +professor = Professor("Dr. Silva", 45, "Computação", 8000) + +print(estudante.apresentar()) +print(professor.apresentar()) +print(f"Média do estudante: {estudante.calcular_media()}") # Erro 7 \ No newline at end of file diff --git a/respExercicio11.py b/respExercicio11.py new file mode 100644 index 0000000..e3c78c6 --- /dev/null +++ b/respExercicio11.py @@ -0,0 +1,42 @@ +class Funcionario: + def __init__(self, nome, salario, cargo): + self.nome = nome + self.salario = salario + self.cargo = cargo + +class CalculadoraSalario: + @staticmethod + def calcular_salario_liquido(funcionario, descontos): + return funcionario.salario - descontos + +class GeradorRelatorio: + @staticmethod + def gerar_relatorio(funcionario): + return f"Relatório: {funcionario.nome} - {funcionario.cargo} - R$ {funcionario.salario}" + +class RepositorioFuncionario: + @staticmethod + def salvar_no_banco(funcionario): + print(f"Salvando {funcionario.nome} no banco de dados...") + +if __name__ == "__main__": + funcionario = Funcionario("João", 5000, "Desenvolvedor") + + descontos = 500 + salario_liquido = CalculadoraSalario.calcular_salario_liquido(funcionario, descontos) + print(f"Salário líquido: R$ {salario_liquido}") + + relatorio = GeradorRelatorio.gerar_relatorio(funcionario) + print(relatorio) + + RepositorioFuncionario.salvar_no_banco(funcionario) + + +funcionario = Funcionario("Ana Silva", 5000.0, "Desenvolvedora") +calculadora = CalculadoraSalario() +gerador = GeradorRelatorio() +repositorio = RepositorioFuncionario() + +salario_liquido = calculadora.calcular_salario_liquido(funcionario, 500.0) +relatorio = gerador.gerar_relatorio(funcionario) +repositorio.salvar_no_banco(funcionario) \ No newline at end of file diff --git a/respExercicio12.py b/respExercicio12.py new file mode 100644 index 0000000..becbf85 --- /dev/null +++ b/respExercicio12.py @@ -0,0 +1,38 @@ +from abc import ABC, abstractmethod + +class CalculadorDesconto(ABC): + @abstractmethod + def calcular(self, valor): + pass + +class DescontoEstudante(CalculadorDesconto): + def calcular(self, valor): + return valor * 0.9 + +class DescontoFuncionario(CalculadorDesconto): + def calcular(self, valor): + return valor * 0.85 + +class DescontoVIP(CalculadorDesconto): + def calcular(self, valor): + return valor * 0.8 + +class ProcessadorPagamento: + def __init__(self, calculador_desconto: CalculadorDesconto): + self.calculador_desconto = calculador_desconto + + def processar_pagamento(self, valor): + return self.calculador_desconto.calcular(valor) + +class DescontoPromocional(CalculadorDesconto): + def calcular(self, valor): + return valor * 0.75 + +# Exemplo de uso +desconto_estudante = DescontoEstudante() +processador = ProcessadorPagamento(desconto_estudante) +print(processador.processar_pagamento(100)) + +desconto_promocional = DescontoPromocional() +processador = ProcessadorPagamento(desconto_promocional) +print(processador.processar_pagamento(100)) \ No newline at end of file diff --git a/respExercicio13.py b/respExercicio13.py new file mode 100644 index 0000000..3df527c --- /dev/null +++ b/respExercicio13.py @@ -0,0 +1,54 @@ +class Veiculo: + def __init__(self): + self.velocidade = 0 + + def acelerar(self): + self.velocidade += 10 + + def frear(self): + self.velocidade -= 10 + + def get_velocidade(self): + return self.velocidade + + +class Carro(Veiculo): + def acelerar(self): + if self.velocidade + 10 <= 180: + self.velocidade += 10 + else: + self.velocidade = 180 + + +class Bicicleta(Veiculo): + def acelerar(self): + if self.velocidade + 10 <= 50: + self.velocidade += 10 + else: + self.velocidade = 50 + + +class Aviao(Veiculo): + def acelerar(self): + if self.velocidade + 10 <= 900: + self.velocidade += 10 + else: + self.velocidade = 900 + + +def testar_veiculo(veiculo): + print(f"Testando {type(veiculo).__name__}") + veiculo.acelerar() + veiculo.acelerar() + print(f"Velocidade: {veiculo.get_velocidade()} km/h") + veiculo.frear() + print(f"Velocidade após frear: {veiculo.get_velocidade()} km/h") + + +carro = Carro() +bicicleta = Bicicleta() +aviao = Aviao() + +testar_veiculo(carro) +testar_veiculo(bicicleta) +testar_veiculo(aviao) diff --git a/respExercicio14.py b/respExercicio14.py new file mode 100644 index 0000000..0f1fa69 --- /dev/null +++ b/respExercicio14.py @@ -0,0 +1,68 @@ +from abc import ABC, abstractmethod + +class Trabalhavel(ABC): + @abstractmethod + def trabalhar(self): + pass + +class Alimentavel(ABC): + @abstractmethod + def comer(self): + pass + +class Descansavel(ABC): + @abstractmethod + def dormir(self): + pass + +class Programavel(ABC): + @abstractmethod + def programar(self): + pass + +class Desenvolvedor(Trabalhavel, Alimentavel, Descansavel, Programavel): + def trabalhar(self): + print("Desenvolvedor está trabalhando.") + + def comer(self): + print("Desenvolvedor está comendo.") + + def dormir(self): + print("Desenvolvedor está dormindo.") + + def programar(self): + print("Desenvolvedor está programando.") + +class Gerente(Trabalhavel, Alimentavel, Descansavel): + def trabalhar(self): + print("Gerente está trabalhando.") + + def comer(self): + print("Gerente está comendo.") + + def dormir(self): + print("Gerente está dormindo.") + +class Robo(Trabalhavel, Programavel): + def trabalhar(self): + print("Robo está trabalhando.") + + def programar(self): + print("Robo está programando.") + +desenvolvedor = Desenvolvedor("Ana") +gerente = Gerente("Carlos") +robo = Robo("R2D2") + +# Desenvolvedor faz tudo +desenvolvedor.trabalhar() +desenvolvedor.comer() +desenvolvedor.programar() + +# Gerente não programa +gerente.trabalhar() +gerente.comer() + +# Robô não come nem dorme +robo.trabalhar() +robo.programar() \ No newline at end of file diff --git a/respExercicio15.py b/respExercicio15.py new file mode 100644 index 0000000..70e2e50 --- /dev/null +++ b/respExercicio15.py @@ -0,0 +1,55 @@ +from abc import ABC, abstractmethod + +class ServicoNotificacao(ABC): + @abstractmethod + def enviar(self, mensagem): + pass + +class EmailService(ServicoNotificacao): + def enviar(self, mensagem): + print(f"Enviando email: {mensagem}") + +class SMSService(ServicoNotificacao): + def enviar(self, mensagem): + print(f"Enviando SMS: {mensagem}") + +class PushService(ServicoNotificacao): + def enviar(self, mensagem): + print(f"Enviando notificação push: {mensagem}") + +class NotificacaoService: + def __init__(self, servico: ServicoNotificacao): + self.servico = servico # Injeção de dependência + + def notificar(self, mensagem): + self.servico.enviar(mensagem) + +if __name__ == "__main__": + + email_service = EmailService() + notificacao = NotificacaoService(email_service) + notificacao.notificar("Mensagem via Email") + + sms_service = SMSService() + notificacao = NotificacaoService(sms_service) + notificacao.notificar("Mensagem via SMS") + + + push_service = PushService() + notificacao = NotificacaoService(push_service) + notificacao.notificar("Mensagem via Push") + +# Diferentes implementações podem ser injetadas +email_service = EmailService() +sms_service = SMSService() +push_service = PushService() + +# Mesmo código cliente funciona com qualquer implementação +notificador1 = NotificacaoService(email_service) +notificador2 = NotificacaoService(sms_service) +notificador3 = NotificacaoService(push_service) + +mensagem = "Bem-vindo ao sistema!" +notificador1.notificar(mensagem) +notificador2.notificar(mensagem) +notificador3.notificar(mensagem) \ No newline at end of file diff --git a/respExercicio16.py b/respExercicio16.py new file mode 100644 index 0000000..ce5b11d --- /dev/null +++ b/respExercicio16.py @@ -0,0 +1,42 @@ +from abc import ABC, abstractmethod + +class ProcessadorPagamento(ABC): + @abstractmethod + def processar_pagamento(self, valor, cartao): + pass + + +class PayPalAPI: + def make_payment(self, valor, cartao): + return f"Pagamento de R${valor} realizado via PayPal com o cartão {cartao}." + + +class PayPalAdapter(ProcessadorPagamento): + def __init__(self, paypal_api): + self.paypal_api = paypal_api + + def processar_pagamento(self, valor, cartao): + return self.paypal_api.make_payment(valor, cartao) + + +class SistemaPagamento: + def __init__(self, processador_pagamento): + self.processador_pagamento = processador_pagamento + + def realizar_pagamento(self, valor, cartao): + return self.processador_pagamento.processar_pagamento(valor, cartao) + + +if __name__ == "__main__": + + paypal_api = PayPalAPI() + + + paypal_adapter = PayPalAdapter(paypal_api) + + + sistema = SistemaPagamento(paypal_adapter) + resultado = sistema.realizar_pagamento(100, "1234-5678-9876-5432") + print(resultado) + + diff --git a/respExercicio17.py b/respExercicio17.py new file mode 100644 index 0000000..8b42f02 --- /dev/null +++ b/respExercicio17.py @@ -0,0 +1,71 @@ +from abc import ABC, abstractmethod + +class Bebida(ABC): + + @abstractmethod + def get_descricao(self): + pass + + @abstractmethod + def get_preco(self): + pass +class Cafe(Bebida): + + def get_descricao(self): + return "Café" + + def get_preco(self): + return 5.0 + +class Cha(Bebida): + + def get_descricao(self): + return "Chá" + + def get_preco(self): + return 3.0 + +class AdicionalDecorator(Bebida): + def __init__(self, bebida): + self.bebida = bebida + + def get_descricao(self): + return self().get_descricao() + + def get_preco(self): + return self.bebida.get_preco() + +class LeiteDecorator(AdicionalDecorator): + def get_descricao(self): + return self.bebida.get_descricao() + " com Leite" + + def get_preco(self): + return self.bebida.get_preco() + 2.00 + + +class AcucarDecorator(AdicionalDecorator): + def get_descricao(self): + return self.bebida.get_descricao() + " com Açúcar" + + def get_preco(self): + return self.bebida.get_preco() + 0.50 + + +class ChantillyDecorator(AdicionalDecorator): + def get_descricao(self): + return self.bebida.get_descricao() + " com Chantilly" + + def get_preco(self): + return self.bebida.get_preco() + 3.00 + +# Bebida simples +cafe = Cafe() +print(f"{cafe.get_descricao()} - R$ {cafe.get_preco()}") + +# Bebida com decorators +cafe_com_leite = LeiteDecorator(cafe) +print(f"{cafe_com_leite.get_descricao()} - R$ {cafe_com_leite.get_preco()}") + +# Múltiplos decorators +cafe_especial = ChantillyDecorator(AcucarDecorator(LeiteDecorator(Cafe()))) +print(f"{cafe_especial.get_descricao()} - R$ {cafe_especial.get_preco()}") \ No newline at end of file diff --git a/respExercicio18.py b/respExercicio18.py new file mode 100644 index 0000000..4967f9e --- /dev/null +++ b/respExercicio18.py @@ -0,0 +1,102 @@ +class Amplificador: + def ligar(self): + print("Amplificador ligado.") + + def definir_volume(self, volume): + print(f"Volume do amplificador definido para {volume}.") + +class DVDPlayer: + def ligar(self): + print("DVD Player ligado.") + + def reproduzir(self, filme): + print(f"Reproduzindo o filme: {filme}.") + +class Projetor: + def ligar(self): + print("Projetor ligado.") + + def modo_widescreen(self): + print("Projetor ajustado para o modo widescreen.") + +class Luzes: + def diminuir(self, nivel): + print(f"Luzes diminuídas para o nível {nivel}.") + +class PipocaPopper: + def ligar(self): + print("Pipoqueira ligada.") + + def fazer_pipoca(self): + print("Pipoca sendo preparada.") + +class HomeTheaterFacade: + def __init__(self, amp, dvd, proj, luzes, pipoca): + self.amp = amp + self.dvd = dvd + self.proj = proj + self.luzes = luzes + self.pipoca = pipoca + + def assistir_filme(self, filme): + print("\nPreparando para assistir ao filme...") + self.pipoca.ligar() + self.pipoca.fazer_pipoca() + self.luzes.diminuir(10) + self.proj.ligar() + self.proj.modo_widescreen() + self.amp.ligar() + self.amp.definir_volume(5) + self.dvd.ligar() + self.dvd.reproduzir(filme) + print("Tudo pronto! Aproveite o filme!\n") + + def fim_filme(self): + print("\nEncerrando o filme...") + print("Desligando todos os componentes...") + print("Filme encerrado. Boa noite!\n") + +# Demonstração +if __name__ == "__main__": + # Criando os componentes + amp = Amplificador() + dvd = DVDPlayer() + proj = Projetor() + luzes = Luzes() + pipoca = PipocaPopper() + + # Usando o sistema diretamente + print("Usando o sistema diretamente:") + pipoca.ligar() + pipoca.fazer_pipoca() + luzes.diminuir(10) + proj.ligar() + proj.modo_widescreen() + amp.ligar() + amp.definir_volume(5) + dvd.ligar() + dvd.reproduzir("O Senhor dos Anéis") + + # Usando a facade + print("\nUsando a facade:") + home_theater = HomeTheaterFacade(amp, dvd, proj, luzes, pipoca) + home_theater.assistir_filme("O Senhor dos Anéis") + home_theater.fim_filme() + + # Uso complexo (sem facade) +amplificador = Amplificador() +dvd = DVDPlayer() +projetor = Projetor() +luzes = Luzes() +pipoca = PipocaPopper() + +# Muitas chamadas necessárias... +amplificador.ligar() +amplificador.definir_volume(5) +dvd.ligar() +# ... etc + +# Uso simples (com facade) +home_theater = HomeTheaterFacade() +home_theater.assistir_filme("Matrix") +home_theater.fim_filme() \ No newline at end of file diff --git a/respExercicio19.py b/respExercicio19.py new file mode 100644 index 0000000..b06dad0 --- /dev/null +++ b/respExercicio19.py @@ -0,0 +1,65 @@ +from abc import ABC, abstractmethod + + +class Observer(ABC): + @abstractmethod + def update(self, temperatura, umidade, pressao): + pass + + + +class EstacaoMeteorologica: + def __init__(self): + self.observers = [] + self.temperatura = None + self.umidade = None + self.pressao = None + + def adicionar_observer(self, observer): + self.observers.append(observer) + + def remover_observer(self, observer): + self.observers.remove(observer) + + def notificar_observers(self): + for obs in self.observers: + obs.update(self.temperatura, self.umidade, self.pressao) + + def definir_medicoes(self, temperatura, umidade, pressao): + print("\n>>> Atualizando medições...") + self.temperatura = temperatura + self.umidade = umidade + self.pressao = pressao + self.notificar_observers() + + +class DisplayTemperatura(Observer): + def update(self, temperatura, umidade, pressao): + print(f"[Display Temperatura] Temperatura: {temperatura}°C") + + +class DisplayUmidade(Observer): + def update(self, temperatura, umidade, pressao): + print(f"[Display Umidade] Umidade: {umidade}%") + + +class DisplayCompleto(Observer): + def update(self, temperatura, umidade, pressao): + print(f"[Display Completo] Temp: {temperatura}°C | Umidade: {umidade}% | Pressão: {pressao} hPa") + + + +if __name__ == "__main__": + + estacao = EstacaoMeteorologica() + + display_temp = DisplayTemperatura() + display_umidade = DisplayUmidade() + display_completo = DisplayCompleto() + + estacao.adicionar_observer(display_temp) + estacao.adicionar_observer(display_umidade) + estacao.adicionar_observer(display_completo) + + estacao.definir_medicoes(25, 60, 1013) + estacao.definir_medicoes(30, 55, 1008) diff --git a/respExercicio20.py b/respExercicio20.py new file mode 100644 index 0000000..d98895d --- /dev/null +++ b/respExercicio20.py @@ -0,0 +1,45 @@ +from abc import ABC, abstractmethod + +class EstrategiaFrete(ABC): + @abstractmethod + def calcular_frete(self, peso, distancia): + pass + +class FreteNormal(EstrategiaFrete): + def calcular_frete(self, peso, distancia): + return 5.00 + (peso * 2.0) + (distancia * 0.1) + +class FreteExpresso(EstrategiaFrete): + def calcular_frete(self, peso, distancia): + return 15.00 + (peso * 3.0) + (distancia * 0.2) + +class FreteEconomico(EstrategiaFrete): + def calcular_frete(self, peso, distancia): + return 2.00 + (peso * 1.0) + (distancia * 0.05) + +class CalculadoraFrete: + def __init__(self, estrategia): + self.estrategia = estrategia + + def trocar_estrategia(self, nova_estrategia): + self.estrategia = nova_estrategia + + def calcular(self, peso, distancia): + return self.estrategia.calcular_frete(peso, distancia) + +if __name__ == "__main__": + peso = 10 + distancia = 200 + + +peso = 10.0 # kg +distancia = 100.0 # km + +calculadora = CalculadoraFrete(FreteNormal()) +print(f"Frete Normal: R$ {calculadora.calcular(peso, distancia)}") + +calculadora.definir_estrategia(FreteExpresso()) +print(f"Frete Expresso: R$ {calculadora.calcular(peso, distancia)}") + +calculadora.definir_estrategia(FreteEconomico()) +print(f"Frete Econômico: R$ {calculadora.calcular(peso, distancia)}") \ No newline at end of file