OOP: soll man jetzt alles in ne Klasse packen oder watt?
-
Zeus schrieb:
Denn in der Programmierung steht die Sprache in Vordergrund.
nee, das wär ja schlimm. die sprache ist nur ein werkzeug. wenn du einen teller suppe auslöffelst steht das stillen deines hungers im vordergrund und nicht der löffel
-
Zeus schrieb:
Sorry Leute, aber
Objektorientierte Programmierung ist nicht wenn man eine nicht OOP Sprache an mich nehme und Code schreibt, der augenscheinlich die Definition von OOP erfült.
Den in der Programmierung steht die Sprache in Vordergrund.Ach ja. Wie nennst du denn prozeduralen Code der in einer OOP-Sprache geschrieben ist?
Zeus schrieb:
Wenn ihr sagt ich hab eine OO-Umsetztung in prozedualen Programmiersprachen (OOP-like), dann würde ich es akzeptieren, denn eine Umsetztung ist wirklich sehr leicht.
Eine objektorientierte Umsetzung die der objektorientierten Programmierung quasi ähnlich ist, hm?
[/quote]
-
Zeus schrieb:
Den in der Programmierung steht die Sprache in Vordergrund.
bei mir ist die sprache nur ein tool. ein hilfsmittel um den code zu schreiben.
manche sachen erleichtert sie mir, andere macht sie mir schwerer.
aber die sprache ist nur dumme syntax. nicht mehr.
ich kann in Java strukturiert programmieren und in C objekt orientiert.
Wenn ihr sagt ich hab eine OO-Umsetztung in prozedualen Programmiersprachen (OOP-like), dann würde ich es akzeptieren, denn eine Umsetztung ist wirklich sehr leicht.
OOP-like. was heisst das fuer dich. es ist genau wie OOP? ja, wenn es genauso ist, dann ist es dass ja. Wenn es danach riecht schmeckt und sich so anfuehlt...?
OOP bringt Konzepte mit sich, um Beschreibung zu tätigen aus der Realen Welt.
Und bei euren Lösung ist recht technisch, viele Zeiger, funktionen,....Deine Loesung hat Klassen, Methoden, vtables,...
auch nicht wirklich viel untechnischer, oder?lediglich dass C++ deine variante besser unterstuetzt und mehr tools dafuer bietet. in Javascript saehe es umgekehrt aus. da sind deine klassen wahnsinnig kompliziert zu machen...
Der Vorteil ist doch die Einfachheit(ich meine damit nicht dass das Konzept einfach zu verstehen ist), wenn man so die Codebeispiele von ANIS C OOP sieht, bleibt aber nix übrig.
ah, also wenn es kompliziert ist, ist es nicht echt?
template metaprogamming ist also nicht template metaprogramming weil es sau kompliziert ist und lisp es wesentlich leichter anbietet?eine sprache ist ein werkzeug um dir zu helfen verschiedene konzepte zu verwenden. zB bietet dir C++ templates fuer statische polymorphie (nochmal: ich erfinde das nicht, dass ist ein teil von C++ ein grund warum C++ so maechtig ist - ich diskutiere jetzt sicher nicht darueber ob statische polymorphie auch polymorphie ist oder sonstwas. das ist ein konzept dass es schon lange gibt und C++ zB mit seinen templates unterstuetzt. das euch am bekanntesten beispiel ist sicher der operator+ der fuer zB int und double. das ist statische polymorphie. ocaml verbietet das zB und hat + fuer int+int und +. fuer double+.double - es sind einfach konzepte die es gibt. und nur weil ihr sie nicht kennt, sind sie nicht einfach schlecht. ein op+ fuer string und int mag fragwuerdig sein, aber sogar java kann diese minimale statische polymorphie, weil es manchmal einfach praktisch ist sie zu haben. C++ geht weiter und erlaubt diese polymorphie fuer mehr als nur die mathematischen operatoren.)
eine sprache bietet nun hilfmittel fuer gewisse konzepte. zB bietet C++ keine hilfe fuer Interfaces. Dennoch verwendet man manchmal welche. Aber nicht immer. Denn vieles macht man mit statischer polymorphie. zB das ganze Container Konzept der STL basiert darauf.
Aber obwohl mir C++ keine hilfe fuer interfaces anbietet, kann ich interfaces verwenden. Javascript bietet mir keinerlei hilfe fuer access control - aber ich kann es dennoch irgendwie simulieren. C++ bietet mir keinerlei hilfe fuer multimethods - aber ich kann es dennoch irgendwie simulieren. C bietet mir keinerlei hilfe fuer dynamische polymoprhie - aber ich kann es dennoch irgendwie simulieren.
und wollen wir jetzt code bewerten ob er OO ist, je nachdem wie schwer es war gewisse konzepte zu modellieren?
javascript hat keine zugriffskontrolle und in C++ und Java kann ich sie recht simpel umgehen. und der rest ist gegeben. In C kann ich uebrigens den zugriff genau wie in JS verbieten indem ich die implementierung verstecke:
struct MyClass { void* impl; }; struct MyClassImpl { int a, b; }; MyClass* make_MyClass(int a, int b) { MyClass* c=malloc(sizeof(MyClass)); MyClassImpl* impl=malloc(sizeof(MyClassImpl)); impl->a=a; impl->b=b; c->impl=impl; return c; }
und schon kann ich nicht mehr auf a und b zugreifen.
wenn jemand sagt dass man ja casten kann: MyClassImpl ist einfach nicht oeffentlich sondern liegt in einer .c datei.fertig ist die kapselung.
sinnloser aufwand - denn mir persoenlich reicht der vertrag den ich schliesse wenn ich ein objekt erstelle, nicht in den innereien rumzupfuschen.
aber bitte, hier ist access control in C
-
net schrieb:
Zeus schrieb:
Denn in der Programmierung steht die Sprache in Vordergrund.
nee, das wär ja schlimm. die sprache ist nur ein werkzeug. wenn du einen teller suppe auslöffelst steht das stillen deines hungers im vordergrund und nicht der löffel
Für eine Lösung ist die Sprache nur ein Werkzeug.
Zeus schrieb:
Sorry Leute, aber
Objektorientierte Programmierung ist nicht wenn man eine nicht OOP Sprache an mich nehme und Code schreibt, der augenscheinlich die Definition von OOP erfült.
Den in der Programmierung steht die Sprache in Vordergrund.Ach ja. Wie nennst du denn prozeduralen Code der in einer OOP-Sprache geschrieben ist?
Für mich sind das keine Äquivalenzen.
Ich versuchs mal Veranschlaulichen in dem ich sage Objektorientierte Programmierung ist ein Hülle der prozeduale Programmierung.
Vielleicht macht es dann Click
-
Shade Of Mine schrieb:
Aber obwohl mir C++ keine hilfe fuer interfaces anbietet, kann ich interfaces verwenden.
eh? Kauf dir ein Gutes C++ Buch, dass wird dir Interfaces in C++ zeigen.
Und auf dem Rest gehe ich nicht mehr ein.
-
Zeus schrieb:
Für mich sind das keine Äquivalenzen.
Ich versuchs mal Veranschlaulichen in dem ich sage Objektorientierte Programmierung ist ein Hülle der prozeduale Programmierung.
Vielleicht macht es dann Clickfuer mich nicht.
Und ich nehme an die meisten OO freaks werden dich dafuer steinigen.OOP und strukturierte programmierung sind 2 unterschiedliche konzepte die nichts miteinander zu tun haben.
man kann sie mischen wo es sinn macht, aber sie sind grundverschieden.
ich denke du stehst noch am anfang was dein OOP verstaendnis betrifft. Das ist ok, es ist noch nie ein meister vom himmel gefallen. Spiel dich aber mal mit dem objekt system in lisp und javascript. und dann implementiere ne OO loesung in C.
ich denke dann wirst du deinen horizont erweitert haben.
OOP ist einfach mehr als Klassen + Funktionen.
-
net schrieb:
Zeus schrieb:
Denn in der Programmierung steht die Sprache in Vordergrund.
nee, das wär ja schlimm. die sprache ist nur ein werkzeug. wenn du einen teller suppe auslöffelst steht das stillen deines hungers im vordergrund und nicht der löffel
Das ist wohl ein eigentor, ich hab doch mein Werkzeug damit ich mein essen kann.
also hab ich
1. Ein Löffel geholt
2. Esse ich die Suppe.
-
Zeus schrieb:
eh? Kauf dir ein Gutes C++ Buch, dass wird dir Interfaces in C++ zeigen.
Und auf dem Rest gehe ich nicht mehr ein.
ich denke ich kann weitaus besser C++ als du.
sei nicht so arrogant.
C++ unterstuetzt interfaces nicht.
ein interface darf zB keinen code implementieren - in C++ kann ich das aber.
ich kann mit c++ klassen leicht einen deadly diamond of death bauen - der mit java interfaces nicht passiert waere.etc.
C++ klassen sind keine interfaces.
ich kann sie dafuer missbrauchen - keine frage, aber c++ klassen sind dennoch keine interfaces: sie haben ihre eigenen staerken und schwaechen.
-
Zeus schrieb:
net schrieb:
Zeus schrieb:
Denn in der Programmierung steht die Sprache in Vordergrund.
nee, das wär ja schlimm. die sprache ist nur ein werkzeug. wenn du einen teller suppe auslöffelst steht das stillen deines hungers im vordergrund und nicht der löffel
Das ist wohl ein eigentor, ich hab doch mein Werkzeug damit ich mein essen kann.
also hab ich
1. Ein Löffel geholt
2. Esse ich die Suppe.und wenn du die suppe mit einem strohhalm ausdrinkst dann hast du deinen hunger nicht gestillt, richtig?
-
Echt es gibst ein Meachnismus, was die Benutzung von Interface 100% in C++ entspricht.
Du kommst wieder mit C++ kann viel mehr deswegen gibst es nicht.
-
Zeus schrieb:
Echt es gibst ein Meachnismus, was die Benutzung von Interface 100% in C++ entspricht.
Zeig ihn mir.
-
*hust*
Neulich ist ja alles was in Vorlesungen präsentiert wird per Definition wahr, aber andererseits erfüllt mein Beispiel ohnehin die Anforderungen.
- Zugriff erfolgt lediglich über eine definierte Schnittstelle und wird auch durch die Sprache selbst sichergestellt
- Jegliche Änderung wirkt sich nicht auf andere Objekte aus, es gibt sowieso nur eins (Da hab ich doch gleich auch das Singleton Pattern miteingebaut, also mein Code muss ja objektorientiert sein
).
Wenn du trotzdem noch keine Kapselung erkennen kannst, hast du es eben einfach nicht verstanden, was aber gar nicht weiter schlimm ist.
-
Zeus schrieb:
Und auf dem Rest gehe ich nicht mehr ein.
geh doch noch auf mein letztes posting ein, das mit UML.
haste da einen ansatz, das zu entkräften?
-
GPC schrieb:
Zeus schrieb:
Echt es gibst ein Meachnismus, was die Benutzung von Interface 100% in C++ entspricht.
Zeig ihn mir.
Ok hab mir ins eigene Bein geschnitten
Gibst wirklich net.
-
volkard schrieb:
Zeus schrieb:
Und auf dem Rest gehe ich nicht mehr ein.
geh doch noch auf mein letztes posting ein, das mit UML.
haste da einen ansatz, das zu entkräften?Kann man OO-Lösung prozduale lösen, im allgemeine Ja.
-
Shade Of Mine schrieb:
OOP und strukturierte programmierung sind 2 unterschiedliche konzepte die nichts miteinander zu tun haben.
C selbst gehört zu den strukturierte Programmierungsprachen, wie gehört das nun zusammen dass ihr behauptet in C OO zu programmieren?
-
Zeus schrieb:
C selbst gehört zu den strukturierte Programmierungsprachen, wie gehört das nun zusammen dass ihr behauptet in C OO zu programmieren?
du stellst dich etwas lern resistent an.
wir sagen doch die ganze zeit:
eine sprache unterstuetzt gewisse konzepte, manche besser, manche schlechter. der code ist es, der den paradigmen entspricht. ich kann OO code in C schreiben, auch wenn mir C nicht so stark dabei hilft. Genauso wie ich prozedualen code in java schreiben kann.der einfachheit halber sagt man "C ist strukturierte programmierung" weil es die meisten konzepte dort unterstuetzt und es recht logisch erscheint dann strukturierten code dort zu schreiben. weil OO code dort einfach mehr aufwand bedeutet als in anderen sprachen.
aber ich kann dennoch OO code schreiben. das ist ja ein bewiesener fakt.
OOP ist kein layer um strukturierte programmierung. es ist etwas komplett eigenes, mit eigenen konzepten.
@C++ Interfaces:
tja, C++ kann keine interfaces. ist C++ jetzt Objekt Orientiert? Ich meine Interfaces sind doch das A und O der OOP oder?Kann man OO-Lösung prozduale lösen, im allgemeine Ja.
lies volkards beitrag nochmal: du hast in UML genau die struktur vorgegeben. du kannst das jetzt nicht anders loesen ohne vom plan abzuweichen. du koenntest es natuerlich komplett anders implementieren - es gibt immer mehrere loesungen zu einem problem - aber dir wird das ganze in UML ja vorgegeben.
In Java wird es uU einfacher sein einen observer zu implementieren als in C - aber es geht. und das UML diagramm schreibt es dir so vor. also machst du es. und es klappt.
-
Shade Of Mine schrieb:
Zeus schrieb:
C selbst gehört zu den strukturierte Programmierungsprachen, wie gehört das nun zusammen dass ihr behauptet in C OO zu programmieren?
du stellst dich etwas lern resistent an.
wir sagen doch die ganze zeit:
eine sprache unterstuetzt gewisse konzepte, manche besser, manche schlechter. der code ist es, der den paradigmen entspricht. ich kann OO code in C schreiben, auch wenn mir C nicht so stark dabei hilft. Genauso wie ich prozedualen code in java schreiben kann.gib's auf. er schnallt's ja doch nicht
-
Shade Of Mine schrieb:
@C++ Interfaces:
tja, C++ kann keine interfaces. ist C++ jetzt Objekt Orientiert? Ich meine Interfaces sind doch das A und O der OOP oder?Nein Interfaces ist nicht das A und O der OOP
-
OOP hat ja auch gar kein A.