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
18 changes: 18 additions & 0 deletions respExercicio11.py
Original file line number Diff line number Diff line change
@@ -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...")
43 changes: 43 additions & 0 deletions respExercicio12.py
Original file line number Diff line number Diff line change
@@ -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))
42 changes: 42 additions & 0 deletions respExercicio13.py
Original file line number Diff line number Diff line change
@@ -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()
21 changes: 21 additions & 0 deletions respExercicio14.py
Original file line number Diff line number Diff line change
@@ -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
30 changes: 30 additions & 0 deletions respExercicio15.py
Original file line number Diff line number Diff line change
@@ -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)



31 changes: 31 additions & 0 deletions respExercicio16.py
Original file line number Diff line number Diff line change
@@ -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)


58 changes: 58 additions & 0 deletions respExercicio17.py
Original file line number Diff line number Diff line change
@@ -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



68 changes: 68 additions & 0 deletions respExercicio18.py
Original file line number Diff line number Diff line change
@@ -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!")



44 changes: 44 additions & 0 deletions respExercicio19.py
Original file line number Diff line number Diff line change
@@ -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")



31 changes: 31 additions & 0 deletions respExercicio20.py
Original file line number Diff line number Diff line change
@@ -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)