diff --git a/respExercicio11.py b/respExercicio11.py new file mode 100644 index 0000000..1e996af --- /dev/null +++ b/respExercicio11.py @@ -0,0 +1,18 @@ + +class Funcionario: + def __init__(self, nome, salario, cargo): + self.nome = nome + self.salario = salario + self.cargo = cargo + +class CalculadoraSalario: + def calcular_salario_liquido(self, funcionario, descontos): + return funcionario.salario - descontos + +class GeradorRelatorio: + def gerar_relatorio(self, funcionario): + return f"Relatório: {funcionario.nome} - {funcionario.cargo} - R$ {funcionario.salario}" + +class RepositorioFuncionario: + def salvar(self, funcionario): + print(f"Salvando {funcionario.nome} no banco de dados...") diff --git a/respExercicio12.py b/respExercicio12.py new file mode 100644 index 0000000..f942ba2 --- /dev/null +++ b/respExercicio12.py @@ -0,0 +1,43 @@ +from abc import ABC, abstractmethod + +class CalculadorDesconto(ABC): + @abstractmethod + def calcular(self, valor): + pass + +class DescontoEstudante(CalculadorDesconto): + def calcular(self, valor): + return valor * 0.90 + + +class DescontoFuncionario(CalculadorDesconto): + def calcular(self, valor): + return valor * 0.85 + +class DescontoVIP(CalculadorDesconto): + def calcular(self, valor): + return valor * 0.80 + +class ProcessadorPagamento: + def processar(self, valor, calculadora_desconto: CalculadorDesconto): + return calculadora_desconto.calcular(valor) + + +if __name__ == "__main__": + pagamento = ProcessadorPagamento() + valor_original = 1000.0 + + desconto_estudante = DescontoEstudante() + desconto_funcionario = DescontoFuncionario() + desconto_vip = DescontoVIP() + + print("Estudante:", pagamento.processar(valor_original, desconto_estudante)) + print("Funcionário:", pagamento.processar(valor_original, desconto_funcionario)) + print("VIP:", pagamento.processar(valor_original, desconto_vip)) + + class DescontoBlackFriday(CalculadorDesconto): + def calcular(self, valor): + return valor * 0.50 + + desconto_bf = DescontoBlackFriday() + print("Black Friday:", pagamento.processar(valor_original, desconto_bf)) diff --git a/respExercicio13.py b/respExercicio13.py new file mode 100644 index 0000000..69e7b45 --- /dev/null +++ b/respExercicio13.py @@ -0,0 +1,42 @@ + +class Veiculo: + def __init__(self, velocidade_maxima): + self.velocidade_atual = 0 + self.velocidade_maxima = velocidade_maxima + + def acelerar(self, valor): + nova_velocidade = self.velocidade_atual + valor + if nova_velocidade > self.velocidade_maxima: + self.velocidade_atual = self.velocidade_maxima + else: + self.velocidade_atual = nova_velocidade + + def frear(self, valor): + nova_velocidade = self.velocidade_atual - valor + if nova_velocidade < 0: + self.velocidade_atual = 0 + else: + self.velocidade_atual = nova_velocidade + + def get_velocidade(self): + return self.velocidade_atual + +class Carro(Veiculo): + def __init__(self): + super().__init__(180) + + +class Bicicleta(Veiculo): + def __init__(self): + super().__init__(50) + + +class Aviao(Veiculo): + def __init__(self): + super().__init__(900) + +class ControladorTrafego: + def controlar(self, veiculo: Veiculo): + veiculo.acelerar(100) + veiculo.frear(30) + return veiculo.get_velocidade() diff --git a/respExercicio14.py b/respExercicio14.py new file mode 100644 index 0000000..f14406e --- /dev/null +++ b/respExercicio14.py @@ -0,0 +1,21 @@ +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 diff --git a/respExercicio15.py b/respExercicio15.py new file mode 100644 index 0000000..30835cb --- /dev/null +++ b/respExercicio15.py @@ -0,0 +1,30 @@ +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 push: {mensagem}") + +class NotificacaoService: + def __init__(self, servico: ServicoNotificacao): + self.servico = servico # depende da abstração + + def notificar(self, mensagem): + self.servico.enviar(mensagem) + + + diff --git a/respExercicio16.py b/respExercicio16.py new file mode 100644 index 0000000..46c0f8b --- /dev/null +++ b/respExercicio16.py @@ -0,0 +1,31 @@ + +class ProcessadorPagamento: + def processar_pagamento(self, valor, cartao): + pass + + +class ProcessadorPagamentoInterno(ProcessadorPagamento): + def processar_pagamento(self, valor, cartao): + return f"Pagamento interno de R${valor} realizado no cartão {cartao}" + + +class PayPalAPI: + def make_payment(self, amount, credit_card_number): + return f"PayPal: Processando ${amount} no cartão {credit_card_number}" + +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): + self.processador = processador + + def realizar_pagamento(self, valor, cartao): + resultado = self.processador.processar_pagamento(valor, cartao) + print(resultado) + + diff --git a/respExercicio17.py b/respExercicio17.py new file mode 100644 index 0000000..56ab279 --- /dev/null +++ b/respExercicio17.py @@ -0,0 +1,58 @@ + +class Bebida: + def get_descricao(self): + pass + + 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 BebidaDecorator(Bebida): + def __init__(self, bebida): + self.bebida = bebida + + def get_descricao(self): + return self.bebida.get_descricao() + + def get_preco(self): + return self.bebida.get_preco() + +class LeiteDecorator(BebidaDecorator): + def get_descricao(self): + return self.bebida.get_descricao() + " com Leite" + + def get_preco(self): + return self.bebida.get_preco() + 2.0 + + +class AcucarDecorator(BebidaDecorator): + def get_descricao(self): + return self.bebida.get_descricao() + " com Açúcar" + + def get_preco(self): + return self.bebida.get_preco() + 0.5 + + +class ChantillyDecorator(BebidaDecorator): + def get_descricao(self): + return self.bebida.get_descricao() + " com Chantilly" + + def get_preco(self): + return self.bebida.get_preco() + 3.0 + + + diff --git a/respExercicio18.py b/respExercicio18.py new file mode 100644 index 0000000..101d0db --- /dev/null +++ b/respExercicio18.py @@ -0,0 +1,68 @@ + +class Amplificador: + def ligar(self): + print("Ligando amplificador") + + def definir_volume(self, volume): + print(f"Definindo volume para {volume}") + + +class DVDPlayer: + def ligar(self): + print("Ligando DVD player") + + def reproduzir(self, filme): + print(f"Reproduzindo {filme}") + + +class Projetor: + def ligar(self): + print("Ligando projetor") + + def modo_widescreen(self): + print("Modo widescreen ativado") + + +class Luzes: + def diminuir(self, nivel): + print(f"Diminuindo luzes para {nivel}%") + + +class PipocaPopper: + def ligar(self): + print("Ligando pipoqueira") + + def fazer_pipoca(self): + print("Fazendo pipoca") + +class HomeTheaterFacade: + def __init__(self): + self.amplificador = Amplificador() + self.dvd = DVDPlayer() + self.projetor = Projetor() + self.luzes = Luzes() + self.pipoca = PipocaPopper() + + def assistir_filme(self, filme): + print(f"Preparando para assistir {filme}...") + + self.amplificador.ligar() + self.amplificador.definir_volume(5) + + self.dvd.ligar() + + self.projetor.ligar() + self.projetor.modo_widescreen() + + self.luzes.diminuir(10) + + self.pipoca.ligar() + self.pipoca.fazer_pipoca() + + self.dvd.reproduzir(filme) + + def fim_filme(self): + print("Filme finalizado!") + + + diff --git a/respExercicio19.py b/respExercicio19.py new file mode 100644 index 0000000..2817078 --- /dev/null +++ b/respExercicio19.py @@ -0,0 +1,44 @@ + +class Observer: + def update(self, temperatura, umidade, pressao): + pass + +class EstacaoMeteorologica: + def __init__(self): + self.observers = [] + self.temperatura = 0 + self.umidade = 0 + self.pressao = 0 + + 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): + 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}°C") + + +class DisplayUmidade(Observer): + def update(self, temperatura, umidade, pressao): + print(f"Display Umidade: {umidade}%") + + +class DisplayCompleto(Observer): + def update(self, temperatura, umidade, pressao): + print(f"Display Completo: {temperatura}°C, {umidade}%, {pressao} hPa") + + + diff --git a/respExercicio20.py b/respExercicio20.py new file mode 100644 index 0000000..13e39b6 --- /dev/null +++ b/respExercicio20.py @@ -0,0 +1,31 @@ + +class EstrategiaFrete: + def calcular_frete(self, peso, distancia): + pass + +class FreteNormal(EstrategiaFrete): + def calcular_frete(self, peso, distancia): + return 5.0 + (peso * 2.0) + (distancia * 0.1) + + +class FreteExpresso(EstrategiaFrete): + def calcular_frete(self, peso, distancia): + return 15.0 + (peso * 3.0) + (distancia * 0.2) + + +class FreteEconomico(EstrategiaFrete): + def calcular_frete(self, peso, distancia): + return 2.0 + (peso * 1.0) + (distancia * 0.05) + +class CalculadoraFrete: + def __init__(self, estrategia): + self.estrategia = estrategia + + def definir_estrategia(self, nova_estrategia): + self.estrategia = nova_estrategia + + def calcular(self, peso, distancia): + return self.estrategia.calcular_frete(peso, distancia) + + +