php4/OOP - Wiederverwendung von Klassen.
Otto
- design/layout
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
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
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.
-- 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
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
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.phpoder 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? :-)
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
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:
-- Tourist: ist durchaus als eine Spezialisierung von Person zu verstehen
Viele Grüße,
Martin Jung