
########################################################

class CircuitCombinatoire(object):

    def __init__(self, entrees, sorties):
        self._entrees = entrees
        self._sorties = sorties

########################################################

class PorteLogique(object):
    pass

class EntreeBinaire(PorteLogique):
    pass

class Vrai(EntreeBinaire):

    def evaluer(self):
        return True

class Faux(EntreeBinaire):

    def evaluer(self):
        return False

class Non(PorteLogique):

    def __init__(self, entree):
        self._entree = entree

    def evaluer(self):
        return not self._entree.evaluer()

class PorteLogiqueBinaire(PorteLogique):

    def __init__(self, entree_1, entree_2):
        self._entree_1 = entree_1
        self._entree_2 = entree_2
        
class Ou(PorteLogiqueBinaire):

    def evaluer(self):
        return self._entree_1.evaluer() or self._entree_2.evaluer()

class Et(PorteLogiqueBinaire):

    def evaluer(self):
        return self._entree_1.evaluer() and self._entree_2.evaluer()

class Diff(PorteLogiqueBinaire):

    def evaluer(self):
        return self._entree_1.evaluer() != self._entree_2.evaluer()
           
########################################################

if __name__ == '__main__':
    c = Diff(Ou(Et(Vrai(), Faux()), Non(Faux())), Faux())
    print c.evaluer()


########################################################

