OOP: Wo wendet ihr Vererbung an?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • OOP: Wo wendet ihr Vererbung an?

    Hallo zusammen,

    mich interessiert, in welchen Fällen ihr vererbt. Ich entwickle zwar objektorientiert, kann der Vererbung praktisch leider nur wenig abgewinnen, weil ich sie selten brauche/anwenden kann.

    Das tolle, praktische Beispiel a lá "Admin extends User" fällt flach, da die Benutzerlevel über die DB geregelt werden. Die "Hamster extends Tier"-Beispiele bringen mich auch nicht weiter, da ich im Grunde weiss wie es funktioniert.

    Momentan habe ich nur zwei verbende Klassen:
    - Basic.class (vererbt gängige Methoden, wie z.B. save(), delete(), find(), ...)
    - DB.class

    Deshalb bitte ich euch um Denkanstöße. Vielen Dank!
    Lasst euch nicht lumpen, hoch den Humpen!

  • #2
    Es ist definitiv keine Schande, kaum Vererbung zu benötigen. Ich nutze sie außerhalb von Unit-Tests fast ausschließlich in Zusammenhang mit abstrakten Klassen, wenn ich verschiedenen konkreten Klassen dieselbe Funktionalität zur Verfügung stellen, diese aber nicht redundant implementieren möchte. Das wäre ab PHP 5.4 auch über Traits zu lösen oder generell auch durch Aggregierung, indem gemeinsame Funktionalität in eine eigene Klasse ausgelagert und im Konstruktor injiziert wird.

    (Edit: Nutzung von Interfaces immer vorausgesetzt.)
    Zuletzt geändert von mermshaus; 09.07.2012, 13:59.

    Kommentar


    • #3
      Zitat von mermshaus Beitrag anzeigen
      Es ist definitiv keine Schande, kaum Vererbung zu benötigen. Ich nutze sie außerhalb von Unit-Tests fast ausschließlich in Zusammenhang mit abstrakten Klassen, wenn ich verschiedenen konkreten Klassen dieselbe Funktionalität zur Verfügung stellen, diese aber nicht redundant implementieren möchte. Das wäre ab PHP 5.4 auch über Traits zu lösen oder generell auch durch Aggregierung, indem gemeinsame Funktionalität in eine eigene Klasse ausgelagert und im Konstruktor injiziert wird.

      (Edit: Nutzung von Interfaces immer vorausgesetzt.)
      Na, das freut mich aber, dass ich nicht der einzige bin!
      Lasst euch nicht lumpen, hoch den Humpen!

      Kommentar


      • #4
        abstract class PaymentServiceAdapterAbstract {}

        class PayPalAdapter extends PaymentServiceAdapterAbstract {}
        class OgoneAdapter extends PaymentServiceAdapterAbstract {}
        class AmazonAdapter extends PaymentServiceAdapterAbstract {}

        Kommentar


        • #5
          PHP-Code:
          abstract class Parser {
              public function 
          __contruct($filename) {
                  
          // ...
              
          }

              abstract public function 
          parse();
          }

          final class 
          FileParser extends Parser{
              public function 
          parse() {
                  
          // ...
              
          }
          }

          final class 
          ConfigParser extends Parser {
              public function 
          parse() {
                  
          // ...
              
          }

          Vererbung und Interfaces sind auch ziemlich nützlich, um modular zu programmieren:
          PHP-Code:
          // class.Module.php

          namespace Base {
              abstract class 
          Module {
                  
          // ...
              
          }

          PHP-Code:
          // Categories.php

          namespace Categories {
              interface 
          Output {}
              interface 
          ImageProcessing{}
              interface 
          Config {}

          PHP-Code:
          // modules/SomeModule/SomeModule.php

          use Categories as Cat;

          class 
          SomeModule extends Base/Module implements Cat/ConfigCat/Output {
          // Eigentlich müssten oben Backslashes stehen, aber vB hat da wohl seine Probleme…
              // ...

          Zuletzt geändert von Malachite; 13.07.2012, 16:43.

          Kommentar

          Lädt...
          X