Rasenmäher oder Niki räumt alles auf

zurück

Niki muss mal wieder seinen Rasen mähen, viel Klee hat sich breit gemacht. Es soll die in der letzten Aufgabe gefundene Problemlösung verwendet werden.

Am einfachsten wird hierzu die Methode "vor" (die in "meinProgramm" nicht explizit benutzt wird) modifiziert. Bei jedem Schritt müsste Niki schlicht ein- oder mehrmals zusätzlich die Methode "nimm" ausführen und die Aufgabe wäre gelöst. Ohne Kenntnis oder Zugriff auf den Quelltext der bisher entwickelten Roboterklassen, kann man bei der OOP eine neue Roboterklasse (Roboter4) programmieren, die die Methode "vor" überschreibt. Hier können auch schon Schüler erahnen, welches Potenzial in der modernen objektorientierten Programmierung steckt.

Das Hauptprogramm unterscheidet sich praktisch nicht von der letzten Version:


import niki.Welt;
import niki.Niki;

public class meinProgramm{
    public static void main(String[] args){
        Welt meineWelt = new Welt("unbekannte.welt");
        Roboter4 meinRoboter = new Roboter4(meineWelt);    //andere Roboterklasse
	do{
		meinRoboter.vorZurWand();
		if (meinRoboter.rechtsFrei()){
			meinRoboter.rechtsKurve();
			meinRoboter.vorZurWand();
		}
		if (meinRoboter.linksFrei()){
			meinRoboter.linksKurve();
		}
    	} while (meinRoboter.linksFrei() && meinRoboter.rechtsFrei());
    meinRoboter.vorZurWand();
    meinRoboter.nimm();                                  // das letzte Feld soll ja auch gemäht werden.
    }
}

Hier die elegant kurze und einfache Klasse Roboter4, die durch Überschreiben der Methode "vor" die erforderliche Zusatzfunktionalität erreicht.


import niki.Welt;
import niki.Niki;

public class Roboter4 extends Roboter3{
	public Roboter4(Welt welt){
		super(welt);
	}
        public void vor(){
                while (! feldLeer()) nimm();
                super.vor();
        }
}

zurück

Version 0.9, 27.04.2004
Dr. Bernd Kokavecz