Hallo, wie der Betreff schon sagt, würde ich gerne mal wissen welche Eigenschaften mein (C/C++) Code eigentlich haben muss um sagen zu können, dass er jetzt Objektorientiert ist oder eben nicht?
Dein Code ist so strukturiert, dass Objekte ("Klassen", "Strukturen") manipuliert werden, indem der manipulierenden Funktion ein Zeiger auf das Objekt übergeben wird. In C++ ist dieser Mechanismus ("this") implizit enthalten, indem Du die Funktionen Teil Deiner Objekte werden läßt ("Memberfunktionen"). In C++ würde ich also sagen: Wo eine Memberfunktion, da Objektorientierung. Die Sinnhaftigkeit bleibt aber weiterhin dem Programmierer überlassen.
Objekte sind nichts anderes als Speicherbereiche im RAM für C-User -> Strukturen, für B-User -> UDTs, für µC-Progs. -> globale RAM-Variablen. Sobald Du sowas nutzt ist ein Prog. "Objektorientiert". jetzt geht es aber weiter: -Klassen (Speicherbereiche nach Funktion trennen) -Vererbung (kopieren von Speicherbereichen) - ....
High five Eddy. >Die Sinnhaftigkeit bleibt aber weiterhin dem >Programmierer überlassen
Objektorientiertheit ist wenn man Daten und dazugehörige Funktionen in Objekte "kapselt" das ist das wesentlichste an OOP. In C gibt es keine echte Objektorientiertheit, aber man kann sie simulieren (über den Sinn lässt sich streiten). OOP ist einfach ein Sprachkonzept, welches von Sprachen wie C++, Java usw. unterstützt wird...
Gast wrote: > In C gibt es keine echte Objektorientiertheit, aber man kann sie > simulieren (über den Sinn lässt sich streiten). Die anderen beiden Aussagen waren gut, aber die hier ist Quark, in beiden Satzteilen.
Über diese Thema wird sehr oft diskutiert, jeder hat hier eine andere Ansicht... Wenn du der meinung bist das es in C OOP gibt, dann würde ich gerne wissen wie du Data-Hiding realisierst, in C ist das nicht so einfach möglich, und ohne dem ist OOP nicht das was man darunter versteht.
>Objektorientiertheit ist wenn man Daten und dazugehörige Funktionen in >Objekte "kapselt" das ist das wesentlichste an OOP. Das mache ich bei all meinen WinAVR GCC Programmen so: ich lege alle prozeduralen Funktionen und Variablen gekapselt in eigenen C Sourcen ab. Dem C Source Objekt gebe ich einen eindeutigen Dateinamen und speicher es auf der Festplatte. Aber polymorphe C Source mit Vererbung habe ich so noch nicht hinbekommen, leider ;) Gruß Hagen
@hagen kannst du auch ganz einfach über Zeiger auf Funktionen machen... Ist nix anderes.
Das ist mir klar, aber man kann trotzdem auf die Variablen die im C File abgelegt sind, zugreifen. In OOP wiederspricht dies dem Konzept, wenn man direkt auf Membervariablen zugreift, wegen den Verantwortlichkeiten. Es kommt darauf an wie man OOP definiert, wenn es reicht das man Daten und Funktionen kapselt, dann kann man in C auch objektorientiert Programmieren, aber die Sicherheiten welche OOP mit sich bringt werden nur bedingt erfüllt.
>Objektorientiertheit ist wenn man Daten und dazugehörige Funktionen in >Objekte "kapselt" das ist das wesentlichste an OOP. Und die anderen beiden Konzepte der OOP außer der Kapselung, nämlich Vererbung und Polymorphie, hälst Du nicht für wesentlich?
wie macht man das obiektorientiert in c über strukturen oder über funktionen
@Gast Doch, aber Polymorphie kann mit überladenen Funktionen und Funktionszeiger erreichen. Und Vererbung alleine ist nicht wirklich ein mächtig, eher kann es Fehler verursachen bei unachtsamer Anwendung, das wichtigere nennt sich Untertypbeziehungen. Und sowas ist in C glaube ich kaum realisierbar.
@Hans Statt Klassen verwendet man in C Strukturen, Funktionen musst du als Funktionszeiger in der Struktur ablegen.
Vererbung wird in C nicht so unterstützt wie in OOP-Sprachen, man kann sich mit Zeigern abhilfe schaffen, aber ob das so prickelnd ist... @Hans Was willst du damit machen ?
@Gast Es ist nicht so, dass ich etwas bestimmtes damit machen wollte sondern so, dass es eher als Verständnissfrage gedacht war. Ich habe jetzt auch nicht damit gerechnet, dass das hier gleich so heftig diskutiert werden würde. Aber nun bin ich ja informiert :) Danke euch für dich vielen Antworten.
Das hab ich in Google gefunden: http://www.cs.rit.edu/~ats/books/ooc.pdf Sehr interessant, hier wird genau beschrieben wie man structs so wie Klassen verwendet.
Wie breits geschrieben wurde, gibt es keine allgemein akzeptierte Definition für "Objektorientierung". Jonathan Rees schlägt deswegen eine "Speisekarte" mit 9 Punkten vor, aus der man sich nach Belieben seine eigene Definition zusammenstellen kann: http://mumble.net/~jar/articles/oo.html Anhand dieser Punkte und einer persönlichen Gewichtung kann die Objektorientiertheit von Programmiersprachen oder Programmen bewertet werden. Aber gerade bei C++ ist es Quatsch, die Qualität von Programmcode an dessen — wie auch immer definierter — Objektorientiertheit zu messen. Das Schöne an C++ ist ja gerade, dass es keine reine OO-Programmier- sprache, sondern eine Multiparadigmensprache ist. Es ist also nicht notwendig (und lt. Bjarne Stroustrup sogar falsch), sich gedankenlos irgendwelchen OO-Regeln zu unterwerfen, wenn es sinnvollere Alternativen gibt. Ein Beispiel sind freie Funktionen: Während diese für einige OO-Prediger die zweitschlimmste Todsünde nach Goto-Sprüngen sind, werden sie von Stroustrup in vielen Situationen sogar explizit empfohlen, um den Programmaufbau logischer zu gestalten.
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.