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

7 Antworten

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.

Woher ich das weiß:Studium / Ausbildung – Studium, Hobby, gebe Nachhilfe
TomRichter  03.07.2015, 11:41

> etwas Overhead

Das ist etwas untertrieben ;-)

2
PWolff  03.07.2015, 11:46
@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
CSANecromancer  03.07.2015, 13:14
@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
Reyha24  03.07.2015, 12:11

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

0
martin7812  03.07.2015, 15:33
@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

Gute c++ Compiler können beide Techniken: OOP und Hardware-nah!  

Man kann auch beides mischen: da, wo Vererbung gleichartiger Objekte gewünscht wird, setzt man OOP ein.

In den Teilen, die besonders schnell sein sollen, kommt man ohne spezielle Maschinenbefehle nicht aus! Das kann auch innerhalb einer Klasse sein.

Selten ist ein Programm nur allein OOP oder nur allein hardwarenah (bis hin zu ASM)! Gute Compiler kennen auch viele neue SSE2 oder SSE4 Befehle, die nur gute CPUs können (also kein ASM nötig). Wenn man es gründlich macht, müsste man zunächst die vorhandenen logischen CPU-Kerne analysieren und online entscheiden, welche Befehle man im weiteren Verlauf nutzt und wie viele Kerne man anspricht.

Auf http://www.gerdlamprecht.de/BisZuWelcherNKalleStringKombi.htm  

Tabelle unten habe ich mal zig Programme verglichen, was aus guter hardware-naher Programmierung herauszuholen ist: c++ mit 128 Bit FFT Multiplikation auf allen 8 Kernen ist über 41000 mal schneller als einfache c# Programme!!! Allein eine Verdopplung des Speichers brachte auch noch mal eine Verdopplung der Geschwindigkeit. Selbst scheinbar gleiche CPUs (8 logische Kerne, 3,5 GHz und gleiche RAM Größe) können bis zu Faktor 3 unterschiedlich sein, da die Anzahl der Takte pro Maschinenbefehl entscheidend ist! Das geht bis hin zu 512 Bit AVX... oder GPU (Nutzung des Prozessors der Grafikkarte).

(Optimierung noch nicht abgeschlossen) 

Hinweis: Programme werden langsamer, wenn man viele bunte Dialoge, Sicherheitsabfragen und Titelleisten drumherum bastelt, da oft nicht mehr alles in den CPU-Cache passt (der zig mal schneller als der RAM ist).

hypergerd  04.07.2015, 17:32

Glaube keinem Benchmark-Test, den Du nicht selbst für Deine Hardware analysiert hast! Jeder Hersteller (AMD, Intel, Grafikkarten...) optimiert seinen Test so, dass seine Hardware am besten dasteht! Hyperthreading ist ab Win7 so gut, dass nicht die Anzahl der Hardware-Kerne, sondern die Anzahl der logischen Kerne entscheidet (also wie viele Threads parallel laufen können)! Positiv wirkt sich auch der Turbo-boost-Mode aus: kurzzeitig können einige CPUs um etwa 0,5 GHz hochschalten.  

Wer nur 0815 Software (1 Kern, 32 Bit) nutzt, kann damit jede noch so schnelle CPU ausbremsen! Beim Kauf geht es oft nur im 1...2% Unterschied bei der Taktfrequenz ...  

Bei der Software hingegen können Faktoren über 41000 herausgeholt werden (über 4090000%)! 

0

Man unterscheidet nicht zwischen OOP und Hardwarenah sondern wie "hoch" eine Sprache ist.

C ist relativ niedrig und erlaubt einfachere Zugriffe z.B. auf die Adressräume im Ram wie eine höhere Sprache (z.B. .NET).

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.

YafesYafes  21.06.2023, 20:46

Wichtig anzumerken ist, dass die Hardwarenahe Programmierung dazu genutzt wird, Geräte, Hardware und Hardwaregebundene Software zu steuern bzw. zu programmieren. Objektorientierte Programmierung wird eher dazu genutzt um Programme, Software für Betriebe, eigene Programme die reale Objekte oder Vorgehensweisen dokumentieren und verarbeiten zu können. Spiele, Apps gehören dazu. Hardwarenahe Programmierung eher für die Steuerung von Geräten und Hardware. Wie der Name schon sagt ..

0

Die größte und zuverlässigste Online-Community für Entwickler, um ihr Wissen in der Programmierung zu teilen und ihre Karrieren aufzubauen — https://de.qaru.tech/