www.mikrocontroller.net

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


Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Eddy Current (chrisi)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)
    - ....

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
High five Eddy.

>Die Sinnhaftigkeit bleibt aber weiterhin dem
>Programmierer überlassen

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@hagen

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie macht man das obiektorientiert in c

über strukturen oder über funktionen

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

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

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und structuren lassen sich ja dann in c vererben

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.