
Verständnisproblem mit Objektorientierung
Hallo ...
Ich versuche immernoch durchzusteigen, wozu Klassen und Objekte gut
sind.
Dau folgendes Szenario:
Aus einer Datenbanktabelle werden alle Veranstaltungen ausgelesen und
in ein Array geschrieben
$_SESSION["Events"]["List"]["Count"] (Anzahl der
Veranstaltungen)
$_SESSION["Events"]["List"]["Data"][ 0 ... X ] (Ein Datensatz
für jede Veranstaltung)
Bei Auswahl einer Veranstaltung werden alle Reservierungen dieser
Veranstaltung aus einer weiteren Datenbanktabelle gelesen und in ein
Array geschrieben
$_SESSION["Events"]["Current"]["Item"] (Index aus
$_SESSION["Events"]["Data"][ 0 ... X ])
$_SESSION["Events"]["Current"]["Data"] (Datensatz der ausgewählten
Veranstaltung aus $_SESSION["Events"]["Data"][X])
$_SESSION["Events"]["Current"]["Reservations"]["List"]["Coun t"]
(Anzahl der Reservierungen der ausgewählten Veranstaltung)
$_SESSION["Events"]["Current"]["Reservations"]["List"]["Data "]
[ 0...X ] (Ein Datensatz für jede Reservierung der ausgew.
Veranstaltung)
Wird nun eine Reservierung ausgewählt erfolt noch einmal das selbe
Spiel wie bei den Veranstaltungen.
$_SESSION["Events"]["Current"]["Reservations"]["Current"]["I tem"]
(Index aus $_SESSION["Events"]["Current"]["Reservations"]["List"]
["Data"][ 0...X ])
$_SESSION["Events"]["Current"]["Reservations"]["Current"]["D ata"]
(Datensatz aus $_SESSION["Events"]["Current"]["Reservations"]["List"]
["Data"][X]
Wie kann ich dieses denn nun mit Objekten regeln.
Vorallem: Wenn ich eine Veranstaltung hinzufüge, füge ich einfacg
einen entsprechenden Datensatz nach $_SESSION["Events"]["List"]
["Data"] hinzu. Wo füge ich aber das Object einer neu angelegten
Veranstaltung hinzu?
Ich habe mal folgendes versucht:
class clEvent {
var $EventID;
var $Title;
var $Begin;
var $End;
function add($intEventID, $strTitle, $strBegin, $strEnd) {
$this->EventID =3D $intEventID;
$this->Title =3D $strTitle;
$this->Begin =3D $strBegin;
$this->End =3D $strEnd;
}
}
$objEvent =3D new clEvent;
print_r($objEvent);
$objEvent->add('-1','Testveranstaltung','19.02.2008 19:00', '');
print_r($objEvent);
Funktioniert soweit. Die Daten befinden sich im Object. Ein einfaches
"echo $objEvent.Title" bringt aber schon nicht mehr den erwarteten
erfolg. Hmm....
Ich denke mir, daß ich folgendermaßen vorgehen müßte:
1. Auslesen aller Veranstaltungen aus der Datenbank und Erstellen
eines Objektes für jede dieser Veranstaltung aus einer Klasse.
2. Eventuell erstellen eines Objektes für eine neue Veranstaltung.
3. Bei Auswahl einer Veranstaltung, Auslesen aller Reservierungen der
ausgewählten Veranstaltung und Erstellen eines Objektes aus einer
Klasse für jede dieser Reservierungen
Am Ende sollte doch eine Hierarchie wie Events.List.0....X und
Events.Current.List.0...X herauskommen.
Nur: wie fasse ich denn die Objekte für die Reservierungen zusammen
und wie bekomme ich diese Zusammenfassung in das Objekt Veranstaltung?
Wäre nicht schlecht, wenn mir jemand mal auf die Sprünge helfen
könnte. Ich denke, ich verstehe zwar den Sinn dieser Objekte, aber das
war es denn auch schon. Wie das ganze handzuhaben ist, kann ich
einfach nicht erkennen.
--
Rainer Krause
Re: Verständnisproblem mit Objektorientierung
Rainer Krause schrieb:
> Ich versuche immernoch durchzusteigen, wozu Klassen und Objekte gut
> sind.
PHP 4 oder PHP 5?
> Dau folgendes Szenario:
>
> Aus einer Datenbanktabelle werden alle Veranstaltungen ausgelesen und
> in ein Array geschrieben
> $_SESSION["Events"]["List"]["Count"] (Anzahl der
> Veranstaltungen)
> $_SESSION["Events"]["List"]["Data"][ 0 ... X ] (Ein Datensatz
> für jede Veranstaltung)
>
> Bei Auswahl einer Veranstaltung werden alle Reservierungen dieser
> Veranstaltung aus einer weiteren Datenbanktabelle gelesen und in ein
> Array geschrieben
> $_SESSION["Events"]["Current"]["Item"] (Index aus
> $_SESSION["Events"]["Data"][ 0 ... X ])
> $_SESSION["Events"]["Current"]["Data"] (Datensatz der ausgewählten
> Veranstaltung aus $_SESSION["Events"]["Data"][X])
> $_SESSION["Events"]["Current"]["Reservations"]["List"]["Coun t"]
> (Anzahl der Reservierungen der ausgewählten Veranstaltung)
> $_SESSION["Events"]["Current"]["Reservations"]["List"]["Data "]
> [ 0...X ] (Ein Datensatz für jede Reservierung der ausgew.
> Veranstaltung)
>
> Wird nun eine Reservierung ausgewählt erfolt noch einmal das selbe
> Spiel wie bei den Veranstaltungen.
>
> $_SESSION["Events"]["Current"]["Reservations"]["Current"]["I tem"]
> (Index aus $_SESSION["Events"]["Current"]["Reservations"]["List"]
> ["Data"][ 0...X ])
> $_SESSION["Events"]["Current"]["Reservations"]["Current"]["D ata"]
> (Datensatz aus $_SESSION["Events"]["Current"]["Reservations"]["List"]
> ["Data"][X]
>
>
> Wie kann ich dieses denn nun mit Objekten regeln.
So würde ich das für den Anwender am Ende machen:
$eventlist = new Eventlist();
$event = new Event(...);
$eventlist->addEvent($event);
$event = new Event(...);
$eventlist->addEvent($event);
foreach($eventlist->getEvents() as $event)
{
print $event->getTitle();
}
Wie dazu die Klassen aussehen kannst dir sicherlich denken bzw. hängt
vor allem davon ab ob PHP 4 oder PHP 5.
> Vorallem: Wenn ich eine Veranstaltung hinzufüge, füge ich einfacg
> einen entsprechenden Datensatz nach $_SESSION["Events"]["List"]
> ["Data"] hinzu. Wo füge ich aber das Object einer neu angelegten
> Veranstaltung hinzu?
Ich würde den Datensatz in ein Objekt hinzufügen, dass die Events
verwaltet, siehe obendrüber. Diese ganze Liste kannst dann in die
Session setzen.
> Ich habe mal folgendes versucht:
>
> class clEvent {
>
> var $EventID;
> var $Title;
> var $Begin;
> var $End;
>
> function add($intEventID, $strTitle, $strBegin, $strEnd) {
> $this->EventID = $intEventID;
> $this->Title = $strTitle;
> $this->Begin = $strBegin;
> $this->End = $strEnd;
> }
> }
> $objEvent = new clEvent;
>
> print_r($objEvent);
> $objEvent->add('-1','Testveranstaltung','19.02.2008 19:00', '');
> print_r($objEvent);
>
> Funktioniert soweit. Die Daten befinden sich im Object. Ein einfaches
> "echo $objEvent.Title" bringt aber schon nicht mehr den erwarteten
> erfolg. Hmm....
Wie wäre es mit "echo $objEvent->Title"?
Aber generell wäre es nicht schlecht, wenn man die Membervariablen nicht
direkt von außen ändern kann -> Stichwort Datenkapsel.
Des weiteren schreibt man Variablen eigentlich immer klein und
Klassennamen immer groß (also gilt für den ersten Buchstaben). Ist zwar
keine Regel, aber zumindest erleichtert es anderen durchzublicken.
> Ich denke mir, daß ich folgendermaßen vorgehen müßte:
>
> 1. Auslesen aller Veranstaltungen aus der Datenbank und Erstellen
> eines Objektes für jede dieser Veranstaltung aus einer Klasse.
> 2. Eventuell erstellen eines Objektes für eine neue Veranstaltung.
> 3. Bei Auswahl einer Veranstaltung, Auslesen aller Reservierungen der
> ausgewählten Veranstaltung und Erstellen eines Objektes aus einer
> Klasse für jede dieser Reservierungen
>
> Am Ende sollte doch eine Hierarchie wie Events.List.0....X und
> Events.Current.List.0...X herauskommen.
>
> Nur: wie fasse ich denn die Objekte für die Reservierungen zusammen
> und wie bekomme ich diese Zusammenfassung in das Objekt Veranstaltung?
//Das Event der Nummer 1
$event = $eventlist->getEvent(1);
//Reserverierung mit der Nummer 1
$reservierung = $event->getReserverierung(1);
Wo genau liegt dein Problem mit einer Hierarchie?
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: Verständnisproblem mit Objektorientierung
Christoph Herrmann wrote:
> PHP 4 oder PHP 5?
Diese Frage noch ernsthaft? Jetzt noch PHP 4 einzusetzen bedarf aber
guter Gründe, unter welchem der Provider nicht gehört: Diesen wechsel=
t
man sofort.
--
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"
Re: Verständnisproblem mit Objektorientierung
Frank Burmeister schrieb:
> Christoph Herrmann wrote:
>
>> PHP 4 oder PHP 5?
>
> Diese Frage noch ernsthaft? Jetzt noch PHP 4 einzusetzen bedarf aber
> guter Gründe, unter welchem der Provider nicht gehört: Diesen wechselt
> man sofort.
Wenn er keine Modifier bei seinen Membervariablen setzt finde ich diese
Frage durchaus berechtigt. Vor allem da die Möglichkeiten und die
Verwendung von Klassen davon abhängig sind. Bringt nichts ihm viel von
Datenkapselung vorzuschwärmen, wenn PHP 4 gar keine wirklichen bietet.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: Verständnisproblem mit Objektorientierung
Rainer Krause wrote:
> Hallo ...
>
> Ich versuche immernoch durchzusteigen, wozu Klassen und Objekte gut
> sind.
Du erstellst prinzipiell für jede Datenbanktabelle eine eigene Klasse. =
Die Klassen sollten Grundfunktionen wie Auslesen, Löschen, Speichern
durch eine quasi "Basis"-Klasse beinhalten. Das ist quasi dann ein
simples ORM-Modell, welches bestimmt nicht so leistungsfähig wie die
großen sind, aber, wenn man es richtig macht, auch nicht so kompliziert=
und überall anwendbar, wo ORM-Modelle noch nicht verwendet wurden.
class base {
public base(){}
public store(){}
public delete(){}
public init(){}
...
}
Nun eine Klasse Veranstaltung:
class Reservierung extends base{
}
class Veranstaltung extends base{
protected $reservation=3Darray();
public addReservierung($resObj){
$this->reservation[]=3D$resObj;
}
public store(){
foreach( $this->reservation as $resObj ){
$resObj->store();
}
base::store();
}
}
Im Code dann prinzipiell das hier:
$veranstaltung=3Dnew Veranstaltung();
$reservierung=3Dnew Reservierung();
$reservierung->add{SOME DATA}($datas);
$veranstaltung->addReservieriung($reservierung);
$veranstaltung->store();
Obige Darstellung hat noch keinerlei Fehlerbehandlung etc. die sich mit
diesem Aufbau am einfachsten mit Transactionssicheren Datenbanken lösen=
lassen.
Du stehst bei einer derartigen Implementierung gerade jetzt am
Scheideweg: ORM oder nicht.
Fürs NICHT spricht:
- du kannst das umsetzen (Meine Darstellung ist EXTREMST verkürzt)
- du scheust keinen (lohnenden) Mehraufwand
- du willst flexibel sein.
- du willst eine Lösung haben, die überall eingesetzt werden kann, au=
f
bestehendes aufsetzt. Das geht mit ORM soweit ich das probiert habe,
nicht (Propel und ...(namen vergessen)?)
- du magst keine nach außen simplen aber innen komplizierte Systeme.
Fürs ORM spricht:
- Du arbeitest laufend mit unterschiedlichen Datenbanken
- Du scheust jedweden Aufwand und willst schnell zu Resultaten kommen
- Du willst ein System haben, welches zunächst einmal, ohne
grundlegende Fehler daherkommen, wie sie beim Neuimplementieren mal
auftreten.
- Du hast wahnsinnig komplizierte Zusammenhänge von Tabellen (so 6 bis =
10 im Schnitt), die dich in den SQL-Statements aufhalten und die zudem
noch auf unterschiedlichste Datenbanken laufen müssen (s.o.)
- Du willst dich irgendwann sowie zu JAVA bekehren lassen (dort gibt es
hervorragend ausgereifte Modelle)
--
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"
Re: Verständnisproblem mit Objektorientierung
Christoph Herrmann schrieb:
> Frank Burmeister schrieb:
>> Christoph Herrmann wrote:
>>
>>> PHP 4 oder PHP 5?
>>
>> Diese Frage noch ernsthaft? Jetzt noch PHP 4 einzusetzen bedarf aber
>> guter Gründe, unter welchem der Provider nicht gehört: Diesen wech=
selt
>> man sofort.
>
> Wenn er keine Modifier bei seinen Membervariablen setzt finde ich diese=
> Frage durchaus berechtigt. Vor allem da die Möglichkeiten und die
> Verwendung von Klassen davon abhängig sind. Bringt nichts ihm viel vo=
n
> Datenkapselung vorzuschwärmen, wenn PHP 4 gar keine wirklichen bietet=
=2E
Worauf Frank wohl hinaus wollte ist: Es macht keinen Sinn, irgendetwas
anhand von PHP4 zu erklären. Das gibt es praktisch nicht mehr, wenn man=
nicht mit Altlasten kämpft. Du hättest daher ruhig PHP5 voraussetzen =
können.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Verständnisproblem mit Objektorientierung
Rainer Krause schrieb:
> Hallo ...
>
> Ich versuche immernoch durchzusteigen, wozu Klassen und Objekte gut
> sind.
Such mal nach Design Patterns.
> Aus einer Datenbanktabelle werden alle Veranstaltungen ausgelesen und
> in ein Array geschrieben
....
> Wie kann ich dieses denn nun mit Objekten regeln.
Wie die anderen schon geschrieben haben ist das was du hier beschreibst ORM:
http://de.wikipedia.org/wiki/Object-Relational_Mapping
OOP ist aber noch viel mehr als nur 'Datenhalte'-Klassen.
> Vorallem: Wenn ich eine Veranstaltung hinzufüge, füge ich einfacg
> einen entsprechenden Datensatz nach $_SESSION["Events"]["List"]
> ["Data"] hinzu. Wo füge ich aber das Object einer neu angelegten
> Veranstaltung hinzu?
Zu einer Komposition.
http://de.wikipedia.org/wiki/Kompositum_%28Entwurfsmuster%29
> Ich denke mir, daß ich folgendermaßen vorgehen müßte:
>
> 1. Auslesen aller Veranstaltungen aus der Datenbank und Erstellen
> eines Objektes für jede dieser Veranstaltung aus einer Klasse.
Blos nicht. Ich habe z.B. Momentan hab ich 40000 Veranstaltungen in der DB.
> 2. Eventuell erstellen eines Objektes für eine neue Veranstaltung.
Ja.
> 3. Bei Auswahl einer Veranstaltung, Auslesen aller Reservierungen der
> ausgewählten Veranstaltung und Erstellen eines Objektes aus einer
> Klasse für jede dieser Reservierungen
Ja.
> Nur: wie fasse ich denn die Objekte für die Reservierungen zusammen
> und wie bekomme ich diese Zusammenfassung in das Objekt Veranstaltung?
Veranstaltung folgt dem Muster einer Komposition. Deshalb kann
Veranstaltung auch Reservierungen besitzen.
Dein ORM muss hier die 1:N Beziehung auflösen können.
> Wäre nicht schlecht, wenn mir jemand mal auf die Sprünge helfen
> könnte. Ich denke, ich verstehe zwar den Sinn dieser Objekte, aber das
> war es denn auch schon. Wie das ganze handzuhaben ist, kann ich
> einfach nicht erkennen.
Re: Verständnisproblem mit Objektorientierung
Niels Braczek schrieb:
> Worauf Frank wohl hinaus wollte ist: Es macht keinen Sinn, irgendetwas
> anhand von PHP4 zu erklären. Das gibt es praktisch nicht mehr, wenn man
Habe ich irgendwas dem OP erklärt was PHP 4 betrifft?
> nicht mit Altlasten kämpft. Du hättest daher ruhig PHP5 voraussetzen können.
Sind Annahmen nicht der Feind eines jeden Entwicklers? ;)
Natürlich kann man annehmen, dass der OP PHP 5 besitzt, ist ja
schließlich die aktuelle Version. Aber nachfragen ist wohl eher der
sichere Weg, vor allem wenn der OP ein Beispiel bringt, dass wohl noch
aus PHP 4 Zeiten stammt.
Die Frage war nicht aus dem Grunde gestellt, dass man ihm dann das Ganze
für PHP 4 dann erklärt, sondern eher dass man ihn darauf hinweist, dass
die erklärten Dinge nur unter PHP 5 funktionieren.
Sobald es um Klassen geht sollte man da sehr aufpassen, da die beiden
Versionen in dem Bereich nicht unbedingt kompatible sind. Daher wollte
ich mit der simplen Frage einfach Unannehmlichkeiten für uns und den OP
aus dem Weg gehen.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: Verständnisproblem mit Objektorientierung
Christoph Herrmann schrieb:
> Niels Braczek schrieb:
>
>> Worauf Frank wohl hinaus wollte ist: Es macht keinen Sinn, irgendetwas
>> anhand von PHP4 zu erklären. Das gibt es praktisch nicht mehr, wenn man
>
> Habe ich irgendwas dem OP erklärt was PHP 4 betrifft?
Noch nicht. Deine Frage lässt sich aber so interpretieren, dass Du
Derartiges zumindest in Erwägung gezogen hast.
> Die Frage war nicht aus dem Grunde gestellt, dass man ihm dann das Ganze
> für PHP 4 dann erklärt, sondern eher dass man ihn darauf hinweist, dass
> die erklärten Dinge nur unter PHP 5 funktionieren.
Hast Du irgendwas dem OP erklärt, was PHP 5 betrifft?
Gruß. Claus
Re: Verständnisproblem mit Objektorientierung
Claus Reibenstein schrieb:
> Noch nicht. Deine Frage lässt sich aber so interpretieren, dass Du
> Derartiges zumindest in Erwägung gezogen hast.
Interpretieren lässt sich viel. Zum Beispiel lässt sich interpretieren,
dass der OP noch PHP 4 nutzt, weil seine Beispielklasse keine Modifier
benutzt...
> Hast Du irgendwas dem OP erklärt, was PHP 5 betrifft?
- Dass er eine Datenkapsel in Erwägung ziehen sollte, was in PHP 4 wegen
den fehlenden Modifier nicht wirklich geht?
Warum muss ich mich eigentlich rechtfertigen, wenn ich eine berechtigte
Frage stelle um eventuelle Probleme beim OP zu vermeiden?
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: Verständnisproblem mit Objektorientierung
Christoph Herrmann schrieb:
> Warum muss ich mich eigentlich rechtfertigen, wenn ich eine berechtigte
> Frage stelle um eventuelle Probleme beim OP zu vermeiden?
Wer hat von Dir eine Rechtfertigung verlangt?
Gruß. Claus