class ControloDelib(Controlo):
    
    def __init__(self):
        self._desejos = []
        self._crencas = ModeloMundo()
        self._intencoes = []
        
    def _processar(self, percepcao):
        self._actualizar_crencas(percepcao)
        if self._reconsiderar():
            self._deliberar()
            self._planear()
        return self._executar()
        
    def _actualizar_crencas(self, percepcao):
        self._crencas._actualizar(percepcao)
        
    def reconsiderar(self):
        Abstract
        
    def _deliberar(self):
        self._desejos = self._geraropcoes()
        if self._desejos:
            self._intencoes = self._seleccionaropcoes()
        else:
            self._intencoes = []
        
    def planear(self):
        Abstract
        
    def executar(self):
        Abstract
        
    def _geraropcoes(self):
        self._desejos = self._crencas._pos_alvos()
        return self._desejos
        
    def _seleccionaropcoes(self):
        return self._desejos