Dossiers
Mediathek
Forum
Whitepaper

Objektorientierung

Objektorientierte Programmierung mit C

 

08.03.2010 | Autor: Frank Listing*

 

Obwohl C keine objektorientierte Sprache ist, ist die objektorientierte Programmierung mit ihr möglich. Dieser Artikel beschäftigt sich mit der Umsetzung von UML-Elementen aus dem Klassendiagramm in C-Code. Es wird gezeigt, was möglich ist und wo die Umsetzung mit der Programmiersprache C an ihre Grenzen stößt.


Objektorientierte Programmierung mit C
*Dipl.-Ing. Frank Listing ist seit 2002 Trainer und Projektcoach bei der MicroConsult GmbH mit dem Schwerpunkt Microsoft-Plattformen, objektorientierte Programmierung und Testen von Embedded Systemen und u.a. fachlich für das Thema .NET verantwortlich.
Die UML (Unified Modeling Language) hat sich mittlerweile auch im Embedded-Bereich als eine akzeptierte Notation etabliert. Sie wird in immer mehr Projekten eingesetzt, um den Aufbau und das Verhalten der Programme zu beschreiben.
Dabei gibt es verschiedene Bereiche in der UML, die mehr oder weniger nah am Code sind. Wo ein Paketdiagramm noch die Architektur beschreibt und weitgehend unabhängig von der später verwendeten Programmiersprache ist, muss bei der Erstellung von Klassendiagrammen schon an die spätere Implementierung gedacht werden, da nicht jedes in der UML unterstützte Merkmal auch in jeder Programmiersprache verfügbar ist.
Die bei der Embedded-Programmierung zurzeit am häufigsten verwendete Programmiersprache C ist nicht objektorientiert. Dies dient in vielen Projekten als Ausrede, um nicht über neue Methoden der Programmierung nachdenken zu müssen. Dabei findet objektorientierte Entwicklung im Kopf des Entwicklers statt. Sie lässt sich mit jeder Programmiersprache umsetzen.
Bei einer nicht objektorientierten Programmiersprache muss mit zusätzlichen Regeln und Techniken ein Umfeld geschaffen werden, das diese Art der Programmierung ermöglicht.

UML-Klassen in C umsetzen

Bild 1: Eine Klasse in UML dargestellt. Die Klassen enthalten Attribute (Daten, z.B. Attribut geschwindigkeit vom Typ integer) sowie Operationen (Funktionen, z.B. fahre():void). Eines der wichtigsten Elemente in der UML ist die Klasse. Sie steht im Mittelpunkt der objektorientierten Programmierung. Das Klassendiagramm der UML stellt die im Projekt verwendeten Klassen mit ihren Attributen (entspricht den Daten) und Operationen (entspricht den Funktionen) und andererseits die Beziehungen zwischen den Klassen dar.
In der Programmiersprache C gibt es kein Syntaxelement für die Klasse. Allerdings gibt es die Struktur als Mittel, komplexe Daten strukturiert abzulegen. Im einfachsten Fall wird eine Struktur mit einem zugeordneten Satz von Funktionen definiert. Per Programmiervorschrift wird festgelegt, dass auf die Struktur nur über die speziellen Funktionen zugegriffen werden darf.
Listing 1-1, eine Klasse in C:
typedef struct
{
int anzahlRaeder;
char* hupTon;
int geschwindigkeit;
}Auto;
void Auto_init(Auto *this, int anzahlRaeder, char* hupTon);
void Auto_fahre(Auto *this);
void Auto_hupe(Auto *this, int anzahl);
1  |  2  |  3  |  4  |  5  |  weiter
Redakteur: Martina Hafner
Social Networks:
Themenverwandte Beiträge
Objektorientierte Programmierung: Mehr Komfort mit C++
02.06.2008 - Obwohl mit C++ schon seit über 20 Jahren entwickelt wird, hält diese Sprache nur langsam in die Mikrocontroller-Programmierung Einzug. Sie enthält aber viele Sprachkonstrukte die die Qualität der Firmware erheblich verbessern kann und dem Entwickler die Arbeit vereinfacht. Ein Grund für die zögerliche Nutzung liegt im höheren Ressourcen-Bedarf. Viele moderne Mikrocontroller haben diese Hürde aber nicht mehr. weiter
Programmiersprachen: Java, C# und die Gefahren der Kompatibilität mit C++
Programmiersprachen: Java, C# und die Gefahren der Kompatibilität mit C++
30.04.2007 - Geht man als versierter C++-Programmierer beim Schreiben eines Java- oder C#-Programms aufgrund der Syntaxkompatibilität der Sprachen auch von einer übereinstimmenden Semantik aus, kann es böse Überraschungen geben. Denn der Code verhält sich nicht immer so, wie man es aufgrund langjähriger Programmiererfahrung erwartet. weiter
Aus dem C++-Forum von elektronikpraxis.de: Objekte deterministisch instanzieren mit dem Placement new Operator
Aus dem C++-Forum von elektronikpraxis.de: Objekte deterministisch instanzieren mit dem Placement new Operator
08.08.2008 - Dieser Beitrag beschäftigt sich mit dem Placement new Operator. Das besondere an ihm ist, dass er keinen neuen Speicher allokiert. Er benutzt vielmehr bereits vorhandenen Speicher, um darin die Objekte zu instanzieren. Dieser kann bereits vorab auf dem Stack ( zur Kompile / Linkzeit ) oder dem Heap ( beim Starten der Applikation ) angelegt werden. weiter
Kommentare zu diesem Artikel
Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)
Spamschutz 

Bitte geben Sie das Resultat dieser Rechenaufgabe (Addition) ein:


Artikel Bewertung

Firma zum Artikel
Firmen in diesem Themenumfeld
Europas breitestes Spektrum an Wegsensoren   Entwicklung, Fertigung und Vertrieb von Sensoren, Systeme, Software und Lösungen für die Messgrößen ...

Parametric Technology GmbH

Esslingen am Neckar, Deutschland

PTC bietet mit seiner Business Unit Integrity (ehemals MKS) Unternehmen die Möglichkeit, die aufwändige Entwicklung softwareintensiver Produkte ...



Whitepaper und Webcasts zum Thema
Whitepaper
Debugging von Embedded Linux-Anwendungen auf ARM-Prozessoren
Embedded Linux als Betriebssystem für moderne ARM-Prozessoren? Keine schlechte Idee! Aber da Linux ein Multitasking-Betriebssystem ist, verkompliziert sich das Debuggen von Prozessen. Wirklich?
Whitepaper
OPC Unified Architecture: 5 Punkte die jeder wissen sollte
OPC UA - Was ist es, inwiefern hilft es mir, und wo kann ich es bekommen? Dieses Whitepaper fasst die Punkte zusammen, die man über OPC UA wissen sollte.
Whitepaper
Fünf Schlüssel für eine erfolgreiche OPC-Integration
OPC Expertenwissen für Systemintegratoren.
Whitepaper
Software effizient nutzen mit OOP
Objektorientierte Programmierung (OOP) im Automation Studio.