As Três Leis da Robótica implementadas em Java
import robot.Action;
import robot.SituationEvaluator;
import robot.exceptions.ImpossibleActionException;
public class Robot implements AsimovLaws{
public Robot(){
// inicializa o robot
this.wakeUp();
}
// parameters:
// anything: a ação a ser executada pelo robot
// returns:
// TRUE se executou a ação
// FALSE se não executou
public boolean doAction(Action anything){
// lei 1
if(anything.injure(HumanBeing.class)) {
// nunca faça algo que prejudique um ser humano
return false;
}
// lei 2
if(anything.isOrder(HumanBeing.class)){
// se é ordem de um ser humano, tenta fazer se for possivel
try{
anything.doIt();
}
catch(ImpossibleActionException ex){
// a ação é impossível de ser executada
return false;
}
return true;
}
// lei 3
if(anything.injure(this)){
// autopreservação: o robô não pode fazer algo
// prejudicial a si próprio
return false;
}
// se nada impede de executar, tenta fazer se for possível
try{
anything.doIt();
}
catch(ImpossibleActionException ex){
// a ação é impossível de ser executada
return false;
}
return true;
}
// continuação da primeira lei: verifica se existe humano em perigo
public void humanBeingInjureObserver(HumanBeing human){
if(SituationEvaluator.canBeInjured(human)){
Action saveHumanBeingAction = SituationEvaluator.trySaveHumanBeing(human);
this.doAction(saveHumanBeingAction);
}
}
}