Abstraktion / Hierarchie Flashcards
Was ist unter Abstraktion zu verstehen?
Stellen Sie die Vorteile, bzw. die Nachteile von Abstraktion.
Die Trennung des Wesentlichen vom Unwesentlichen und der anschliessenden Beschränkung auf das Wesentliche.
Vorteile:
- i.A schnellere Lösung.
- Automatisierte Implementierung möglich (Hochsprachen C++, Java, Matlab).
Nachteile:
- Geringere Performance.
Was ist unter Hierarchie zu verstehen?
Stellen Sie die Vorteile, bzw. die Nachteile von Hierarchie.
Modulbildung, Bildung von verschiedenen Schichten, wobei Module mehrfach verwendet werden (können).
Vorteile:
- Universell einsetzbar.
- Effiziente Teilimplementierungen können unverändert übernommen werden / Optimierung häufig genutzter.
- Module führt zu besserer Performance.
Nachteile:
- Grösserer Aufwand bei der Erstellung wieder verwendbarer Module.
Welche Methoden, bzw. Ansätze werden verfolgt, um Abstraktion im Softwareentwurf zu erreichen? Erste Beispiel:
Höhere Programmiersprachen:
Die Nutzung der Basisbefehle einer Hardware wird abstrahiert, indem umfangreichere Befehle und Konzepte dem Nutzer zur Verfügung gestellt werden, welche anschließend von einem Compiler in ein Äquivalenten, aber aus den Basisbefehlen bestehenden, Ablauf übersetzt wird. Hierbei werden die Befehle der Hochsprache nicht durch eine feste Kombination von Basisbefehlen ersetzt, sondern komplexer (quasi intelligent) ersetzt. So übernimmt der Compiler beispielsweise die Verwaltung der Speicheradressen oder optimiert den Code.
Welche Methoden, bzw. Ansätze werden verfolgt, um Abstraktion im Softwareentwurf zu erreichen? Zweite und dritte Beispiel:
Verwendung von Modulen, z.B. HAL:
Der Zugriff auf die Hardware wird durch die HAL abstrahiert. Dem Anwender/ Entwickler werden Befehle zur Verfügung gestellt, welche unabhängig von der eingesetzten Hardware ist. Die eigentliche Umsetzung dieser Funktionen bei der Hardware wird durch die HAL realisiert. So werden beispielsweise entsprechend der eingesetzten Hardware unterschiedliche Adressbereiche bei einem und demselbem Befehl genutzt.
Verwendung von Modulen, z.B. Implementierung von Kommunikationsprotokollen gemäß hierarchischen ISO-OSI-Referenzmodell:
Trennung von Anwendungs und Transportschicht.
Erläutern Sie die Bedeutung von Header-Files bei der Programmierung in C! Welche Vorteile können hierdurch erreicht werden?
Die wichtigste Aufgabe der Nutzung von Header-Files bei der Programmierung in C ist die Umsetzung des Geheimhaltungsprinzips. Dabei findet die Implementierung von Funktionen innerhalb der C-Datei statt und die Deklaration im Header-File. Einem Kunden kann später die C-Datei im kompilierten Zustand übergeben werden um so die Implementierung der Funktionalität geheim zu halten. Die Funktionsweise und die benötigten Übergabeparameter werden dem Kunden dann im Header-File bekannt gegeben.
Was ist unter einem Hardware Abstraction Layer (HAL) zu verstehen?
Welche Bestandteile kann eine HAL enthalten?
Folgt eine HAL dem Abstraktions -oder dem Hierarchie- Paradigma des Software Engineering?
Die HAL isoliert die Hardware von den Anwendungsprogrammen. Jeder Zugriff auf die Hardware muss über die Vermittlung der HAL geschehen. Bei der Verwendung eines Betriebssystems ist sie die unterste Schicht des Betriebssystems.
Bestandteile:
Eine HAL folgt dem Abstraktions-Paradigma des Software Engineering.
Welche Funktionen sollten Sie in den Treibern für eine CAN-Schnittstelle zur Verfügung stellen?
Grundlegende Funktionen eines Interfaces: init(), exit(), read(), write()
Erweiterte Funktionen insbesondere bei verbindungsorientierter Kommunikation: wait(), close(), open().
Es gibt in C die beiden folgenden Möglichkeiten, Konstanten zu definieren. #define MWSTFAKTOR 0.19 bzw. const float MwStFaktor = 0.19;
Worin besteht der Unterschied bei diesen beiden Möglichkeiten?
Definition/Unterschied:
#define: im Code wird bei jeder Verwendung der Konstanten diese durch den Präprozessor mit dem Wert, der bei der Definition hinter dem Namen steht, ersetzt. Das heißt, es wird innerhalb des Datensegments bei jedem Aufruf der Wert fest hinterlegt.
const: Es wird eine Variable erzeugt, welche beim Aufruf wie eine normale Variable genutzt wird. Das heißt bei jeder Verwendung der Konstanten wird im Code die Adresse der Variablen hinterlegt. Einziger Unterschied zu einer normalen Variablen ist, dass eine direkte Zuweisung eines neuen Wertes zu einer Fehlermeldung des Compilers führt.
Es gibt in C die beiden folgenden Möglichkeiten, Konstanten zu definieren.
#define MWSTFAKTOR 0.19 bzw. const float MwStFaktor = 0.19;
Wodurch unterscheidet sich insbesondere der kompilierte Code? Stellen Sie die Vorteile, bzw. die Nachteile der beiden Ansätze gegenüber!
Vor- und Nachteile:
Die „#define“ Methode verbraucht weniger Speicher, erlaubt aber auch den schnelleren Zugriff, da direkt aus dem Programmspeicher gelesen wird.
Die const-Variante wird meist so umgesetzt, dass noch einmal auf eine andere Speicherstelle im Flash referenziert wird.
Compileranweisungen sind typsicher, Präprozessoranweisungen sind dies nicht -> Verantwortung des Programmierers
Beschreiben Sie die Typendefinitionen unter Verwendung von einem Include-Guard für eine 32 Bit lange Gleitkommazahl FLOAT32! Im Handbuch des Compilers ist für den gewählten Mikrocontroller folgende Tabelle angegeben:
double 64 Bit
float 32 Bit
unsigned int 16 Bit, big endian
unsigned long int 32 Bit, big endian
char 8 Bit
unsigned char 8 Bit
#ifndef FLOAT32 typedef float FLOAT32 #endif
Erläutern Sie die Funktionsweise eines Include-Guards!
2. Formulierungsvorschlag: Der Include-Guard schützt vor Mehrfachdefinitionen. Dabei wird immer die erste Definition verwendet, alle nachfolgenden werden übersprungen
Wird bei dieser Art des Programmierens der Ansatz der Abstraktion oder der Hierarchie verfolgt?
Erläutern Sie bitte kurz!
- Es gibt keine Hierarchie ohne Abstraktion
- Jede Hierarchie ist gleichzeitig eine Abstraktion
Beim zweiten Kaffee am ersten Morgen sitzt N. Erd gerade bei der Definition eines Funktionsbündels für einen Hardware Abstraction Layer (HAL) für eine USB-Schnittstelle auf einem Mikrocontroller.
Welche Funktionen sollten hierbei mindestens vorhanden sein?
Initialisieren, lesen, schreiben, close.