Der Weg zur Embedded World 2021: Teil 3
Anmerkung der Redaktion: In Episode 1 dieser Serie aus fünf Beiträgen im Vorfeld der Embedded World 2021, wurde ein Überblick darüber gegeben, was die Embedded World ist. In Episode 2 hat Randy seine Kenntnisse in der Programmiersprache C aufgefrischt. In diesem Blog, Episode 3, geht es darum, wie man mit objektorientierter Programmierung Komplexität reduzieren kann. Episode 4 zeigt, dass das grundlegende Maß für gutes Design seine Fähigkeit ist, bei veränderten Anforderungen rekonfiguriert werden zu können, ohne die Bausteine neu implementieren zu müssen. Im letzten Blog, Episode 5, wird der ständig wachsende Speicherbedarf von Betriebssystemen hinterfragt und die Systemdekomposition vor Randalls Keynote-Präsentation auf der Embedded World 2021 angesprochen.
Der Grund, warum ich mich auf das Thema Komplexität konzentriere, ist, dass ich glaube, dass unsere Branche sie reduzieren muss. Die Komplexität, auf die ich mich beziehe, ist die Komplexität, die erforderlich ist, um ein elektrisches Gerät zu verwenden (wenn ich elektrisch sage, beziehe ich mich hauptsächlich auf die Elektronik). Ich vermute, dass die Komplexität innerhalb der Geräte weiter zunehmen wird. Wie man diese Komplexität organisiert, wird Thema meines nächsten Beitrags sein.
Wie ich in meinem ersten Beitrag erwähnt habe, hinken die Einschreibungen in der Elektrotechnik (EE) anderen technischen Disziplinen hinterher. Trotzdem bin ich mir sicher, dass es in unserer Zukunft eher mehr elektrische Geräte geben wird als weniger. Außerdem glaube ich, dass diese Geräte ein größeres Spektrum an Anwendungen abdecken werden, als heute. Als Beweis dafür kann ich auf die Maker-Bewegung verweisen.
Das Interesse an elektrischen Geräten ist riesig und die Art der Dinge, die die Menschen herstellen, scheint kein Ende zu nehmen. Das Interesse ist groß bei Personen, die keine formale elektrotechnische Ausbildung haben. Mit Stand von Woche 46 im Jahr 2020 haben die folgenden Websites zusammengenommen jeden Monat Millionen von einzigartigen Besuchern angelockt: maker.io, MikroE, Adafruit, Seeed, SparkFun und andere (siehe Abbildung 1 unten). Das ist ein großes Interesse an Elektronik.
Abbildung 1: Monatliche einzigartige Besucher von Websites, die sich an Elektronikinteressierte richten
In der Tat glaube ich, dass es einen größeren Markt für elektrische Geräte gibt, als EEs selbst erfüllen können. Während die Elektroingenieure dafür ausgebildet sind, mit den höchsten Komplexitätsstufen umzugehen oder zumindest zu wissen, wie man sich ihnen nähert, sehe ich unsere Chance darin, weniger gut ausgebildete Menschen in die Lage zu versetzen, elektrische Geräte zu entwickeln. Einfach ausgedrückt: Wenn Elektroingenieure elektronische Geräte und Subsysteme einfacher nutzbar machen können, ermöglichen wir größere Märkte.
Den letzten Monat habe ich mit objektorientierter Programmierung (OOP) beendet. Es kann argumentiert werden, dass OOP die Komplexität erhöht, da so viel mehr Konzepte beherrscht werden müssen. Ich werde diese Konzepte später behandeln, aber ich habe bis jetzt noch nicht darauf hingewiesen, wie OOP die Komplexität zur Wiederverwendung von Funktionalität reduziert, und ich werde dies anhand eines Beispiels tun.
Mein Schwiegersohn hat einen kaufmännischen Abschluss, ist aber jetzt in einem Aufbaustudiengang für Informationstechnologie eingeschrieben. Er erzählte mir von einer seiner letzten Arbeitsaufgaben. Er musste ein 3D-Video-Actionspiel seiner eigenen Kreation umsetzen.
Er war erfolgreich, obwohl er weder eine Ausbildung noch irgendeine Erfahrung in 3D-Grafik oder Echtzeitprogrammierung hat. Er verwendete die Unity-Plattform, um sein Spiel auf Anraten seines Professors zu implementieren. Während ich also mit der Komplexität begonnen habe, bin ich jetzt beim Thema Wiederverwendung.
Ein Lieblingsbuch von mir heißt Fundamentals of Object Oriented Design in UML von Meilir Page-Jones. Ich habe dieses Buch gekauft, nachdem ich eine ganze Menge mit OOP gespielt hatte, aber ich wusste, dass ich trotzdem noch ein Anfänger war. Ich wollte mich verbessern.
Quelle: Amazon (https://www.amazon.com/gp/product/020169946X/ref=dbs a def rwt bibl vppi i0)
Zu meiner Freude erklärte Page-Jones OOP-Konzepte mit einer Analogie zu integrierten Schaltkreisen. Page-Jones erwähnte, er habe diese Perspektive aus Brad Cox' 1986 erschienenem Buch „Object-Oriented Programming: An Evolutionary Approach“ erhalten. Page-Jones zitiert auch Merrill Skolnik, der „Introduction to Radar Systems“ schrieb und darin darauf hinwies, dass „die elektronische Technik nach (1) Komponenten, (2) Techniken und (3) Systemen kategorisiert werden kann“. Skolnik erklärte weiter, dass „Komponenten die Grundbausteine sind, die unter Verwendung geeigneter Techniken kombiniert werden, um ein System zu ergeben“. Page-Jones schlug vor, „Elektronik“ durch „Software“ und „Komponenten“ durch „Klassen“ zu ersetzen, und wir haben eine nützliche Perspektive auf Softwaresysteme.
Page-Jones führt weiter aus, dass die Wahl der sinnvollen Komponenten für ein elektrisches System von der Fähigkeit der Elektroingenieure abhängt, nützliche Abstraktionen zu identifizieren. Er behauptet, dass Ingenieure Jahrzehnte Zeit hatten, die nützlichen Muster zu entdecken, die in einem elektronischen System benötigt werden, bevor der erste integrierte Schaltkreis geschaffen wurde. Er nutzte diesen Punkt, um dem OOP-Entwickler zu helfen, zu lernen, dass er oder sie „solide, robuste, handliche“ Klassen identifizieren muss. Er sagt, dass die Techniken, die Skolnik anführt, nutzlos sind, wenn diese Komponenten nicht miteinander verbunden werden können, in Skolniks Fall mit gedruckten Leiterplatten.
Mit integrierten Schaltkreisen und objektorientierter Programmierung möchte ich also darauf hinweisen, dass es sich im Wesentlichen um unterschiedliche Umsetzungen derselben Konzepte handelt. Ich gebe zu, dass das Software-Engineering viel lockerer zu sein scheint als das Hardware-Engineering. Es scheint, dass heutzutage jeder in der Lage ist, Software zu implementieren. Es ist jedoch nicht so, dass Software einfach „verbunden“ wird
Jan Decaluwe, der Schöpfer von MyHDL, sagte in seinem Blogbeitrag, dass im Kontext des digitalen Designs mit Hardware-Beschreibungssprachen (HDLs) die Beschreibung von Arithmetik in Verilog oder VHDL alles andere als einfach und in der Tat kompliziert und verwirrend ist. Ich sage, egal ob wir über programmierbare Logik oder Softwaresysteme sprechen, wir müssen unser Softwaredesign verbessern, wenn wir größere Märkte erreichen wollen.
Um den Beitrag dieses Monats abzuschließen, möchte ich die Konzepte nennen, die für ein „gutes“ OOP-Design erforderlich sind. Die gängigsten Konzepte sind die der Kohäsion und der Kopplung. Kohäsion ist die Zusammengehörigkeit der Teile einer gekapselten Einheit, egal ob es sich um eine Softwareklasse, ein digitales Modul oder einen integrierten Schaltkreis handelt. Hohe Kohäsion ist besser als niedrige Kohäsion, weil Systeme dadurch leichter zu verstehen, zu testen, zu warten und vieles mehr sind. Kopplung ist die Verbindung oder Abhängigkeit eines Software- oder Hardware-Elements von einem anderen. Geringe Kopplung ist besser als hohe Kopplung, weil Änderungen an einem Element mit minimaler Auswirkung auf das andere vorgenommen werden können.
Page-Jones prägte den Begriff „Konnaszenz“, um eine Gefahr der Kopplung zu beschreiben. Laut Page-Jones hat der Begriff „Konnaszenz“ seine Wurzeln im Lateinischen und bedeutet „zusammen geboren worden sein“. Er fügt hinzu, dass dies bedeutet, „verflochtene Lebensschicksale“ zu haben Seine formale Definition der Konnaszenz ist unten dargestellt.
Eine Verbindung zwischen zwei Software- [oder Hardware-] Elementen A und B bedeutet entweder
- dass Sie eine Änderung von A postulieren können, die eine Änderung von B erfordern würde (oder zumindest eine sorgfältige Überprüfung), um die Gesamtkorrektheit zu erhalten, oder
- dass Sie eine Änderung postulieren können, die es erforderlich machen würde, dass sowohl A als auch B zusammen geändert werden müssen, um die Gesamtkorrektheit zu erhalten.
Beachten Sie, dass die eingeklammerten Wörter in der obigen Definition von mir stammen. Er fährt fort, über zehn Varianten der Konnaszenz zu erklären. Eine Form der Konnaszenz ist die Abhängigkeit von der Reihenfolge der Argumente in einem Funktionsaufruf. Wenn die Reihenfolge geändert wird, müssen alle abhängigen Funktionen ebenfalls geändert werden. Beachten Sie, dass er auch das Konzept der Kontranaszenz erklärt, bei dem die Aufrechterhaltung der Unterschiede wichtig ist. Die Kontranaszenz gilt insbesondere bei der OOP-Vererbung, bei der Objekte Instanzen desselben Typs sind, aber voneinander verschieden sein müssen.
Zusätzlich zu Kohäsion, Kopplung und Konnaszenz gibt es noch andere Konzepte, die hilfreich sind, um zu verstehen, was gutes OOP-Design ist. Ich liste sie hier zu Ihrer Information auf:
- Kapselung
- Verbergen der Information/Implementierung
- Zustandserhalt
- Objektidentität
- Nachrichten
- Klassen
- Vererbung
- Polymorphie
- Allgemeinheit
Diese Themen werden in dem oben erwähnten Buch von Page-Jones und anderen OOP-Texten gut behandelt.
Okay, beim Thema Komplexität ist es kompliziert geworden. Es gibt viele Facetten zu berücksichtigen, aber im Grunde geht es uns darum, nützliche Blackboxen zu entwickeln, mit denen jeder neue elektrische Geräte bauen kann. Die Boxen sind schwarz, weil wir das, was in ihnen liegt, nicht preisgeben wollen oder müssen. Wir wollen, dass ihre Schnittstellen so einfach wie möglich sind und kümmern uns nicht um ihre innere Komplexität.
Wir wissen jetzt vielleicht etwas darüber, wie wir die Güte dessen, was wir suchen, beurteilen können, aber ich habe nicht mitgeteilt, wie man Systeme und Subsysteme tatsächlich in wiederverwendbare Komponenten oder Module zerlegt. Dies wird das Thema meines nächsten Beitrags sein.

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum