![]() |
Home | Gallery | Physik | Philosophie | Software | Musik | Kunst | H.Wacker | Links | Inhalt |
![]() ![]() |
![]() |
![]() |
Software | Softwarelinks | Objektorientierung | Homepagebau | Java und Computerkunst | JavaScript | Die Programiersprache C |
Prolog |
![]() |
![]() |
Augusta Ada Byron, Countess of Lovelace
Some programms are elegant, some are exquisite, some are sparkling. My claim is that it is possible to write grand programms, noble programms, truly magnificent ones!
Donald Knuth, 1974 Turing Award Lecture.
Die Programmiersprache Ada |
![]() |
![]() |
Jean Ichbiah war ein französischer Informatiker, der die Programierspache Ada entwickelt hat.
Die Programmiersprache Ada wurde benannt nach: Augusta Ada Byron, Countess of Lovelace.
Ada Lovelace war Mathematikerin und die Tochter des Dichters Lord Byron. Sie arbeitete für Charles Babbage an dessen "Analytical Engine" einer mechanischen Rechenmaschine und machte Vorschläge, zu deren Programmierung. Sie gilt deshalb als die erste Programmiererin.
Die Verwendung der Programmiersprache Ada ist besonders zu empfehlen, bei der Erstellung von großen, langlebigen Softwareprojekten. Bei der Programmiersprache Ada stehen Robustheit der erstellten Programme und Lesbarkeit des Codes im Vordergrund.
Resümee: Ada ist nicht nur eine Programmiersprache sondern ist ein Werkzeugkasten für die Implementierung moderner Software-Engineering Methoden. Nach dem ich über 25 Jahre Erfahrung mit der Entwicklung von Software habe und die verschiedensten Programmiersprachen ausprobiert habe, ist für mich Ada die Programmiersprache.
Für Ada83 war es vorgeschrieben, daß jeder Compiler einmal im Jahr zu validiert ist. Dadurch wurde sichergestellt, daß ein einheitlicher Ada-Standard von jedem Compiler implementiert war.
Dies führte zu einer hohen Portierbarkeit von Ada-Sourcen auf andere Zielsystem. In der Regel reicht eine Neucompilierung der Sourcen aus um wieder ein funktionierendes System zu bekommen. Dieser Zwang zur Validierung des Ada-Compilers wurde für Ada95 aufgehoben. Meine Empfehlung ist nur validierte Ada-Compiler zu verwenden. Dadurch wird sichergestellt, daß der Compiler entsprechend des Ada-Standards implementiert ist. Bei nicht validierten Ada-Compilern soll es vorgekommen sein, daß diese nicht vollständig entsprechend des Ada-Standards implementiert sind. Ein Hinweis noch: Beim Ada95-Standard gibt es einen Kernstandard und "Special Need" Annexe, die in der Regel nicht alle implementiert sind. Vor der Auswahl eines Compilers sollte man sich deshalb überlegen, welche Annexe für das eigene Projekt implementiert sein müssen. Dies gilt insbesondere für die Portierung einer Ada-Application auf ein anderes Zielsystem. Für das saubere Arbeiten einer Multitasking Applikation empfehle ich z.b. die Implementierung des Realtime Annexes. Da dieser ein sauberes Task Scheduling erzwingt (Preemtive Scheduling). Wenn das Ada-Laufzeitsystem mit einem Betriebssystem zusammen arbeitet, so sind Implementierungen zu empfehlen, die Ada-Tasks auf Threats des Betriebssystems abbilden. Dies gilt insbesondere für Implementierungen auf Unix Systemen. Dies stellt sicher, daß nicht das gesamte Ada-Multitaskingsystem zum Stehen kommt, wenn aus einer Ada-Task heraus ein Betriebssystem Aufruf erfolgt.
In mehreren internationalen Standards zur Entwicklung sicherheitsrelevanter Systeme (z.B. IEC 61508, EN 50128 und DO-178B) wird Ada explizit als "highly recommended" geführt! Ada wird deshalb häufig bei sicherheitskritischen Systemen eingesetzt. Ein Beispiel für den Einsatz von Ada in sicherheitskritischen Systemen ist die Software der Boeing 777 die zu 99,9% in Ada geschrieben wurde.
Ada-Code Hallo World |
![]() |
![]() |
with Ada.Text_IO; procedure Hello_World is begin Ada.Text_IO.Put_Line ( "Hallo World!" ); end Hello_World;
Ada-Code Beispiele |
![]() |
![]() |
Das Ein- und Auslesen von Enumeration-Values über ein Terminal ist in Ada möglich. Hier ein Beispiel wie man eine solche Ein-/Ausgabe implementiert.
with Ada.Text_IO, Ada.Exceptions; procedure Enumeration_IO_Example is use Ada.Text_IO, Ada.Exceptions; type Days_Of_the_Week_Type is ( Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, End_of_Days ); Day : Days_Of_the_Week_Type := Monday; -- define a package for the io of the enumeration type. package Day_Name_Io is new Enumeration_Io (Days_Of_the_Week_Type); use Day_Name_Io; begin Put_Line ( "begin Enumeration_IO_Example" ); Put_Line ( " The Programm will run until you enter: End_of_Days!"); New_Line; Put_Line ("Actual Day: " & Days_Of_the_Week_Type'image(Day) ); New_Line; Main : loop -- display all the elements of the enumeration type for index in Days_Of_the_Week_Type'range loop Put ( index ); New_Line; end loop; New_Line; Read_Block : declare Input_Text : String (1 .. 200) := ( others=> ' ' ); Length : Integer := 0; begin Put ("Enter new day: "); -- read the terminal input as string Get_Line (Input_Text, Length); -- convert the string to the enumeration value -- raises exception Constraint_Error, when a conversion is not possible Day := Days_Of_the_Week_Type'Value ( Input_Text (1 .. Length) ); -- display the actual enumeration value on screen Put_Line ( "Actual Day: " & Days_Of_the_Week_Type'image(Day) ); New_Line; exception when Constraint_Error => Put_Line ("Wrong Input!"); New_Line; when others => raise; end Read_Block; exit Main when Day = End_of_Days; end loop Main; Put_line ("end Enumeration_IO_Example"); exception when Error: others => Put_Line ( "Exception_Name: " & Ada.Exceptions.Exception_Name (Error) ); Put_Line ( "Exception_Message: " & Ada.Exceptions.Exception_Message (Error) ); Put_Line ( "Exception_Information: " & Ada.Exceptions.Exception_Information (Error) ); end Enumeration_IO_Example;
$ ./enumeration_io_example.exe begin Enumeration_IO_Example The Programm will run until you enter: End_of_Days! Actual Day: MONDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY END_OF_DAYS Enter new day: FRIDAY Actual Day: FRIDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY END_OF_DAYS Enter new day: asdfdf Wrong Input! MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY END_OF_DAYS Enter new day: END_OF_DAYS Actual Day: END_OF_DAYS end Enumeration_IO_Example
Das obrige Beispiel lässt sich zu einem generischen Paket für die Kommando Ein-/Ausgabe an einem Terminal verallgemeinern.
Die Anwendungsspezifischen Komponenten werden als generische Parameter übergeben.
Dies sind: Ein Aufzählungstype der die einzelnen Kommandos definiert. Und eine Funktion welche die einzelnen Kommandos ausführt.
Nach dem das generische Paket instanziert wurde muss die Anwendung nur noch die Procedure Get_Command aufrufen. Man beachte, das diese solange ausgeführt wird, bis die Funktion Handle_Command den Wert false zurück liefert.
generic -- valid commands, that can be entered through the command line type Command_Type is (<>); -- a function that contains the control logic for the execution of the commands. with function Handle_Command ( Command : in Command_Type ) return boolean; package Command_Line_Generic is procedure Get_Command; end Command_Line_Generic;
Die Teile des Verfahrens, welche sich verallgemeinern lassen, sind im generischen Paket implementiert.
Der generische Teil übernimmt die folgenden Aufgaben:
Als erstes werden alle verfügbaren Kommandos am Bildschirm ausgegeben.
Dann kann der Benutzer eines dieser Kommandos eingeben.
Dieses Kommando wird dann an die Funktion Handle_Command übergeben. Dieser Vorgang wird solange wiederholt bis die Funktion Handle_Command den Wert False zurück liefert.
with Command_Line_Generic; procedure Test_Line_Command is type Command_Type is (Start, Stop); function Handle_Command (Command : in Command_Type) return boolean is begin case Command is when Start => return true; when Stop => return false; end case; end; package Command_Line is new Command_Line_Generic ( Command_Type => Command_Type, Handle_Command => Handle_Command ); begin Command_Line.Get_Command; end Test_Line_Command;
Der package Body ist analog zu Enumeration_IO_Example aufgebaut. Man beachte, um dieses Paket in eine Anwendung einzubauen und seine Funktionalität zu nutzen, muss man nur die Paket-Spezifikation verstehen.
with Ada.Text_io, Ada.Exceptions; package body Command_Line_Generic is use Ada.Text_Io, Ada.Exceptions; package Command_Type_Io is new Enumeration_Io ( Command_Type ); use Command_Type_Io; procedure Get_Command is Command : Command_Type := Command_Type'First; Continue_Reading : boolean := true; begin Main : loop for index in Command_Type'range loop Put ( index ); New_Line; end loop; New_Line; Read_Block : declare Input_Text : String (1 .. 200) := ( others=> ' ' ); Length : Integer := 0; begin Put ( "Enter: " ); Get_Line ( Input_Text, Length ); Command := Command_Type'Value ( Input_Text (1 .. Length) ); Continue_Reading := Handle_Command (Command); exception when Constraint_Error => Put_Line ("Wrong Input!"); New_Line; when others => raise; end Read_Block; exit Main when Continue_Reading = false; end loop Main; exception when Error: others => Put_Line ("Exception_Name: " & Ada.Exceptions.Exception_Name ( Error ) ); Put_Line ("Exception_Message: " & Ada.Exceptions.Exception_Message ( Error ) ); Put_Line ("Exception_Information: " & Ada.Exceptions.Exception_Information ( Error ) ); end Get_Command; end Command_Line_Generic;
Mit der Hilfe des Paketes Command_Line_Generic läßt sich das Beipielprogramm Enumeration_IO_Example nachbauen. Dabei sind die Kommandos in dem Aufzählungstypen Days_Of_the_Week_Type definiert. Die eingelesenen Kommandos werden dann von der Funktion Day_Controller bearbeitet. Will man weitere Kommandos einfügen, so ist der Aufzählungstype zu erweitern und die Behandlung des entsprechenden Kommandos ist in der Funktion Day_Controller einzufügen.
with Ada.Text_io, Ada.Exceptions, Command_LIne_Generic; procedure Test_Generic_Example is use Ada.Text_Io, Ada.Exceptions; type Days_Of_the_Week_Type is ( Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, End_of_Days ); function Day_Controller ( Day : Days_of_the_Week_Type ) return boolean is begin Put_Line ( "Day: " & Days_of_the_Week_Type'image (Day) ); New_Line; case Day is when End_of_Days => return false; when others => return true; end case; end Day_Controller; package Days_Of_The_Week_Handler is new Command_Line_Generic ( Command_Type => Days_Of_the_Week_Type, Handle_Command => Day_Controller ); begin Put_Line ( "begin Test_Generic_Example" ); Days_of_the_Week_Handler.Get_Command; Put_Line ( "end Test_Generic_Example" ); end Test_Generic_Example;
Der GNAT Ada-Compiler |
![]() |
![]() |
GNAT ist der Ada-Compiler des GNU-Projektes. Der Compiler wird unter den Bedingungen der GNU General Public License (GPL) vertrieben. Für private Zwecke, hat man damit die Möglichkeit einen kostenlosen Ada-Compiler zu bekommen. Wenn man die GNU-Toolchain auf seinem Computer installiert hat, ist dadurch in der Regel auch ein Ada-Compiler vorhanden.
GNAT Ada-Compiler Download
Hat man den GNAT Ada-Compiler zur Verfügung und will diesen zum erzeugen eines ausführbaren Ada-Programms
verwenden, so speichert man das "Hello World" Programm in einem File mit dem Namen hello_world.adb ab.
In der Kommandline Version des GNAT Ada_Compilers, kann man mit dem folgenden Kommando ein ausführbares Programm erzeugen:
Es sollte dann ein ausführbares Programm mit dem Namen hello_world.exe vorhanden sein.
Durch den Aufruf ./hello_word.exe wir das Programm gestartet und schreibt den Text: Hallo World! in die Konsole
Die einzelnen Schritte, die gnatmake durchführt kann man auch einzeln aufrufen:
Zusammen mit der GNAT-Software wird aktuell GPS installiert. GPS (GNAT Programming Studio) ist eine integrierte Sofwareentwicklungsumgebung, mit der man Ada-Software entwickeln kann. Für meine aktuellen Ada-Projekte verwende ich GPS.
Ada-Links |
![]() |
![]() |
Es gibt ein Wiki Diskussionsforum zu den Wacker Art Software-Seiten. Beiträge sind willkommen. Eine Wiki Seite, ist eine Internetseite, die der Besucher selber Online ändern kann.
Ada Seite im DSEWiki
Programiersprache Ada deutsche Wikipediaseite
Ada Programming Language englische Wikipediaseite
Ada Home: the Home of the Brave Ada Programmers
Ada Information Clearinghouse
SIGAda The Special Interest Group on Ada
AdaBasis Bibliothek mit Ada Software-Komponenten
The Big_Number Page
AWS - Ada Web Server
Ada Europe
Ada Belgium
Ada Deutschland
Ada France
Ada Spain
Ada Switzerland
Ada 2005 Reference Manual
Rational for Ada 2005
Ada 95 Reference Manual
Ada 95 Rationale
Rendezvous mit Ada Eine echtzeitige Annäherung
Browsable Ada 95 Syntax Diagrams
Ada 95 Lovelace Tutorial
Ada in Action
Information for New Ada95 Programmers
Babbage die nächste Sprache
The GNAT Book
![]() |
Home | Gallery | Physik | Philosophie | Software | Musik | Kunst | H.Wacker | Links | Inhalt |
![]() ![]() |
![]() |
![]() |
Software | Softwarelinks | Objektorientierung | Homepagebau | Java und Computerkunst | JavaScript | Die Programiersprache C |