Objektorientiertes Programmieren
lima-city → Forum → Programmiersprachen → C/C++ und D
attribut
auto
beispiel
bremse
code
eigenschaft
farbe
fortbewegungsmittel
frage
helfen
klasse
kommunizieren
methode
motorrad
nennen
objekt
pkw
set
string
vererbung
-
Tag Leute ,
wollte mal nachfragen wer sich mit Objektorientiertem Programmieren auskennt.
Momentan programmieren wir in der Schule einen Bruchrechner , nur leider verstehte ich nicht wirklich wie die Objekte funktionieren ~~
Falls nötig schreibe ich den anfang des Codes soweit ich ihn gemacht habe hier rein,
wäre echt nett wenn ihr mir erklären könntet wie die objekte und deren inhalt miteinander in verbindung stehen
greez -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Im Prinzip gibt es Objekte. Diese haben eine Klasse, die deren Eigenschaften und Methoden festlegt und selbst haben sie diese Eigenschaften und Methoden, die diese Eigenschaften manipulieren können. Zur Theorie ist das so fast alles. Aber ich weiß nicht was du konkret für ein Problem dabei hast. Also würde ich schon den Code sehen bzw. gibts hier sicher noch andere, die dir helfen können und es vllt verstehen.
Gegenseitig können Objekte nur über Methoden die Eigenschaften der anderen ändern, oder es gibt noch Schnittstellen, aber ich weiß nicht ob du die überhaupt brauchst, weil für einen Bruchrechner wäre es n bissl übertrieben denke ich. -
reimann schrieb:
Im Prinzip gibt es Objekte. Diese haben eine Klasse, die deren Eigenschaften und Methoden festlegt und selbst haben sie diese Eigenschaften und Methoden, die diese Eigenschaften manipulieren können. Zur Theorie ist das so fast alles. ...
Nich wirklich...
Klassen (Schlüsselwort class) bestehen zur Programmier-zeit bzw. im Quelltext. Objekte sind Ausprägungen der Klassen zur Laufzeit.
Objekte habe Eigenschaften und bieten Funktionalität über Methoden. Man kann Objekten Nachrichten schicken (z.B.: String s1; s1.length();) welche Rückgabewerte haben... Insofern ist es mit der Theorie noch lange nicht abgetan...
Na ja... aber du müsstest schon was konkretes Fragen, damit man dir antworten kann! -
OOP ist eigl. ganz einfach wenn man sie verstanden hat:
Beispiel für Männer:
Die Klasse PKW oder Fahrzeug:
Die Klasse PKW ist quasi die Anleitung eines PKWs... wie wird der Aufgebaut, Handbuch usw.
das heißt wenn du ein Objekt (ObjektName: BMW) der Klasse PKW erstellst hast du ein Auto (BMW) nach der gegb. Anleitung/Klasse erstellt
class PKW { //Beschreibungen, Attribute und Methoden/Operationen }
Erstellung des objektes:
PKW BMW; //BMW ist hier das Objekt -> also quasi ein Auto
jetze hat jeder PKW Attribute/Eigenschaften und Methoden/Operationen
das heißt unser auto kann bremsen
class PKW { void bremse() { geschwindigkeit--; } }
Verwendung der Methode
PKW BMW //BMW ist hier das Objekt -> also quasi ein Auto BMW.bremse(); //der BMW bremst jetzt.
Eine Eigenschaft wäre jetzt z.B.: die Farbe des PKWs, die Max Geschwindigkeit, aktuelle Geschwindigkeit, Tabkgröße usw.
(auch die Marke + Modell wäre eine Eigenschaft, hab ich hier nur des besseren Verständnis als ObjektName genommen)
PKW Fahrzeug1; PKW Fahrzeug2; Fahrzeug1.lackieren(blau); Fahrzeug2.lackieren(gelb) cout >> Fahrzeug1.getLackierung(); ->blau cout >> Fahrzeug2.getLackierung(); ->gelb
Mit Getting und Settings setz man die Attribute bzw. liest sie aus.
Getttings/Settings sind ganz "normale" Funktionen
class PKW { float m_fMaxGeschwindigkeit; void setMaxGeschwindigkeit(float MaxGeschw) { m_fMaxGeschwindigkeit = MaxGeschw; } }
beim Getting wird der wert einfach returnt -> return m_fMaxGeschwindigkeit;
...natürlich sollte noch plausibilisiert werden.
Beitrag zuletzt geändert: 3.12.2009 15:53:04 von myhead -
Danke für deine Super Antwort !
Hat mir echt weitergeholfen , jetzt stellt sich für mich nur die Frage wie die Objekte miteiunander Kommunizieren, das heißt das man nicht nur Class PKW hat sondern noch eine andere dabei !
Und diese sollen miteinader Kommunizieren, das verstehe ich nochnicht wirklich wie es geht ~~
könnt ihr mir da noch weiter helfen ? -
n9aces-community schrieb:
Und diese sollen miteinader Kommunizieren, das verstehe ich nochnicht wirklich wie es geht ~~
Um welche Programmiersprache geht es denn?
Die Ursprüngliche Idee der objektorientierten-Programmierung verwendet in der Tat messages zur Kommunikation, aber dies ist zum Beispiel in Java nicht so realisiert. In Smalltalk dafür schon. -
n9aces-community schrieb:
Hat mir echt weitergeholfen , jetzt stellt sich für mich nur die Frage wie die Objekte miteiunander Kommunizieren, das heißt das man nicht nur Class PKW hat sondern noch eine andere dabei !
Und diese sollen miteinader Kommunizieren, das verstehe ich nochnicht wirklich wie es geht ~~
könnt ihr mir da noch weiter helfen ?
Du meinst wahrscheinlich Vererbung von Klassen. Ist eigl. auch relativ einfach ...wenn mans verstanden hat.
Um die Vererbung 100% zu verstehen muss man wissen das Eigenschaften/Attribute und Methoden/Operationen einer Klasse gekapselt werden (können) -> Datenkapselung. Dafür gibt es 3 verschiedene Möglichkeiten/"Sichtbarkeiten"
class PKW { private int m_iAnzahlRaeder; public string m_strName; protected float m_fMaxGeschwindigkeit; }
Private: Attribut kann nur in der Eigenen Klasse verwendet werden -> PKW
Public: Attribut kann quasi von jeder anderen Klasse verwendet werden
Protected: Attribut kann nur von der eigenen und in vererbten Klasse
verwendet werden
Weitere Fachbegriffe wären:
Eltern/Basisklasse: ist quasi die "Hauptklasse"
Kindklasse/?die hatte nochn anderen Namen, fällt mir gerade nicht ein?: Die Kind Klasse wird von der Basisklasse abgeleitet.
Dazu ein Beispiel:
Um die Vererbung besser erklären zu können, erstelle ich jetzt die Klasse Fortbewegungsmittel
class Fortbewegungsmittel //Basisklasse { protected int m_iAnzahlRaeder; public string m_strName; protected float m_fMaxGeschwindigkeit; private bool bCheck; //Irgendeine Boolsche Variable protected int getAnzahlRaeder(); public string getName(); protected float getMaxGeschw(); protected void bremse(); protected void beschleunige(); public void setAnzahlRaeder(); public void setName(); public void setMaxGeschw(); private bool CheckIrgendwas(); //Private Methode } class Motorrad : public Fortbewegungsmitte { private float_fMaxKurvenLage; float getMaxKurvenLage(); void setMaxKurvenLage(); }
So das ist jetzt eine Spezialisierung, so wird diese Art der Vererbung genannt.
Motorrad ist eine Spezialisierung von Fortbewegungsmittel.
Die Vererbung vermeidet doppelte schreibarbeit.
Motorrad Honda; //erstellt das Objekt "Honda" nach der Bauanleitung von Motorrad //welche von Fortbewegungsmittel abgeleitet wird //so jetzt der clue der ganzen Sache main() { Honda.beschleunige(); Honda.bremse(); Honda.setMaxKurvenLage(50); }
wie dir aufgefallen sein wird taucht in der klasse Motorrad keine Methode namens beschleunigen() oder bremsen() auf ...aber in der Basisklasse Fortbewegungsmittel.
ich hoffe ich konnte dir wieder etwas helfen =) ..ist etwas komplexer aber eigl. total logisch^^ und einfach
weitere Tags zur Vererbung:
- Spezialisierung
- Generalisierung
- Aggregation
- Assoziation
- Polymorphie -> sehr interessant und noch viel leichter als die Vererbung an sich xD
Beitrag zuletzt geändert: 4.12.2009 20:25:09 von myhead -
OOP bewährt sich vor allem bei größeren Projekten.
Alles besteht aus Objekten. Im Grunde kannst du die ganze Welt, ja sogar das ganze Universum objektorientiert darstellen.
Ein Objekt hat Eigenschaften und Methoden
Beispiel
object: Stuhl
eigenschaften: beine, farbe, höhe
methode: kaputtgehen, umfallen -
delphipage schrieb: OOP bewährt sich vor allem bei größeren Projekten.
Alles besteht aus Objekten. Im Grunde kannst du die ganze Welt, ja sogar das ganze Universum objektorientiert darstellen.
Ein Objekt hat Eigenschaften und Methoden
Beispiel
object: Stuhl
eigenschaften: beine, farbe, höhe
methode: kaputtgehen, umfallen
Sry abewr dieser Post war unnötig , der vorherige von myhead war supergut !!!
Dadurch verstehe ich es bis dahin!
Noch eine frage zu SET und GET , müssen diese vor eine Methode geschrieben werden ?
SET , heißt ja einen " Wert " auf diese Methode setzten und GET einen " Wert " übernehmen.
Stimmt das beides so ?
Ich werde mich jetzt an einen Code dran machen , evtl brauche ich dann noch ein bisschen Hilfe , wäre echt nett von euch =D
greez -
Also normalerweise sind das die Methoden, mit denen man private Eigenschaften verändern kann. Set schreibt den Wert auf die private Eigenschaft und Get gibt den Wert der Eigenschaft zurück.
Kannst du aber auch anders nennen. hat sich eben so eingebürgert :D
Beitrag zuletzt geändert: 8.12.2009 18:30:05 von delphipage -
Get und Set sind zum Einen für private und zur Übersicht da, aber da ist es dir überlassen, ob du gleich die Eigenschaft nimmst oder es mit Methoden machst, obwohl es mit Methoden besser aussieht, weil es gibt auch den Fall, dass man Set und Get wirklich braucht, nämlich, wenn dabei nichtnur die Eigenschaft geändert werden muss. Zum Beispiel müsste bei der Klasse Auto, wenn man die Marke ändert logischerweise auch das Modell geändert werden, weil es gibt ja nur Audi TT und VW Golf und kein Audi Golf oder sowas.
Deshalb empfehle ich auch der Übersicht wegen, Methoden anzuwenden, auch wenn sie etwas mehr Mühe machen.
Und jetzt verstehe ich die Frage: Du musst sie nicht so nennen, aber es wäre von nutzen, für spätere Nachbearbeitung oder so. Ansosnten muss eine Set meist "void" sein und mindestens einen Parameter fordern und eine Get gibt den jeweiligen Datentypen zurück und braucht keine Parameter.
Kannst sie auch bestimmen und holen nennen sollte eben möglichst verständlich sein.
Beitrag zuletzt geändert: 8.12.2009 18:39:54 von reimann -
Ein wesentlicher Vorteil von get- und set-Methoden gegenüber Direktzuweisung der Eigenschaft ist auch,
dass man die Möglichkeit hat, auf eine Wertänderung zu reagieren (andernfalls müsste man "pollen", d.h. dauerabfragen).
Auch, wenn es in der Klasse so scheint, als wäre keine direkte Reaktion auf eine Wertänderung nötig, kann es immer sein, dass man das mal in einer Unterklasse braucht.
Es ist definitiv besserer Stil, getter und setter Methoden zu benutzen anstatt direkte Wertzuweisungen.
Performance-Sorgen braucht man auch nicht haben (weil ein Methodenaufruf langsamer ist als eine Wertzuweisung), da man die setter und getter Methoden meist bedenkenlos mit dem inline-Attribut versehen kann. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage