Was genau bedeutet objektorientiertes Programmieren? Worin besteht der Unterschied zum Programmieren im nicht OOP-Stil? Bevor hier gleich die Begriffe "Klassen" und "Vererbung" fliegen - lasst es. Wenn ich die kennen würde, dann würde ich wahrscheinlich nicht fragen. Also bitte mal allgemeinverständlich erklärt: Danke.
:
Verschoben durch Moderator
rObert schrieb: > Bevor hier gleich die Begriffe "Klassen" und "Vererbung" fliegen - lasst > es. Wenn ich die kennen würde, dann würde ich wahrscheinlich nicht > fragen. Dann frag halt gar nicht erst. Den Rest erzählt die google. Oliver
Was´n das für ne bescheuerte Antwort!? Ist es üblich einen Sachverhalt anhand zweier Fachbegriffe daraus zu erklären?
Sag uns doch erst einmal, was du an Erklärungen wie dieser http://de.wikipedia.org/wiki/Objektorientierte_Programmierung dieser http://en.wikipedia.org/wiki/Object-oriented_programming oder dieser https://www.google.de/search?q=objektorientierte+programmierung nicht verstehst oder als unvollständig oder falsch findest. rObert schrieb: > Ist es üblich einen Sachverhalt anhand zweier Fachbegriffe daraus zu > erklären? Ja. Denn wenn man jedesmal bei Adam und Eva anfangen würde, würden solche Definitionen dicke Bücher füllen.
:
Bearbeitet durch Moderator
Yalu X. schrieb: > http://en.wikipedia.org/wiki/Object-oriented_programming "Object-oriented programming (OOP) is a programming paradigm that represents concepts as "objects" that have data fields (attributes that describe the object) and associated procedures known as methods." C++-zentrischer Bullshit. Es gibt genügend objektorientierte Sprachen und Objektsysteme, die Funktionen nicht in Objekten kapseln.
Naja. Deine Art der Fragestellung ist problematisch. Zunächst sind Klasse und Vererbung zwei Begriffe die in dem Paradigma definiert werden. Insofern kann man zu Erklärung von OOP eine Zeit lang auch ohne diese Begriffe auskommen. Aber das Problem ist Deine Forderung nach "Allgemeinverständlichkeit". Wir wissen ja nicht zu welchem Teil der "Allgemeinheit" Du gehörst. Einem völligen Laien muss man das anders erklären als einem erfahrenen Programmierern, wobei es in letzerem Fall noch darauf ankäme in welcher Sprache er programmiert hat. Fast noch ein wenig schwieriger ist es bei einem Anfänger, weil der noch nicht sattelfest ist, was bedeutet das er viele Begriffe und Vorgehensweisen die er z.B. aus einer funktionalen Sprache kennt, eben nur ansatzweise beherrst und dazu neigt sie in ungeeigneter Weise mit dem neuen Wissen, falls wir denn hier was über OOP erkären zu verbinden. Erzähle uns also mal wer Du bist, was Du machst und schon kannst und warum Dich OOP interessiert. Das hilft uns Dir zu helfen.
Fred schrieb: > C++-zentrischer Bullshit. Es gibt genügend objektorientierte Sprachen > und Objektsysteme, die Funktionen nicht in Objekten kapseln. Um zu klären, was du damit meinst, wäre ein Beispiel sinnvoll.
Yalu X. schrieb: > rObert schrieb: >> Ist es üblich einen Sachverhalt anhand zweier Fachbegriffe daraus zu >> erklären? > > Ja. Denn wenn man jedesmal bei Adam und Eva anfangen würde, würden > solche Definitionen dicke Bücher füllen. Falsch. Beispiel: Malerei ist Malerei mit Farben. Alles klar? Und Bevor man "Klassen" und "Vererbung" verwendet, sollte man diese Begriffe erklären. Die Kunst, sich mit wenigen Worten verständlich auszudrücken, beherrscht eben fast keiner mehr. Oder man ist zu faul;-)
>Falsch.
Ich denke Du gehst hier, sozial gesehen, ungünstig vor.
Ich empfehle Dir dringend, Dich jeglicher Belehrungen zu enthalten.
Es wird günstiger sein Du fragst einfach und unterlässt vorläufig
Diskussionen. Es wird auch angemessen sein, Beiträge die Dir völig
falsch zu sein scheinen, entweder zu ignorieren oder Deine Kritik in die
Form einer höflichen Frage zu kleiden.
Fred schrieb: > Es gibt genügend objektorientierte Sprachen > und Objektsysteme, die Funktionen nicht in Objekten kapseln. Was sagt einem Dieser Satz? Das es irgend etwas nicht gibt. Und was sagt er mir? Nicht. Bitflüsterer schrieb: > Erzähle uns also mal wer Du bist, was Du machst und schon kannst und > warum Dich OOP interessiert. Das hilft uns Dir zu helfen. Wozu? Ich wollte wissen, was oop ist. Und was der Unterschied zu nicht-oop ist. Das impliziert doch, dass ich den Begriff "nicht-oop" kenne. Also, ich habe Erfahrung mit nicht OOP Programmiersprachen/-techniken. Anhand meines Schreibstiles und der korrekten Schreibweise von Sätzen und Wörtern erkennst du, dass ich nicht zur Generation 25- gehören kann ;-) Ich hatte gehofft, dass jemand OOP einfach erklären kann. Wenn dieser Begriff eine Komplexität nahe des Universums hat, dann wird das natürlich unmöglich zu bewerkstelligen sein. Schade eigentlich.
rObert schrieb: > Oder man ist zu faul;-) Sich grundlegende Definitionen vorkauen zu lassen statt sich mal selbst einzulesen könnte man genauso bezeichnen :-)
rObert schrieb: > Was genau bedeutet objektorientiertes Programmieren? Worin besteht der > Unterschied zum Programmieren im nicht OOP-Stil? > > Bevor hier gleich die Begriffe "Klassen" und "Vererbung" fliegen - lasst > es. Wenn ich die kennen würde, dann würde ich wahrscheinlich nicht > fragen. > > Also bitte mal allgemeinverständlich erklärt: > > Danke. Es gibt sehr viel Literatur dazu und wenn nicht erkennbar ist, dass du wenigstens versucht hast diese zu erarbeiten, reagieren die Leute hier (zu Recht) "allergisch". Ein Einstieg bietet vielleicht [1], wenn du mit dem (imho!) recht uneingängigen Wiki-Stil nicht zurechtkommst. Gruß Dennis [1]: http://openbook.galileocomputing.de/oop/
rObert schrieb: > Und was sagt er mir? > Nicht. Das ist mir egal, weil ich nicht mit dir, sondern mit A.K. rede.
>Das impliziert doch, dass ich den Begriff "nicht-oop" kenne.
Logisch gesehen ist die Annahme das Du das kennst, zwar plausibel, aber
die Praxis in diesem Forum zeigt, dass sich die Annahme nicht immer,
sogar eher selten bestätigt. Dabei gibt es einen korrelativen
Zusammenhang zwischen der Lakonie der Frage und des Umfanges des
Vorwissens.
Mindestens aber ist die Forderung nach "Allemeinverständlichkeit"
erklärungsbedürftig, wie ich schon schrieb.
Deinen Schreibstil würde ich eher als "roh", "unangemessen familiär",
"unhöflich" und "belehrend" bezeichnen. Demnach gehörst Du eher zur
Generation 16, nicht 25.
Da Du aber darauf bestehst, den Thread auf Deine Art zu gestalten,
verweise ich auf die verlinkten Artikel von Yalu und ziehe mich zurück.
Viel Erfolg noch.
Wenn ich das bisherige mal zusammenfassen darf: OOP ist ein Phänomen, welches sich nicht mit sprachlichen Mitteln beschreiben lässt. Um es zu begreifen, muss man 300 Seiten lesen. Danke, weiß nun Bescheid.
Bitflüsterer schrieb: > Logisch gesehen ist die Annahme das Du das kennst, zwar plausibel, aber > die Praxis in diesem Forum zeigt, dass sich die Annahme nicht immer, > sogar eher selten bestätigt. Dabei gibt es einen korrelativen > Zusammenhang zwischen der Lakonie der Frage und des Umfanges des > Vorwissens. > Mindestens aber ist die Forderung nach "Allemeinverständlichkeit" > erklärungsbedürftig, wie ich schon schrieb. > > Deinen Schreibstil würde ich eher als "roh", "unangemessen familiär", > "unhöflich" und "belehrend" bezeichnen. Demnach gehörst Du eher zur > Generation 16, nicht 25. > > Da Du aber darauf bestehst, den Thread auf Deine Art zu gestalten, > verweise ich auf die verlinkten Artikel von Yalu und ziehe mich zurück. > Viel Erfolg noch. So schön hätte ich es nie formulieren können. 1A, danke. Gruß, Udo
rObert schrieb: > Die Kunst, sich mit wenigen Worten verständlich auszudrücken, beherrscht > eben fast keiner mehr. Oder man ist zu faul;-) Gerade hier im Forum gibt es halt einige dumme Leute, die sich für klug halten und auch eine gute Antwort schlecht machen wollen. und darauf hatte ich keine Lust. Siehe >C++-zentrischer Bullshit. Es gibt genügend objektorientierte Sprachen >und Objektsysteme, die Funktionen nicht in Objekten kapseln. Ich probiere es jetzt mal. Dabei gehe ich von C++ und Java als meistgebrauchten (halb)objektorientierten Sprachen aus. Ein Objekt ist eine Sammlung von Daten und Funktionen. Die Beschreibung, welche Daten und Funktionen das Objekt haben soll, ist die Klasse (oder Klassendefinition). Das heißt, die Klasse gibt an, welche Datentypen enthalten sind, während ein Objekt tatsächlich diese Daten enthält. Als Beispiel nehmen wir eine Personendatenbank. Die Definition legt fest, dass jede Person einen Namen, ein Geburtsdatum und eine Personenkennziffer haben muss. Wenn eine neue Person in die Datenbank aufgenommen wird, wird ein neues Objekt vom Typ Person erzeugt, dem jetzt ein Name, ein Geburtsdatum und eine PKZ zugewiesen wird. Die Person 'Hans', '15.03.1957', '15031957001' ist jetzt ein Objekt vom Typ Person. So kann man eine Liste mit Personen erstellen und weiß sicher, dass jede Person einen Namen, ein Geburtsdatum und eine PKZ hat, die man lesen und ändern kann. Die Klasse Person kann nun auch Methoden (Funktionen) haben, zum Beispiel eine, die aus dem Geburtsdatum die PKZ berechnet. Der Vorteil der Kapselung als Objekt ist, dass alle Objektvariablen global im Objekt verfügbar sind. Das heißt, man muss nicht jede Variable der Funktion übergeben, hat allerdings auch nicht die Nachteile einer programmglobalen Variable. Die PKZ-Funktion kann also auf das Geburtsdatum direkt zugreifen und muss es nicht als Argument übergeben bekommen.
rObert schrieb: > Wenn ich das bisherige mal zusammenfassen darf: > > OOP ist ein Phänomen, welches sich nicht mit sprachlichen Mitteln > beschreiben lässt. Um es zu begreifen, muss man 300 Seiten lesen. > Danke, weiß nun Bescheid. Deswegen heißt es Wissen "erarbeiten".
Zur Fragestellung: Im Gegensatz zu viele hier, schreibt er auf Deutsch und stellt eine angemessene Frage. Oft ist es für den Einstig gut, wenn man einen einfachen Ansatz zu dem Thema hat auf dem man dann aufbauen kann. Gerade Wikipedia als Lexikon versucht (technische) Themen möglichst kompakt und präzise, aber deswegen auch einsteigerunfreundlich zu beschreiben. Deshalb ist es oft gut, wenn jemand das Thema mit einfachen Worten beschreibt. Ich würde das so sehen, als ob jemand, der fragt, was eine Ampel ist, auf den Gesetzestext zur Definition von Ampeln verwiesen wird. In dem Text ist genau definiert, was eine 'Lichtzeichenanlage' ist, aber selbst, wer weiß, was eine Ampel ist, würde sie aus dem Text wahrscheinlich nur schwer wiedererkennen. Die Ampel war nur ein Beispiel, aber wer Gesetzestexte kennt, weiß was ich ich meine.
Dussel schrieb: > Ich probiere es jetzt mal. Irgendein Dussel mit einer Tüte voll Trollfutter findet sich immer ;-)
Bitflüsterer schrieb: > Demnach gehörst Du eher zur > Generation 16 ;-) Diese Generation könnte doch diese Sätze weder deuten noch fehlerfrei abschreiben. Mein Ausgangsposting ist eine kurz und knapp gefasste Bitte an das Forum und seine Leser. Ich habe natürlich versucht, mich anderweitig schlau zu machen. In fast jeder Ausführung fallen schon im zweiten Satz die eingangs zitierten Begriffe. Weil ich das vermeiden wollte, hab ich gebeten, diese Begriffe anfangs zu meiden. Sonst hätte ich mir die Antwort doch gleich in der Form "Objektorientiere Sprachen benutzen Klassen und Objekte und die Vererbung. Dabei kapseln sie..." selber geben können. Die Begriffe wurden dem allgemeinen Sprachgebrauch entwendet und zweckentfremdet. Und genau damit hab ich ein Problem. Es ist unverschämt, die Kenntnis ihrer neuen, geheimen Bedeutung bei einem interessierten Neuling vorauszusetzen. DAS ist unsozial!
Boris P. schrieb: > Irgendein Dussel mit einer Tüte voll Trollfutter findet sich immer ;-) Es gibt Trolle, vielleicht ist er auch einer, aber ich kann mit bestem Gewissen und langjähriger Erfahrung hier im Forum keinen Trollversuch in der Frage erkennen.
Vielleicht hilft dir das weiter: http://www.b.shuttle.de/b/humboldt-os/python/kapitel1/oop.html Immerhin ein erster Überblick, was oop ist, ohne sofort mit Begriffsdefinitionen um sich zu werfen.
rObert schrieb: > OOP ist ein Phänomen, welches sich nicht mit sprachlichen Mitteln > beschreiben lässt. Um es zu begreifen, muss man 300 Seiten lesen. Sehe nur ich da einen Widerspruch?
Dussel schrieb: > rObert schrieb: > Ich probiere es jetzt mal. Danke Dussel:-) Also schon sehr abstrakt, aber nachvollziehbar was du schreibst. OOp ist sicher nicht 'quer reinerfunden', sondern als Ergebnis weiter entwickelter Anforderungen an eine Programmiertechnik entstanden. Welche Vorteile bietet OOP, und wo werden diese Vorteile genutzt? Für wen ist OOP eine Vereinfachung? Wird damit Programmieren übersichtlicher?
Moin, Es geht bei OOP eigentlich nur darum, dass man zusammenhängende Methoden, Eignschaften, Daten usw. zu Klassen zusammenfässt (Kapselung). Von diesen Klassen kann man dann untereinander unabhänige Objekte erzeugen und diese dann verwalten. Z.B kannst du eine Klasse Auto programmieren und eine Klasse Haus. Beide Klassen und deren Objekte sind vollkommen unabhäning und haben nichts miteinander zu tuen. Durch die OOP trennst du ihre Daten und Funktionen. Z.B kann die Klasse Auto die Funktion "Fahren" besitzen. Die Klasse Haus braucht diese Funktion aber nicht, dafür kann aber z.B. die Klasse Haus die Eigenschaft besitzen, wie viele Wohnungen es in dem Haus gibt, eine Eigenschaft die das Auto natürlich nicht braucht. Außerdem kann man dann auch von einer Klasse beliebig viele Objekte erzeugen. Das ist natürlich nur die Spitze des Eisberges. Hinterher kommen dann noch Vererbung und Polymorphie dazu (OOP besteht im wesentlich aus Kapselung, Vererbung und Polymorphie). Ich empfehle dir, z.B in die Bibliothek zu gehen und mal in Grundlagen Bücher zu C++, C#, Java zu suchen. Gibt auch gute Bücher für Kinder / Jugendliche, wo das ganze Thema sehr einfach erklärt ist. Moritz
mullwark schrieb: > Sehe nur ich da einen Widerspruch? Nein. Das Buch nutzt nicht ausschließlich sprachliche Mittel, sondern auch graphische. Dussel schrieb: > Ich würde das so sehen, als ob jemand, der fragt, was eine Ampel ist, > auf den Gesetzestext zur Definition von Ampeln verwiesen wird. In dem > Text ist genau definiert, was eine 'Lichtzeichenanlage' ist, aber > selbst, wer weiß, was eine Ampel ist, würde sie aus dem Text > wahrscheinlich nur schwer wiedererkennen. Die Ampel war nur ein > Beispiel, aber wer Gesetzestexte kennt, weiß was ich ich meine. Hey Dussel, ich glaube wir verstehen uns;-). Habe selber jahrelang lernwilligen Menschen Gesetze erklärt. Weiß daher ziemlich genau, wie man es nicht machen sollte.
Fred schrieb: > CLOS zum Beispiel. Generische Funktionen statt Methoden. Als einziger Mechanismus ist das eine interessante Methode. Schätze dass etwas Sorgfalt nötig ist, um später noch durchzublicken. Deklaratorische Kapselung wär freilich nicht direkt typisch für LISP, generell gehen dynamische Sprachen lockerer mit solchen Themen um als statische.
Moritz M. schrieb: > Beide Klassen und deren Objekte sind > vollkommen unabhäning und haben nichts miteinander zu tuen. Ok. Bleiben wir mal dabei: Könnte jetzt aber eine "Verbindung" von Auto und Haus über "Garage" hergestellt werden? Würde das was nützen?
rObert schrieb: > Danke Dussel:-) > Also schon sehr abstrakt, aber nachvollziehbar was du schreibst. Dir ist aber schon aufgefallen, daß da schon im zweiten Satz der Erklärung das Wort "Klasse" auftaucht, oder? Insofern ist diese Erklärung für dich nicht nutzbar. Oliver
rObert schrieb: > wo werden diese Vorteile genutzt? In der Softwareentwicklung ;-) rObert schrieb: > Welche Vorteile bietet OOP Variablen können im Objekt selber uneingeschränkt genutzt werden, aber der Zugriff von außen kann beschränkt werden. Siehe dazu auch die Vor- und Nachteile globaler Variablen. Der Aufbau des Objekts ist egal, nur die Schnittstellen müssen definiert sein. Eine Matrixklasse könnte und sollte eine Funktion zum Invertieren haben. Das heißt, es gibt sowas wie Matrix B=Invertiere(Matrix A) Wie die Invertierung in der Funktion geschieht, ist vollkommen irrelevant für die Funktion. Jemand der die Matrixklasse nutzt, muss nur wissen, wie sie angesprochen wird. Und die Klasse funktioniert unabhängig vom Restprogramm immer gleich. Dadurch kann die Entwicklung aufgeteilt werden, indem die Schnittstellen definiert werden. Dann setzt sich einer dran und schreibt eine Klasse unter Berücksichtigung der Schnittstellen und wenn die Schnittstellen genau genug definiert wurden, kann die Klasse sofort in Programme eingesetzt werden. Bei Fehlern kann rausgefunden werden, wo der Fehler herkommt und es muss nur die eine Klasse, die den Fehler verursacht überprüft werden. Objektvariablen können gegen Zugriff von außen geschützt werden. So kann man die Variable Alter gegen Zugriff von außerhalb der Klasse schützen. Dann kann diese Variable nur über eine Setterfunktion geändert werden. In dieser Funktion kann aber schon geprüft werden, ob das Geburtsdatum nicht in der Zukunft oder zu weit in der Vergangenheit liegt. Dadurch ist sichergestellt, dass jede Objektvariable einen gültigen Wert hat und das muss nicht vor jeder Benutzung neu geprüft werden.
Oliver S. schrieb: > rObert schrieb: >> Danke Dussel:-) >> Also schon sehr abstrakt, aber nachvollziehbar was du schreibst. > > Dir ist aber schon aufgefallen, daß da schon im zweiten Satz der > Erklärung das Wort "Klasse" auftaucht, oder? Insofern ist diese > Erklärung für dich nicht nutzbar. > > Oliver Genau genommen ist es der vierte Satz. Der Unterschied ist, dass er sagt, was Klasse im Zsh mit OOP bedeuten kann. Aber danke dass Du das für mich entscheidest.
Oliver S. schrieb: > Dir ist aber schon aufgefallen, daß da schon im zweiten Satz der > Erklärung das Wort "Klasse" auftaucht, oder? Ich habe 'Klasse' vor der Benutzung 'definiert'. Dussel schrieb: > Die Beschreibung, > welche Daten und Funktionen das Objekt haben soll, ist die Klasse (oder > Klassendefinition). Danach war der Begriff nicht mehr abstrakt und ich konnte ihn benutzen.
rObert schrieb: > Der Unterschied ist, dass er > sagt, was Klasse im Zsh mit OOP bedeuten kann. Und was genau unterschiedet das von den unzähligen anderen Erklärungen, die google ohne große Mühe findet? Der Begriff "faul" fiel ja schon. Ergänzende Begriffe magst du dir selber ausdenken. > Aber danke dass Du das für mich entscheidest. Gern geschehen. Oliver
rObert schrieb: > Könnte jetzt aber eine "Verbindung" von Auto und > Haus über "Garage" hergestellt werden? Würde das was nützen? Je nachdem, wie 'Haus' definiert ist, könnte Garage die Eigenschaften von Haus erben. Jedes Haus hat ein Dach und vier Wände und damit die Eigenschaften Länge, Breite und Höhe. Garage wäre dann ein Kind von Haus, das alle Eigenschaften eines Hauses hätte und zusätzlich noch die Eigenschaft Torbreite und Stellplatzgröße definiert. Die Verbindung zu Auto wäre dann, dass die Garage ein spezielles Haus ist, das Obkjekte vom Typ Auto aufnehmen kann. Programmiertechnisch hätte die Garage eine Liste 'Fahrzeuge', in der alle Fahrzeuge, die in der Garage stehen, gespeichert werden. Ein Wohnhaus, das auch ein Kind von Haus wäre, bräuchte diese Liste nicht. Zusätzlich kann die Garage eine Funktion haben, die feststellt, ob in der Garage noch genug Platz für das Auto ist.
Nachtrag: http://www-is.informatik.uni-oldenburg.de/~dibo/hamster/JavaHamsterModell.pdf Haben meine Kids damals sehr gemocht... Oliver
Oliver S. schrieb: > Der Begriff "faul" fiel ja schon. Ergänzende Begriffe magst du dir > selber ausdenken. Kann es sein, daß du gern stänkerst, nur um stänkern zu können? Das war übrigens Rekursion :-)
@Robert Lerne, Unsinn nicht zu kommentieren. "Dussel" hat die Frage von Dir in verständlichen Worten beantworten können und das ist gut so. Das Schlimme an Foren allgemein ist die unmäßige Zahl von Beiträgen, die nicht hilfreich sind. Das bläht die Themen unnötig auf und macht die Suche nach der brauchbaren Antwort schwer. Der Charakterzug, mit vielen Worten nichts zu sagen, greift immer mehr um sich. :-( Big Endian (Dickes Ende)
Dank an alle, die sich hier lösungsorientiert beteiligt haben. So langsam nimmt der Begriff bei mir Gestalt an. Hintergründig beschäftige ich mich damit, eine sowohl auf PC als auch auf µC (AVR, ARM) einsetzbare, damit für meine Zwecke universelle Programmiertechnik zu erlernen, bzw. erst einmal zu finden. Auch das hier macht einen kompetenten Eindruck: https://www.ldv.ei.tum.de/fileadmin/w00bfa/www/Vorlesungen/cpp/CPP-Skript.pdf
Wenn etwas universell ist, dann kannn es meistens alles schlecht und nichts richtig. Du solltest weniger philosophieren und dich hintergründig beschäftigen, als einfach mal eine Sache richtig durchzuarbeiten und konkret was tun.
rObert schrieb: > Hintergründig beschäftige ich mich damit, eine sowohl auf PC als auch > auf µC (AVR, ARM) einsetzbare, damit für meine Zwecke universelle > Programmiertechnik zu erlernen, bzw. erst einmal zu finden. Ich würde keine Technik suchen, sondern eine Sprache. Was nützt die beste Technik, wenn es keine Sprache gibt, mit der man die Technik komplett anwenden kann. Und die Sprache dürfte heute im Programmbereich in den meisten Fällen C, C++, Java oder eine Sprache aus dieser Familie sein.
Sorry, aber ich hätte diesem TO schon nach seinem zweiten Posting nicht mehr geantwortet. Er kommt hier her, erwartet von uns Antworten und sonnt sich währenddessen in seiner eigenen Dummheit? Sein Beispiel ist treffend: "Ein Maler malt mit Farben". Genau. Bleibe am besten bei diesem Handwerk. Anscheinend hat dich der Herrgott nicht dafür geschaffen, Sachen zu kapieren, die nicht mit einem Satz abzuhandeln sind. Sozialer Abschaum!
Walter Röls, schrieb: > Sorry, aber ich hätte diesem TO schon nach seinem zweiten Posting > nicht > mehr geantwortet. Ein Glück, daß es auch Leute gibt, die ein wenig Geduld aufbringen. > > Er kommt hier her, erwartet von uns Antworten und sonnt sich > währenddessen in seiner eigenen Dummheit? Und du sonnst dich in deiner grenzenlosen Klugheit? Alles Wissen dieser Welt ist dir scheinbar angeboren. Bei dir war die Nabelschnur noch nicht mal ab, da hast du schon perfekte Programme in C++ geschrieben, oder? > > Sein Beispiel ist treffend: "Ein Maler malt mit Farben". Genau. > Bleibe am besten bei diesem Handwerk. Anscheinend hat dich der Herrgott > nicht dafür geschaffen, Sachen zu kapieren, die nicht mit einem Satz > abzuhandeln sind. Und dir ist es wahrscheinlich noch nie passiert, daß du manchmal eine Weile gebraucht hast, um Zugang zu einem Problem zu finden. Und dann ist dank einleuchtender Erklärungen plötzlich "der Knoten geplatzt". So wie es Robert hier auch ging. Ich denke, durch die Erläuterungen und Beispiele von Dussel hat er jetzt einen Einstieg gefunden, obwohl er sich anfangs schwer damit tat. > > Sozialer Abschaum! So etwas zu behaupten ist schon ein ordentliches Stück Frechheit.
Leute bleibt freundlich und lasst solche Vokabeln weg. Es reicht doch wenn die Wirrköppe auf der Krim aufeinander losgehen. We are all a great Community. :)
In der oop ist jeder Furz ein Objekt, so wie fuer jeden Manager jeder Furz ein Projekt ist. :-) tgif
Bei der Suche nach weiteren Quellen und Beispielen bin ich auf sisy.de (myAVR,myARM) gestoßen. Die bieten ja eine zurechtgestylte IDE für OOP an. Folgender Code erweckt den Anschein, dass OOP sehr einfach sei. Das LED Beispiel besticht geradezu mit seiner schlichten Gestalt. Verführung? Representativ?
1 | // offizieller AVR C Standard ///////////////////////////////////////
|
2 | if (!(PIND&(1<<PD2))) |
3 | PORTB&=~(1<<PB7); |
4 | |
5 | // das Gleiche mit myAVR C++ ////////////////////////////////////////
|
6 | if ( pinD.bit2 == 0 ) |
7 | portB.bit7 = 0; |
8 | |
9 | // und mit Klassen aus dem myAVR C++ Framework //////////////////////
|
10 | if ( button.isPressed() ) |
11 | led.off(); |
rObert schrieb: > Bevor hier gleich die Begriffe "Klassen" und "Vererbung" fliegen - lasst > es. Wenn ich die kennen würde, dann würde ich wahrscheinlich nicht > fragen. Kann mir bitte jemand erklären, was ein "Zoo" ist? Aber bitte ohne die Begriffe "Tiere" und "anschauen" verwenden, die kenne ich nämlich noch nicht. Eigentlich ist es eine Unverschämtheit, daß alle Erklärungen zu Zoos, die ich bisher gefunden habe, das voraussetzen.
Walter Tarpan schrieb: > Kann mir bitte jemand erklären, was ein "Zoo" ist? mikrocontroller.net ist einer, ein Zoo wo man alle Arten von Geisteskrankheit bestaunen kann!
Walter Tarpan schrieb: > rObert schrieb: >> Bevor hier gleich die Begriffe "Klassen" und "Vererbung" fliegen - lasst >> es. Wenn ich die kennen würde, dann würde ich wahrscheinlich nicht >> fragen. > > Kann mir bitte jemand erklären, was ein "Zoo" ist? Aber bitte ohne die > Begriffe "Tiere" und "anschauen" verwenden, die kenne ich nämlich noch > nicht. Eigentlich ist es eine Unverschämtheit, daß alle Erklärungen zu > Zoos, die ich bisher gefunden habe, das voraussetzen. Was es doch für dämliche Menschen gibt.... Die Begriffe "Tiere" und "anschauen" kennt ein zweijähriges in der richtigen Bedeutung, wie sie auch in "Zoo" verwendet werden. Aber das wissen sozial unterbelichtete schwarz-weiß-Typen nicht.
Walter Tarpan schrieb: > rObert schrieb: >> Bevor hier gleich die Begriffe "Klassen" und "Vererbung" fliegen - lasst >> es. Wenn ich die kennen würde, dann würde ich wahrscheinlich nicht >> fragen. > > Kann mir bitte jemand erklären, was ein "Zoo" ist? Aber bitte ohne die > Begriffe "Tiere" und "anschauen" verwenden, die kenne ich nämlich noch > nicht. Eigentlich ist es eine Unverschämtheit, daß alle Erklärungen zu > Zoos, die ich bisher gefunden habe, das voraussetzen. Was es doch für dämliche Menschen gibt.... Die Begriffe "Tiere" und "anschauen" kennt ein Zweijähriges in der richtigen Bedeutung, wie sie auch in "Zoo" verwendet werden. Aber das wissen sozial unterbelichtete schwarz-weiß-Typen nicht.
rObert schrieb: > Was es doch für dämliche Menschen gibt.... es gibt sogar welche, die ihren Beitrag zwei mal abschicken
rObert schrieb: > Was es doch für dämliche Menschen gibt.... > Die Begriffe "Tiere" und "anschauen" kennt ein Zweijähriges in der > richtigen Bedeutung, wie sie auch in "Zoo" verwendet werden. > Aber das wissen sozial unterbelichtete schwarz-weiß-Typen nicht. Und was "Vererbung" ist weiß jeder Sextaner. Also ist daraus zu schließen: Du weißt, was Tiere sind, aber nicht, was Vererbung ist. Damit läßt sich Dein Kenntnisstand zumindest schon recht gut eingrenzen.
Walter Tarpan schrieb: > Also ist daraus zu schließen: Du weißt, was Tiere sind, aber nicht, was > Vererbung ist. Damit läßt sich Dein Kenntnisstand zumindest schon recht > gut eingrenzen. Halt eindach deine dämliche Klappe, wenn du nichts zum Thema beitragen kannst.
rObert schrieb: > Halt eindach deine dämliche Klappe, wenn du nichts zum Thema beitragen > kannst. In 20 Minuten, wenn meine Suppe fertig ist. Die mir übrigens auch dann hervorragend schmecken wird, wenn Du nicht einsiehst, daß OOP ohne die obengenannten Konzepte sinnlos zu erklären ist - sinnlos wie ein Zoo ohne Tiere.
Walter Tarpan schrieb: > Die mir übrigens auch dann hervorragend schmecken wird, wenn Du nicht > einsiehst, daß OOP ohne die obengenannten Konzepte sinnlos zu erklären > ist - sinnlos wie ein Zoo ohne Tiere. 1.) Was hat das mit Einsicht zu tun? Ja, ich sehe ein, dass OOP was mit Klassen, Vererbung etc. zu tun hat. Das wusste ich übrigens schon vorher. Und ich wusste auch, das dafür niemand sterben muss oder Zellteilung stattfinden muss, es auch mit Schulanfang und Zeugnissen nichts zu tun hat. Nur nützt es dem OOP-Unkundigen nichts, wenn er mit Begriffen konfrontiert wird, die nicht vorher bzw. deren Kontext nicht erklärt wird. 2.) Darüber sind wir aber schon lange weg. 3.) Walter Tarpan schrieb: > In 20 Minuten, wenn meine Suppe fertig ist. Guten Hunger;-)
rObert schrieb: > Halt eindach deine dämliche Klappe, wenn du nichts zum Thema beitragen > kannst. in der Zeit, in der du dich hier auf verbale Schlägereien einlässt (oder diese führst, wie auch immer), hättest du schon längst ein Tutorial in Java oder C#, oder was auch immer durchprogrammiert, und würdest bis hin zur Vererbung schon einige Grundlagen verstanden haben...... z.B. http://www.peterkropff.de/site/php/oop_einfuehrung.htm und es gibt viele mehr....
Daniel V. schrieb: > in der Zeit, in der du dich hier auf verbale Schlägereien einlässt (oder > diese führst, wie auch immer), hättest du schon längst ein Tutorial in > Java oder C#, oder was auch immer durchprogrammiert, und würdest bis hin > zur Vererbung schon einige Grundlagen verstanden haben...... In 3 Minuten so viel lernen? Wow, das wäre ja zu geil;-)
Habe diesen Thread gerade gelesen, und fand ihn sehr unterhaltsam. Robert stänkert rum, beleidigt ("Halt eindach deine dämliche Klappe, wenn du nichts zum Thema beitragen kannst."), und erwartet von uns KOSTENLOSE Hilfe. Auf der anderen Seite scheint er sich nicht mit der Materie außeinandersetzen zu wollen. Die Begriffe "Klasse" und "Vererbung" sind jetzt nicht sooo kompliziert...
Kai S. schrieb: > Habe diesen Thread gerade gelesen, Das wage ich zu bezweifeln. Denn auch du trägst nichts zur Sache bei. Wenn du gelesen udn verstanden hättest, wüsstest du, dass ich mich sachlich mit OOP auseinandersetze. Kai S. schrieb: > beleidigt ("Halt eindach deine dämliche Klappe, > wenn du nichts zum Thema beitragen kannst.") Leider gehörst auch du zu der Klasse Mensch, die lediglich diese Sätze beleidigend empfindet. Ich finde es beleidigend, wenn der Fragende, Wissbegierige den gebückten Bittsteller mimen muss, für jede Antwort, auch wenn sie zur Klärung nicht beiträgt, danke sagen muss, keine Kritik üben darf, und überhaut nicht seine Frage präzisieren darf. DAS ist beleidigend und traurig. Dankenswerter Weise gibt es ausnahmsweise zwei oder drei User hier, die das kapieren, meine Frage verstehen und darauf antworten können. Soll ich mich dafür entschuldigen, dass euch meine Fragestellung nicht passt?
-> http://en.wikipedia.org/wiki/Object-...ed_programming Wenn da Begriffe drin stehen, die Du nicht verstehst, dann kannst Du nach denen suchen, oder hier gezielt Fragen "Was bedeutet XYZ". Oft sind auch Begriffe selber ein Link zu einem weiteren Wiki-Artikel. Ich kann Dir den Artikel auch vorlesen, oder wir machen ein Telefoninterview, bei dem ich Dir alles zu OOP erkläre. Für Geld mache ich fast alles.
> Leider gehörst auch du zu der Klasse Mensch, die lediglich diese Sätze > beleidigend empfindet. > Ich finde es beleidigend, wenn der Fragende, Wissbegierige den gebückten > Bittsteller mimen muss, für jede Antwort, auch wenn sie zur Klärung > nicht beiträgt, danke sagen muss, keine Kritik üben darf, und überhaut > nicht seine Frage präzisieren darf. Ich finde es beleidigend, wenn der Fragesteller keine Eigeninitiative zeigt. Wenn man etwas erklärt haben will, sollte man sich imhO zumindest rudimentär mit dem Thema vertraut gemacht haben. Und ich finde es beleidigend, wenn man sofort in eine "Klasse Mensch" gesteckt wird. > Soll ich mich dafür entschuldigen, dass euch meine Fragestellung nicht > passt? Wenn du magst...
Viele wollen hier mit Wissen glänzen. So wie in einer Prüfung. Ich bin aber nicht die fachkundige Prüfungskommission. Daher nutzen mir eure sachlich und fachlich sicher richtigen Prüfungsantworten nichts. Zurück zum Thema. Die verlinkten Beispiele sind sehr anschaulich, danke. Für welche Aufgaben, die üblicherweise mit µC erledigt werden, bringt diese Programmiertechnik Vorteile? Beispiel "normaler" Programmablauf: alles notwendige Initialisieren ACD Wert einlesen an Funktion übergeben neuen Wert zurückgeben Switch/Case/Reaktion an Display ausgeben von vorn beginnen Und warum schiebt der Modi das zu PC-Programmierung????
An alle: Wie ich schonmal schrieb, ist es für einen Anfänger oft schwierig, in ein neues, völlig unbekanntes Thema einzusteigen. Da ist es oft hilfreich, wenn man einen ersten Ansatz zum Verstehen hat, ohne dass gleich alle Aspekte beleuchtet werden. Soweit ich das gesehen habe, sind alle verlinkten Dokumente umfangreich und daher für den ersten Einstieg nicht ideal. An Robert: Lerne einfach, die nicht hilfreichen und nicht gut gemeinten Antworten zu ignorieren. Sonst kommt nur sowas raus wie Kai S. schrieb: > Habe diesen Thread gerade gelesen, und fand ihn sehr unterhaltsam. > Robert stänkert rum, beleidigt ("Halt eindach deine dämliche Klappe, > wenn du nichts zum Thema beitragen kannst."), Das Forum ist nicht schlecht und hier gibt es viele kompetente Nutzer, aber eben auch einige, die nur Ärger machen wollen. Außerdem sind Beiträge wegen der fehlenden 'nonverbalen Kommunikation' manchmal missverständlich. C++ auf Mikrocontrollern der AVR-Klasse ist umstritten, wobei die Tendenz eher in die Richtung geht, dass C++ auf schwachen Controllern zu viel Overhead hat und deshalb vermieden werden sollte.
rObert schrieb: > Für welche Aufgaben, die üblicherweise mit µC erledigt werden, bringt > diese Programmiertechnik Vorteile? Kommt darauf an, was für Dich "üblicherweise" ist. Und wie groß das µC-Programm ist. Ich habe noch keine Anwendung auf einem µC gefunden, wo mir Objektorientierte Programmierung Vorteile gegenüber funktionsorientierter gegeben hätte. Einfach deswegen, weil man da mehr mit Aktionen und Zuständen als mit Daten hantiert. Zustandsmaschinen gehen ganz gut in OOP - aber nur für eine Zustandsmaschine ist der Aufwand etwas übertrieben. Zumindest schien es mir den Mehraufwand, den Rest der Firmware auch auf C++ zu portieren nicht wert. Bei PC-Anwendungen dagegen hat mir OOP schon viele Sachen erleichtert. Das waren allerdings auch eher Anwendungen, wo die Daten zentral waren. Um genau zu sein: Große Datenmengen mit ähnlicher Struktur, die unterschiedlich behandelt werden wollten.
Es macht eigentlich keinen Sinn dir OOP in einem Forum zu erläutern, denn es gibt einen guten Grund, weshalb dieses Thema ganze Kapitel/Bücher fühlt. Ich würde dir empfehlen ein solches Buch zu beschaffen und die OOP Sache praktisch anzugehen, also schön die Beispiele anschauen und einfach mal damit herumzuspielen in der Programmiersprache deiner Wahl. Dieses Theorie-Geplänkel führt zu nichts (wobei die Theorie natürlich verstanden werden muss).
A. K. schrieb: > Fred schrieb: >> CLOS zum Beispiel. Generische Funktionen statt Methoden. > > Als einziger Mechanismus ist das eine interessante Methode. Schätze dass > etwas Sorgfalt nötig ist, um später noch durchzublicken. Das ist sehr praktisch und überhaupt nicht unübersichtlich. Im Gegenteil, war sogar mal für einen zukünftigen C++ Standard im Gespräch [1]. Zunächst ist es ja auch einfach nur eine andere syntaktische Formulierung des aus anderen Sprachen bekannten Methodenaufrufs. Statt obj.f(...) schreibt man eben f(obj ...). Oder in Lisp Terminologie entsprechend (f obj ...) Diese Formulierung erlaubt aber eine sehr nützliche Verallgemeinerung. Statt nur das erste Argument für die Assoziierung Methode-Objekt auszuwerten, kann die gewählte Funktion jetzt ganz natürlich von allen Argumenten abhängen. Aus dem einfachen Dispatch nach der Klasse des ersten Arguments wird ein Multi-Dispatch nach beliebig vielen Argumenten. Beispiel: Generische Print-Funktion für einen Datentyp, die zusätzlich für unterschiedliche Ausgabemedien spezialisiert ist. print(data_struct file) print(data_struct widget) print(data_struct string) print(data_struct csv-file) Mit define-method würde man hier vier separate Methoden schreiben jeweils passend zu den beiden Datentypen. In Sprachen nur mit single dispatch müsste man diese Unterscheidung von Hand und zur Laufzeit in der data_struct.print(...) Methode vornehmen. Multi-methods machen hier den Code übersichtlicher und wartbarer. [1] http://www.yorel.be/mm/multi_methods/introduction.html When asked about which features he likes in other languages, Bjarne Stroustrup regularly cites multi-methods. Several years ago, he co-authored a paper describing an extension of C++ in that direction: "Open Multi-Methods for C++".
Makefile schrieb: > Statt obj.f(...) schreibt man eben f(obj ...). Sieh an. Unter Matlab ist dieser Mechanismus auch vorhanden und verbreitet. Und jetzt weiß ich sogar, wie er allgemein heißt :-)
rObert schrieb: > Die verlinkten Beispiele sind sehr anschaulich, danke. > Für welche Aufgaben, die üblicherweise mit µC erledigt werden, bringt > diese Programmiertechnik Vorteile? > > Beispiel "normaler" Programmablauf: > alles notwendige Initialisieren > ACD Wert einlesen > an Funktion übergeben > neuen Wert zurückgeben > Switch/Case/Reaktion > an Display ausgeben > von vorn beginnen Beitrag "Wieso Objektorientiert?" Dieser Thread beinhaltet die praxisorientiertesten (gerade im µC-Bereich) Beispiele und Erklärungen, die mit zu dieser Frage je untergekommen sind.
>Und du sonnst dich in deiner grenzenlosen Klugheit? Nein, ganz und garnicht. Viel mehr sonne ich mich in meiner freundlichen Art. Und erst recht dieser Art, wenn ich von anderen noch Hilfe erwarte. Mir ist jeder "Dumme" und dafür Freundliche lieber als einer wie der TO, der weder freundlich ist noch Ahnung hat. >Und dir ist es wahrscheinlich noch nie passiert, daß du manchmal eine >Weile gebraucht hast, um Zugang zu einem Problem zu finden. Doch, aber wiegesagt: ER will was wissen, dann sollte man (wie bereits oben erwähnt) sozial taktisch etwas sinnvoller vorgehen. Das hat nichts damit zutun, dass ich keine Menschen toleriere, die es nicht aufs erste Mal kapieren.
Kai S. schrieb: > Robert stänkert rum, beleidigt ("Halt eindach deine > dämliche Klappe, wenn du nichts zum Thema beitragen > kannst."), und erwartet von uns KOSTENLOSE Hilfe. Naja, Gott sei Dank bin ich nicht verpflichtet, an jeden ungezogenen Rüpel mein Wissen zu verschenken. > Auf der anderen Seite scheint er sich nicht mit der > Materie außeinandersetzen zu wollen. Die Begriffe > "Klasse" und "Vererbung" sind jetzt nicht sooo kompliziert... Vor etwa 20 Jahren ist die OOP nach meiner Wahrnehmung so richtig hochgekocht. Mich hat extrem genervt, dass zwar überall haarklein die technische Maschinerie beschrieben wurde, die Erklärungen zum abstrakten Konzept aber auf blumige "Haus-Auto-Garage"-Vergleiche beschränkt blieben. Das sollte besser machbar sein.
hier häng ich mich auch mal rein... über die weiter oben verlinken Seiten bin ich zur Firma Willert und dort zu dem hier gestoßen: http://www.willert.de/assets/Newsletter/ESER30-OOP-V1.1.pdf ich fand das mal ne erfrischende Abhandlung zu dem Thema OOP oder besser gesagt OO allgemein oder so ;-) Gruß J.
Zwei Dinge: 1. evtl ging es den to nur darum das Thema grundsätzlich zu diskutieren (Forum!), schließlich gibt es nicht immer deine eine Wahrheit die in Büchern steht. 2. mal ein Ansatz, wie mein Prof uns den Umstieg von c auf c++ Gezeigt hat. In c gibt es schon immer die Möglichkeit ein struct zu definieren. Warum? Damit zusammengehörige werte "gruppiert" werden können. Nun kommt es unabhängig davon vor, dass in einem Programmablauf dynamisch Werte gespeichert werden müssen. Also zB ein array in dem für eine Matrix Multiplikation werte gehalten werden. Dafür muss man explizite Speicher allokieren. Eine dynamische instanz eines struct, ist im Grunde schon nichts anderes als ein Objekt. Um in c Variablen in Funktionen zu manipulieren gibt es mehrere Möglichkeiten. Globale Variablen können direkt, lokale können über eine Referenz geändert werden. Dies gilt für struct typen ebenso. Was eine Kladde so wie sie definiert ist ausmacht ist, dass sie alle Methoden zur Manipulation der (struct)Variablen kapselt. Den Funktionen muss nicht mehr die zu verwendende Variable übergeben werden. Der nächste Schritt ist nun zu sagen. Wenn ich nun zwei structs/Klassen habe, Die die gleichen Parameter haben weil sie logisch zusammen gehören, eine davon aber zusätzliche Eigenschaften oder andere Funktionen hat, eine klasse zu abstrahieren die eine untermenge beider darstellt. Eine Erweiterung oder Änderung der Definition auf deren Basis nennt man Ableitung. So gute Nacht
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.