Klassen?
-
Nabend,
ich habe eine Bitte. Könnte mir jemand mal genau erklären wofür Klassen gut sind? Ich habe bis jetzt nur mit C gearbeitet und mein Lehrer ist irgend wie unfähig zu erklären wofür man Klassen braucht oder womit sie zu vergleichen sind.
Wäre ganz nett wenn ihr es an einem Beispiel Quellcode erklären könntet via Kommentare.Vielen Dank im Voraus
kwest
-
Ich probier's mal, Änderungen/Verbesserungen/Korrekturen sind wie immer sehr willkommen.

Klassen erleichtern einem das Objektorientierte Programmieren. Man versucht damit Objekte, die man sich in der realen Welt vorstellen kann im Programm nachzubilden, wobei man sich auf die für das Programm wichtigen Funktionen beschränkt. Man muss sich Klassen als eine Art Schablone vorstellen auf dessen Grundlage dann im Programmverlauf Objekte erzeugt werden mit eben diesen definierten Eigenschaften.
Man könnte z.B. eine Klasse Person schreiben, die folgendermaßen definiert ist:
class Person { public: Person(std::string _n, unsigned char _a) : Name(_n), Alter(_a) { } void setName(std::string _n) { this->Name = _n; } std::string getName() { return this->Name; } ... private: std::string Name; unsigned char Alter; };Wenn es im Programm nur wichtig ist, dass eine Person einen Namen und ein Alter besitzt, dann reicht das vollkommen aus und man kann damit arbeiten, z.B.:
Person p1("Peter", 25); Person p2("Lisa", 28); cout << p1.getName() << " ist " << p1.getAlter() << " Jahre alt " << endl; ...Desweiteren kann man Vererbungshierarchien aufstellen, wo man bestimmte Typen von Objekte miteinander in Beziehung setzen kann. Desweiteren kann man unter anderem Code, den man normalerweise mehrfach schreiben würde in einer zentralen Basisklasse verwalten. Beispiel:
class Fahrzeug { public: Fahrzeug() {} virtual void gibGas() = 0; std::string getName() { ... } void setName(...) { ... } }; class Auto : public Fahrzeug { public: Auto() {} void gibGas() { // Code, um auf's Gaspedal zu treten } }; class Boot : public Fahrzeug { public: Boot() {} void gibGas() { // Code, um die Schraube schneller drehen zu lassen } };Vielleicht ist das Beispiel nicht ganz so gut gewählt, aber ein besseres fällt mir gerade nicht ein.

Die Klasse Fahrzeug definiert nun die Methoden get/setName, diese stehen genauso in den spezialisierten Klassen Auto und Boot zur Verfügung (Vermeidung von doppelter Implentierung des gleichen Codes). Außerdem definiert die Klasse Fahrzeug hier eine Methode gibGas() als rein virtuell, was soviel heißt, dass man kein Objekt dieser Klasse erstellen kann, da diese Klasse hierdurch als abstrakte Klasse gilt und zum anderen gibt die Klasse dadurch vor, dass jede Klasse, die von dieser Klasse erbt und wo später Objekte von erzeugt werden sollen diese Methode implementieren müssen.hm, irgendwie ist es wohl doch schon ein wenig spät heute für mich, ich hoffe ich konnte Dir wenigstens ein bißchen helfen.

-
klassen sind integraler bestandteil der objektorientierten (OO) entwicklung.
bei der entwicklung von programmen wird meistens ein teil der welt abstrahiert und automatisiert. die welt besteht aus objekten. OO versucht nun genau das in einer programmiersprache widerzuspiegeln.
jedes objekt bringt die methoden und eigenschaften mit, die nötig sind, um mit diesem objekt zu interagieren (das ist _ein_ OO ansatz, gibt auch andere).
man kann das ganze auch als eine art angenehmere kapselung sehen.
ich will z.b. eine menge an obst in meinem programm modellieren.
ansatz1:
const int anzahl = 3; string farben[anzahl]; string typ[anzahl]; int main() { farben[0] = "rot"; farben[1] = "gelb"; farben[2] = "orange"; typ[0] = "Apfel"; typ[1] = "Banane"; typ[2] = "Apfelsine"; }funktioniert, ist aber irgendwie unschön. besonders wenn man noch mehr eigenschaften hat, sich was an einem objekt ändert, eines entfernt werden muss etc.
also könnte man die objekte irgendwie besser zusammenfassen
const int anzahl = 3; pair<string, string> gemüse[anzahl]; int main() { gemüse[0].first = "rot"; gemüse[0].second = "Apfel"; ... }schonmal einfacher zu handhaben, aber irgendwie nich übersichtlich. also machen wir daraus klassen!
class Gemüse { string typ; string farbe; }; int main() { Gemüse a; a.typ = "Apfel"; a.farbe = "rot"; ... }schön übersichtlich und kann im block einfach weiterverarbeitet werden.
erweitert man das ganze noch um schicke konzepte wie private (methoden und variablen, auf die von aussen nicht zugegriffen werden kann) und so krams, bekommt man ein weniger fehlerträchtiges gesamtsystem, welches intuitiv zu verstehen ist.
fazit: man braucht klassen nicht, aber sie machen das leben schöner.
-
lies einfach ein gutes buch dazu.
in vielen bibliotheken steht folgendes als vorschlag:
Objektorientierte C++-Anwendungen | ISBN: 3827295203
Robert C. Martin: Objektorientierte c++ Anwendungen: die Booch-Methode//isbn benutzt
-
Vielen Dank euch.
Ich habe die Klassen jetzt verstanden
und werde mich mal ransetzen..