forked from CAECOMP/provas
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Inclusão dos códigos da cadeira de padrões de projeto 2020.2
- Loading branch information
1 parent
aa35259
commit 6a02d85
Showing
180 changed files
with
2,607 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
.vscode | ||
__pycache__ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Abstract Factory | ||
|
||
Exemplo escrito em python e baseado no do [ | ||
Refactoring.Guru](https://refactoring.guru/pt-br) sobre o padrão de projeto [Abstract Factory](https://refactoring.guru/pt-br/design-patterns/abstract-factory). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
from abc import ABC, abstractmethod | ||
from teclado import TecladoAbstrato | ||
|
||
|
||
class ComputadorAbstrato(ABC): | ||
@abstractmethod | ||
def detalhes_do_hardware(self) -> str: | ||
pass | ||
|
||
|
||
class ComputadorModeloA(ComputadorAbstrato): | ||
def detalhes_do_hardware(self) -> str: | ||
return "Processador Core 2 + 8G Memória RAM + 1Tb de ssd" | ||
|
||
|
||
class ComputadorModeloB(ComputadorAbstrato): | ||
def detalhes_do_hardware(self) -> str: | ||
return "Processador Core 8 + 16G Memória RAM + 2Tb de ssd" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
from abc import ABC, abstractmethod | ||
from computador import ComputadorAbstrato, ComputadorModeloA, ComputadorModeloB | ||
from teclado import TecladoAbstrato, TecladoModeloA, TecladoModeloB | ||
|
||
|
||
class FabricaAbstrataKit(ABC): | ||
@abstractmethod | ||
def criar_computador(self) -> ComputadorAbstrato: | ||
pass | ||
|
||
@abstractmethod | ||
def criar_teclado(self) -> TecladoAbstrato: | ||
pass | ||
|
||
|
||
class Kit1(FabricaAbstrataKit): | ||
def criar_computador(self) -> ComputadorAbstrato: | ||
return ComputadorModeloA() | ||
|
||
def criar_teclado(self) -> TecladoAbstrato: | ||
return TecladoModeloA() | ||
|
||
|
||
class Kit2(FabricaAbstrataKit): | ||
def criar_computador(self) -> ComputadorAbstrato: | ||
return ComputadorModeloB() | ||
|
||
def criar_teclado(self) -> TecladoAbstrato: | ||
return TecladoModeloB() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
from fabrica import FabricaAbstrataKit, Kit1, Kit2 | ||
|
||
|
||
def kit_do_cliente(kit: FabricaAbstrataKit) -> None: | ||
|
||
computador = kit.criar_computador() | ||
teclado = kit.criar_teclado() | ||
|
||
print(f"{computador.detalhes_do_hardware()}") | ||
print(f"{teclado.detalhes()}") | ||
|
||
|
||
if __name__ == "__main__": | ||
print("Testando o primeiro tipo de factory") | ||
print("Detalhes do kit 1") | ||
kit_do_cliente(Kit1()) | ||
|
||
print("\n") | ||
|
||
print("Mesmo cliente só que estando o segundo tipo de factory") | ||
print("Detalhes do kit 2") | ||
kit_do_cliente(Kit2()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
from abc import ABC, abstractmethod | ||
|
||
|
||
class TecladoAbstrato(ABC): | ||
@abstractmethod | ||
def detalhes(self) -> str: | ||
pass | ||
|
||
|
||
class TecladoModeloA(TecladoAbstrato): | ||
def detalhes(self) -> str: | ||
return "Teclado de membrana" | ||
|
||
|
||
class TecladoModeloB(TecladoAbstrato): | ||
def detalhes(self) -> str: | ||
return "Teclado mecânico" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
__pycache__ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# adapter | ||
|
||
O código desse repositório foi feito em python e é baseado no | ||
[vídeo do Derek Banas sobre o padrão de projeto Adapter](https://www.youtube.com/watch?v=qG286LQM6BU) | ||
|
||
Para mais informações/explicações sobre esse e outros padrões de projeto, recomendo a leitura do site | ||
[Refactoring.Guru](https://refactoring.guru/pt-br/design-patterns) sobre o assunto. |
16 changes: 16 additions & 0 deletions
16
S08 - Padrões de projeto/adapter/adaptador_robo_inimigo.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from interface_atacante_inimigo import AtacanteInimigo | ||
from robo_inimigo import RoboInimigo | ||
|
||
|
||
class AdaptadorRoboInimigo(AtacanteInimigo): | ||
def __init__(self, robo: RoboInimigo): | ||
self.robo: RoboInimigo = robo | ||
|
||
def atirar(self) -> None: | ||
self.robo.esmagar_com_as_maos() | ||
|
||
def seguir_em_frente(self) -> None: | ||
self.robo.ande_para_frente() | ||
|
||
def atribuir_motorista(self, nome_motorista: str) -> None: | ||
self.robo.reagir_ao_humano(nome_motorista=nome_motorista) |
15 changes: 15 additions & 0 deletions
15
S08 - Padrões de projeto/adapter/interface_atacante_inimigo.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
from abc import abstractmethod, ABC | ||
|
||
|
||
class AtacanteInimigo(ABC): | ||
@abstractmethod | ||
def atirar(self) -> None: | ||
pass | ||
|
||
@abstractmethod | ||
def seguir_em_frente(self) -> None: | ||
pass | ||
|
||
@abstractmethod | ||
def atribuir_motorista(self, nome_motorista: str) -> None: | ||
pass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
from tanque_inimigo import TanqueInimigo | ||
from robo_inimigo import RoboInimigo | ||
from adaptador_robo_inimigo import AdaptadorRoboInimigo | ||
|
||
|
||
if __name__ == "__main__": | ||
tanque_rx7: TanqueInimigo = TanqueInimigo() | ||
fred: RoboInimigo = RoboInimigo() | ||
adaptador: AdaptadorRoboInimigo = AdaptadorRoboInimigo(fred) | ||
|
||
print("O robô...") | ||
fred.reagir_ao_humano("Paul") | ||
fred.ande_para_frente() | ||
fred.esmagar_com_as_maos() | ||
|
||
print("\nO tanque inimigo...") | ||
tanque_rx7.atribuir_motorista("Frank") | ||
tanque_rx7.seguir_em_frente() | ||
tanque_rx7.atirar() | ||
|
||
print("\nO robô com o adaptador...") | ||
adaptador.atribuir_motorista("Mark") | ||
adaptador.seguir_em_frente() | ||
adaptador.atirar() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
from random import randint | ||
|
||
|
||
class RoboInimigo: | ||
def __init__(self): | ||
self.dano = 0 | ||
self.movimento = 0 | ||
|
||
def esmagar_com_as_maos(self): | ||
self.dano = randint(1, 10) | ||
print(f"O robô iminigo causa {self.dano} de dano com suas mãos") | ||
|
||
def ande_para_frente(self): | ||
self.movimento = randint(1, 5) | ||
print(f"O robô iminigo anda {self.movimento} casas para frente") | ||
|
||
def reagir_ao_humano(self, nome_motorista): | ||
print(f"O robô inimigo vai para cima do {nome_motorista}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
from interface_atacante_inimigo import AtacanteInimigo | ||
from random import randint | ||
|
||
|
||
class TanqueInimigo(AtacanteInimigo): | ||
def __init__(self): | ||
self.dano: int = 0 | ||
self.movimento: int = 0 | ||
|
||
def atirar(self) -> None: | ||
self.dano: int = randint(1, 10) | ||
print(f"O tanque causa {self.dano} de dano") | ||
|
||
def seguir_em_frente(self) -> None: | ||
self.movimento = randint(1, 5) | ||
print(f"O tanque se moveu {self.movimento} casas") | ||
|
||
def atribuir_motorista(self, nome_motorista: str) -> None: | ||
print(f"{nome_motorista} está dirigindo o tanque") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
__pycache__ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# bridge | ||
|
||
O código desse repositório foi feito em python e é baseado no | ||
[vídeo do Derek Banas sobre o padrão de projeto Facade](https://www.youtube.com/watch?v=9jIgSsIfh_8) | ||
|
||
Para mais informações/explicações sobre esse e outros padrões de projeto, recomendo a leitura do site | ||
[Refactoring.Guru](https://refactoring.guru/pt-br/design-patterns) sobre o assunto. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
from abc import ABC, abstractmethod | ||
from dispositivo_de_entretenimento import DispositivoDeEntretenimento | ||
|
||
|
||
class BotaoRemoto(ABC): | ||
def __init__(self, dispositivo: DispositivoDeEntretenimento): | ||
self._dispositivo = dispositivo | ||
|
||
@abstractmethod | ||
def botao_cinco_pressionado(self): | ||
self._dispositivo.botao_cinco_pressionado() | ||
|
||
@abstractmethod | ||
def botao_seis_pressionado(self): | ||
self._dispositivo.botao_seis_pressionado() | ||
|
||
@abstractmethod | ||
def feedback_do_dispositivo(self): | ||
self._dispositivo.feedback_do_dispositivo() | ||
|
||
@abstractmethod | ||
def botao_nove_pressionado(self): | ||
pass |
33 changes: 33 additions & 0 deletions
33
S08 - Padrões de projeto/bridge/dispositivo_de_entretenimento.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
from abc import ABC, abstractmethod | ||
|
||
|
||
class DispositivoDeEntretenimento(ABC): | ||
def __init__(self): | ||
self.estado_do_dispositivo = 0 | ||
self.configuracao_maxima = 0 | ||
self.volume = 0 | ||
|
||
@abstractmethod | ||
def botao_cinco_pressionado(self): | ||
pass | ||
|
||
@abstractmethod | ||
def botao_seis_pressionado(self): | ||
pass | ||
|
||
@abstractmethod | ||
def botao_sete_pressionado(self): | ||
self.volume += 1 | ||
print(f"Volume em {self.volume}") | ||
|
||
@abstractmethod | ||
def botao_oito_pressionado(self): | ||
self.volume -= 1 | ||
print(f"Volume em {self.volume}") | ||
|
||
@abstractmethod | ||
def feedback_do_dispositivo(self): | ||
if self.estado_do_dispositivo > self.configuracao_maxima or self.estado_do_dispositivo < 0: | ||
self.estado_do_dispositivo = 0 | ||
|
||
print(f"No canal {self.estado_do_dispositivo}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
from tv_remoto_mudo import TvRemotaMuda | ||
from tv_remoto_pausa import TvRemotaPausa | ||
from tv import Tv | ||
|
||
if __name__ == '__main__': | ||
botao_remoto_tv_1 = TvRemotaMuda(Tv(1, 200)) | ||
botao_remoto_tv_2 = TvRemotaPausa(Tv(1, 200)) | ||
|
||
print("Teste da tv mutada") | ||
botao_remoto_tv_1.botao_cinco_pressionado() | ||
botao_remoto_tv_1.botao_seis_pressionado() | ||
botao_remoto_tv_1.botao_nove_pressionado() | ||
|
||
print("\nTeste da tv pausada") | ||
botao_remoto_tv_2.botao_cinco_pressionado() | ||
botao_remoto_tv_2.botao_seis_pressionado() | ||
botao_remoto_tv_2.botao_seis_pressionado() | ||
botao_remoto_tv_2.botao_seis_pressionado() | ||
botao_remoto_tv_2.botao_seis_pressionado() | ||
botao_remoto_tv_2.botao_nove_pressionado() | ||
botao_remoto_tv_2.feedback_do_dispositivo() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
from dispositivo_de_entretenimento import DispositivoDeEntretenimento | ||
|
||
|
||
class Tv(DispositivoDeEntretenimento): | ||
def __init__(self, estado_do_dispositivo: int, configuracao_maxima: int): | ||
super().__init__() | ||
self.estado_do_dispositivo = estado_do_dispositivo | ||
self.configuracao_maxima = configuracao_maxima | ||
|
||
def botao_cinco_pressionado(self): | ||
print("Diminuindo o canal") | ||
self.estado_do_dispositivo -= 1 | ||
|
||
def botao_seis_pressionado(self): | ||
print("Aumentando o canal") | ||
self.estado_do_dispositivo += 1 | ||
|
||
def botao_sete_pressionado(self): | ||
super(Tv, self).botao_sete_pressionado() | ||
|
||
def botao_oito_pressionado(self): | ||
super(Tv, self).botao_oito_pressionado() | ||
|
||
def feedback_do_dispositivo(self): | ||
super(Tv, self).feedback_do_dispositivo() | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
from botao_remoto import BotaoRemoto | ||
from dispositivo_de_entretenimento import DispositivoDeEntretenimento | ||
|
||
|
||
class TvRemotaMuda(BotaoRemoto): | ||
def botao_cinco_pressionado(self): | ||
super(TvRemotaMuda, self).botao_cinco_pressionado() | ||
|
||
def botao_seis_pressionado(self): | ||
super(TvRemotaMuda, self).botao_seis_pressionado() | ||
|
||
def feedback_do_dispositivo(self): | ||
super(TvRemotaMuda, self).feedback_do_dispositivo() | ||
|
||
def __init__(self, dispotivo: DispositivoDeEntretenimento): | ||
super().__init__(dispositivo=dispotivo) | ||
|
||
def botao_nove_pressionado(self): | ||
print(f"A tv foi mutada") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
from botao_remoto import BotaoRemoto | ||
from dispositivo_de_entretenimento import DispositivoDeEntretenimento | ||
|
||
|
||
class TvRemotaPausa(BotaoRemoto): | ||
def botao_cinco_pressionado(self): | ||
super(TvRemotaPausa, self).botao_cinco_pressionado() | ||
|
||
def botao_seis_pressionado(self): | ||
super(TvRemotaPausa, self).botao_seis_pressionado() | ||
|
||
def feedback_do_dispositivo(self): | ||
super(TvRemotaPausa, self).feedback_do_dispositivo() | ||
|
||
def __init__(self, dispotivo: DispositivoDeEntretenimento): | ||
super().__init__(dispositivo=dispotivo) | ||
|
||
def botao_nove_pressionado(self): | ||
print(f"A tv foi pausada") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
__pycache__ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# builder | ||
|
||
O código desse repositório foi feito em python e é baseado no [vídeo do Derek Banas sobre o padrão de projeto Builder](https://www.youtube.com/watch?v=9XnsOpjclUg&feature=emb_logo) | ||
|
||
Para mais informações/explicações sobre esse e outros padrões de projeto, recomendo a leitura do site [Refactoring.Guru](https://refactoring.guru/pt-br/design-patterns) sobre o assunto. |
Oops, something went wrong.