Forum: Mikrocontroller und Digitale Elektronik wann ist mein Code Objektorientiert?


von Hans W. (hans_wurst)


Lesenswert?

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?

von Eddy C. (chrisi)


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.

von Klaus (Gast)


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)
    - ....

von Klaus (Gast)


Lesenswert?

High five Eddy.

>Die Sinnhaftigkeit bleibt aber weiterhin dem
>Programmierer überlassen

von Gast (Gast)


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...

von P. S. (Gast)


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.

von Gast (Gast)


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.

von Hagen R. (hagen)


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

von Manuel (Gast)


Lesenswert?

@hagen

kannst du auch ganz einfach über Zeiger auf Funktionen machen... Ist nix 
anderes.

von Gast (Gast)


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.

von Gast (Gast)


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?

von Hans (Gast)


Lesenswert?

wie macht man das obiektorientiert in c

über strukturen oder über funktionen

von Gast (Gast)


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.

von Gast (Gast)


Lesenswert?

@Hans
Statt Klassen verwendet man in C Strukturen, Funktionen musst du als 
Funktionszeiger in der Struktur ablegen.

von Hans (Gast)


Lesenswert?

und structuren lassen sich ja dann in c vererben

von Gast (Gast)


Lesenswert?

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 ?

von Hans W. (hans_wurst)


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.

von Gast (Gast)


Lesenswert?

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.

von yalu (Gast)


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.

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
Noch kein Account? Hier anmelden.