Jörg Peschke: wieso objektorientiert?

Beitrag lesen

Hallo,

So -  was ist jetzt der Vorteil der zweiten (objektorientierten) Variante? Ich mag mir schon vorher Gedanken machen wie ich die Programmierung angehe aber steig da noch nicht so ganz durch.

Fragst Du allgemein, weil Du die Vorteile  Objektorientierter Programmierung wissen willst?

Oder willst Du es speziell für Perl wissen?
Denn in Perl ist die OO wirklich ziemlich angeflanscht und nicht unbedingt "sexy" in der Benutzung, finde ich.
Deswegen hängt es sehr vom Zweck und von der Projektgröße (und vom eigenen Gusto) ab, ob man OO in Perl programmiert.

Falls Deine Frage aber allgemein war: Für mich ist der Hauptvorteil der OO-Programmierung (neben denen im Link oben genannten) der Umstand, dass man in der Realität fast immer mit Objekten/Klassen zu tun hat, und selten mit (reinen) Prozeduren.
Da man beim Programmieren immer versucht, die reale Welt abzubilden, ist OO-orientierte Programmierung das, was eher unserem Denken entspricht:

Z.b.: Ich kenne nicht 20 verschiedene Tätigkeiten "fahren", sondern nur eine, aber die ist abhängig vom Objekt.
"Führe" ich "prozedural", müsste ich mir zig verschiedene Vorgänge merken.

fahre_fahrrad (...);
fahre_auto(...);
fahre_altes_auto(...);

Ich müsste auch ein Objekt erst fragen, wie ich es fahren soll.
switch(obj.type) {
   case 'fahrrad' : fahre_fahrrad (obj); break;
   ...
   default: geh_zu_fuss();
}

Nicht auszudenken, wenn ich eines Tages ein neues fahrbares Objekt kennenlerne (ein Skateboard z.b.) :) .

In der Realität habe ich aber nur Objekte mit denen ich "fahren" kann (Fahrräder, Autos, und davon vielleicht Spezialfälle (also ein "altes Auto") - ich merke mir nicht verschiedene Vorgänge sondern nur die Objekte, und wie ich sie benutze.

interface Fahrzeug {
   function drive();
}

class fahrrad implements Fahrzeug  {
   public function drive() {
      this.aufsteigen ();
      this.treten();
   }
}

class auto implements Fahrzeug  {
   public function drive (){
       this.kupplung("treten")
       this.zuendung();
       this.setGang(1);
       this.kupplung("loslassen");
   }
}

class altesAuto implements Fahrzeug extends auto {
   public function drive() {
        this.yoke_ziehen();
        super.drive();
   }
}

Und alle diese wunderbaren Objekte hören auf den einzigen Methodenaufruf "drive()" und wissen dann selbst, was zu tun ist.

Grüße,
Jörg