Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class LogicGate: # Clase llamada LogicGate
- def __init__(self,n): # Constructor de la clase LogicGate
- self.name = n # Variable label obtiene el valor por parametro de n
- self.output = None # Variable Output obtiene el valor nulo
- def getName(self): # Metodo de la clase LogicGate llamado getLabel
- return self.name # Devuelve de label(getter)
- def getOutput(self): # Metodo de la clase LogicGate llamado geOutput
- self.output = self.performGateLogic() # Variable Output obtiene el valor return del metodo performGateLogic
- return self.output # Devuelve el valor obtenido
- class BinaryGate(LogicGate): # Clase BinaryGate hereda LogicGate
- def __init__(self,n): # Constructor de BinaryGate con parametro n
- LogicGate.__init__(self,n) # Declara el constructor de la clase LogicGate
- self.pinA = None # Variable pinA valor nulo
- self.pinB = None # Variable pinB valor nulo
- def getPinA(self): # Metodo de la clase BinaryGate llamado getPinA
- if self.pinA == None:
- return int(input("Enter Pin A input for gate "+self.getName()+"-->")) # Cambia el tipo de dato a entero + obtiene el valor del usuario +
- # Utiliza Inherits para llamar el metodo getLabel de LogicGate
- else:
- return self.pinA.getFrom().getOutput()
- def getPinB(self): # Metodo de la clase BinaryGate llamado getPinB
- if self.pinB == None:
- return int(input("Enter Pin B input for gate "+self.getName()+"-->")) # Cambia el tipo de dato a entero + obtiene el valor del usuario
- else:
- return self.pinB.getFrom().getOutput()
- def setNextPin(self,source): # Metodo llamado setNextPin con source por parametro
- if self.pinA == None: # If PinA es nulo
- self.pinA = source # Se le otorga el valor a PinA
- else:
- if self.pinB == None:
- self.pinB = source
- else:
- print("Cannot Connect: NO EMPTY PINS on this gate")
- class AndGate(BinaryGate): # Clase llamada AndGate hereda BinaryGate
- def __init__(self,n): # Constructor de la clase con this y n por parametro
- BinaryGate.__init__(self,n)
- def performGateLogic(self): # Metodo performGateLogic de la clase
- a = self.getPinA() # a obtiene el valor devuelto de getPinA clase heredada
- b = self.getPinB()
- if a==1 and b==1: # Condicion para ejecutar codigo si a & b son 1
- return 1 # Devuelve
- else:
- return 0
- class OrGate(BinaryGate):
- def __init__(self,n):
- BinaryGate.__init__(self,n)
- def performGateLogic(self):
- a = self.getPinA()
- b = self.getPinB()
- if a ==1 or b==1:
- return 1
- else:
- return 0
- class UnaryGate(LogicGate): # Clase llamada UnaryGate hereda LogicGate
- def __init__(self,n): # Constructor de la clase UnaryGate
- LogicGate.__init__(self,n) # Declara constructor de LogicGate
- self.pin = None # Pin nulo
- def getPin(self): # Metodo llamado getPin
- if self.pin == None:
- return int(input("Enter Pin input for gate "+self.getName()+"-->")) # Devuelve en tipo entero el input del usuario y llama al metodo
- # getLabel heredado de LogicGate
- else:
- return self.pin.getFrom().getOutput()
- def setNextPin(self,source):
- if self.pin == None:
- self.pin = source
- else:
- print("Cannot Connect: NO EMPTY PINS on this gate")
- class NotGate(UnaryGate): # Clase llamada NotGate
- def __init__(self,n): # Constructor
- UnaryGate.__init__(self,n)
- def performGateLogic(self): # Metodo llamado performGateLogic
- if self.getPin():
- return 0
- else:
- return 1
- class Connector: # Clase llamada conector
- def __init__(self, fgate, tgate): # Constructor de la clase & contiene dos parametros
- self.fromgate = fgate # Otorga el valor del parametro a la variable
- self.togate = tgate
- tgate.setNextPin(self)
- def getFrom(self): # Metodo Getter
- return self.fromgate
- def getTo(self): # Metodo Getter
- return self.togate
- def main():
- gateOne = AndGate("gateOne")
- # Se declara un objeto de la clase AndGate esta hereda BinaryGate y luego es heredada por la SuperClass LogicGate
- # pasando el valor de n(parametro) por todas las clases. Luego para calcularlo e imprimirlo es llamado con print el metodo getOutput().
- # performGateLogic() este metodo tiene dos variables a = int(input) al igual que b luego es evaluado si ambos son 1 return 1 else 0.
- print(gateOne.getOutput())
- gateTwo = OrGate("gateTwo")
- # Para el OrGate es exactamente igual que AndGate ya que ambas utilizan la clase BinaryGate
- # se ejectuta de la misma manera.
- gateThree = NotGate("gateThree")
- # NotGate utiliza la clase UnaryGate y esta hereda a LogicGate lleva por parametro el string y lo guarda en LigicGate Class Name.
- # Termina ciendo ejecutada igualmente con la unica diferencia que devuelve lo contrario de AndGate.
- connectorOne = Connector(gateOne,gateTwo)
- print("")
- # Connector es una clase utilizada para cambiar a un tipo de boolean diferente tiene dos variables en su constructor y son igualadas a los
- # objetos dados por parametro. Luego se ejecuta el metodo setNextPin() que es parte de los objetos enviados por parametro.
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement