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.
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
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/
>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.
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.
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.
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.
:)
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 //////////////////////
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....> 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 beginnenBeitrag "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