OOP: soll man jetzt alles in ne Klasse packen oder watt?
-
Shade Of Mine schrieb:
Gregor:
liegen doch beieinander.
direkt untereinander im code.
keine andere code zeile ist dazwischen.was willst du mehr?
Shade: Code UND KOPF, habe ich doch gesagt!
Die Platzierung der verschiedenen Elemente, die zu einem Objekt gehören, in unteschiedlichen Namensräumen, zeigt mir, dass Du sie im Kopf nicht so anordnest. Du setzt im Prinzip unterschiedliche "Überschriften" über die verschiedenen Elemente. Und unter diesen "Überschriften" findet sich eben auch alles mögliche, was mit dem Objekt nichts zu tun hat. Für mich heißt das: "Ja, ok, ich habe das zwar untereinandergeschrieben, aber das mein ich ja gar nicht so....".
-
Zeus schrieb:
Ja ist uns schon klar, trotzdem kann man von prozedurfunktion(object, daten) nix ableiten also kein OOP.
Magst du kurz Shades Frage beantworten? Ist Javascript OO? Und, wenn nicht, ist z.B. Java OO?
-
Gregor schrieb:
All diese Konzepte, zu denen auch die Vererbung gehört, sind sicherlich nicht zwingend für die OOP nötigt. Dennoch ordnet man diese Konzepte der OOP zu. Insofern kann man sicherlich sagen, dass eine Sprache, die diese Konzepte besser als eine andere Sprache unterstützt/ermöglicht, auch die OOP stärker unterstützt. Du kommst ja auch nicht auf die Idee, Prolog als objektorientierte Sprache zu bezeichnen, nur weil volkard gesagt hat, dass man ja auch in Prolog objektorientiert programmieren kann.
Was man sich fragen sollte, ist doch: Wie sieht objektorientierte Programmierung aus, wenn man keine passenden Sprachmittel zur Verfügung hat. Die Antwort ist, dass man sich da Abhilfe schaffen muss. Man muss sich irgendwelche Krücken bauen, die einem die objektorientierten Konzepte zur Verfügung stellen, die man nutzen möchte.
java\1:
ist das objekt orientiert?es hat keine klassen, aber dafuer ist alles ein objekt. sogar eine funktion ist ein objekt. aber halt keine klassen und deshalb keine klassische vererbung.
fangen wir jetzt an zu sagen javascript ist nicht ganz so oop wie c++ und java ist etwas mehr oop?
ich denke das ist bloedsinn. ein code ist oo, nicht die sprache. es gibt diverse konzepte, klassen sind zB ein konzept. aber es gibt zB auch prototypes als konzept.
ich kann diese konzepte nicht bewerten - also was besser ist. es ist einfach anders.
was wir jetzt machen koennen ist die konzepte zu zaehlen... aber ist das sinnvoll?
-
Gregor schrieb:
Ne. Aus meiner Sicht ist die Grundidee der OOP, wie es in dem Artikel da steht, dass Daten UND FUNKTIONEN in Objekten zusammengefasst werden.
Geht's nicht eigentlich eher darum dass man zusammengehörige Daten zu Objekten zusammenfasst und mit Objekten statt kontextfreien Daten hantiert?
Was ist der Vorteil von Methoden gegenüber Funktionen, und warum sind Methoden inherent OO, Funktionen kategorisch nicht?
-
Gregor schrieb:
Bashar schrieb:
Meines Wissens ist die Grundidee von OOP, dass Daten in Objekte zusammengefasst werden
Ne. Aus meiner Sicht ist die Grundidee der OOP, wie es in dem Artikel da steht, dass Daten UND FUNKTIONEN in Objekten zusammengefasst werden. Da ist es ziemlich egal, ob man dafür ein Klassenkonstrukt verwendet. Das wichtige ist, dass Daten und Funktionen nach beieinander liegen.
Ja sicher. Mal abgesehen davon dass du die Definition mit dem Begriff Funktion unnoetig einschraenkst, weiss der Empfaenger der Nachricht, also das Objekt, selbst wie es darauf reagieren soll, die Methoden gehoeren also zum Objekt.
-
Shade Of Mine schrieb:
ich denke das ist bloedsinn. ein code ist oo, nicht die sprache. es gibt diverse konzepte, klassen sind zB ein konzept. aber es gibt zB auch prototypes als konzept.
Wenn die Fragestellung ist, "ob eine Sprache objektorientiert ist", dann heißt das, dass gefragt ist, inwiefern die Sprache Sprachmittel zur Unterstützung der objektorientierten Programmierung bereitstellt und inwiefern die Sprache darauf ausgerichtet ist, dass man mit ihr objektorientiert programmiert. Natürlich ist die Antwort darauf immer relativ zu sehen.
Wenn Du sagst, nur Code sei objektorientiert, was macht denn dann einer, der sich auf ne Stellenbeschreibung bewirbt, in der OOA verlangt wird.
-
Bashar schrieb:
Gregor schrieb:
Bashar schrieb:
Meines Wissens ist die Grundidee von OOP, dass Daten in Objekte zusammengefasst werden
Ne. Aus meiner Sicht ist die Grundidee der OOP, wie es in dem Artikel da steht, dass Daten UND FUNKTIONEN in Objekten zusammengefasst werden. Da ist es ziemlich egal, ob man dafür ein Klassenkonstrukt verwendet. Das wichtige ist, dass Daten und Funktionen nach beieinander liegen.
Ja sicher. Mal abgesehen davon dass du die Definition mit dem Begriff Funktion unnoetig einschraenkst, weiss der Empfaenger der Nachricht, also das Objekt, selbst wie es darauf reagieren soll, die Methoden gehoeren also zum Objekt.
Ein Punkt für Dich: Denk Dir die Einschränkung weg.
-
Gregor schrieb:
Wenn Du sagst, nur Code sei objektorientiert, was macht denn dann einer, der sich auf ne Stellenbeschreibung bewirbt, in der OOA verlangt wird.
Erklaere mir warum ich in Java Prozedual programmieren kann.
und beantworte mir endlich die Javascript frage. Die ist essentiell.
-
Shade Of Mine schrieb:
Erklaere mir warum ich in Java Prozedual programmieren kann.
In dem ich die Main-Klasse als globalen Namespace verwende und dort sämtliche Prozeduren als static-Methoden anlege. Dann ist nicht mehr viel mit OOP. Dann kann man wohl kaum mehr von OOP reden.
MfG SideWinder
-
Ob JavaScript OO ist, ist das wichtig?
Die eigentliche Definition von OOP ist(ich hab ja schon geschrieben):
Muss beinhalten:
-Kapselung
-Vererbung
-Polymorphieaber ich bin desweiteren auch zu Akzeptieren von andere Definitionen, aber bis jetzt nix gehört.
Sei OOP auch nur die Kapselung, aber den Code den Shadow postet, ist nicht OOP.function Person() { this.vorname = "Hans"; this.nachname = "Müller"; this.geschlecht = "männlich"; var alter = 30; }
Aber nun, wenn ich sowas sehe, muss ich sehen, sieht verdammt gut nach OOP aus und auch schon ein bisschen genial.
Aber was soll eigentlich immer die Abschweifungen in anderen Sprachen, wir haben C++ als Thema und bisschen Java (Gregor :P)
Die Erkenntis aus JavaScript das Funktionen Objekte sind nach C++ zu übertragen, halte ich für riskant.
Eine Sprache kommt mit ihren eigene Definition, wie meine Eigene@Class Auto var _door; var _speed; var _Person[]; func isStanding() { if(speed != 0) isStanding = false; } func addPerson(Person) { self._Person.add(Person); } func go() { self._speed = 20; } @Class Person(name, alter) var name; var alter; func sayHallo() { print "Hallo"; } int main() { Auto meinAuto(); Person p1("Susi", 22), p2("Reiner", 25); p1.sayHallo(); p2.sayHallo(); meinAuto.addPerson(p1); meinAuto.addPerson(p2); }
-
Shade Of Mine schrieb:
Gregor schrieb:
Wenn Du sagst, nur Code sei objektorientiert, was macht denn dann einer, der sich auf ne Stellenbeschreibung bewirbt, in der OOA verlangt wird.
Erklaere mir warum ich in Java Prozedual programmieren kann.
und beantworte mir endlich die Javascript frage. Die ist essentiell.
Eine Sprache kann dir Mittel zur allen Paradigmen geben, also auch OOP, aber wenn du sie nicht nutzt programmierst du halt nicht OOP.
-
Shade Of Mine schrieb:
Gregor schrieb:
Wenn Du sagst, nur Code sei objektorientiert, was macht denn dann einer, der sich auf ne Stellenbeschreibung bewirbt, in der OOA verlangt wird.
Erklaere mir warum ich in Java Prozedual programmieren kann.
Du kannst in Java auch prozedural programmieren, weil es pragmatisch gesehen oft besser ist, sich nicht zu 100% auf ein Programmierparadigma festzulegen. Aus meiner Sicht ist das also eine Frage des Pragmatismus, wobei ich nicht weiß, was sich die Designer von Java bei jedem einzelnen Sprachfeature gedacht haben.
Shade Of Mine schrieb:
und beantworte mir endlich die Javascript frage. Die ist essentiell.
Ich kenne Javascript nicht, kann Dir Deine Frage deshalb nicht beantworten. Ich kann Dir nur sagen, dass die Antwort sicherlich eine Abwägung beinhalten müsste. Das ist bei den meisten Sprachen keine Entscheidungsfrage.
-
Gregor schrieb:
Du kannst in Java auch prozedural programmieren, weil es pragmatisch gesehen oft besser ist, sich nicht zu 100% auf ein Programmierparadigma festzulegen. Aus meiner Sicht ist das also eine Frage des Pragmatismus, wobei ich nicht weiß, was sich die Designer von Java bei jedem einzelnen Sprachfeature gedacht haben.
Also gibt es kein pures OO?
Ich kenne Javascript nicht, kann Dir Deine Frage deshalb nicht beantworten. Ich kann Dir nur sagen, dass die Antwort sicherlich eine Abwägung beinhalten müsste. Das ist bei den meisten Sprachen keine Entscheidungsfrage.
es geht um andere konzepte.
java script bietet zB das prototype konzept.es ist eine alternative zum klassen konzept. darum geht es. es ist einfach so, dass es verschiedene konzepte gibt um OO durchzusetzen.
ihr nehmt jetzt ein paar gaengige konzepte und sagt OOP wird dadurch definiert. aber ein lisp programmierer wird vielleicht sagen man braucht multi methods fuer OOP. ein JS programmierer wird sagen dass Klassen sinnlos sind und nicht OO, weil klassen zu statisch sind und sich nicht erweitern lassen. und dass vererbung nur ein billiger versuch ist das zu simulieren.
es gibt soviele konzepte. ihr nagelt euch auf ein paar wenige fest und alles was das nicht ist, ist nicht OO.
FILE* sagt dir sicher etwas. ich habe eine factory dafuer: fopen(). ich kann damit devices oeffnen, speicher bereiche, dateien, etc. und ich habe funktionen die auf diesem objekt operieren (fwrite, fread, fseek).
das ist klassische OOP.
alles was ich nicht kann ist von FILE* ableiten. ok, per definition ists halt sealed und gut ist.
es gibt soviel mehr konzepte als in eurer java welt. (und auch C++ welt oder sonst was - es gibt viele welten und viele konzepte).
-
Und deswegen solltest du nicht die Konzepten mischen
in C++ gibst keine Sprachfunktion von eine normale Funktion auf ein interne Daten zuzugreifen, deswegen ist das ja auch klassische prozeduale Programmierung.class a{ private: int zahl; public: void set(int); int get(void); } void a::set(int a) { this.zahl = a; } int a::get(void) { return zahl; }
int zahl; void set(int a) { zahl = a; } int get(void) { return zahl; }
Wahrscheinlich weil die sytaxtische Transformierung so leicht ist, meint ihr es sei OOP.
Bein oberen Code beginnt OOP und unten ist es einfache prozeduale Programmierung.
-
Zeus schrieb:
Und deswegen solltest du nicht die Konzepten mischen
in C++ gibst keine Sprachfunktion von eine normale Funktion auf ein interne Daten zuzugreifen, deswegen ist das ja auch klassische prozeduale Programmierung.gibt es sehr wohl.
- friend
- public data member
-
nachtrag:
syntax ist komplett egal. was zaehlt ist der gedanke dahinter.
der code ist semantisch komplett gleich.
-
Bitte beweis es durch Code.
und public data member fällt eh weg weil es gegen Datenkapselung ist.
-
Das ist stinknormale prozedurale Programmierung.
Nein, ist es nicht, wie du ja selbst sagst: (okay, es werden Prozeduren benutzt, aber das schließt ja OOP nicht aus, Methoden sind ja in vielen Programmiersprachen auch nur Prozeduren)
Nur weil hier Objekte wie double, tastatur, auftauchen, nennt ihr das Objectorientiert ?
Ja, weil Nachrichten (Funktionen bzw. Prozeduren bzw. Methoden ...) auf Objekte angewandt werden.
Weil kein Objekt da ist zu dem eine Nachricht geschickt wird ?
object.nachricht(daten);
So sieht es normalerweise aus.
prozedurfunktion(object, daten);
Also deine Definition von Objektorientierterprogrammierung lautet:
"OOP bedeutet die Benutzung folgender Syntax: Objektname "." Nachricht "(" Argumente * ")";"
gut, wenn das deine Definition ist, dann hast du eine andere Definition als die meisten Menschen.
Zeus schrieb:
Ob JavaScript OO ist, ist das wichtig?
Die eigentliche Definition von OOP ist(ich hab ja schon geschrieben):
Muss beinhalten:
-Kapselung
-Vererbung
-PolymorphieWeder die Definition von Gregor, noch die, nach meiner Meinung zutreffendere, von Bashar enhalten diese Bedingungen.
aber ich bin desweiteren auch zu Akzeptieren von andere Definitionen, aber bis jetzt nix gehört.
Lies noch mal den Thread
Aber was soll eigentlich immer die Abschweifungen in anderen Sprachen, wir haben C++ als Thema und bisschen Java (Gregor :P)
Nein, eigentlich ist OOP das Thema. Dein Thema scheint C++ und Java zu sein.
Die Umsetzung von OOP in anderen Programmiersprachen soll dir eben aufzeigen, dass nicht nur Java und C++ "OO" definieren. Besonders da beide Sprachen ja sehr ähnlich sind und die OOP Umsetzung im Grunde gleich ist (kommt mir bitte nicht mit Syntax Kleinigkeiten, ich rede vom Prinzip).
Die Erkenntis aus JavaScript das Funktionen Objekte sind nach C++ zu übertragen, halte ich für riskant.
überträgt niemand
Zeus schrieb:
Und deswegen solltest du nicht die Konzepten mischen
in C++ gibst keine Sprachfunktion von eine normale Funktion auf ein interne Daten zuzugreifen, deswegen ist das ja auch klassische prozeduale Programmierung.interne Daten? Wovon sprichst du? Du musst ja auch kein struct nehmen als ein Objekt, wenn dir das zu offen ist, dann packst du die Daten eben in ein eigenes Format. Aber hey, was glaubst du ist eine Klasse in C++?
so muss weg
-
Shade: Ich habe die OOP-Definitionen, die es so im Netz gibt, nicht selbst gemacht. Ich habe auch nicht die Begriffswelten erfunden, die damit verbunden sind und auch nicht die Konzepte, die damit im Allgemeinen assoziiert werden. Ich kann nur sehen, was in den Büchern und anderen Quellen steht und kann dann sagen, dass etwas darauf zutrifft oder eben nicht. Du und volkard scheint euch den OOP-Begriff nach eurem belieben hinzubiegen und zu ändern. Das steht euch aber nicht zu. Ihr habt ja auch noch keine andere Definition der OOP angebracht, die vielleicht eine seriösere Quelle darstellt. Warum eigentlich nicht? Findet Ihr keine Definition, die eurer Vorstellung entspricht? Scheint genau das Gleiche zu sein, wie mit dem Schnittstellenbegriff weiter oben. Auf mich wirkt es so, als ob Ihr in einer Begriffs-Parallelgesellschaft lebt. ...oder bin ich das?
Ich glaube nicht, dass ich das bin, weil meine Vorstellungen mit den Definitionen, die man so findet, übereinstimmen.
-
rüdiger schrieb:
Weder die Definition von Gregor, noch die, nach meiner Meinung zutreffendere, von Bashar enhalten diese Bedingungen.
Huh? Wo hat Bashar ne Definition gebracht? Habe ich da etwas überlesen? Ich habe übrigens keine eigene Definition gebracht. Ich habe nur aus ner externen Seite zitiert.