Was ist Hardware nahe Programmierung wie bei C. Wie kann man sich das vorstellen. Wo ist der unterschied zu Objektorientierter Programmierung?

5 Antworten

Die Begriffe "hardwarenah" und "objektorientiert" sind zunächst einmal kein direkter Gegensatz.

Man kann sowohl mit C als auch mit anderen prozeduralen Sprachen z.B. Windows-Applikationen schreiben, was alles andere als "hardwarenah" ist.

In Windows 3.x wurden fast alle Applikationen in C geschrieben - und Windows-Applikationen sind prinzipiell nicht hardwarenah.

Umgekehrt ist Eingeschränkt auch hardwarenahe Programmierung in einer objektorientierten Sprache möglich.

Aber hier ein Überblick über die Begriffe:

Hardwarenah

Beim Programm handelt es sich z.B. um ein Betriebssystemkern oder einen Treiber oder ein Programm auf einem Rechner, auf dem gar kein Betriebssystem läuft (z.B. auf einem Arduino-Microcontroller).

Die Kommunikation "nach außen" (z.B. Einlesen von Tastaturdaten oder Bildschirmausgabe) geschieht nicht über das Betriebssystem, sondern über die direkte Ansteuerung von Hardwarekomponenten.

Objektorientiert

Die Programmiersprache verwendet so-genannte Objekte. Diese beinhalten Daten und ihnen sind Funktionen zugeordnet.

So könnte es in einem Programm ein Objekt "Kreis" geben, in dem ein Durchmesser gespeichert ist und eine Funktion "Fläche berechnen" zugeordnet ist. Außerdem könnte es im Programm noch ein "Quadrat" geben.

Wenn ich nun von einem Objekt die Fläche berechnen will, muss ich nicht wissen, ob es sich um einen Kreis oder ein Quadrat handelt, sondern ich muss nur die jeweils zugeordnete Funktion "Fläche berechnen" aufrufen.

Prozedural

Mehr oder weniger das Gegenteil von "objektorientiert": Daten und Funktionen sind streng voneinander getrennt. Im Beispiel mit dem Kreis und dem Quadrat muss man zunächst überprüfen, ob das Objekt ein Kreis oder ein Qaudrat ist, um danach die korrekte Funktion "Kreisfläche" oder "Quadratfläche berechnen" aufrufen zu können.

Imperativ

Der Programmierer verwendet Befehle, die nacheinander ausgeführt werden. Etwa 90% aller Programme sind imperativ geschrieben.

Fast alle "bekannten" Programmiersprachen (Java, C, C#, C++, Pascal, JavaScript ...) sind imperativ.

Deklarativ

Das Gegenteil von "imperativ": Programme werden dadurch geschrieben, dass der Programmierer Eigenschaften vorgibt, welche das fertige Programm haben soll. Die Reihenfolge, in der die Befehle ausgeführt werden sollen, bestimmt der Computer selbst.

Meistens sind es nur "Hilfssprachen" für andere Programme, die diese Eigenschaft haben. Beispiele für deklarative Sprachen sind SQL, Makefile, PostScript und XSLT.

Wir haben einerseits harwarenah im Gegensatz zu hardwareabstrahiert und andererseits objektorientiert im Gegensatz zu nicht objektorientiert.

Bei hardwarenaher Programmierung musst du wissen, wie man die Hardwaresteuerung mehr oder weniger direkt ansteuert, also z. B. wie man die Systemuhr dazu bringt, die aktuelle Zeit in eine Speicherzelle zu schreiben, und welche Speicherzelle das ist. Bei hardwareabstrahierter Programmierung kümmert sich die Schnittstelle zum System (API) darum, wo die Zeit herkommt, das sieht für dich als Programmierer bei allen Systemen mehr oder weniger gleich aus.

Objektorientiert bedeutet im wesentlichen, dass logisch zusammengehörige Daten auch programmtechnisch so zusammengefasst werden, dass sie gleichzeitig an Funktionen übergeben werden können (im Objekt gebündelt) und dass sie nicht beliebig und wild durcheinander geändert werden können (im Objekt gekapselt).

Eine hardwarenahe objektorientierte Programmierumgebung ist ohne weiteres vorstellbar und hätte auch den Vorteil, dass die Ansteuerung der Hardware in Objekte gekapselt werden kann, sodass verhindert wird, dass durch wildes Herumschrauben an den Einstellungen ein ungültiger oder sogar schädlicher Zustand der Hardware erreicht wird. Die Objektklassen müssen natürlich der jeweiligen Hardware individuell angepasst sein.

Meine Erfahrungen mit hardwarenaher Programmierung liegen aber lang zurück und beschränken sich auf Systeme, die noch keine Objektorientierung kannten, sodass ich nicht sagen kann, inwieweit solche Systeme realisiert sind. Möglicherweise sind sie eher selten, weil Objektorientierung auch im fertigen Produkt etwas Overhead erzeugt.

> etwas Overhead

Das ist etwas untertrieben ;-)

2
@TomRichter

Ich hab auch vergessen zu erwähnen, dass es bei zeitkritischen Vorgängen (Brennen von CDs, Papiervorschub bei Druckern u. ä.) ein klein wenig unangenehm sein könnte, wenn dem Garbage Collector mittendrin auffällt, dass kaum noch Speicherplatz frei ist.

2
@PWolff

Mann, hör' bloß auf! (=vollste Zustimmung)

So nett die GC ja bei einer einfachen Applikation ist, aber bei Gerätesteuerung kommst du echt ins K*tzen...

1

Wobei der Overhead meistens nicht so riesig ist und die Vorteile von OO überwiegen. Gruß :)

0
@Reyha24

Es hat schon seinen Grund, warum Microcontroller mit Speichergrößen im Kilobytebereich (also nicht die Riesencontroller, die es auch gibt) sowie Betriebssystemkerne in der Regel in C und nicht in C++ geschrieben werden.

Einen Linux-Kerneltreiber könnte man technisch gesehen auch objektorientiert in C++ schreiben - gemacht hat das bisher meines Wissens aber noch niemand.

Wenn die Vorteile überwiegen würden, sähe die Sache anders aus.

1

Programmiersprachen sind an irgend etwas orientiert.

In Hardwareorientierter Programmierung werden die Programme praktisch in Maschinensprache geschrieben (z,B. Assembler)- Man erhält damit schnell laufende Programme, aber der Nachteil ist, dass sie nur auf einem bestimmten Prozessor- und Gerätetyp laufen.

Deshalb hat man bald Programmiersprachen entwickelt, die allgemeiner formuliert werden können, aber für viele Prozessor- und Gerätetypen geeignet sind. Die besten Beispiele dafür sin COBOL (kommerziell orientiert) und FORTRAN (wissenschaftlich orientiert).

Hardwarenahe Programmierung ist nun so ein Mittelding. Das Grundprogramm wird allgemein formuliert, die Hardware aber direkt angesteuert.

Objektorientiert bedeutet, dass es logisch zusammengehörige Dateien in einem Objekt zusammengefasst werden, das dann gemeinsam übergeben werden kann. Visual-Basic ist so eine Sprache.

Was möchtest Du wissen?