ADAC OnlineShop Newsletteranmeldung
 
Zurück   klamm-Forum > Virtual World > Programmierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29.05.2011, 10:07:23   #1 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard mehrere Klassen für Produkte erstellen

Hi,

ich möchte für unterschiedliche Produkte (Handy, Netbook, Surfstick) eine Klasse erstellen.

Was wäre der beste Weg um das zu realisieren? Für jede Produktart eine eigene Klasse oder eine Oberklasse anlegen und dann über Vererbung? Jedes Produkt hat ja Eigenschaften, die in allen Produktarten vorkommen (Titel, Preis, Beschreibung, Bild usw.).

Was ich mir ebenfalls überlegt habe:
Es gibt ja eigentlich auch nur spezielle Produkte. Würde dann eine abstrakte Klasse ausreichen? Diese enthält dann die Methoden, die überall vorhanden sein müssen.
baserider ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 29.05.2011, 10:13:55   #2 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

So wie du das schilderst, gibt es nur eine Klasse Produkt, die Titel, Preis & Co hat.

Spannend is dann nur die Frage, ob es spezielle Produkte gibt, die weitere Informationen hat, z.B. ein PC hat einen Prozessor, während ein Handy Mobilfunkstandards hat.
In diesem Fall wird von Produkt abgeleitet und erweitert.

Abstrakt machen würd ich die Klasse Produkt nicht. Außer, du bist dir wirklich sicher, dass du keine normalen Produkte hast.
theHacker ist offline   Mit Zitat antworten
Alt 29.05.2011, 10:21:51   #3 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

Hi,

jedes dieser 3 Produkte hat spezielle Eigenschaften, die die anderen Produkte nicht haben.

Wie meinst du das mit den normalen Produkten?
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 29.05.2011, 11:49:09   #4 (permalink)
null != null
Benutzerbild von Sebmaster

ID: 238955
Lose-Remote

Sebmaster eine Nachricht über Skype™ schicken
Reg: 20.05.2006
Beiträge: 3.713
Sebmaster genießt hohes AnsehenSebmaster genießt hohes AnsehenSebmaster genießt hohes AnsehenSebmaster genießt hohes AnsehenSebmaster genießt hohes AnsehenSebmaster genießt hohes AnsehenSebmaster genießt hohes AnsehenSebmaster genießt hohes AnsehenSebmaster genießt hohes AnsehenSebmaster genießt hohes AnsehenSebmaster genießt hohes Ansehen
Standard

Zitat:
Zitat von baserider Beitrag anzeigen
Wie meinst du das mit den normalen Produkten?
Produkte die du nicht über eine extra Klasse abbilden musst, weil sie keine zusätzlichen Informationen haben/du die nicht brauchst.
Kein Grafiker
Sebmaster ist offline   Mit Zitat antworten
Alt 29.05.2011, 12:04:39   #5 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

Hi,

ok, danke für die Info.
Da jedes Produkt spezielle Eigenschaften hat, würde ich jeweils eine spezielle Klasse anlegen.

Natürlich kann es auch Fälle geben, wo man nur den Titel oder die Beschreibung eines Produktes wissen will.

PHP-Code:
1:
2:
3:
4:
5:
// Handy
$handy->getBeschreibung;

// Netbook
$netbook->getBeschreibung(); 
Wäre in diesem Fall der Aufruf von
PHP-Code:
1:
$produkt->getBeschreibung(); 
falsch oder? (Falls die Produktklasse nicht abstrakt ist, sonst geht es eh nicht)
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 29.05.2011, 17:04:45   #6 (permalink)
Erfahrener Benutzer

ID: 217591
Lose-Remote

Aradiv eine Nachricht über ICQ schicken Aradiv eine Nachricht über MSN schicken
Reg: 20.04.2006
Beiträge: 1.543
Aradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer Anblick
Standard

das das ist doch gerade das "schöne" an Vererbung das ich eben so etwas schreiben kann wie

PHP-Code:
1:
2:
3:
4:
5:
6:
$products array_merge($netbooks$handys$surfsticks);
foreach(
$products as $product){
  echo 
"<div><h2>".$product->getTitel()."</h2>
  <p>"
.$product->getBeschreibung."</p>
  <p><b>"
.$product->getPreis()."</b></p></div>";

Da kann es mir egal sein welche Art von Product ich habe den ich weiß ja alle 3 Arten haben auf jeden Fall getTitel getBeschreibung und getPreis

Aradiv
Aradiv ist offline   Mit Zitat antworten
Alt 29.05.2011, 19:10:51   #7 (permalink)
Multitalent
Benutzerbild von joschilein

ID: 9301
Lose-Remote

joschilein eine Nachricht über ICQ schicken
Reg: 05.05.2006
Beiträge: 1.414
joschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehen
Standard

Ich wüsste auch nicht welche weiteren Vorteile es haben könnte, wenn jedes Produkt eine eigene Klasse hat. Ggf. würde sogar eine einzige Klasse Produkt ausreichen.

Wie wäre es die speziellen Produkteigenschaften (z.B. Abmessungen [Möbel], Stromverbrauch [Elektronik], ..) in einem großen Array innerhalb der Klasse zu speichern? Jede Eigenschaft, die irgendein Produkt haben kann, hat einen systemweiten Key. So lassen sich dann später auch gut Produktvergleiche machen.

Um die Eigenschaften "einfach" auszulesen, bietet sich __get() an:
PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
class Produkt{
  private 
$_vars = array();
  
// ...
  
public function __get($var){
    if (
in_array($vararray_keys($this->_vars))){
      return 
$this->_vars[$var];
    } else {
      return 
NULL;
    }
  }
  
// ...



Heute schon gepixelt
joschilein ist offline   Mit Zitat antworten
Alt 11.06.2011, 10:39:07   #8 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von joschilein Beitrag anzeigen
Ich wüsste auch nicht welche weiteren Vorteile es haben könnte, wenn jedes Produkt eine eigene Klasse hat. Ggf. würde sogar eine einzige Klasse Produkt ausreichen.

Wie wäre es die speziellen Produkteigenschaften (z.B. Abmessungen [Möbel], Stromverbrauch [Elektronik], ..) in einem großen Array innerhalb der Klasse zu speichern? Jede Eigenschaft, die irgendein Produkt haben kann, hat einen systemweiten Key. So lassen sich dann später auch gut Produktvergleiche machen.
Ich will ja nicht jedes Produkt in eine eigene Klasse packen, da hab ich mich vielleicht schlecht ausgedrückt. Es geht eher um Produktgruppen.
Möbel und Elektronikgeräte in eine Klasse zu packen erscheint mir nun nicht so sinnvoll. Ausserdem müsste ich doch auch für jede Gruppe eigene Methoden einbauen, um die Daten zu beschaffen (findeMoebel(), findeElektronikartikel() usw.)
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 11.06.2011, 10:50:17   #9 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Zitat:
Zitat von baserider Beitrag anzeigen
Ausserdem müsste ich doch auch für jede Gruppe eigene Methoden einbauen, um die Daten zu beschaffen (findeMoebel(), findeElektronikartikel() usw.)


Ein Objekt wird keine finde()-Methode haben, um weitere Objekte desselben Typs zu finden. Das is sinnlos.

Stell dir vor (), du wärst ein Möbelstück in einem Shop. Wüsstest du dann, welche Elektronikartikel mit USB-Anschluss es gibt? Nein.

Du, als Möbelstück (), weißt aber, wie lang, wie breit und wie schwer du bist.
Und wenn du den DVD-Spieler fragst, der kann dir sagen, ob er einen USB-Anschluss besitzt.
theHacker ist offline   Mit Zitat antworten
Alt 11.06.2011, 11:20:08   #10 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von theHacker Beitrag anzeigen

Stell dir vor (), du wärst ein Möbelstück in einem Shop. Wüsstest du dann, welche Elektronikartikel mit USB-Anschluss es gibt? Nein.

Du, als Möbelstück (), weißt aber, wie lang, wie breit und wie schwer du bist.
Und wenn du den DVD-Spieler fragst, der kann dir sagen, ob er einen USB-Anschluss besitzt.
Genau aus diesem Grund habe ich mich gefragt, warum man alles in einer Klasse unterbringen soll.

Das Objekt hat keine find-Methode, aber die jeweilige Klasse. Dort bekomme ich dann ein bestimmtes Objekt zurück:
PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
class Moebel{
  public static 
find($id){
    
//code...
    
return new self();
  }
}

$moebel Moebel::find(10);
echo 
$moebel->getAbmessungen(); usw... 
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 11.06.2011, 11:28:17   #11 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Ok, soweit klar.

Die Frage is ja, wie viel du in spezielle Methoden auslagern möchtest. - Und je nachdem hast du dann auch eine oder mehrere bis ganz viele Klassen.

Willst du eher
PHP-Code:
1:
2:
$foo $productDvdplayer->getProperty("usbslots");
$bar $productChair->getProperty("height"); 
oder eher
PHP-Code:
1:
2:
$foo $dvdplayer->getCountUsbSlots();
$bar $chair->getHeight(); 
Oberere Variante is eine Klasse für alle Produkte, dafür gibts keine speziellen Methoden für spezielle Produktmerkmale.
Unterere Variante is für jeden Scheiß ne neue Klasse mit x verschiedenen speziellen Methoden.

Was du effektiv schreiben wirst, wird wohl irgendwas in der Mitte von beiden sein.
theHacker ist offline   Mit Zitat antworten
Alt 11.06.2011, 11:41:44   #12 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

Hi,

hat denn die obere Variante nen speziellen Namen, damit ich im Netz noch etwas ausführlicher was dazu lesen kann?

Was passiert denn, wenn 2 Produkte z.B. Höhenangaben haben und wie komme ich an die jeweiligen Daten für die einzelnen Produkte?

Geändert von baserider (11.06.2011 um 11:49:13 Uhr)
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 11.06.2011, 14:49:22   #13 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Zitat:
Zitat von baserider Beitrag anzeigen
hat denn die obere Variante nen speziellen Namen, damit ich im Netz noch etwas ausführlicher was dazu lesen kann?
Kann mir nicht vorstellen, dass es da nen Namen gibt.
Zitat:
Zitat von baserider Beitrag anzeigen
Was passiert denn, wenn 2 Produkte z.B. Höhenangaben haben und wie komme ich an die jeweiligen Daten für die einzelnen Produkte?
Je nach Implementierung entweder so oder so (s. vorheriger Post von mir).
theHacker ist offline   Mit Zitat antworten
Alt 11.06.2011, 14:57:36   #14 (permalink)
Erfahrener Benutzer

ID: 174417
Lose-Remote

Reg: 10.03.2007
Beiträge: 666
baserider befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von theHacker Beitrag anzeigen
Je nach Implementierung entweder so oder so (s. vorheriger Post von mir).
Naja wenn es nur eine Klasse gibt, woher weiß ich dann welche Eigenschaft gemeint ist. Ist es nun die Höhe vom Stuhl oder vom DVD-Player?
Vielleicht versteh ichs ja auch falsch, aber der Aufruf wäre doch:

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
// DVD
$productDvdplayer = new Product();
$foo $productDvdplayer->getProperty("height");

// Stuhl
$productChair = new Product();
$bar $productChair->getProperty("height"); 
baserider ist offline Threadstarter   Mit Zitat antworten
Alt 11.06.2011, 15:22:53   #15 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Verstehst du richtig. Ich seh nur dein Problem nicht
Zitat:
Zitat von baserider Beitrag anzeigen
Ist es nun die Höhe vom Stuhl oder vom DVD-Player?
Höhe is Höhe.
Wenn ich im Regal 20cm Höhe frei habe, dann passt der DVD-Player mit 10cm Höhe rein, der Stuhl mit 110cm Höhe leider nicht. Is bei beiden Produkten aber dieselbe Höhe.

Hast du verschiedene Höhen, musst du diese Eigenschaften (Ansatz 1: getProperty()) auch unterschiedlich benennen, um sie auseinander zu halten.
theHacker ist offline   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] Klassen & Funktionen Tab Programmierung 1 12.10.2009 17:26:09
[CSS] Klassen erweitern klamm Programmierung 2 01.02.2008 12:42:47
[PHP] Klassen Gremlin Programmierung 17 22.10.2007 19:53:23
[Java] und Klassen gamefreak Programmierung 4 11.03.2007 12:22:56
[PHP] Dokumentation von Klassen ice-breaker Programmierung 6 14.10.2006 12:20:53


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56:52 Uhr.