„Codegenerator“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
Aka (Diskussion | Beiträge) K doppelten Link entfernt |
wikilink korr |
||
(32 dazwischenliegende Versionen von 13 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Ein '''Codegenerator''' ist ein [[Computerprogramm]] für die [[Softwareentwicklung]]. Er übersetzt Modelle, die in [[Unified Modeling Language|UML]], [[Extensible Markup Language|XML]], [[Nassi-Shneiderman-Diagramm|Struktogrammen]], [[Entscheidungstabelle]]n oder einer anderen [[Formale Sprache|formalen Sprache]] erstellt wurden, in eine [[Programmiersprache]] ([[C (Programmiersprache)|C]], [[C++]], [[Assemblersprache|Assembler]], …) der gewählten Zielplattform. Er erzeugt |
Ein '''Codegenerator''' ist ein [[Computerprogramm]] für die [[Softwareentwicklung]]. Er übersetzt Modelle, die in [[Unified Modeling Language|UML]], [[Extensible Markup Language|XML]], [[Nassi-Shneiderman-Diagramm|Struktogrammen]], [[Entscheidungstabelle]]n oder einer anderen [[Formale Sprache|formalen Sprache]] erstellt wurden, in eine [[Programmiersprache]] ([[C (Programmiersprache)|C]], [[C++]], [[Assemblersprache|Assembler]], …) der gewählten Zielplattform. Er erzeugt [[Quellcode]] (Codegenerierung), der danach mit anderen Programmteilen zu einem Programm verbunden wird. |
||
Das Erzeugnis eines Codegenerators wird (wenn auch selten) als Generat bezeichnet. |
Das Erzeugnis eines Codegenerators wird (wenn auch selten) als Generat bezeichnet. |
||
Zeile 5: | Zeile 5: | ||
Im [[Compilerbau]] ist der Codegenerator der Teil eines [[Compiler]]s, der während des [[Kompilierung|Kompiliervorgangs]] [[Maschinencode]] erzeugt. |
Im [[Compilerbau]] ist der Codegenerator der Teil eines [[Compiler]]s, der während des [[Kompilierung|Kompiliervorgangs]] [[Maschinencode]] erzeugt. |
||
⚫ | |||
Die Steuerung eines Codegenerators erfolgt dabei entweder manuell, also direkt durch den Programmierer, oder automatisiert über eine spezielle formale Sprache, die die Formulierung des Problems im Vergleich zur Zielsprache stark vereinfacht. |
|||
{{Belege fehlen|1=Aus dem komplett unbelegten Artikel [[Special:PermanentLink/190825839?title=Codegenerierung|Codegenerierung]] übernommen. Insbesondere, dass Codegeneratoren auch als "Softwaregeneratoren" bezeichnet werden, ist zweifelhaft (vgl. [[WP:Löschkandidaten/28. Juli 2019#Softwaregenerator]].)}} |
|||
Ein Softwaregenerator oder auch Codegenerator ist ein Stück Software, das über eine problemangepasste Beschreibungssprache Quellcode für komplexere [[Software]] erzeugt. Diese Beschreibung kann ein grafisches oder textuelles Modell sein. Er ist somit ein Hilfsmittel zur Effektivierung des Softwareentwicklungsprozesses. Ein Beispiel sind Generatoren, die aus der Beschreibungssprache UML komplette Klassenhierarchien in der gewünschten objektorientierte Zielsprache (z. B.: C++, [[Java (Programmiersprache)|Java]]) erzeugen. Der aus dem Codegenerator erzeugte Quellcode dient in diesem Falle als [[Schnittstelle]] für einen Nutzer, wohingegen das Diagramm ein [[Metamodell]] definiert. |
|||
Modellgetriebene Codegenerierung aus UML wird schon 2004 für [[Eingebettetes System|eingebettete Systeme]] beschrieben.<ref>{{Literatur |Autor=Daniel Witsch, Birgit Vogel-Heuser |Titel=Automatische Codegenerierung aus der UML für die IEC 61131-3 |Sammelwerk=Eingebettete Systeme |Verlag=Springer Berlin Heidelberg |Ort=Berlin, Heidelberg |Datum=2004 |ISBN=978-3-540-23424-1 |Seiten=9–18 |Online=https://link.springer.com/chapter/10.1007%2F978-3-642-18594-6_2 |Abruf=2019-08-16 |DOI=10.1007/978-3-642-18594-6_2}}</ref> Die Erzeugung von Coderahmen wird seit mindestens 2012 als Stand der Technik gesehen. Hierbei werden Klassen mit Attributen und Funktionen generiert. Offen bleibt hierbei der Umgang mit [[Round-Trip-Engineering]], weil Coderümpfe und Visualisierung vermengt werden.<ref name="rumpe2012">{{Literatur |Autor=Bernhard Rumpe |Titel=Agile Modellierung mit UML |Reihe=Xpert.press |Verlag=Springer Berlin Heidelberg |Ort=Berlin, Heidelberg |Datum=2012 |ISBN=978-3-642-22429-4 |Online=https://link.springer.com/book/10.1007%2F978-3-642-22430-0 |Abruf=2019-08-16 |DOI=10.1007/978-3-642-22430-0}}</ref> |
|||
== Automatisierte Codegeneratoren == |
== Automatisierte Codegeneratoren == |
||
Einfache Varianten arbeiten auf der Basis der Quelldateien und ersetzen so genannte [[Makro]]aufrufe mit vorgefertigten Textbausteinen. Der [[Präprozessor]] ist hierfür ein Beispiel. Andere Varianten generieren vollständig |
Einfache Varianten arbeiten auf der Basis der Quelldateien und ersetzen so genannte [[Makro]]aufrufe mit vorgefertigten Textbausteinen. Der [[Präprozessor]] ist hierfür ein Beispiel. Andere Varianten generieren vollständig neuen Quellcode, indem sie Metainformationen verarbeiten. Metainformationen beschreiben den Vorgang der Codeerzeugung sowie Eigenschaften des zu erstellenden Programmcodes auf einer höheren Ebene (siehe auch [[modellgetriebene Architektur]]) und liegen entweder in separaten Dateien (wie beispielsweise beim [[Parsergenerator]]) oder in Form von Anmerkungen (auch: Attribute, Annotationen) innerhalb des bestehenden Programmcodes vor. Der generierte Code wird, anders als bei manuell gesteuerten Codegeneratoren, vor oder während des Kompiliervorgangs automatisch erzeugt. Die Programmiersprachen [[C-Sharp|C#]] und Java bieten eigene Sprachkonstrukte dafür an (sogenannte [[Annotation (Programmierung)|Annotationen]]). |
||
== Beispiele == |
|||
⚫ | |||
{{Belege fehlen|1=Aus dem komplett unbelegten Artikel [[Special:PermanentLink/190825839?title=Codegenerierung|Codegenerierung]] übernommen. Einige Beispiele sehen ziemlich nach [[WP:Theoriefindung]] aus: Klar ''kann'' man Dekompilierung bzw. den letzten Schritt davon als Codegenerierung bezeichnen. Aber ist das so üblich?}} |
|||
Beispiele für die Codegenerierung sind: |
|||
Manuell gesteuerte Codegeneratoren sind Teil einer [[integrierte Entwicklungsumgebung|integrierten Entwicklungsumgebung]] (IDE) oder eines [[Computer-Aided Software Engineering|CASE]]-Werkzeugs. Häufig sind sie über eine [[grafische Benutzeroberfläche]] (GUI) bedienbar. Der Programmierer kann dabei seinen Programmcode interaktiv, und zwar entweder ausschließlich durch Nutzung des Codegenerators oder ergänzt durch manuelle [[Programmierung]], zusammensetzen. Neben der reinen Codegenerierung bieten manche Codegeneratoren [[Round-Trip-Engineering]]-Funktionen d.h. das Einlesen und eine zusammengefasste grafische Darstellung des manuell erstellten sowie des generierten Programmcodes an. |
|||
* Die Erzeugung eines Quelltextes aus einem Diagramm, einem Modell, beispielsweise einem [[Programmablaufplan]], einem Struktogramm oder einem UML-[[Modell]], oder aus sonstigen in [[Metadaten]] gespeicherten Beschreibungen, um den Kosten- und Zeitaufwand zu senken oder die Qualität der Softwareentwicklung zu erhöhen, [[Universal Application]] und [[Computer-aided software engineering|CASE]] |
|||
* [[Assembler (Informatik)|Assembler]], welche aus Assemblercode Maschinencode erzeugen |
|||
* Compiler, welche aus Code in einer Hochsprache Assembler-Code, Maschinencode oder [[Bytecode]] erzeugen |
|||
* Die Wiederherstellung eines Quelltextes aus dem übersetzten Programm mittels [[Reverse Engineering]] |
|||
* Die automatische Erzeugung aus vorhandenem Code oder vorhandenen Programmteilen, beispielsweise die Erstellung einer [[Schnittstellenbeschreibungssprache|IDL]]-Schnittstelle aus einer Java-Schnittstelle |
|||
* Die Erzeugung der Implementierung einer abstrakten Beschreibung beispielsweise bei [[Anwendungsserver|Application-Server]]-[[Framework]]s wie [[Java Platform, Enterprise Edition|J2EE]] |
|||
* Die automatische Erzeugung neuer Quelltexte aus Kommentaren und Anmerkungen ([[Metadaten]]) in bestehenden Quelltexten, beispielsweise in Java mittels [[XDoclet]] oder Annotationen |
|||
* Im Bereich [[Eingebettetes System|eingebetteter Systeme]] (z. B. Fahrzeugsteuergeräte) die automatische Erzeugung von Seriencode mit einem Codegenerator |
|||
== Werkzeuge == |
== Werkzeuge == |
||
⚫ | |||
* [[Actifsource]] |
|||
⚫ | |||
* [[CAMeL-View TestRig]] (Entwurfsumgebung zum modellbasierten Entwurf mechatronischer Systeme) |
* [[CAMeL-View TestRig]] (Entwurfsumgebung zum modellbasierten Entwurf mechatronischer Systeme) |
||
* [[Eclipse Modeling Framework]] |
* [[Eclipse Modeling Framework]] |
||
* [[openArchitectureWare]] |
* [[openArchitectureWare]] |
||
* [[Simulink]] [[Hardwarebeschreibungssprache|HDL]] Coder (erzeugt VHDL/Verilog aus Basis von [[Matlab|MATLAB]]/Simulink/[[Stateflow]]) |
* [[Simulink]] [[Hardwarebeschreibungssprache|HDL]] Coder (erzeugt VHDL/Verilog aus Basis von [[Matlab|MATLAB]]/Simulink/[[Stateflow]]) |
||
* [[sinelaboreRT]] Zur Erzeugung von C-Code aus UML Zustandsdiagrammen |
|||
* [[TargetLink]] (auf Basis von [[Matlab|MATLAB]]/[[Simulink]]) |
* [[TargetLink]] (auf Basis von [[Matlab|MATLAB]]/[[Simulink]]) |
||
* Scriptcase, PHP/MySQL basierender Codegenerator |
|||
* [[Innovator (Software)|Innovator]] |
* [[Innovator (Software)|Innovator]] |
||
* [[Yakindu Statechart Tools]] (generiert C/C++ aus Zustandsautomaten) |
|||
== Siehe auch == |
== Siehe auch == |
||
* [[Generative Programmierung]] |
* [[Generative Programmierung]] |
||
* [[Modellgetriebene Softwareentwicklung]] |
* [[Modellgetriebene Softwareentwicklung]] |
||
* [[Domänenspezifische Sprache]] |
* [[Domänenspezifische Sprache]] |
||
* [[Normierte Programmierung]] |
* [[Normierte Programmierung]] |
||
Zeile 36: | Zeile 46: | ||
== Literatur == |
== Literatur == |
||
* {{Literatur |
|||
⚫ | |||
|Autor=Krzysztof Czarnecki and Ulrich W. Eisenecker |
|||
*{{Literatur |Autor=Thomas Stahl, Markus Völter, Sven Efftinge|Titel=Modellgetriebene Softwareentwicklung. Techniken, Engineering, Management |Auflage=2. |Verlag=Dpunkt Verlag |Ort= |Monat=Mai| Jahr=2007 |ISBN=978-3898644488}} |
|||
⚫ | |||
⚫ | |||
|Verlag=Addison-Wesley |
|||
|Datum=2000}} |
|||
* {{Literatur |
|||
|Autor=Thomas Stahl, Markus Völter, Sven Efftinge |
|||
|Titel=Modellgetriebene Softwareentwicklung. Techniken, Engineering, Management |
|||
|Auflage=2. |
|||
|Verlag=Dpunkt Verlag |
|||
|Ort= |
|||
|Datum=2007 |
|||
|ISBN=978-3-89864-448-8}} |
|||
⚫ | |||
== Weblinks == |
|||
⚫ | |||
{{Wiktionary|Generator}} |
|||
== Einzelnachweise == |
|||
[[en:Source code generation]] |
|||
<references /> |
|||
⚫ |
Aktuelle Version vom 29. November 2024, 13:05 Uhr
Ein Codegenerator ist ein Computerprogramm für die Softwareentwicklung. Er übersetzt Modelle, die in UML, XML, Struktogrammen, Entscheidungstabellen oder einer anderen formalen Sprache erstellt wurden, in eine Programmiersprache (C, C++, Assembler, …) der gewählten Zielplattform. Er erzeugt Quellcode (Codegenerierung), der danach mit anderen Programmteilen zu einem Programm verbunden wird.
Das Erzeugnis eines Codegenerators wird (wenn auch selten) als Generat bezeichnet.
Im Compilerbau ist der Codegenerator der Teil eines Compilers, der während des Kompiliervorgangs Maschinencode erzeugt.
Modellgetriebene Codegeneratoren
[Bearbeiten | Quelltext bearbeiten]Ein Softwaregenerator oder auch Codegenerator ist ein Stück Software, das über eine problemangepasste Beschreibungssprache Quellcode für komplexere Software erzeugt. Diese Beschreibung kann ein grafisches oder textuelles Modell sein. Er ist somit ein Hilfsmittel zur Effektivierung des Softwareentwicklungsprozesses. Ein Beispiel sind Generatoren, die aus der Beschreibungssprache UML komplette Klassenhierarchien in der gewünschten objektorientierte Zielsprache (z. B.: C++, Java) erzeugen. Der aus dem Codegenerator erzeugte Quellcode dient in diesem Falle als Schnittstelle für einen Nutzer, wohingegen das Diagramm ein Metamodell definiert.
Modellgetriebene Codegenerierung aus UML wird schon 2004 für eingebettete Systeme beschrieben.[1] Die Erzeugung von Coderahmen wird seit mindestens 2012 als Stand der Technik gesehen. Hierbei werden Klassen mit Attributen und Funktionen generiert. Offen bleibt hierbei der Umgang mit Round-Trip-Engineering, weil Coderümpfe und Visualisierung vermengt werden.[2]
Automatisierte Codegeneratoren
[Bearbeiten | Quelltext bearbeiten]Einfache Varianten arbeiten auf der Basis der Quelldateien und ersetzen so genannte Makroaufrufe mit vorgefertigten Textbausteinen. Der Präprozessor ist hierfür ein Beispiel. Andere Varianten generieren vollständig neuen Quellcode, indem sie Metainformationen verarbeiten. Metainformationen beschreiben den Vorgang der Codeerzeugung sowie Eigenschaften des zu erstellenden Programmcodes auf einer höheren Ebene (siehe auch modellgetriebene Architektur) und liegen entweder in separaten Dateien (wie beispielsweise beim Parsergenerator) oder in Form von Anmerkungen (auch: Attribute, Annotationen) innerhalb des bestehenden Programmcodes vor. Der generierte Code wird, anders als bei manuell gesteuerten Codegeneratoren, vor oder während des Kompiliervorgangs automatisch erzeugt. Die Programmiersprachen C# und Java bieten eigene Sprachkonstrukte dafür an (sogenannte Annotationen).
Beispiele
[Bearbeiten | Quelltext bearbeiten]Beispiele für die Codegenerierung sind:
- Die Erzeugung eines Quelltextes aus einem Diagramm, einem Modell, beispielsweise einem Programmablaufplan, einem Struktogramm oder einem UML-Modell, oder aus sonstigen in Metadaten gespeicherten Beschreibungen, um den Kosten- und Zeitaufwand zu senken oder die Qualität der Softwareentwicklung zu erhöhen, Universal Application und CASE
- Assembler, welche aus Assemblercode Maschinencode erzeugen
- Compiler, welche aus Code in einer Hochsprache Assembler-Code, Maschinencode oder Bytecode erzeugen
- Die Wiederherstellung eines Quelltextes aus dem übersetzten Programm mittels Reverse Engineering
- Die automatische Erzeugung aus vorhandenem Code oder vorhandenen Programmteilen, beispielsweise die Erstellung einer IDL-Schnittstelle aus einer Java-Schnittstelle
- Die Erzeugung der Implementierung einer abstrakten Beschreibung beispielsweise bei Application-Server-Frameworks wie J2EE
- Die automatische Erzeugung neuer Quelltexte aus Kommentaren und Anmerkungen (Metadaten) in bestehenden Quelltexten, beispielsweise in Java mittels XDoclet oder Annotationen
- Im Bereich eingebetteter Systeme (z. B. Fahrzeugsteuergeräte) die automatische Erzeugung von Seriencode mit einem Codegenerator
Werkzeuge
[Bearbeiten | Quelltext bearbeiten]- ASCET-SE (auf Basis der automotive ASCET-Toolfamilie zur Funktionsentwicklung und Software Engineering)
- CAMeL-View TestRig (Entwurfsumgebung zum modellbasierten Entwurf mechatronischer Systeme)
- Eclipse Modeling Framework
- openArchitectureWare
- Simulink HDL Coder (erzeugt VHDL/Verilog aus Basis von MATLAB/Simulink/Stateflow)
- TargetLink (auf Basis von MATLAB/Simulink)
- Innovator
- Yakindu Statechart Tools (generiert C/C++ aus Zustandsautomaten)
Siehe auch
[Bearbeiten | Quelltext bearbeiten]- Generative Programmierung
- Modellgetriebene Softwareentwicklung
- Domänenspezifische Sprache
- Normierte Programmierung
- Makro
- UML-Werkzeug, manche UML-Werkzeuge besitzen Codegenerator-Funktionalität
Literatur
[Bearbeiten | Quelltext bearbeiten]- Krzysztof Czarnecki and Ulrich W. Eisenecker: Generative Programming: Methods, Tools, and Applications. Addison-Wesley, 2000.
- Thomas Stahl, Markus Völter, Sven Efftinge: Modellgetriebene Softwareentwicklung. Techniken, Engineering, Management. 2. Auflage. Dpunkt Verlag, 2007, ISBN 978-3-89864-448-8.
- Georg Pietrek, Jens Trompeter (Hrsg.), Modellgetriebene Softwareentwicklung. MDA und MDSD in der Praxis, Entwickler-Press, gebundene Ausgabe, ISBN 978-3-939084-11-2.
Weblinks
[Bearbeiten | Quelltext bearbeiten]Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ Daniel Witsch, Birgit Vogel-Heuser: Automatische Codegenerierung aus der UML für die IEC 61131-3. In: Eingebettete Systeme. Springer Berlin Heidelberg, Berlin, Heidelberg 2004, ISBN 978-3-540-23424-1, S. 9–18, doi:10.1007/978-3-642-18594-6_2 (springer.com [abgerufen am 16. August 2019]).
- ↑ Bernhard Rumpe: Agile Modellierung mit UML (= Xpert.press). Springer Berlin Heidelberg, Berlin, Heidelberg 2012, ISBN 978-3-642-22429-4, doi:10.1007/978-3-642-22430-0 (springer.com [abgerufen am 16. August 2019]).