Otto: php4/OOP - Wiederverwendung von Klassen.

Hi,

angenommen ich möchte für meinen Onlineshop aus einem anderen Projekt die Klasse Person benutzen.
Die Klasse Person hat total viele Attribute und Klassen. Körperhöhe, Gewicht, etc,etc.

Wie mache ich das? Packe ich diese Klasse in das Verzeichnis "klassen" meines Projektes, erstelle die Unterordner z.B. Bewerber, Mitarbeiter, Kunde und in denen die verschiedenen gleichnamigen Klassen die von Person erben?

Aber dann habe ich doch zig Varibalen in der erbenden Klasse Kunde (wie Körpergröße) die ich garnicht benötige.

Oder verstehe ich das Konzept falsch.
Kann man der erbenden Klasse irgendwie mitteilen, das man verschiedene Attribute nicht benötigt? Denn sonst muss man die ja umsonst initialisieren,oder?

Danke

Otto

  1. Sup!

    Man haette eine Klasse "Person" mit ganz wenigen Attributen (Name, Alter) erzeugen sollen, dann haette man eine Klasse mit ganz vielen Attributen (Blutgruppe, Hornhautkruemmung) daraus ableiten koennen.
    Umgekehrt geht's nicht, denn eine abgeleitete Klasse muss alle Attribute/Methoden der Superklasse haben.

    Gruesse,

    Bio

    1. Hi,

      Man haette eine Klasse "Person" mit ganz wenigen Attributen (Name, Alter) erzeugen sollen, dann haette man eine Klasse mit ganz vielen Attributen (Blutgruppe, Hornhautkruemmung) daraus ableiten koennen.

      Für die Zukunft, wie Ordne ich diese Klassen denn dann an. Ich stehe nämlich gerade vor dem Problem und starre unentschlossen auf den Monitor.

      Wie organisiere ich die Ordnerstruktur.

      • person

      -- mediziner
      --- arzt
      --- naturheilkundler

      -- tourist
      --- deutscher
      --- hollaender

      Oder packt man alles in ein Verzeichnis ?

      Habe gestern und heute schon eine Antowort auf diese Frage im Netz gesucht und nur Müll gefunden.

      Also für erbende Klassen einen Unterordner mit dem gleichen namen wie die erbende Klasse?

      Ich arbeite gerade an einer OOP Internetseite und habe keine Ahnung wie ich die Pakete am besten gliedere.

      Ich habe z.B. für jede Abteilung eine eigene Klasse(z.B. Marketing, Buchhaltung, Bewerbungen, Shop).

      Dann habe ich Klassen wie z.B. Produkt, Warenkorb, Unterprodukt, News, News_nachricht, htmlTemplate, Mysql,person,mitarbeiter,kunde,bewerber.

      Gibt es irgendwo Tipps oder Hilfe, vielleicht ein Tutorial, wie man wiederverwendbare Pakete entwirft?

      Danke 2020202020 fach!

      Otto

      1. Halihallo Otto

        Wie organisiere ich die Ordnerstruktur.

        Was haben Klassen mit Ordnern oder Verzeichnissen zu tun? - Gar nichts!

        • person
          -- mediziner
          --- arzt
          --- naturheilkundler
          -- tourist
          --- deutscher
          --- hollaender

        Du hast eine geeignete Vererbungshierarchie bereits gefunden.

        Oder packt man alles in ein Verzeichnis ?

        Wie und wo du diese im Dateisystem ablegst ist irrelevant für die Programmiersprache,
        einzig und allein ist die Lesbarkeit vielleicht besser. Also würde ich vorschlagen,
        du packst diese in derselben Hierarchie in die Verzeichnisse, wie die Klassen vererbt
        werden.

        /Person.php
        /Person/Tourist.php
        /Person/Tourist/Deutscher.php

        oder so ähnlich.

        Also für erbende Klassen einen Unterordner mit dem gleichen namen wie die erbende Klasse?

        Würde ich empfehlen, ja.

        Ich habe z.B. für jede Abteilung eine eigene Klasse(z.B. Marketing, Buchhaltung, Bewerbungen, Shop).

        Das sind die Controls. Man könnte z.B. folgende Ordnung erstellen:

        /Controls/Marketing

        dann...

        Dann habe ich Klassen wie z.B. Produkt, Warenkorb, Unterprodukt, News, News_nachricht, htmlTemplate, Mysql,person,mitarbeiter,kunde,bewerber.

        Das sind die ... (*argh* vergessen), egal. Irgendwas was mit der Repräsentation von
        Daten zu tun hat, also z.B.

        /Controls/Marketing
        /Storage/Person
        /Storage/Person/Tourist
        /Design/htmlTemplate
        /Storage/Database/Mysql
        /Storage/Newssystem/News_nachricht
        ...

        Neben der normalen Vererbungshierarchie kannst du den Begriff 'Packet' noch umsetzen und
        diese auch in separate Verzeichnisse unterbringen (z.B. eben Packet Design, Storage,
        Storage/Newssystem, Controls, ...).

        Gibt es irgendwo Tipps oder Hilfe, vielleicht ein Tutorial, wie man wiederverwendbare Pakete entwirft?

        Informiere dich über UML, ER, ORM und verwandten Techniken, diese geben dir eine formale
        Basis, wie du dies alles Darstellst und implizit einige Tipps, wie man dies am
        sinnvollsten Umsetzen kann. Konkrete Links habe ich leider nicht.

        Viele Grüsse

        Philipp

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
        1. Hi,

          einzig und allein ist die Lesbarkeit vielleicht besser. Also würde ich vorschlagen,
          du packst diese in derselben Hierarchie in die Verzeichnisse, wie die Klassen vererbt
          werden.

          Das meinte ich ja auch so. :-)

          /Person.php
          /Person/Tourist.php
          /Person/Tourist/Deutscher.php

          oder so ähnlich.

          Ja, aber die Meisterfrage ist folgende:

          Ich habe nun eine Klasse Warenkorb. Unter /Controls/ befindet sich die Klasse Shop. Sollte ich der Lesbarkeit halber den Warenkorb in einem Unterverzeichnis der Klasse Shop ablegen.
          Ist ja eigentlich nicht vererbt worden.

          In welches Paket würde Warenkorb sonst reinpassen. Ein eigenes Paket Warenkorb wäre doch Bldsinn, oder?

          » Das sind die ... (*argh* vergessen), egal. Irgendwas was mit der Repräsentation von

          Daten zu tun hat, also z.B.

          Entity oder? :-)

          1. Halihallo Otto

            Ich habe nun eine Klasse Warenkorb. Unter /Controls/ befindet sich die Klasse Shop. Sollte ich der Lesbarkeit halber den Warenkorb in einem Unterverzeichnis der Klasse Shop ablegen.
            Ist ja eigentlich nicht vererbt worden.

            Nein, sollst du nicht. Controls sind Kontrollstrukturen, der Shop kann so eine sein,
            jedoch haben "Entities" mit Kontrollstrukturen nichts zu tun.
            Daten und Code soll in diesem Sinne auch bei OOP getrennt werden. Controls dienen der
            Abstraktion der Prozesse (Kunde anmelden, Kunde Warenkorb, Bestellung, ...), Entitäten
            repräsentieren nur die Daten, die von Controls verwendet werden.

            Um dir jedoch wirklich bei einer Strukturierung zu helfen müsste man wissen, was genau
            die Klassen machen.

            In welches Paket würde Warenkorb sonst reinpassen. Ein eigenes Paket Warenkorb wäre doch Bldsinn, oder?

            Packet Daten/Storage vielleicht?

            ggf. folgender Aufbau:

            /Shop/Data/WarenkorbInhalt extends /Storage/Data/DataObject
            extends /Storage/DatabaseAccess extends /Storage/Database/MySQL

            man sieht hier: MySQL, DatabaseAccess und DataObject können globale Klassen sein, die
            weiter spezialisiert werden können, wobei ein Shop WarenkorbInhalt eben schon sehr
            programmspezifisch ist und somit in die Klassensammlung "Anwendung - Shop" fallen.

            Allgemein habe ich für mich folgende Struktur angewöhnt:

            Ist die Klasse programmspezifisch wird es im "Programmverzeichnis" (Projektname)
            abgelegt (z.B. /MyShop/ShopSystem oder /MyShop/Data/CartItem).
            Für jede Klasse gilt: Sie wird einem Packet zugeordnet, welches ein "Sachverhalt"
            definiert, Sachverhalte können sein: Data, Control, Data/Integrity, Design,
            Interface, ...

            » Das sind die ... (*argh* vergessen), egal. Irgendwas was mit der Repräsentation von

            Daten zu tun hat, also z.B.
            Entity oder? :-)

            Mir lag etwas anderes auf der Zunge, aber Entity lasse ich auch durchgehen :-)

            Viele Grüsse

            Philipp

            --
            RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
            Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
      2. Hi,

        Wie organisiere ich die Ordnerstruktur.

        • person

        -- mediziner
        --- arzt
        --- naturheilkundler

        -- tourist
        --- deutscher
        --- hollaender

        Nach meinem OOP-Verständnis stellen einige der genannten Klassen Attribute des Typs Person dar:

        • person
            + Ausbildung: Studium Medizin
            + Beruf: Arzt/Naturheilkundler
            + Nationalität: Deutsch/Holländer

        -- Tourist: ist durchaus als eine Spezialisierung von Person zu verstehen

        Viele Grüße,
        Martin Jung