Klassen für Browsergames

philishake

javascript enthusiast
Hi Leute,

ich habe mich gerade damit beschäftigt, meine Kenntnisse in Sachen Klassen und OOP etwas zu erweitern und da kam mir die Frage auf, welchen Vorteil Klassen für Browsergames haben ( wenn sie es denn haben ) und was ich damit realisieren könnte und wo diese Klassen überhaupt sinnvoll sind.

MfG philishake
 
Um es mal kurz zusammen zu fassen klassen sind nix anderes als als ein parr funktion zusammen in einen Übergeordneten Element.

Jede Klasse kann weiter vererbt werden das heißt eine andere klasse kann die funktionen der 1 Klasse übernehmen.Wenn der funktionname gleich sein sollte dann gilt der namer der funktion die 1 klasse übernohmen hat. Also in diesem fall ist die funktion von klasse 2 dann aktvie und die vom selben namen in klasse 1 wird dann ignoriert.


Man kann von der Klasse dann mehre Objekte erzeugen mit eben den gleichen eigenschaften.

Für Broswergame muß man keine klassen ensetzen aber es kann je nach aufwand einem schreib arbeit abnehmen.Also für sachen die oft gebraucht.

Mfg Splasch
 
Ich muss da meinem Vorredner teilweise widersprechen.
Klassen sind nicht "nur" ein paar Funktionen in einem übergeordneten Element und gerade bei einem Projekt "browsergame" sollte man OOP nutzen. So zumindest meine Meinung.

Klassen bieten bei einer vernünftigen Anwendungen viele Vorteile, die man mit den in PHP5 endlich geschaffenen OOP Features eingeführt hat.
Mit Klassen kannst du Code kapseln und damit deinen Code strukturieren und skalieren, bietet möglichkeiten der versehentlichen Wertmanipulation, Referenzen auf Objekte und Werte ersparen dir Arbeit (können aber auch zum Verhängnis werden), schaffen Ressourceneinsparungen uvm.

Vom Aufbau stimmt es zwar, das Klassen nur eine Sammlung von Funktionen ist, die Möglichkeiten die sich dadurch aber ergeben, bringen den Vorteil.

Zu deiner Frage, ob sich dies für ein Browsergame lohnt: eindeutig ja!
Wir sprechen hier ja nicht von einer einfachen "meine kleine Website" Programmierung, sondern von teilweise komplexen mathematischen Berechnungen, Codesicherheit, Anhängigkeiten uvm.
Welche Klassen du brauchst, kommt immer auf dein Ziel an. Beim Browsergame gibt es viele Möglichkeiten Code in Klassen zu stecken, grundlegende sind mit Sicherheit eine DB Klasse, Template Klasse oder "user-input-validation"
Des weiteren würde ich dir raten es im MVC (model-view-controller) Model zu schreiben, dies trennt deine Logik von der Ausgabe und der "Strukturüberwachung".
Des weiteren werden sicherlich Bereiche anfallen wie Userverwaltung, Sessionverwaltung oder wenn du eine Karte im Spiel hast, könntest du generierung der Karte in einer Klasse kapseln. Gibt es ein Handel? Bau dir eine Klasse handel als Grundklasse, die je nach Handelstyp (was weiss ich: Handel über Schifffahrt, Flugweg, Strasse) mit Interfaces (ebenfalls neu mit php5 OOP) die entsprechende speziefischen Klassen ansteuert.
Dann sind mit Klassen noch Design Patterns besser umsetzbar. Als Erzeugungsmuster, in OOP in PHP meistens die Grundlage, ist ein Singleton Pattern, dann wenn Klassen sich gegenseitig überwachen und Querarbeiten Observer Pattern usw ufm usf.
Man kann darüber ziemlich viel schreiben und und es wurde auch schon gemacht (es gibt ja zig Bücher). Ich höre hier jetzt auf jedenfall auf, hoffe ich habe dich jetzt nicht überrannt. Ich rate dir auf jedem Fall vorher genau alles zu planen und schnittstellen und Möglichkeiten zu lassen, deinen Code einfach zu erweitern und in einem ReFactoring einen sauberen Code zu produzieren.

Habe die noch Links rausgesucht, die für dich interessant sein sollten.

Der erste ist eher etwas allgemein gehalten und beschreibt, was sind überhaupt Klassen bzw OOP http://tut.php-quake.net/klassen.html
Der zweite geht dann schon in die tiefe und beschreibt auch Design Pattern und was sie bringen, wie man sie umsetzen kann.
http://www.professionelle-softwareentwicklung-mit-php5.de/erste_auflage/

Dann ist hier noch ein Link zu einem einfachen und simplen MVC PHP Framework, welches ein Singleton Pattern zur Ressourceneffizienz einsetzt und logisch und sauber strukturiert ist. Anhand des Codes kann man etwas lernen und sich orientieren. http://codeigniter.com/
 
Klassen bieten bei einer vernünftigen Anwendungen viele Vorteile, die man mit den in PHP5 endlich geschaffenen OOP Features eingeführt hat.
Mit Klassen kannst du Code kapseln und damit deinen Code strukturieren und skalieren, bietet möglichkeiten der versehentlichen Wertmanipulation, Referenzen auf Objekte und Werte ersparen dir Arbeit (können aber auch zum Verhängnis werden), schaffen Ressourceneinsparungen uvm.

Schön das du uns aufgezählt hast was man alles mit Klassen machen kann.Aber welchen Vorteil sie gegenüber normalen Funktionen haben kommt dabei nicht klar raus.

Einen Unterschied den ich sehe ist das man mehre Variablen die (Klassen funktion) zuordnen kann ob man allerdings die Objekte auch in ein array legen kann hab ich noch net ausbrobiert.

$test = new Klassenname ;
Geh das auch so : $test[]= new Klassenname; ?

Oder muß man immer nee andere Variable erstellen um die Eigenschaften zu übernhemen zu können.

Zähl uns doch mal die Unterschiede auf was eben mit funktionen allein nicht möglich ist dann gehen die Vorteile besser raus und eben auch die Nachteile wenn es welche gibt.

Klassisches Beispiel ein Warenkorb denn kann man entweder über ein array realiesieren oder man verwendet die Klassen.

Der Warenkorb hat die Eigenschaften (Artikelnummer,Anzahl,größe,preis)
Nun kann man die Variable mit diesen Eigenschaften belegen
$Korb= new Warenkorb;

Wo erfolgt nun hier der Vorteil der Klasse wenn man weitere Artikeln hinzufügen will.Macht man da dann Korb1, Korb2 unsw. Oder verschaft man sich dann einfach eine weitere intanz und vererbt die Klasse.

Nun stellt sich aber die Frage welchen Vorteil hat man dabei gegen über ein Array? Den man könnte genau so ein Array anlegen das die Eigenschaften besitzt.

Mfg Splasch
 
Zuletzt bearbeitet:
Zähl uns doch mal die Unterschiede auf was eben mit funktionen allein nicht möglich ist dann gehen die Vorteile besser raus und eben auch die Nachteile wenn es welche gibt.

Ich weiss nicht ob ich mich vielleicht falsch ausgedrückt habe. Ich möchte keinem das Arbeiten mit Funktionen schlecht reden oder sagen, das Klassen und deren Methoden das nonplus ultima sind in allen Bereichen.
Ich bin mir nicht sicher, ob ich den ultimativen Beweis oder Anwendungsbeispiel nennen kann, das man mit Funktionen nicht lösen kann. Natürlich ist alles mit Funktionen umsetzbar, die Frage ist nur wie. Trampe ich in meinen Urlaub, wo ich andauernd meinen fahrbaren Untersatz wechseln muss, jedes mal meinen Rucksack beim umsteigen mitschleppen muss, oder steig ich in ein Reisebus wo ich mein Gepäck nur einmal einchecke und es dabei hab und wechsle dann nur im Reisebus den Sitzplatz.
So ähnlich ist es mit der Disskussion um Funktionen oder Klassen. Ich komme in meinem Urlaub an (Ziel der Anwendung), bei beiden treffe ich auf dem Weg neue Leute und erhalte neue Informationen (Scriptbearbeitung, Variablenbearbeitung). Beim Bus weiss ich aber genau, das nur dieser Bus das eine Ziel hat und die Leute im Bus auch nur dahin wollen, abgekapselt vom anderen Verkehr. Mal als Anwendungsbeispiel: Der Reisebus "warenkorb" hat nur das Ziel Artikel zu verarbeiten die bestellt werden, es können keine Fremden einsteigen die mir irgendwelche Variablen zerschiessen und falsche Informationen liefern.

Der Warenkorb hat die Eigenschaften (Artikelnummer,Anzahl,größe,preis)
Nun kann man die Variable mit diesen Eigenschaften belegen
$Korb= new Warenkorb;

Wo erfolgt nun hier der Vorteil der Klasse wenn man weitere Artikeln hinzufügen will.Macht man da dann Korb1, Korb2 unsw. Oder verschaft man sich dann einfach eine weitere intanz und vererbt die Klasse.

Würde aus meiner Sicht so keinen Sinn machen. Ich habe nur einen Warenkorb wo ich alle Artikel reinlege und nicht für jeden Artikel einen Warenkorb.
Es gibt daher nur $korb = new Warenkorb(); und weitere Artikel lege ich in diesen Warenkorb über $korb->addArtikel($Artikel_ID); . Bis hierhin ist es natürlich ohne Klassen möglich ($korb[] = $Artikel_ID). Jetzt möchte ich aber vom 3. Artikel Im warenkorb mir die Produktinformationen holen. print_r($korb->getProduktInformation(3)); liefert mir die Informationen, bei Funktionen würde es vielleicht print_r(getProduktInformatioen(&$korb[2]) lauten. Den Unterschied sehe ich aber nun in diesem Aufruf. Während ich bei Funktionen nun meine DB Ressource global öffnen muss, darf dann diese Variable nirgends mehr nutzen, würde ich bei der Klasse Warenkorb in der Klasse Warenkorb die Referenz (aus der Basisklasse, die meine Referenzen aufbewahrt, Stichwort Singleton Pattern) auf die Klasse Artikel laden, die wiederum die Referenz auf die DB Ressource. Eventuell habe ich aber schon vorher mal die Informationen für diesen Artikel abgefragt und liegen damit schon vor. Es wurde somit eine Datenbankabfrage gespart. Kann ich natürlich wieder auch mit Funktionen machen, aber ich musste ein globales Array definieren das diese Infos speichert. Abhängig von einer Eigenschaft des Artikels, darf der User diesen Artikel bestellen, gibt es Restriktionen für die Lieferung, abhängig vom Land, vom Alter des Users, Warenbestand und und und. Dies habe ich alles sauber strukturiert, getrennt von den weiteren grundlegenen Sachen wie Template, Userverwaltung, Sessionverwaltung und was man sonst noch so brauch.
Das hat nun alles fast nur mit Kapselung zu tun, wahrscheinlich einer der grossen Vorteile von Klassen.

Wie gesagt, man kann alles mit Funktionen erledigen, für mich hat sich aber herausgestellt, dass das Arbeiten mit Klassen die Arbeit erleichert und gerade in einem komplexeren Umfeld, wo ich aus 2,3,4 Richtungen Informationen sammle, diese gegeneinander abgleichen, Werte prüfen und zusammenführen muss. Vielleicht ist es einfach nur geschmackssache die bei mir kleben geblieben ist, wo ich mal mit Perl und C angefangen habe. Vielleicht die sehr guten Erfahrungen aus einer der letzten Arbeiten im Team. Who knows.
 
Zurück