Ankündigung

Einklappen
Keine Ankündigung bisher.

Video Diskussion: Wieso man extends vermeiden sollte und was gibt es als alternative?

Einklappen

Neue Werbung 2019

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

  • BlackScorp
    antwortet
    Zitat von tomBuilder Beitrag anzeigen
    Um mich auch nochmal einzumischen,
    traits zu nutzen um Vererbung zu umgehen, halte ich wie die meisten hier für suboptimal.
    ich versuche hier nicht Vererbung umzugehen sondern die leute dazu animieren, Traits zu nutzen statt extends nur um methoden innerhalb der Klasse zur Verfügung zu stellen. Es ging doch darum dass extends Falsch eingesetzt wird, ich versuche doch garnicht die Vererbung an sich zu umgehen, ich nutze sehr wohl interfaces zum Beispiel. Und auch abstrakte Klassen etc. Es ging wirklich nur darum zu sagen, "Hört auf extends zu nutzen wenn es nicht notwendig ist und nutzt im Zweifel dann Traits"

    Zitat von tomBuilder Beitrag anzeigen
    Ein genaues Fassen der "Realität", welche es abzubilden gilt, ist allerdings auch notwendig.

    In Deinem Beispiel erklärst Du der Vogel kann fliegen, was keine Eigenschaft eines Vogels ist, genauso wenig wie das Würmer essen
    Habe ich auch nicht gesagt, eine Klasse hat Eigenschaften UND Methoden, und fliegen ist eine Methode/Aktion der Klasse

    Zitat von tomBuilder Beitrag anzeigen

    Das Enähren mit Fischen beispielsweise kann ein ein Mensch, ein Vogel, Ein Eisbär und da es Tranlampen mal gab sichert auch irgendwie ein Motor.
    Genau darauf wollte ich hinaus. Statt der Ableitung nutzt du eben Traits damit die die gleiche Methode, an Klassen zuweisen kannst. Du kannst halt kein Mensch von einem Vogel etc ableiten aber du kannst die "Fähigkeit" fliegen in ein Trait umwandeln. Danach kannst du abbilden was auch immer du willst mit Interfaces und Traits. Im Grunde ist es das gleiche wie ein Component Entity system. Du hast Komponnenten in traits definiert und zu den Komponenten hast du dann interfaces. Du kannst dann einge Beliebige Entity zusammenbauen, mit den Interfaces definierst du welche Fähigkeiten das ENtity haben soll und die Traits haben dann die konkreten Methoden.


    Ich finds faszinieren, was jeder hier interpretiert hat, das sagt mir dass ich echt schlecht bin, darin meine "Message" deutlich zu zeigen. Werde dran arbeiten. Eure Antworten haben mir echt weitergeholfen

    Einen Kommentar schreiben:


  • tomBuilder
    antwortet
    Um mich auch nochmal einzumischen,
    traits zu nutzen um Vererbung zu umgehen, halte ich wie die meisten hier für suboptimal.
    Ein genaues Fassen der "Realität", welche es abzubilden gilt, ist allerdings auch notwendig.

    In Deinem Beispiel erklärst Du der Vogel kann fliegen, was keine Eigenschaft eines Vogels ist, genauso wenig wie das Würmer essen

    Der Vogel hat Federn, Flügel und ist der letzte Nachfahre des Dinosauriers.

    Ernährung, kann mit Ass, Würmen, Fischen und kleineren Wirbeltieren erfolgen soweit ich weiss.

    Das Enähren mit Fischen beispielsweise kann ein ein Mensch, ein Vogel, Ein Eisbär und da es Tranlampen mal gab sichert auch irgendwie ein Motor.


    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    Zitat von Arne Drews Beitrag anzeigen
    Das liest sich für mich jetzt aber ein wenig so: "Wer das komplexe Thema Vererbung noch nicht verstanden hat, sollte auf extends verzichten und auf Traits setzen."?
    Macht es dann nicht mehr Sinn, demjenigen nahezulegen, Vererbung zu lernen, um es richtig einzusetzen?!
    jain. Ja man hat das Thema Vererbung noch nicht Verstanden, aber ich wollte auch sagen dass man nicht unbedingt extends braucht nur um Methoden zu vererben. Wenn man extends einsetzt NUR damit man per parent::doSomething auf eine methode zugreift, dann ist man mit einem Trait besser dran

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    Zitat von BlackScorp Beitrag anzeigen
    Das setzt aber voraus, dass man Vererbung auch verstanden hat, ich beziehe mich im Video auch nicht auf interfaces sondern nur auf das "extends". Das Video soll dazu dienen um zu Zeigen dass man extends nicht einfach so verwenden kann/soll und für die 0815 Fälle reicht ein Trait aus.
    Das liest sich für mich jetzt aber ein wenig so: "Wer das komplexe Thema Vererbung noch nicht verstanden hat, sollte auf extends verzichten und auf Traits setzen."?
    Macht es dann nicht mehr Sinn, demjenigen nahezulegen, Vererbung zu lernen, um es richtig einzusetzen?!

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    Zitat von G.Schuster Beitrag anzeigen
    Traits und Vererbung verfolgen doch zwei vollkommen unterschiedliche Ziele, die kann man nicht beliebig ersetzen.
    Mir wäre jedenfalls nicht bekannt, dass man mittels Traits Interfaces abbilden / definieren könnte, alleine deshalb ziehe ich saubere Klassen vor - ohne "WTF?".
    Ein Blick in die Abstract / das Interface und alles ist klar, das überwacht sogar die IDE für mich
    ​​​​Ein Trait kommt eher in Frage, wenn Methoden extrem generisch (summiere a und b) sind oder in mehreren - aber eben nicht allen - Implementierungen eines Interfaces eingesetzt werden.
    Das setzt aber voraus, dass man Vererbung auch verstanden hat, ich beziehe mich im Video auch nicht auf interfaces sondern nur auf das "extends". Das Video soll dazu dienen um zu Zeigen dass man extends nicht einfach so verwenden kann/soll und für die 0815 Fälle reicht ein Trait aus.


    Einen Kommentar schreiben:


  • G.Schuster
    antwortet
    Traits und Vererbung verfolgen doch zwei vollkommen unterschiedliche Ziele, die kann man nicht beliebig ersetzen.
    Mir wäre jedenfalls nicht bekannt, dass man mittels Traits Interfaces abbilden / definieren könnte, alleine deshalb ziehe ich saubere Klassen vor - ohne "WTF?".
    Ein Blick in die Abstract / das Interface und alles ist klar, das überwacht sogar die IDE für mich
    ​​​​Ein Trait kommt eher in Frage, wenn Methoden extrem generisch (summiere a und b) sind oder in mehreren - aber eben nicht allen - Implementierungen eines Interfaces eingesetzt werden.

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    Schade dass die Diskussion nicht auf Youtube stattfindet wäre auf jeden Fall hilfreich für den Youtube Algorithmus

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    Zitat von Anyone Beitrag anzeigen
    Gutes Video! Allerdings stimme ich zu, dass Vererbung ein äußerst mächtiges Werkzeug ist. Traits sind auch mächtig , aber wie Zeichen32 bereits geschrieben hat kann es da schon zu vielen WTF Momenten kommen.

    Auf meiner Arbeit verwenden wir Java und dort haben einige meiner Vorgänger extrem verkackt, eben weil sie keine Vererbung verwendet haben. Dort wird eine Klasse für 100 verschiedene Use Cases verwendet und entsprechend „generisch“ versucht der Code zu sein. Das ist allerdings deutlich nach hinten losgegangen und wäre kein Problem gewesen, wenn man da einfach nur Vererbung verwendet hätte...
    In java habt ihr da sogar Private Klassen und Public Classen, das fehlt uns in PHP. Aber ja "Generisch" sein ist auch ein Punkt dass ich erwähnen sollte.. weil die Generik führt dann wiederum schnell zum Godobject.

    Ich verbuche das mal unter "Unser Gehirn denkt zu kompliziert und mag es auch so"

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    Zitat von Zeichen32 Beitrag anzeigen
    Mit Traits sollte man aber auch eher sparsam umgehen, denn sie bringen Magie und hierdurch WTF Momente in den Code.
    Gerade wenn man viele Traits verwendet und sich Methoden oder Eigenschaften überschneiden wird dies schnell unübersichtlich.
    https://www.php.net/manual/de/langua...raits.conflict
    Guter Einwand, ich hatte halt bisher noch nie ein Fall dass ein Trait viel machen konnte, mehr als eine Methode hatten die bei mir noch nicht, war nicht notwendig.

    Einen Kommentar schreiben:


  • Anyone
    antwortet
    Gutes Video! Allerdings stimme ich zu, dass Vererbung ein äußerst mächtiges Werkzeug ist. Traits sind auch mächtig , aber wie Zeichen32 bereits geschrieben hat kann es da schon zu vielen WTF Momenten kommen.

    Auf meiner Arbeit verwenden wir Java und dort haben einige meiner Vorgänger extrem verkackt, eben weil sie keine Vererbung verwendet haben. Dort wird eine Klasse für 100 verschiedene Use Cases verwendet und entsprechend „generisch“ versucht der Code zu sein. Das ist allerdings deutlich nach hinten losgegangen und wäre kein Problem gewesen, wenn man da einfach nur Vererbung verwendet hätte...

    Einen Kommentar schreiben:


  • Zeichen32
    antwortet
    Mit Traits sollte man aber auch eher sparsam umgehen, denn sie bringen Magie und hierdurch WTF Momente in den Code.
    Gerade wenn man viele Traits verwendet und sich Methoden oder Eigenschaften überschneiden wird dies schnell unübersichtlich.
    https://www.php.net/manual/de/langua...raits.conflict

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    Zitat von jspit Beitrag anzeigen
    Was ich damit sagen will:
    Vererbung und Traits sind Mechnismen der PHP-Programmierung, die beide ihre Berechtigung haben. Richtiger Einsatz der Mechanismen vorausgesetzt.
    Ja, nur halt im Richtigen Einsatz happert es oft, desswegen meinte ich, eher Traits nutzen und dann wenn man wirklich sicher ist, dass man vererbt, da dann extends.

    Habe ja im Video gesagt, ich schreibe meine Klassen mittlerweile alle mit final, damit ich dann später keine bösen Überraschungen kriege. Wenn ich Ableite, dann mache ich mir genaue Gedanken welche Auswirkungen könnte es haben. Bei einem Trait muss ich mir keine Gedanken machen weil ich die einfach ersetzen kann. Es ist einfacher etwas zu erstetzen, was man benutzt und nicht was man als Basis verwendet

    Einen Kommentar schreiben:


  • jspit
    antwortet
    Ganz gut gemacht, aber mit dem Inhalt gehe ich nicht konform.

    Motto: Nimm kein Hammer sondern besser immer eine Kneifzange.

    Was ich damit sagen will:
    Vererbung und Traits sind Mechnismen der PHP-Programmierung, die beide ihre Berechtigung haben. Richtiger Einsatz der Mechanismen vorausgesetzt.

    Einen Kommentar schreiben:

Lädt...
X