Suche im Forum:
Suchen


Autor Nachricht
Beitrag22.08.2011 um 21:30 (UTC)    
Titel:

philipp7 hat Folgendes geschrieben:

Da hast du wohl recht, aber:
test-grafiktube hat Folgendes geschrieben:
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. Wink
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

"If you’re incompetent, you can’t know you’re incompetent." - [David Dunning]

*** Die Suchfunktion ist KEINE tödliche Krankheit! ***

Eventplanung, Equipment, Zeltverleih, Catering


Zuletzt bearbeitet von o-4-n am 22.08.2011, 22:31, insgesamt einmal bearbeitet
Beitrag23.08.2011 um 12:55 (UTC)    
Titel:

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))
Beitrag23.08.2011 um 16:43 (UTC)    
Titel:

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 Wink)

Es scheint als hat Wikipedia extra einen Abschnitt für dein nächstes Problem Wink :
http://de.wikipedia.org/wiki/Speicherleck#Beispiel_f.C3.BCr_Personen_ohne_Programmierkenntnisse

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 Wink

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 Wink

mfg Philipp

PS: Wenn du wirklich nerven würdest, würdest du das dann daran erkennen, dass keiner mehr schreibt Wink
______________
Forenregeln, FAQ, Suchfunktion


Zuletzt bearbeitet von philipp7 am 23.08.2011, 17:44, insgesamt einmal bearbeitet
Beitrag23.08.2011 um 19:51 (UTC)    
Titel:

Hallo,

philipp7 hat Folgendes geschrieben:
Zu den Interfaces muss dann wohl der Profi ran.

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

"If you’re incompetent, you can’t know you’re incompetent." - [David Dunning]

*** Die Suchfunktion ist KEINE tödliche Krankheit! ***

Eventplanung, Equipment, Zeltverleih, Catering


Zuletzt bearbeitet von o-4-n am 23.08.2011, 22:27, insgesamt 3-mal bearbeitet
Beitrag27.08.2011 um 08:19 (UTC)    
Titel:

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?

bitte wenn möglich wieder verständlich erklären
Beitrag27.08.2011 um 08:28 (UTC)    
Titel:

Zitat:
Frage: Würde das mit C++ wirklich funktionieren?

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.

mfg Philipp
______________
Forenregeln, FAQ, Suchfunktion
Beitrag08.09.2011 um 12:22 (UTC)    
Titel:

Nun bin ich endlich mit C++

angefangen

mit folgendem Programm solle ich zu hause Arbeiten dev compiler

sind natürlich noch am Anfang sprich Hello World jedoch steht oben:

#include <conio.h>
#include <iostream.h>
#include <string.h>

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)
Beitrag08.09.2011 um 22:14 (UTC)    
Titel:

Hallo,

test-grafiktube hat Folgendes geschrieben:

#include <conio.h>
#include <iostream.h>
#include <string.h>

Hier werden libraries eingebunden (siehe oben).

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

"If you’re incompetent, you can’t know you’re incompetent." - [David Dunning]

*** Die Suchfunktion ist KEINE tödliche Krankheit! ***

Eventplanung, Equipment, Zeltverleih, Catering
Beitrag10.09.2011 um 18:57 (UTC)    
Titel:

Vielen Dank habe es nun einmal selbst versucht:

Code:
#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?

Beitrag10.09.2011 um 19:24 (UTC)    
Titel:

Hallo,

ich habe dir das cpp File, welches du mir geschickt hast verbessert und zurückgeschickt! Schau dir meine Comments an.
______________
mfg
o-4-n

"If you’re incompetent, you can’t know you’re incompetent." - [David Dunning]

*** Die Suchfunktion ist KEINE tödliche Krankheit! ***

Eventplanung, Equipment, Zeltverleih, Catering
Beiträge der letzten Zeit anzeigen:   


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de