Ü b e r s i c h t d e r C & C++ P r o j e k t e
O v e r v i e w o f C & C++ P r o j e c t s
-
In der Überschrift werden C und C++ im selben Atemzug genannt. Wie der Name verrät, wurde C++ ursprünglich als C-Erweiterung entworfen:
B. Stroustrup, der Designer / Erfinder von C++, nannte die erste C++ Implementierung C mit Klassen (Dem Klassen-Konzept verdankt er vorheriger Erfahrung mit der zur damaligen Zeit in Skandinavien verbreiteten Computersprache
Simula, die auch als Vorgängerin von
Smalltalk gilt, eine Sprache, die dem Paradigma der Objekt-orientierung kompromisslos folgt.)
Nach B. Stroustrups Vorstellung sollte die syntaktische Kompatibilität mit C die Verbreitung von C++ fördern, da C - insbesondere in der Unix-Welt - ubiquitär ist. Der Schwerpunkt der Argumentation liegt nicht so sehr in der vermeintlichen Erleichterung der Erlernbarkeit: Viele C++-Lernbücher - B. Stroustrup auch - betonen sogar, dass C++ lieber from the scratch erlernt werden soll - um "unpassende Programmiergewohnheiten" aus der C-Gedankenwelt zu vermeiden. Der gewichtigere Grund ist, dass C++-Projekte bei Bedarf, ohne großen Aufwand, bestehende C-Module integrieren sollen. Die Wette wurde eingelöst. Zumindest scheint meine eigene Erfahrung dies zu bestätigen.
C und C++ sind zwei unterschiedliche Sprachen, die sich weiterentwickelt haben und weiterentwickeln werden. Ihre Designer sind bestrebt, eine hohe Kompatibilität (der Module) zu sichern Die Umsetzung wird jedoch immer schwieriger (siehe
Compatibility of C and C++)
C habe ich in folgenden externen Projekten intensiv verwendet:
Nr. Projekt Name (link) Auftraggeber Zeitraum 1 GlobalPlatform Projekt Giesecke & Devrient 2004 bis 2006 2 Kalibrierung vom Multiplate Messgerät Dynabyte Informationssysteme GmbH 2010 3 AGS Projekt BMW AG ab 2011 C++ habe ich in folgenden externen Projekten intensiv verwendet:
Nr. Projekt Name (link) Auftraggeber Zeitraum 1 GlobalPlatform Projekt Giesecke & Devrient 2004 bis 2006 2 Kalibrierung vom Multiplate Messgerät Dynabyte Informationssysteme GmbH 2010 Die Tabellen oben sind ein Beleg für die Verflechtung beider Sprachen - wobei sich die Verhältnisse je nach Projekt unterscheiden.
- Im GlobalPlatform Projekt wurden komplexe Anwendungen in C++ entworfen und manche Zusatz-Bibliotheken in C programmiert.
- Im Multiplate Projekt wurden die Module erst in ANSI-C geschrieben. Zu einem späteren Zeitpunkt wurde das gesamte Programm - inkl. des Kalibrierungsteils - in C++ übertragen.
- Die BMW-AGS-Software ist Teil der Software, die im Getriebe- Steuergerät eines Fahrzeugs eingebettet ist. Eine Übertragung des Quelltextes auf C++ - obwohl aufgrund der mittlerweile erreichten Komplexität der Berechnungen durchaus empfehlenswert - wurde bisher nicht umgesetzt, weil sich die Akteuren der Entwicklungsprozesses bisher nicht zur Definition der künftigen Tool-Kette einigen konnten.
Obwohl C++ aus dem C-Substrat entstanden ist, eröffnet die Objekt-Orientierung OO unerwartete Perspektive des Programmierens: Komplexe Quelltext-Module werden dadurch einfacher kodiert (leichter zu lesen, zu ändern, zu erweitern).
Grundlegende Elemente der Objekt-Orientierung - Klassen, Vererbung, Polymorphie - können auch in C über die Handhabung von Zeigern auf Strukturen und Prozeduren nachempfunden werden. In den meisten Fällen werden aber C-Programmierer kaum solchen Aufwand betreiben, um die Stringenz ihres Quelltextes zu gewährleisten bzw. erhöhen.
Im Rahmen von einzelnen internen Projekten werden folgende Themen als Implementierungsziele definiert:
- Kalibrierung von Messdaten
- Simulation und Steuerung von Entwässerungskanälen
Die Themen haben mich jahrelang beschäftigt und bleiben solange aktuell, bis die gewonnenen Erkenntnisse und Ergebnisse - einer einheitlichen Perspektive zugeordnet - abschließend behandelt wurden.
Dazu gehört die Übertragung der Lösungsansätze in eine einheitliche Computersprache - anstatt der bunten Vielfalt, die im Laufe der Jahre und Projekte entstanden ist - unter anderem BASIC bzw. VBA (Visual Basic for Application), Fortran, Delphi, Java, C, C++.
Die zu veröffentlichenden Softwaremodule werden möglichst in Bedienoberflächen (GUI) eingebettet - im Gegensatz zur Kommandozeilen-Bedienung, die zum Beispiel in veröffentlichten Perl-Projekten extensiv umgesetzt wurde.
-
-
Um eine hohe Strukturierung des Quelltextes zu gewährleisten, werden künftige Module vorzugsweise objekt-orientiert (OO) programmiert. Neben C++ wurden in den letzten Jahrzehnten mehrere OO-Sprachen entwickelt - und davon inspiriert - unter anderem Delphi, Java, C#. Keine der genannten Sprachen ist an sich den anderen überlegen. Daher bewerte ich meine Entscheidung für C++ als persönliche Vorliebe, die von folgenden Umständen begünstigt wurde:
C++ ist (immer noch) eine der meist verbreiteten Sprachen - mit vielfältigen Internet-Ressourcen, Gemeinschaften und Support auf allen gängigen Plattformen.
Im Vergleich zu anderen OO-Sprachen - etwa Java - ist die Durchführung von C++-Codes schnell. Daher kann C++ ggf. für Echtzeit-Module herangezogen werden.
Ich kann auf eine mehrjährige Erfahrung mit C++ zurückblicken.
Es gibt eine Entwicklungsumgebung für C++, mit der ich stets sehr zufrieden war:
Qt.
- Qt ist open-source: Die nachweisbare Transparenz der Werkzeuge ist mir ein wichtiges Anliegen.
- Qt ermöglicht Multi-Plattform-Entwicklung - nach dem Motto Develop once, run everywhere: Die Projekte werden auf OSX entwickelt. Viele Interessierte dürften aber auf MS Windows arbeiten.
- Qt umfasst ein breites Spektrum von vorgefertigten Modulen: Insbesondere können mit moderatem Aufwand professionelle Bedienoberflächen fertiggestellt werden.
Anm.: Zu diesem Zeitpunkt ist noch unklar, ob C Module in diesem Rahmen programmiert werden. Vielleicht zu Testzwecken oder im Rahmen einer besonderen Untersuchung.
-
Einbettung in Bedienoberflächen
Es ist geplant, abgesehen von begründeten Ausnahmen, die Berechnungsmodule in Bedieneroberflächen einzubetten.
Wenn es sinnvoll erscheint, wird - zusätzlich - eine Kommandozeile-Version veröffentlicht. Begründungen sind unter anderem besondere Fragen der Programmierung zu durchleuchten oder die stapelweise Durchführung zu ermöglichen.Zur Erstellung der Benutzeroberfläche wird aus C++-Klassen von
Qt zurückgegriffen.
Zuletzt habe ich 2010 mit Qt 4.x gearbeitet. Seitdem wurde vieles neu entwickelt oder organisiert. Die aktuelle Version (Qt 5.5) bietet mehr Möglichkeiten zur Gestaltung von Benutzeroberflächen. -
Als Präambel will ich Regel Nr. 2 und 3 aus den (4) Regeln zitieren, die René Descartes in Le Discours de la Méthode formuliert hat.
Nach Descartes Vorstellung sind diese Regel grundsätzlich: sie sollen einen dazu verhelfen, aus dem Wahrnehmbaren die Wahrheit zu erkennen. Hier stellen sie jedoch nur einen speziellen Anwendungsfall dar: sie dienen als Leitbild der Vorgehensweise zur Umsetzung der Implementierungsziele.Im (Französischen) Original:
Le second, de diviser chacune des difficultés que j'examinerais, en autant de parcelles qu'il se pourrait, et qu'il serait requis pour les mieux résoudre.
Le troisième, de conduire par ordre mes pensées, en commençant par les objets les plus simples et les plus aisés à connaître, pour monter peu à peu, comme par degrés, jusques à la connaissance des plus composés; et supposant même de l'ordre entre ceux qui ne se précèdent point naturellement les uns les autres.
Die zweite war, jede zu untersuchende Frage in so viel einfachere, als möglich und zur besseren Beantwortung erforderlich war, aufzulösen.
Die dritte war, in meinem Gedankengang die Ordnung festzuhalten, dass ich mit den einfachsten und leichtesten Gegenständen begann und nur nach und nach zur Untersuchung der verwickelten aufstieg, und eine gleiche Ordnung auch in den Dingen selbst anzunehmen, selbst wenn auch das Eine nicht von Natur dem Anderen vorausgeht.
Bevor mit den Zielimplementierungen begonnen wird, werden Aspekte der C++ Entwicklung untersucht, die in spätere Umsetzungen einfließen: Unter anderem die Entwicklung von Command Line Application um die Eignung von C++ Datenstrukturen zu prüfen oder die Handhabung von Elementen der Bedienoberfläche.
-
-
Anm.: Da die meiste Dokumentation auf Englisch verfügbar ist, und um mir den Übersetzungsaufwand zu sparen, werden die meisten verlinkten Seiten unten auch auf Englisch verfasst.
-
Referenzen zur Definition der Sprachen
Eigene Einführungen zu OOP, zu C++ würden den vorgesehenen Rahmen sprengen. Stattdessen werden Quellen aufgeführt, auf die ich im Laufe der Projekte gestolpert bin.
Definition der C-Sprache Liste_Quellen_Lang_C_EN.html#Kap1_C Definition der C++-Sprache Liste_Quellen_Lang_C_EN.html#Kap1_C++ -
Software zu entwickeln setzt nicht nur die Beherrschung einer oder mehrerer Sprachen voraus. Vielmehr wird eine Vielzahl von Tools eingesetzt, um die Software zu definieren (Anforderungen), editieren, dokumentieren, sichern, testen. Für größere Projekte besteht eine zusätzliche Schwierigkeit darin, die Software über den gesamten Lebenszyklus zu betreuen.
Um mehr über Tools zu erfahren, die ich verwendet und dokumentiert habe: Link=khelil.de/Tools.
-
Im Rahmen von Mini-Projekten im Vorfeld - sogenannte Proto-Projekten - will ich, Fragen behandeln, welche die OO-Programmierung mit C++ im Allgemeinen oder die Handhabung des Qt-Framework im Besonderen betreffen. Welche Fragen sich ergeben und welche Antwort(en) dazu vorschlagen werden, wird nach und nach ersichtlich.
Nr. Projekt Link Projekt Titel Sprache 1 Unit_Conversion_Table Umrechungstabelle von physikalischen Größen. Exemplarisch werden einige physikalische Größen behandelt.
- Zunächst wird eine Command Line Version fertiggestellt, die je nach Angabe des Anwenders (z.B. physikalische Größe, Einheiten, Wertebereich) eine Umrechungstabelle herausgibt.
- Dann wird eine Bedienoberfläche bereitgestellt - unter Verwendung der für die Kommandozeile-Version fertiggestellten Module (Klassen).
Englisch
-