OOP



  • Hallo,
    ich habe eine Frage bezüglich PHP.

    Habe mittlerweile Grundkenntnisse und fange nun langsam an mit Objekt orientierten Programmieren an.

    Nun wollte ich auch anfangen erst ein paar kleine, dann größere Projekte zu starten.

    Nun meine Frage:

    Werden Browsergames hauptsächlich objekt orientiert programmiert?



  • Hallo,

    ich wage einmal zu behaupten, dass heutzutagen die meisten größeren Webanwendungen objektorientiert programmiert werden. Es geht natürlich auch prozedural, aber die Objektorientierung macht die Entwicklung unter PHP meist wesentlich angenehmer! Außerdem schreibst du wiederverwendbaren Code und bist flexibler.

    Eigentlich alle Webprojekte, an denen ich mitgearbeitet habe (u.a. Browser Game, Forensoftware, sehr stark konfigurierbares Gästebuch, CMS, div. Webseiten) waren objektorientiert. Allerdings meistens nicht wirklich zu 100%.



  • Also mal ehrlich, das was ihr in PHP "Objektorientierte Programmierung" nennt, nenne ich eher ein Armutszeugnis. Misserable und Fehlerhafte Umsetzung, kein friend, keine einheitliche Logik dahinter, Abstraktion ist ein Witz, dazu dieses ewige Abwärtskompatibel bleiben.

    Mal ehrlich: Ich kenne keine OOP Sprache aus dem Stehgreif in dem man den Konstruktor des Vaters explizit aufrufen muss oder das eine abgeleitete Klasse, sich für die Basisklasse hält.

    Auch wenn ich nicht flamen will, aber hier muss man definitiv sagen: Will man OOP dann nimmt man dafür auch eine richtige OO-Sprache, wie z. B. Java oder C# und nicht eine Sprache wo man es "mal versucht" hat OO zu implementieren.

    Zum Thema: Ich denke das ist mal so mal so, in PHP denke ich wird weniger auf "OO" gesetzt, da es sowas dort defakto nicht richtig gibt - Es ist und bleibt eine hybride Sprache und nur weil man mal paar "Klassen" (Wenn man die überhaupt so nennen darf) deklarieren und instanziieren kann, bedeutet es nicht, dass es eine OO-Sprache ist. In richtigen OO-Sprachen geht natürlich nur OO.

    Dazu sollte man auch die Wirtschaftlichkeit betrachten, darunter fällt auch z. B. Wartbarkeit und leichte Erweiterbarkeit - hier ist der gute alte Frickelcode von PHP, sowie die Sicherheitslücken von PHP nicht gerade von Vorteil und bringen imense Kosten mitsich.

    Ich muss árn[y]ék wiedersprechen: OO bedeutet nicht, das etwas wiederverwendbarer ist oder flexibler - das ist eine reine Auslegungssache.

    Überleg dir erstmal was du genau machen sollst und dann überlegst du erstmal, wie du was realisierst und womit. Tipp: Vergleiche mal PHP, ASP.NET und Java miteinander, vorallem auch im Thema Sicherheit, Erweiterbarkeit, Umfang, Kosten, Geschwindigkeit, usw. und dann in aller Ruhe planen 😉



  • unsigned long schrieb:

    Auch wenn ich nicht flamen will, aber hier muss man definitiv sagen: Will man OOP dann nimmt man dafür auch eine richtige OO-Sprache, wie z. B. Java oder C# und nicht eine Sprache wo man es "mal versucht" hat OO zu implementieren.

    Da hast du natürlich Recht, PHP ist ein einziger Flickenteppich. Dennoch muss man sagen, ist seit der Version 5 objektorientierte Programmierung möglich. Nicht so schön wie in C# (Java mag ich persönlich nicht so sehr, aber wie gesagt: Geschmackssache), aber möglich.

    unsigned long schrieb:

    Ich denke das ist mal so mal so, in PHP denke ich wird weniger auf "OO" gesetzt, da es sowas dort defakto nicht richtig gibt

    Sagen wir so: In PHP wird - zumindest habe ich die Erfahrung gemacht, ob es 100% repräsentativ ist, will ich nicht behaupten - bei größeren Projekten doch oft ausgiebig auf das zurückgegriffen, was man in PHP als Objektorientierung auffasst.

    unsigned long schrieb:

    Dazu sollte man auch die Wirtschaftlichkeit betrachten, darunter fällt auch z. B. Wartbarkeit und leichte Erweiterbarkeit - hier ist der gute alte Frickelcode von PHP, sowie die Sicherheitslücken von PHP nicht gerade von Vorteil und bringen imense Kosten mitsich.

    Was Wartbarkeit und Erweiterbarkeit eines bestehenden PHP-Codes betrifft, kann ich dem nicht zustimmen. Wenn der Programmierer weiß, was er tut, ist der Code sauber, übersichtlich, modular und leicht zu warten. Dabei hilft die Objektorientierung in PHP durchaus. Frickelcode in PHP entsteht nur dann, wenn der Programmierer über die Eigenheiten der Sprache nicht bescheid weiß; das ist aber nichts, was auf PHP exklusiv zutrifft. Der Programmierer braucht nur mehr Erfahrung und Fachwissen, um dieser Dinge bewusst zu werden. Hat er erst einmal genug Wissen angesammelt, kann man PHP gut für kleinere und größere Webanwendungen verwenden.

    unsigned long schrieb:

    Ich muss árn[y]ék wiedersprechen: OO bedeutet nicht, das etwas wiederverwendbarer ist oder flexibler - das ist eine reine Auslegungssache.

    Nein, das bedeutet es freilich nicht. Aber Wiederverwendbarkeit und Flexibilität sind Ziele, die eigentlich jeder bei der Entwicklung eines Projektes verfolgt. Und dabei kann Objektorientierung dir sehr gute Dienste leisten!

    unsigned long schrieb:

    Überleg dir erstmal was du genau machen sollst und dann überlegst du erstmal, wie du was realisierst und womit. Tipp: Vergleiche mal PHP, ASP.NET und Java miteinander, vorallem auch im Thema Sicherheit, Erweiterbarkeit, Umfang, Kosten, Geschwindigkeit, usw. und dann in aller Ruhe planen 😉

    Aber vergiss den Faktor Mensch nicht 😉
    Überlege, was du machen möchtest im Angesicht dessen, was du kannst.
    Was ist dein Ziel? Ein tolles, gutes Browserspiel? Nun, dann wirst du vermutlich dazu neigen, an dein PHP-Wissen anzuknüpfen und es erweitern zu wollen. Willst du hingegen viel lernen? Dann schau dir die Sprachen an, vergleiche sie ... Naja, und alles, was unsigned long eben schon gesagt hat 🙂



  • Es wird schon ein aufwendiges Broswsergame.

    Es soll zwar kein 3d werden, aber aufwendige 2d Arenen etc.

    Die Funktionen könnte man eventuell noch mit PHP hinkriegen.

    Mit welchen Programmiersprachen kann man den auch Browsergames machen und sind nicht zu schwer?



  • tuFx schrieb:

    Es soll zwar kein 3d werden, aber aufwendige 2d Arenen etc.

    Ein 3D-Browsergame? Na, da wärst du aber mit Skriptsprachen sehr schlecht bedient 😉

    tuFx schrieb:

    Mit welchen Programmiersprachen kann man den auch Browsergames machen und sind nicht zu schwer?

    Du kannst mit jeder Skriptsprache Browsergames basteln. Theoretisch sogar mit reinem Javascript und einem serverseitigen Backend. Aber das sei dir mal nicht empfohlen 😉

    Du kannst ASP.NET benutzen (von mir bevorzugt in Symbiose mit C# ;)), JSP, Perl, Python ... Wie gesagt. Es kommt darauf an, was du kannst und was es gibt. Niemand kann dir hier eine "perfekte Sprache" für dich nennen ...



  • unsigned long schrieb:

    Mal ehrlich: Ich kenne keine OOP Sprache aus dem Stehgreif in dem man den Konstruktor des Vaters explizit aufrufen muss

    java 😉



  • thordk schrieb:

    unsigned long schrieb:

    Mal ehrlich: Ich kenne keine OOP Sprache aus dem Stehgreif in dem man den Konstruktor des Vaters explizit aufrufen muss

    java 😉

    ...macht das auch von selber 😉



  • unsigned long schrieb:

    Also mal ehrlich, das was ihr in PHP "Objektorientierte Programmierung" nennt, nenne ich eher ein Armutszeugnis. Misserable und Fehlerhafte Umsetzung, kein friend, keine einheitliche Logik dahinter, Abstraktion ist ein Witz, dazu dieses ewige Abwärtskompatibel bleiben.

    Mal ehrlich: Ich kenne keine OOP Sprache aus dem Stehgreif in dem man den Konstruktor des Vaters explizit aufrufen muss oder das eine abgeleitete Klasse, sich für die Basisklasse hält.

    In Php5 hast du:
    - Vererbung
    - Kapselung
    - und Laufzeitpolymorphie
    Was brauchst du mehr fuer OOP?
    Ausserdem ist friend der Bruch zu OOP, weil es die Kapselung bricht.

    Was meinst du mit "keine einheitliche Logik"?
    Das man den Ctor des Vaters explizit aufrufen muss, ist eine Designfrage der Sprache und nicht eine feste Regel der OOP. Abstraktion hast du in Php5, nicht mehr als in C# oder in Java.

    Mit Php5 kannst du wunderbaren OOP-Code schreiben, das einzige was ich vermisse sind Namespaces. Du musst halt leider globale Funktionen aufrufen, aber das ist ja auch nicht so schlimm.

    Also ich habe ein Web-Projekt als eine eine schoene State-Maschine in php5 geschrieben. Ergibt einen schoenen sauberen Code, der auch leicht erweitern laesst.



  • friend ist doch kein bruch der kapselung

    es fügt lediglich eine funktion zum interface der klasse hinzu

    im übrigen benötigt oop keine kapselung
    das pattern zugriffsschutz ist nicht immer notwendig/erwünscht, auch wenn es hilft einige fehler zur compile/run-time zu finden



  • ronny schrieb:

    friend ist doch kein bruch der kapselung

    es fügt lediglich eine funktion zum interface der klasse hinzu

    im übrigen benötigt oop keine kapselung
    das pattern zugriffsschutz ist nicht immer notwendig/erwünscht, auch wenn es hilft einige fehler zur compile/run-time zu finden

    Du kannst mit friend eine ganze Klasse zur einer anderen "hinzufuegen". Also hat die Klasse B aufeinmal vollen Zugriff auf die Interna der Klasse A. Das, finde ich, ist eine gravierende Verletzung der Kapselung und eben so der Abstraktion.



  • man muss doch dann das ganze explizit in klasse a angeben

    sowas ist durchaus nützlich wenn bestimmte interna einer klasse für die andere benötigt werden, ohne das man dafür ein offenes interface anbieten will



  • ronny schrieb:

    man muss doch dann das ganze explizit in klasse a angeben

    sowas ist durchaus nützlich wenn bestimmte interna einer klasse für die andere benötigt werden, ohne das man dafür ein offenes interface anbieten will

    Genau, und das ist der Bruch zu OOP. Wenn man friend verwendet hat man eh meist einen Designfehler oder ist einfach faul. (C++ fuer operatoren ausgeschlossen, da gehts ja nicht anders und ist IMHO Designschwaeche von C++).



  • Nur was hat oop mit Zugriffsschutz am hut ? imho sind das 2 Konzepte die sich gut miteinander verwenden lassen aber nicht fest aneinander gebunden sind.

    Nur dieser absolutismus immer ...

    im übrigen sind kontrollierte interface-erweiterungen auf andere klassen/funktionen nicht weiter tragisch



  • DEvent schrieb:

    Genau, und das ist der Bruch zu OOP. Wenn man friend verwendet hat man eh meist einen Designfehler oder ist einfach faul.

    quatsch. Die Kapselung bleibt doch weiter erhalten. Man hat nur mehr Möglichkeit sie durchzusetzen.



  • rüdiger schrieb:

    DEvent schrieb:

    Genau, und das ist der Bruch zu OOP. Wenn man friend verwendet hat man eh meist einen Designfehler oder ist einfach faul.

    quatsch. Die Kapselung bleibt doch weiter erhalten. Man hat nur mehr Möglichkeit sie durchzusetzen.

    Na wenn du meinst... Man gibt zwar einer Klasse die volle Kontrolle ueber eine andere Klasse, aber die Kapselung bleibt weiter erhalten jaja. 🤡



  • DEvent schrieb:

    rüdiger schrieb:

    DEvent schrieb:

    Genau, und das ist der Bruch zu OOP. Wenn man friend verwendet hat man eh meist einen Designfehler oder ist einfach faul.

    quatsch. Die Kapselung bleibt doch weiter erhalten. Man hat nur mehr Möglichkeit sie durchzusetzen.

    Na wenn du meinst... Man gibt zwar einer Klasse die volle Kontrolle ueber eine andere Klasse, aber die Kapselung bleibt weiter erhalten jaja. 🤡

    Wer sagt denn, dass die Kapselung nur auf eine Klasse beschränkt sein soll?

    Aber wenn du lieber rumpöbeln willst, als zu argumentieren, dann verzieh dich einfach und raub nicht meine Zeit!



  • http://www.parashift.com/c++-faq-lite/friends.html#faq-14.2

    If they're used properly, they enhance encapsulation.


Anmelden zum Antworten