 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Fragen stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
10.11.2005, 09:28
|
#16
|
|
TP-Specialist
Registriert seit: Aug 2002
|
@mike: Ich weiß nicht recht, ob ich dich richtig verstanden habe.
Der Vorteil einer abstrakten Klasse liegt hauptsächlich in der Tatsache, dass die Methoden in der Kindklasse überschrieben werden müssen. Das ist so gesehen eine Vorsichtsmaßnahme, um eine Gruppe von Klassen zu vereinen.
Was genau stört dich an dem Entwurf, was würdest du evtl. ändern?
|
|
|
10.11.2005, 12:30
|
#17
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
Technisch stören tut mich an dem Entwurf von dir nix, wenn das so rübergekommen ist, dann sorry.
Aber gerade bei dem Beispiel liegt natürlich die Frage nahe, warum man sich die Arbeit überhaupt antun sollte zumal ja dann doch wieder sämtliche Funktionalität in den abgeleiteten Klassen stattfindet - sogar die einzelnen Membervariablen sind in den Detailklassen definiert.
Berechtigung haben solche rein virtuellen Basisklassen natürlich. Aber das hängt imho von der Aufgabenstellung ab (wie z.B. mein Beispiel des Objekthashes), das wollte ich damit eigentlich ausführen.
...und eben auch anmerken, dass in PHP durch die lockere Behandlung von Typen meinermeinung nach solche Objektfaktorisierung nicht notwendig ist, weil sich PHP eh einen Dreck darum schert. Is jedenfalls mein Eindruck diesbezüglich - ich kenn aber die 5er nicht.
Dass abstrakte Klassen nicht instaziert werden können hab ich übersehen zu erwähnen und natürlich hast du recht, dass so die Benutzer gezwungen werden, die noch fehlende Funktionalität zu implementieren.
...aber ich glaub wir driften schon wieder gefährlich nah am THEOretischen (*schenkelklopf*) Abgrund entlang 
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
10.11.2005, 12:56
|
#18
|
|
TP-Specialist
Registriert seit: Aug 2002
|
Zitat:
|
Zitat von mike
Technisch stören tut mich an dem Entwurf von dir nix, wenn das so rübergekommen ist, dann sorry.
|
Ist nicht, war nur eine Frage!
Zitat:
|
Zitat von mike
...aber ich glaub wir driften schon wieder gefährlich nah am THEOretischen (*schenkelklopf*) Abgrund entlang 
|
Das kann sein, vielleicht denkst du schon vor dem Entwurf einer Klasse an die Verwendung danach, d.h. wie aufwendig diese sein könnte...
|
|
|
10.11.2005, 13:12
|
#19
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
Zitat:
|
Zitat von Strogij
Ist nicht, war nur eine Frage! 
Das kann sein, vielleicht denkst du schon vor dem Entwurf einer Klasse an die Verwendung danach, d.h. wie aufwendig diese sein könnte...
|
verstehe ich jetzt nicht 
Sollte dieser Schritt nicht eh immer erfolgen noch BEVOR man in die Tastatur klopft?
Aber lassen wir das - backt to topic, bevor wir vom Mod noch wegen OT eins auf den Rüssel kriegen 
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
10.11.2005, 13:58
|
#20
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
so ... der running-gag is back inda house,
ich hab meinen picasso fertig. vielleicht haette ich etwas mehr zeit in die zeichnung und weniger in die suche nach der software stecken sollen (an der stelle nochmal dank an meinen vetter fuer die hilfe ... und geduld  ). aber das ist mein ergebnis: mein_erstes_diagramm
was mir aufgefallen ist, waehrend ich pinsellutschenderweise kunstvoll strich um strich setzte: es kommt wohl am ehesten darauf an, wie man die gruppen anlegt und was gegenstand der betrachtung sein soll. hier stehen jetzt die kosten im mittelpunkt und alle anderen "objekte" wirken sich auf deren zustand aus. man koennte aber doch sicher auch jeden anderen punkt in die mitte der betrachtung ruecken?!
|
|
|
10.11.2005, 17:05
|
#21
|
|
TP-Specialist
Registriert seit: Aug 2002
|
Zitat:
|
Zitat von mike
Sollte dieser Schritt nicht eh immer erfolgen noch BEVOR man in die Tastatur klopft? 
|
So meine ich das nicht. Aber man fasst eben Daten zusammen, die logischerweise zusammen gehören - das soll der Sinn von Klassen sein. So wie ich dich verstanden habe, setzt du da Prioritäten, d.h. du könntest statt einer sauberen OOP-Anwendung Arrays verwenden.
Falls ich jetzt Mist Rede, haben wir uns wohl nicht gefangen, ist aber auch nicht schlimm. 
|
|
|
10.11.2005, 20:32
|
#22
|
|
TP-Specialist
Registriert seit: Aug 2002
|
Dann fange ich mal an: Wenn Kosten im Vordergrund stehen, kann gleich eine Klasse "Kosten" entstehen. Wenn ich die Kosten im Überblick haben möchte, möchte ich vor allem alles sortiert und notiert haben. Ich würde deshalb eine Klasse "Kosten" entwerfen, die mit eigenen Objekten über die Methode Kosten::update(Kosten $objekt) kommunizieren kann. Wir können dann mit nur einer Klasse, aber mit vielen Objekten hin und her rechnen. In C++ hat man die Möglichkeit, die Operatoren +, - usw. zu überladen, das wäre natürlich noch schöner, aber das geht auch ohne.
Ein Anfang:
PHP-Code:
class Kosten { // Guthaben private $guthaben; // Index für das Array private $index = 0; // Notiert das Datum private $arr_datum = array(); // Notiert die Beschreibung public $arr_beschreibung = array(); // Notiert die Beträge private $arr_betraege = array();
public function __construct($guthaben = 0) { $this->guthaben = $guthaben; } // Erstellt einen neuen Eintrag public function neu($betrag, $beschreibung) { $this->guthaben += $betrag; $this->arr_datum[$this->index] = time(); $this->arr_beschreibung[$this->index] = $beschreibung; $this->arr_betraege[$this->index] = $betrag;
$this->index += 1; } // Übernimmt die Daten von einem anderen Objekt public function update(Kosten $obj) { // Wir errechnen das neue Guthaben $this->guthaben += $obj->guthaben;
// Hinzufügen aller Daten von $obj, die uns interessieren for ($i = $this->index, $j = 0; $i < $this->index + $obj->index; ++$i, ++$j) { $this->arr_datum[$i] = $obj->arr_datum[$j]; $this->arr_beschreibung[$i] = $obj->arr_beschreibung[$j]; $this->arr_betraege[$i] = $obj->arr_betraege[$j]; } // Index aktualisieren: $this->index += $obj->index; } // Guthaben ausgeben public function get_guthaben() { return $this->guthaben; } }
// Wir erstellen einige Objekte // $main mit 500 € Guthaben $main = new Kosten(500); $ausgaben_privat = new Kosten(); $grundsteuer = new Kosten();
// Hier wird das Geld hin und her geschoben $ausgaben_privat->neu(-5, 'Trinkgeld'); $ausgaben_privat->neu(-50, 'Saufen');
// Alle Vorgänge an $main senden $main->update($ausgaben_privat); $main->update($grundsteuer);
echo 'Guthaben: '.$main->get_guthaben().' €';
Hier bräuchte man noch einige Methoden, um es mächtiger zu machen. Was wir jetzt aber können, ist die Zusammenfassung der Kosten auf allen Gebieten (egal ob es die Steuer, Installation oder sonst was in der Art ist).
|
|
|
12.11.2005, 23:46
|
#23
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
Bevor ich mir die Tage mal den ganzen Artikel reinziehe, möchte ich vorweg schon mal ein fettes Danke loswerden. Finde es Klasse (nein, das sollte kein wortspiel werden  ) das Du dir die Zeit genommen hast so einen Workshop ins Leben zu rufen. 
|
|
|
13.11.2005, 00:29
|
#24
|
|
TP-Veteran
Registriert seit: Sep 2004
|
Zitat:
|
Zitat von theo
hallo sergej,
erstmal vielen dank fuer diesen workshop!!!
... auch wenn er das bild meiner eigenen faehigkeiten in sachen oop etwas ins wanken gebracht hat.
mal die ganzen features von php5 aussen vor gelassen: was mich nach wie vor (auch nach unseren letzten gespraechen im icq) brennend interessiert, ist die logische abgrenzung der klassen untereinander bzw. vor allem die "ausgliederung" bestimmter funktionen. ab wann ist es sinnvoll, eine funktion ausserhalb einer oder mehrerer klassen in eine datei als reine funktion zu legen?
hardy
|
genau das selbe habe ich mich auch gefragt, und ich glieder nur die funktionen in eine eigene datei aus, die allgemein sind und die ich in vielen klasse wieder benötige (datumsumwandlungen, zahlenformatierung...).
Gibt bestimmt auch eine bessere Lösung, und bin auch dankbar für jede Anregung.
Geändert von alexf812 (13.11.2005 um 00:31 Uhr).
|
|
|
13.11.2005, 09:27
|
#25
|
|
TP-Specialist
Registriert seit: Aug 2002
|
Zitat:
|
Zitat von alexf812
genau das selbe habe ich mich auch gefragt, und ich glieder nur die funktionen in eine eigene datei aus, die allgemein sind und die ich in vielen klasse wieder benötige (datumsumwandlungen, zahlenformatierung...).
|
Das ist eben auch OOP, wenn man globale Funktionen mit Objekten als Argumente hat. Es ist so, dass wenn man in unserem Fall mit einem User arbeitet, ein User-Objekt erstellt wird. Daher ist es praktisch, wenn eine Funktion die Registrierung eines Users übernimmt, und man dann gleich ein Objekt hat, womit gearbeitet werden kann. Und was heißt allgemein? In einer Schnittstelle ist jedes Objekt (egal ob eigene Klasse oder int, float, string) allgemein. 
|
|
|
13.11.2005, 11:51
|
#26
|
|
TP-Veteran
Registriert seit: Sep 2004
|
ich hatte es so gemeint das funktionen einfach ausgelagert werden, da ich in einigen klassen z.B. Datumsumwandlungen immer wieder brauche. also mache ich mir eine funktion datum() und benutze diese in allen möglichen klassen wo ich mal so eine Umwandlung brauche
aber wollte auch nochmal sagen find den workshop super und hab einige neue Denkanstösse erhalten.
Geändert von alexf812 (13.11.2005 um 12:23 Uhr).
|
|
|
16.11.2005, 10:05
|
#27
|
|
TP-Veteran
Registriert seit: Sep 2004
|
ich hätte da mal noch ne frage.
also folgendes: ich habe 2 benutzergruppen, normle user und den admin
der admin sieht alles und die user halt nur ihrs.
jetzt geht es darum vertragsdaten anzuzeigen, einmal für user und dann admin.
ich habe für den user und admin eine klasse, aber das anzeigen der daten is ja fast identisch... wäre es dann gut so eine art basisklase zu machen nur zum anzeigen der daten? ich möchte nicht alles doppelt schreiben. was sich ändert könnte man ja unterscheiden anhand der id ob leer oder nicht
class CAnzeige
{
datenAnzeigen($id="")
{
// Code
}
}
class Admin extends CAnzeige
{
// Code
}
so in der Art?
|
|
|
16.11.2005, 10:13
|
#28
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Du kannst das doch so lösen, das es eine Userklasse gibt mit allem, was ein User braucht.
Dazu kommt dann die admin-klasse, die einfach nur die user-Klasse erweitert:
class adminuser extends user { ...
Somit hat der adminuser alles was ein user hat und Du kannst zusätzliche funktionen deklarieren.
|
|
|
16.11.2005, 12:15
|
#29
|
|
TP-Veteran
Registriert seit: Sep 2004
|
ok das is auch ne gute idee.
nur ich habe nun also in der klasse user eine funktion zum anzeigen. wenn ich die in der adminklasse nehmen will, kommen jedoch noch ein paar mehr daten hinzu, die ich anzeigen lassen will, d.h. die abfrage ist etwas anders...diese anzeige ist auch das einzige was ich wiederverwenden will.
dann müsste ich ja doch 2 verschiedene funktionen machen, da der admin mehr daten zum anzeigen braucht
Geändert von alexf812 (16.11.2005 um 12:17 Uhr).
|
|
|
16.11.2005, 14:29
|
#30
|
|
TP-Specialist
Registriert seit: Aug 2002
|
@alexf812: Finde deinen Entwurf nicht wirklich praktisch. Der Admin soll seine Daten bestimmt auch wie der normale User anzeigen lassen können. Zusätzlich soll er aber die Möglichkeit haben, die Daten eines beliebigen Users anzuzeigen. Und die $id stört mich auch etwas bei dem normalen User, denn die kannst du ja gleich im Konstruktor übergeben.
PHP-Code:
class User
{
private $id
// Wozu id übergeben, wenn der User nur seine eigenen Daten sehen will?
// Am besten gleich im Konstruktor die id übergeben
meine_datenAnzeigen()
{
// ...
}
}
class Admin_User extends User
{
fremde_datenAnzeigen($id)
{
// Hier die Daten eines Users ausgeben
}
}
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 00:08 Uhr.
|
 |
 |
| |