ich würde mich sehr freuen wenn die Antwort so formuliert ist das sogar jemand der 0 Plan hat ca.. 95 % versteht.
Ok, da hast du recht, das habe ich wirklich überlesen.
Wobei die Frage ist, wie man jemandem die Vor- und Nachteile von etwas erklärt, von dem er keine Ahnung hat. Ich glaube nämlich ehrlich gesagt, dass er mit Geschwindigkeit und Speicherverwaltung auch nicht besonders viel anfangen kann. Er versteht vermutlich die Begriffe, aber was dahinter steckt weiß er denke ich auch nicht.
Zum Glück kann man das erklären ja Nachholen:
Objektorientiert : Die reale Welt hat viel mit Objekten zu tun (Menschen, Tiere, Auto, Pflanzen...) . In einer OOP Sprache kannst du eigene Objekte kreieren und mit diesen deine Software entwickeln. Es wird noch mehr von der realen Welt abstrahiert als bei prozeduralen Sprachen.
Speicherverwaltung: Das ist ein sehr breites Thema daher nur ganz kurz und ganz grob. Im vergleich zu anderen Sprachen wie z.B. Java, gibt es in C++ keinen Garbage Collector. D.h. du musst dich selbst darum kümmern, dass nicht mehr benutzte Objekte gelöscht werden. Machst du das nicht entstehen sogenannte memory leaks. Ist manchmal sehr Lustig, wenn dein Speicher aufeinmal voll ist.
Kapselung: Über Access Modifier kann mann die Daten einer Klasse kappseln. Dadurch kannst du u.a. verhindern, dass jemand anderes Daten deiner Objekte verändert. Hierdurch steigt die Flexibilität, da du jederzeit Änderungen an der Programmierungslogik vornehmen kannst, ohne das dein Benutzer etwas davon merkt. Folglich steigt also auch die Wartbarkeit deiner Software, denn die Kappselung von Logik vermindert Redundanz. Durch die Kappselung von Daten erreichst du eine lose Kopplung deiner Klassen. Dies führt zu einer hohen Kohäsion, was letztlich immer das große Ziel ist.
überladen von Operatoren: Die meisten Operatoren (+, -, *, /, ...) können nicht auf Objekte angewand werden. Da ja keiner weiß, was du damit meinst wenn du z.B. schreibst Baum_1 + Baum_2. In C++ kannst du das allerdings im Vergleich zu z.B. Java definieren. So das du dann nicht mehr schreiben musst
Pseudocode hat Folgendes geschrieben:
Höhe von Baum_3 = Höhe von Baum_1 + Höhe von Baum_2
sondern einfach wirklich Baum_3 = Baum_1 + Baum_2 schreiben kannst.
riesige standard Bibliotheken: Vieles von dem, was man zum Programmieren braucht hat vorher schon mal jemand anderes gebraucht. Also warum das Rad neu erfinden? Die standard Bibliotheken enthalten viele Funktionen und Klassen.
Mehrfachvererbung: Klassen haben beziehungen zu anderen Klassen. Objekte kennen also andere Objekte. Eine Klasse, welche von einer anderen Klasse erbt, spezialisiert diese Superklasse. Eine Klasse kann z.B. ein Objekt A sein, es kann gleichzeitig aber auch ein Objekt B sein. In C++ kannst du das über Mehrfachvererbung direkt machen, in Java z.B. geht es nur über den Umweg eines Interfaces.
nicht vollständig Objektorientiert (Hybrid): siehe obige Diskussion.
Speicherverwaltung, da Fehleranfällig: siehe oben
keine Interfaces (lässt sich aber nachstellen): siehe obige Diskussion.
Das war jetzt nur kurz und grob erklärt, hoffe aber, dass du etwas damit anfangen kannst. ______________ mfg
o-4-n
Vielen Lieben Dank für die tollen Antworten schonmal ich habe nun noch ein paar kleine Fragen zu dem ganzem.
Könntest du mir bitte folgendes Wort erklären/beschreiben?
Garbage Collector
Access Modifier
(ist dies ein Programm?)
Zitat.
du musst dich selbst darum kümmern, dass nicht mehr benutzte Objekte gelöscht werden. Machst du das nicht entstehen sogenannte memory leaks. Ist manchmal sehr Lustig, wenn dein Speicher aufeinmal voll ist.
(könntest du dazu vielleicht ein Beispiel geben?)
(muss man die nicht mehr benutzten Objekte im Quell Code löschen?)
Den Punkt "Kapselung" versteh ich zu 90 % gar nicht tut mir leid
Zitat:
riesige standard Bibliotheken: Vieles von dem, was man zum Programmieren braucht hat vorher schon mal jemand anderes gebraucht. Also warum das Rad neu erfinden? Die standard Bibliotheken enthalten viele Funktionen und Klassen.
(wo finde ich diese standard Bibliotheken?)
Muss man das Interface das du dort angegeben hast erst schreiben oder gibts dafür auch schon Vorlagen oder muss das halt genau an die Anwendungangepasst sein die man später machen will sprich ich verstehe nicht wirklich wofür das Interface eigentlich da ist.
((Ich hoffe ich nerve mit meinen Fragen nicht zu sehr))
Einfach gesagt:
Der Garbage Collector räumt auf.
Er entfernt alsoautomatisch Sachen, die du nicht mehr brauchst, damit wieder mehr Speicher zur Verfügung steht.
Mit Access Modifier kann man regeln, von wo man überall Zugriff auf eine Methode oder eine Eigenschaft einer Klasse hat.
Stellt man zum Beispiel ein public vor eine Eigenschaft heißt das, dass man von überall darauf Einfluss hat (also zum Beipsiel sie ändern kann).
Mit einem private könnte man die Eigenschaft nur innerhalb der eigenen Klasse ändern, also kann man sie nicht mehr "von der Pampa des Quellcodes" ändern. (es gibt bestimmt eine bessere Beschreibung dafür )
Kapselung: Wenn du das mit den Access Modifier verstanden hast, dann wirst du wahrscheinlcih auch allgemein die Kapselung verstehen.
Standard-Bibliotheken kann man in der Regel ganz einfach einbinden.
Mit folgender Zeile in C++ hättest du beispielsweise schon die Standardbibliothek für die Aus-/Eingabe:
Code:
#include <iostream>
Dann könntest du schon sofort Methoden dieser Standardbibliothek benutzen.
Du musst also normalerweise nicht lange umeinandersuchen
Zu den Interfaces muss dann wohl der Profi ran.
Wenn ich da jetzt etwas schreibe wird man es wahrscheinlich sowieso nciht verstehen und wahrscheinlich würde es auch teilweise falsch sein
mfg Philipp
PS: Wenn du wirklich nerven würdest, würdest du das dann daran erkennen, dass keiner mehr schreibt ______________ Forenregeln, FAQ, Suchfunktion
Zuletzt bearbeitet von philipp7 am 23.08.2011, 17:44, insgesamt einmal bearbeitet
Jetzt trau ich mich gar nicht mehr zu antworten. Wer ist denn damit gemeint?
Erstmal Kompliment zu deiner Erklärung, einfach und verständlich, vor allem der Wiki Artikel sehr gut! Wusste gar nicht, dass es so etwas gibt. Das wesentliche hast du denke ich erwähnt und wenn man es jetzt ganz ausführlich machen würde, braucht der TO nicht mehr in die Schule gehen.
Ich vergiss einfach manchmal, dass Begriffe, die für mich klar sind, für absolute Anfänger sich wie Bahnhof an hören.
Bevor ich zu den Interfaces komme noch eine kleine Ergänzung zu Kapselung. Durch die Access Modifier, werden die Daten eben gekapselt, d.h. Unterschiedliche Sichtbarkeiten und Zugriffs rechte auf die Daten und Methoden in den Klassen. Jetzt könnte man natürlich fragen, was das bringt? Zwei der großen Ziele in der Software Entwicklung ist die möglichst hohe Wiederverwendbarkeit von bereits erstelltem Sourcecode und deren Wartbarkeit. Dazu folgendes:
1. Eine Software bleibt selten so wie sie ist, sie wird weiterentwickelt oder Fehler werden einfach erst durch den Benutzer entdeckt (das dauert in der Regel nicht besonders lange). Nun könnte es passieren, dass das verbessern und ändern des Codes Auswirkungen auf andere Stellen oder Klassen im Code hat, da an dieser Stelle die Daten nicht gekapselt sind. Dieser Code würde dann durch die Änderung des anderen Codes nicht mehr oder nicht mehr richtig funktionieren. D.h. Die Klassen sind also eng mit einander gekoppelt oder anders gesagt verbunden.
2. Wie bei den Standard Bibliotheken gewisse Dinge Wiederverwendet werden, möchte man natürlich auch eigene Dinge Wiederverwenden. Stell dir vor du hast vor kurzem eine Klasse geschrieben und im neuen Projekt brauchst du genau diese Klasse wieder. Das dumme ist nur du hast die Daten nicht gekapselt. Folglich kannst du diese eine Klasse die du benötigst nicht ohne 10 andere Klassen, welche du nicht benötigst verwenden, da die Klassen eben eng miteinander gekoppelt sind. Du müsstest also diese Klasse wieder komplett um- oder neuschreiben. Scheiße gelaufen, vor allem, da der Ingenieursstundensatz bei ca. 80.-¤ liegt. Wird also sehr teuer.
Andererseits, führt der falsche Einsatz der Access Modifier zu einer hohen Redundanz d.h. Es gibt viel unnützen und überflüssigen Code.
Wie oben bereits erwähnt führt eine gute Kapselung zu einer losen Kopplung was eine große Kohäsion darstellt. Kohäsion beschreibt also, wie gut Daten gekapselt sind. Eine Klasse mit einer hohen Kohäsion beschreibt eine genau definierte und gut überlegte Einheit.
Interfaces: Sind flexible Schnittstellen (sind im Prinzip nur „leere Hüllen“) die von konkreten Klassen abstrahieren und werden u.a. verwendet, wenn man sich auf die konkrete Implementierung einer Klasse noch nicht festlegen kann. Sie eignen sich also auch dazu um Klassen lose zu koppeln (Bedeutung s.o.). Sehr oft werden sie auch in Verbindung mit abstrakten Klassen verwendet. Das Interface deklariert dabei das gemeinsame Verhalten von Klassen, während die abstrakte Klasse das Interface implementiert und gemeinsame Attribute und Implementierungen deklariert. In Java werden Interfaces auch eingesetzt um Mehrfachvererbung nachzustellen. Weitere Einsatzgebiete wirst du noch kennenlernen, sind jetzt aber zu spezifisch. ______________ mfg
o-4-n
Okay ich denke meine Fragen sind so weit es für mich verständlich ging gelöst worden nun folgende Frage:
Aussage:
Mit C++ würde sich rein theoretisch ein Spiel wie Shaiya, WoW u.s.w entwickeln lassen da C++ nicht gerade für 3 D und alles gut ist wäre der Quell Code ewig lang da man zu viele Variablen benutzen muss.
Frage: Würde das mit C++ wirklich funktionieren?
Frage 2: Welche anderen Programmier Sprachen eignen sich nun besonders dafür?
Frage 3: Welche Programmier Sprache wurde für WoW wirklich benutzt?
Ja, auf alle Fälle.
Man braucht halt nur noch 3D-Bibliotheken dazu, wie zum Beispiel OpenGL oder DirectX (Hast wahrscheinlich schon mal was davon gehört),
Zitat:
Frage 2: Welche anderen Programmier Sprachen eignen sich nun besonders dafür?
Meines Wissens nach ist das das Aufgabengebiet von C++, aber man könnte wahrscheinlich auch C# mit XNA und noch andere Sprachen verwenden, aber das wird wahrscheinlich nicht sehr häufig vorkommen.
Zitat:
Frage 3: Welche Programmier Sprache wurde für WoW wirklich benutzt?
Nach etwas Googlen habe ich folgendes gefunden:
Der Kern wurde in C++ geschrieben und die Spiellogik aber in LUA (was aber auch in C geschrieben ist).
Wenn du irgendetwas bestimmtes nicht versteht, frag einfach nach.
die 3 Zeilen habe ich leider nicht erklärt bekommen würde das vielleicht einer von euch machen würde gerne die Bedeutung wissen ebenso leiten wir einen Text mit cout ein und lass ihn enden mit endl; was das ; bedeutet weiß ich bereits jedoch um es mir besser merken zu können wöllte ich mal fragen ob hinter diesen Buchstaben noch eine längere (ENglische Bedeutung steckt)
cout steht für Character Output. Es ist ein Objekt aus der iostream Bibliothek und sorgt für die Ausgabe auf der Standardausgabe (i.d.R. Bildschirm).
endl steht für end line. Es bewirkt ein Zeilenende und ein Flush. Flush heißt, vereinfacht gesagt, dein Text wird genau jetzt ausgegeben. Ansonsten landet er im Puffer. Das endl ist nicht immer sinnvoll, da dein Programm enorm verlangsamt wird! ______________ mfg
o-4-n
#include <conio.h>
#include <iostream.h>
#include <string.h>
using namespace std;
int main(){
//Variabeln deklarieren
int Zahl1 ;
int Zahl2 ;
cout <<"Willkommen im Paradise Hotel"<< endl;
getch();
cout <<"bitte warten......."<< endl;
cout <<"bitte warten......."<< endl;
cout <<"bitte warten......."<< endl;
cout <<"bitte warten......."<< endl;
cout <<"bitte warten......."<< endl;
cout <<"bitte warten......."<< endl;
cout <<"Danke f\x81rs Warten"<< endl;
cout <<"Geben Sie nun bitte die Anzahl an Hotel G\x84sten an"<< endl;
cin >> Zahl1 ;
cout <<"Danke Sehr geben Sie nun bitte die Anzahl der G\x84ste ein die heute einchecken werden"<< endl;
cin >> Zahl2 ;
cout <<"bitte warten......"<< endl;
cout <<"bitte warten......"<< endl;
cout <<"bitte warten......"<< endl;
cout <<"bitte warten......"<< endl;
cout <<"bitte warten......"<< endl;
cout <<"Danke f\x81rs Warten"<< endl;
cout <<"Fassen wir zusammen im Hotel sind: " << Zahl1 << cout <<" G\x84ste."<< endl;
cout <<"Heute werden noch " << Zahl2 << cout <<" G\x84ste einchecken."<< endl;
getch();
cout <<""<< endl;
cout <<""<< endl;
cout <<""<< endl;
cout <<"(c)Sire"<< endl;
getch();
}
bekomme am Ende leider nicht die Zahlen die ich eingeben hatte sondern nunja seht es euch selbst an zudem wöllte ich gerne am Ende die Beiden Zahlen Addieren lassen weiß wer welche Zeilen ich dafür schreiben müsste?
Cookies sind kleine Textinformation, die wir oder Partner von uns über deinen Browser lokal bei dir speichern.
Du kannst jederzeit die Nutzung von Cookies über die Einstellung deines Browsers verhindern.
Wir nutzen folgende, mit der DSGVO konforme Cookies:
- Essentielle Cookies: Sind unbedingt notwendig damit die Website voll funktionsfähig ist.
- Optionale Cookies: Sind optional und helfen uns die Website zu verbessern, z.B. indem sie das Nutzungsverhalten auf der Website analysieren, ohne dabei dich persönlich zu identifizieren.
Mehr Informationen findest du in unser Datenschutzerklärung.