Diss.-ETH 12317 Diss.-ETH 12317 Diss.-ETH 12317 Diss.-E Eine ...
Diss.-ETH 12317 Diss.-ETH 12317 Diss.-ETH 12317 Diss.-E Eine ...
Diss.-ETH 12317 Diss.-ETH 12317 Diss.-ETH 12317 Diss.-E Eine ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
5.4. IMPLEMENTATION 91<br />
• interpretierte Sprache<br />
• vereinfacht symbolische Ausdrücke<br />
• differenziert symbolische Ausdrücke<br />
• generiert C-Quelltext<br />
Neben der symbolischen Umformung von Funktionen und deren Ableitungen<br />
bietet es komfortable Möglichkeiten, Zeichenketten zu bilden<br />
und mathematische Ausdrücke in die Programmiersprache des<br />
Frameworks (C++) zu übersetzen. Dies sind Eigenschaften, die bei<br />
der Code-Generierung in den Adaptionselementen sehr nützlich sind.<br />
Maple erlaubt ferner, Prozeduren zu definieren, diese in Bibliotheken<br />
abzuspeichern, und in einfacher Weise wiederaufzufinden. Dank<br />
der Kombination all dieser Eigenschaften eignet sich Maple für das<br />
gesamte Preprocessing des Frameworks.<br />
2. Die laufzeitintensive Berechnung der Matrizen- und Vektorelemente<br />
erfolgt wenn immer möglich über private Variable der Baustein-Objekte.<br />
Dies ist bei den Ntoren immer der Fall, bei den Summengebern<br />
aber prinzipiell nicht. Summengeber greifen über die in Abbildung<br />
4.5 dargestellte, mehrstufige Adressierung auf die Variable in den<br />
Ntoren zu. Andererseits ist bei den Summengebern die Berechnung<br />
der Terme einfacher, da nur einfache Summen vorkommen.<br />
Die Berechnung ist beim Zugriff direkt über Symboladdressen effektiver.<br />
Die Symboladressen werden bereits zur Übersetzungszeit<br />
vom Kompiler berechnet. <strong>Eine</strong> wichtige Konsequenz des Ansatzes<br />
ist, dass konkrete Baustein-Typen, z.B. ein Transformator-Ntor oder<br />
ein Kirchhoff-Summengeber immer durch konkrete, zur Übersetzungszeit<br />
bekannte Klassen realisiert werden. Ein Klassenkonstruktor<br />
wird zur Programmlaufzeit generell nur ein einziges Mal aufgerufen,<br />
um ein Baustein-Objekt zu erzeugen. In diesem einzigen Aufruf<br />
müssen dann die über alle Dienste benötigten lokalen Variablen und<br />
Übergabeparameter vom Klienten im Baustein-Konstruktor akkumuliert<br />
werden, damit bei der Instantiierung alle benötigten lokalen Variablen<br />
vorhanden sind und initialisiert werden können.<br />
Die Elemente der DA und der Adaptionsprozess beeinflussen sich bei<br />
der Implementation der DA gegenseitig.<br />
Die Einzelteile lassen sich daher im Kontext des Adaptionsprozesses<br />
von Abbildung 5.3 besser verstehen. Die Symbolbeschreibung in Unter-<br />
<strong>Diss</strong>.-<strong>ETH</strong> <strong>12317</strong> <strong>Diss</strong>.-<strong>ETH</strong> <strong>12317</strong> <strong>Diss</strong>.-<strong>ETH</strong> <strong>12317</strong> <strong>Diss</strong>.-E