# ############################################################################
# ** Proyecto : Manejo de Semaforo con POO Composición
# ** Herramienta : https://www.wokwi.com
# ** Compilador : wokwi Simulador online
# ** Version : 1.0
# ** Fecha/Hora : 1-10-2024, 3:45 am,
# **
# ** Descripción del programa :
# ** Este programa simula el funcionamiento de 2 semaforos en un cruce
# ** vehicular, se utiliza programacion Orientada a Objetos (POO)
# ** y el concepto de composicion
# **
# ** Versión : 1
# ** Revisión : A
# ** Release : 0
# ** Bugs & Fixes :
# ** Date : 1/10/2024
# **
# ** By : Jorge Anzaldo
# ** contact : [email protected]
# ** twitter x : @janzaldob
#############################################################################
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# : Librerias / Bibliotecas / Modulos | :
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
from machine import Pin
import time
class Led:
def __init__(self, numeroPin):
self.led = Pin(numeroPin, Pin.OUT)
def prender(self, tiempo=0.2):
self.led.on()
time.sleep(tiempo)
def apagar(self, tiempo=0.2):
self.led.off()
time.sleep(tiempo)
def parpadear(self, veces=5):
for i in range(veces):
self.prender()
self.apagar()
# Clase que usa COMPOSICIÓN
class Semaforo:
def __init__(self):
# COMPOSICIÓN: Semaforo "tiene" leds
self.rojo = Led(18) # Semaforo TIENE un led rojo
self.amarillo = Led(17) # Semaforo TIENE un led amarillo
self.verde = Led(16) # Semaforo TIENE un led verde
def ciclo_normal(self):
self.verde.prender(5)
self.verde.apagar()
self.amarillo.parpadear(5)
self.rojo.prender(5)
self.rojo.apagar()
# Clase que usa COMPOSICIÓN
class PanelControl:
def __init__(self):
# COMPOSICIÓN: PanelControl "tiene" leds
self.indicador_power = Led(5)
self.indicador_error = Led(6)
self.indicador_activo = Led(7)
def inicio_sistema(self):
self.indicador_power.parpadear(3)
self.indicador_power.prender()
self.indicador_activo.prender()
# Uso del código con composición
if __name__ == '__main__':
semaforo = Semaforo() # Crea un semáforo COMPUESTO por 3 leds
panel = PanelControl() # Crea un panel COMPUESTO por 3 leds
while True:
semaforo.ciclo_normal()
panel.inicio_sistema()
# ********************************************************************************
#
# R E F E R E N C I A S / C O M E N T A R I O S
#
# *** Composición : ***
#
#
# La composición se refiere a la forma en que una clase puede contener instancias de otras clases
# como parte de su estado. En lugar de heredar de una clase base, una clase puede tener uno o más
# objetos de otras clases como atributos. Esto permite construir estructuras más complejas de manera
# más flexible y modular.
#
# Ventajas
# Reutilización de Código: Puedes reutilizar clases existentes sin depender de una jerarquía de herencia.
# Flexibilidad: Cambiar la implementación de una clase es más fácil, ya que no afecta a las clases que la utilizan.
# Menor Acoplamiento: Reduce la dependencia entre clases, lo que facilita el mantenimiento y las pruebas.
#
# *********************************************************************************