wann ist mein Code Objektorientiert?

#1159761
Lesenswert?

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.
Gast #1159778
Lesenswert?

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)
    - ....
Gast #1159802
Lesenswert?

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 #1159810
Lesenswert?

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.
Gast #1159821
Lesenswert?

Ü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.
#1159837
Lesenswert?

>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
Gast #1159857
Lesenswert?

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.
Gast #1159873
Lesenswert?

>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?
Gast #1159894
Lesenswert?

@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.
#1159965
Lesenswert?

@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.
Gast #1159979
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren