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);

}

}

}