OOP: soll man jetzt alles in ne Klasse packen oder watt?
-
Ob die Sprache ein Feature bietet zu kapselt oder ein Schlüsselwort bietet ist nebensächlich (ledenfalls für mich, möge andere geben für die wichtig ist.)
Das Ziel ist, was von OOP verfolgt wird, dass der Programmier gezwungen wird Schnittstelle zu definieren, und die Daten von Außen nicht zu sehen sind.
-
Die einzige Definition von OOP die ihr gebracht habt ist die: "Ich denkte das es OOP ist, also ist es OOP".
double sqrt(void* x);
So, was ist hier das Objekt ? Ich kann sqrt jetzt für ein beliebieges Objekt benutzen, also ist sqrt() eine Nachricht an alle Objekt die es gibt/je geben wird ?
private gibt es auch in c++ nicht.
#define private public und schon ist zugriffskontrolle weg.Alles klar. Mit einem Textparser willst du mir also Beweisen das es in C++ keine Kapselung gibt ? Mit genügent defines kann ich auch PROLOG in C++ programmieren.
ist das etwa deine art zu argumentieren?
dir ist schon klar dass du hier nicht mit irgendwelchen moechte gern noobs redest, oder?
Mit deinem #define private public hast du dich irgendwie in diese Richtung bewegt.
-
DEvent schrieb:
Die einzige Definition von OOP die ihr gebracht habt ist die: "Ich denkte das es OOP ist, also ist es OOP".
weil man OOP nicht so einfach definieren kann.
mach dich mal etwas schlau und schau dir vorallem mal andere sprachen an. es macht keinen sinn mit dir zu reden, du siehst nur deine kleine java oder c++ welt.
double sqrt(void* x);
So, was ist hier das Objekt ? Ich kann sqrt jetzt für ein beliebieges Objekt benutzen, also ist sqrt() eine Nachricht an alle Objekt die es gibt/je geben wird ?
du kannst in einer zeile code nicht sehen ob sie objekt orientiert ist.
moeglich dass x ein objekt ist. ich weiss es nicht.
genausowenig wie du sagen kannst ob
foo.bar(baz);
objekt orientiert ist.
private gibt es auch in c++ nicht.
#define private public und schon ist zugriffskontrolle weg.Alles klar. Mit einem Textparser willst du mir also Beweisen das es in C++ keine Kapselung gibt ? Mit genügent defines kann ich auch PROLOG in C++ programmieren.
der praeprozessor gehoert zu c++.
sorry. das habe ich mir nicht ausgedacht.
Mit deinem #define private public hast du dich irgendwie in diese Richtung bewegt.
sorry, aber ich denke ich kann weit mehr sprachen als du und ich denke auch dass genug leute hier im forum dir bestaetigen werden dass ich genug ahnung von programmierung habe.
ich rede doch sowieso 90% der zeit von sachen die du nicht verstehst. alles was du nicht kapierst ignorierst du. also mach mich nicht bloed an.
ich fuer meinen teil denke doch dass wenn volkard, bashar, kingruedi und ich einer meinung sind, es doch sehr wahrscheinlich ist, dass es stimmt.
du siehst nur deine kleine welt.
ich rede mit dir nicht mehr darueber bist du dir javascript und lisp angesehen hast und das objekt modell dort verstanden hast.
dann koennen wir weiter reden.
-
DEvent schrieb:
Die einzige Definition von OOP die ihr gebracht habt ist die: "Ich denkte das es OOP ist, also ist es OOP".
Weil es keine allgemeingültige OOP-Definition gibt.
Vor allem aber ist OOP ein Konzept, eine Herangehensweise, die durchaus in verschiedenen Ausprägungen daher kommen kann; nicht die Featurelist einer Programmiersprache.DEvent schrieb:
double sqrt(void* x);
So, was ist hier das Objekt ? Ich kann sqrt jetzt für ein beliebieges Objekt benutzen, also ist sqrt() eine Nachricht an alle Objekt die es gibt/je geben wird ?
Du wirst lachen, aber das kann durchaus hochgradig oo sein - wahrscheinlich ist dir einfach der Unterschied zwischen "Nachricht" und "Methode" nicht ganz klar.
-
finix schrieb:
DEvent schrieb:
Die einzige Definition von OOP die ihr gebracht habt ist die: "Ich denkte das es OOP ist, also ist es OOP".
Weil es keine allgemeingültige OOP-Definition gibt.
Vor allem aber ist OOP ein Konzept, eine Herangehensweise, die durchaus in verschiedenen Ausprägungen daher kommen kann; nicht die Featurelist einer Programmiersprache.Du wieder Sprichst dir schon selbst. Ein Konzept hat genau Ausprägung also eine Beschreibung.
OOP ist mindestens die Zusammenfassung von Daten und Funktionen, mit den Zugriff über Schnittstellen.
Das JavaScript-Beispiel erfüllt es, weil private Eigentschaften möglich ist.
-
Zeus schrieb:
OOP ist mindestens die Zusammenfassung von Daten und Funktionen, mit den Zugriff über Schnittstellen.
das habe ich aber.
ich habe die daten in einer struct und ich habe funktionen die auf diesen daten operieren.
Das JavaScript-Beispiel erfüllt es, weil private Eigentschaften möglich ist.
private ist zwingend noetig fuer OOP?
ich habe bereits bewiesen dass private ein illusion ist. sowohl in java als auch in c++ kann ich es umgehen...btw: javascript kennt ebenfalls kein private. JS kann keine kapselung laut deiner definition. Man simuliert das ganze ueber nested functions die es erst seit js 1.2 gibt.
aber gut, was du sagst ist, dass ich in C nicht objekt orientiert programmieren kann?
findest du es nicht komisch festzulegen ob etwas OO ist indem du ein bestimmtes sprach feature als unabdingbar definierst dass extrem leicht auszuhebeln ist?
zB kann man mit php4 wunderschoene java like OOP betreiben. obwohl es keine access controls gibt. in php5 kann ich die access controls auch total leicht umgehen...
und dennoch definiert sich OO dadurch dass es access controls fuer die daten gibt?
-
Komm du mal runter, nur weil du und volkrat und noch ein paar miteinader einer Meinung ist, heist es nicht das sie stimmt.
findest du es nicht komisch festzulegen ob etwas OO ist indem du ein bestimmtes sprach feature als unabdingbar definierst dass extrem leicht auszuhebeln ist?
Ich finde es komisch das du ein Sprachfeature hackst und dann behauptest das es nich gibt.
Der Präprozessor ist ein einfacher Textersetzer, hat mit der Sprache C++ nicht viel zu tun. Erst wird alles durch die #defines ersetzt, dann erst kriegt der C++-Compiler den Code, den er kompiliert.
-
int zahl; void set(int a) { zahl = a; } int get() { return zahl; }
#include <iostream> #include "lol.h" int main() { zahl = 1; std::cout << zahl; std::cout << "Hello world!" << std::endl; return 0; }
Tolles OOP....
Ausserdem hab ich schon auf Javasvript aufgezeigt, dass es Datenkapseln kann. Du hingegen kommst wieder und behauptest das Gegenteil davon.
-
@Shade: Auf Seite 11 sagst Du:
Shade Of Mine schrieb:
math.sqrt ist nichts anderes als std::sqrt. Kein bisschen OO der ansatz, aber halt praktisch.
Und auf Seite 15 sagst Du wohl in bezug auf sqrt(a):
Shade Of Mine schrieb:
Es ist Objektorientiert.
Was denn nun?
...und drehen wir die Diskussion doch mal um: Bisher wurde argumentiert, dass es nicht objektorientiert ist. Was spricht denn dafür, dass es sich um objektorientierte Programmierung handelt? Welche Kriterien werden diesbezüglich erfüllt, welche müssen erfüllt werden?
-
Shade Of Mine schrieb:
Zeus schrieb:
OOP ist mindestens die Zusammenfassung von Daten und Funktionen, mit den Zugriff über Schnittstellen.
das habe ich aber.
ich habe die daten in einer struct und ich habe funktionen die auf diesen daten operieren.
Trotzdem kann jeder uneingeschränkt auf deine Daten zugreifen
Das JavaScript-Beispiel erfüllt es, weil private Eigentschaften möglich ist.
private ist zwingend noetig fuer OOP?
ich habe bereits bewiesen dass private ein illusion ist. sowohl in java als auch in c++ kann ich es umgehen...Nein du hast ein C++ Werkzeug missbraucht.
Man kann alles umgehen, aber das ist auch nicht der Punkt der Diskussion
Für OOP muss deine Code paar Aspekte erfüllen, wie das nun eine Sprache hand habt ist total egal, deswegen versteh ich nicht warum du dich an die Accessspezifikationen aufhaltest.btw: javascript kennt ebenfalls kein private. JS kann keine kapselung laut deiner definition. Man simuliert das ganze ueber nested functions die es erst seit js 1.2 gibt.
Du wiedersprichst mir, aber hab schon im post über mir geschrieben
aber gut, was du sagst ist, dass ich in C nicht objekt orientiert programmieren kann?
C,Pascal und Visual Basic bis 6 sind prozeduale Programmiersprachen
findest du es nicht komisch festzulegen ob etwas OO ist indem du ein bestimmtes sprach feature als unabdingbar definierst dass extrem leicht auszuhebeln ist?
Ich kann in Java OOP aushelben, trotzdem gilt die Sprache als der Vertreter von OOP. Objektorientiung findet in Design statt und dieses braucht Mechanismen in der Sprache um es zu unterstützen, sei is durch private datamember (c++/java/c#), __datamember(PHP-like) oder irgendeinen anderen.
zB kann man mit php4 wunderschoene java like OOP betreiben. obwohl es keine access controls gibt. in php5 kann ich die access controls auch total leicht umgehen...
und dennoch definiert sich OO dadurch dass es access controls fuer die daten gibt?
Nun bitte ich dich mal OOP zu erklären, und alle Definitionen dazu und wie es sich von prozeduale Programmierung unterscheidet.
-
Zeus schrieb:
aber gut, was du sagst ist, dass ich in C nicht objekt orientiert programmieren kann?
C,Pascal und Visual Basic bis 6 sind prozeduale Programmiersprachen
Trotzdem kann ich mit C objektorientiert programmieren. Was willst du uns sagen?
-
findest du es nicht komisch festzulegen ob etwas OO ist indem du ein bestimmtes sprach feature als unabdingbar definierst dass extrem leicht auszuhebeln ist?
Ich kann ein Auto auch mit bloßen Händen schieben. Trotzdem bleibt es ein motorisiertes Fahrzeug.
Ich kann auch mit eine Pistole auf jemanden einprügeln. Trotzdem bleibt es eine Schußwaffe.
...
-
TactX schrieb:
Zeus schrieb:
aber gut, was du sagst ist, dass ich in C nicht objekt orientiert programmieren kann?
C,Pascal und Visual Basic bis 6 sind prozeduale Programmiersprachen
Trotzdem kann ich mit C objektorientiert programmieren. Was willst du uns sagen?
Hättest du diese Aussage anhand von VB6 gemacht, müsste ich einlenken, aber mit C kann man keine OOP machen.
-
*Plonk* Klar kann man mit C OOP programmieren, schau dir nur mal gtk+ an. Polymorphie z.B. ist auch nur ein Pointer auf eine Tabelle mit Funktionszeigern...
-
Zeus schrieb:
TactX schrieb:
Zeus schrieb:
aber gut, was du sagst ist, dass ich in C nicht objekt orientiert programmieren kann?
C,Pascal und Visual Basic bis 6 sind prozeduale Programmiersprachen
Trotzdem kann ich mit C objektorientiert programmieren. Was willst du uns sagen?
Hättest du diese Aussage anhand von VB6 gemacht, müsste ich einlenken, aber mit C kann man keine OOP machen.
Warum nicht?
-
Zeig mir Datenkapselung in C.
Zeus schrieb:
int zahl; void set(int a) { zahl = a; } int get() { return zahl; }
#include <iostream> #include "lol.h" int main() { zahl = 1; std::cout << zahl; std::cout << "Hello world!" << std::endl; return 0; }
Wenn das so auszieht, dann ist es kein OOP.
-
GPC schrieb:
*Plonk* Klar kann man mit C OOP programmieren, schau dir nur mal gtk+ an. Polymorphie z.B. ist auch nur ein Pointer auf eine Tabelle mit Funktionszeigern...
Ach du Spielverderber
-
Zeus schrieb:
Zeig mir Datenkapselung in C.
// lol.h #ifndef LOL_H #define LOL_H int get(); void set(int i); #endif // lol.c #include "lol.h" static int zahl; int get() { return zahl; } void set(int i) { zahl = i; }
Da hast du deine Kapselung du "OOP-Ritter".
-
Das ist ein schlechter witz.
-
Es gibt wahrscheinlich zigtausend Quellen von OOP mit ANSI C im Netz.