Exportieren (0) Drucken
Alle erweitern
Erweitern Minimieren

COBOL für das Microsoft .NET Framework

Veröffentlicht: 07. Sep 2000 | Aktualisiert: 14. Jun 2004
Von Basim Kadhim

Dieser Artikel beschreibt die Unterstützung der Fujitsu Software Corporation für das Microsoft .NET Framework, das die erweiterte Interoperabilität mit COBOL (Common Business Oriented Language; problem- und prozessorientierte Programmsprache) ermöglicht.

Auf dieser Seite

 Einführung
 COBOL im Web
 ASP+ (language="COBOL")
 Webdienste: Programmierfähiges Web
 Frameworks und Spracheninteroperabilität
 Migrieren von COBOL-Code in das Microsoft .NET Framework
 Die COBOL-Vision
 Spracherweiterungen
 Codegenerierung
 ASP+-Unterstützung
 Die Zukunft von COBOL

Einführung

Sicher haben Sie etwas von der ganzen Aufregung rund um das Microsoft .NET Framework mitbekommen. In dieser Aufregung schwangen auch Ankündigungen von einer Vielzahl an Sprachanbietern mit, die neue Initiative unterstützen zu wollen. Es stellen sich folgende Fragen: "Warum ist Microsoft daran interessiert, die neue Umgebung durch so viele Sprachen unterstützen lassen zu wollen? Warum sich mit einer so alten Sprache wie COBOL herumärgern müssen?" Die Antwort darauf heißt: Weil Microsoft erkannt hat, dass die meisten Unternehmen nicht über den Luxus verfügen, ihre große Codebasis neu schreiben zu lassen, wenn sie den Einsatz ihrer vorhandenen Anwendungen erweitern möchten.

Indem die Fujitsu Software das neue Microsoft .NET Framework unterstützt, billigen wir als Firma die Philosophie von Microsoft, dass Programmierer die Programmiersprache benötigen, die sich am besten für ihre Anwendung eignet, und diese auch verwenden dürfen. Circa 70 Prozent aller Anwendungen im Produktionsgewerbe sind in COBOL geschrieben. Solche Anwendungen zu erweitern bedeutet nicht, COBOL aus den Prozessen zu eliminieren, sondern Wege zu finden, wie diese Programmiersprache neue Funktionen ausüben kann.

Mit dieser Unterstützung steigert Fujitsu Software die Produktivität von Unternehmen, die COBOL verwenden. COBOL-Programmierer werden nicht nur in der Lage sein, auf eine Vielzahl neuer Technologien zuzugreifen – darunter auch .NET-Klassenbibliotheken und ASP+ –, sondern sie lernen auch, mit anderen Entwicklern zusammenzuarbeiten, die Code in Sprachen wie C++ und Visual Basic schreiben. Anstatt in einem Entwicklungsunternehmen die Spaltung in COBOL-Programmierer und andere Programmierer vornehmen zu müssen, können die Programmierer im Unternehmen grenzübergreifend arbeiten und gemeinsame Programmierschnittstellen und -tools verwenden.

In diesem Artikel werden einige der wichtigen Anwendungen dieser Technologie für COBOL beschrieben und Voraussetzungen genannt, die ein Anbieter einer Programmiersprache wie Fujitsu Software mitbringen muss, um diese neue Vision in die Praxis umzusetzen.

COBOL im Web

Mit dem ständig zunehmenden Geschäftsverkehr im Internet stellen sich die Unternehmen in aller Welt die Frage, wie sie von den neuen ungeheuren Geschäftsmöglichkeiten profitieren können. Unternehmen mit starker COBOL-Ausprägung sind davon sehr betroffen, da die Mehrzahl ihrer Anwendungen lange bevor der Existenz des Webs und damit des Geschäftsphänomens dieser Tage erstellt wurden. Diese Unternehmen machen jetzt die Erfahrung, dass die Umschulung ihres Personals auf andere Programmiersprachen und die Neuausrüstung ihrer Anwendungen mit Webtools eine entmutigende Aufgabe ist. COBOL-Anbieter wie Fujitsu haben bereits eine Reihe von Lösungen für das Migrieren von COBOL-Anwendungen in Webformat verkauft. Fujitsus Unterstützung für das .NET Framework baut auf dieser Position auf und geht sogar noch einen Schritt weiter, indem es COBOL-Programmierern ermöglicht wird, direkt auf Webebene zu programmieren und einfach den vorhandenen Legacycode zu verwenden.

ASP+ (language="COBOL")

ASP+ ist das Folgeprodukt von Microsoft für Active Server Pages (ASP), das für die Bereitstellung von dynamischem Webinhalt konzipiert wurde. In den Bereichen Leistung und Programmierbarkeit wies ASP eine Reihe von Schwachstellen auf. ASP+ zeigt in diesen Bereichen wesentliche Verbesserungen. Anstatt als ASP interpretiert zu werden, werden ASP+-Seiten zu systemeigenem Code kompiliert. Diese Änderung bringt enorme Leistungsvorteile und erzeugt nur einmalige Kosten, nämlich dann, wenn die Seite bei der erstmaligen Bereitstellung kompiliert wird. Der zweite wichtige Nebeneffekt der Wahl, die Seiten zu interpretieren anstatt zu kompilieren, besteht darin, dass so die Tür für kompilierte Sprachen offen steht, Code in ASP+-Seiten bereitzustellen.

Fujitsu COBOL nutzt diesen immensen Vorteil, indem es COBOL-Programmierern ermöglicht, COBOL-Code in ASP+-Seiten einzubetten. Das folgende Beispiel zeigt eine ASP+-Seite, die in COBOL geschrieben wurde und den Text "Hallo COBOL-Welt!" in zunehmenden Schriftgrößen anzeigt:

<%@ page language="COBOL" %> 
<script runat="server"> 
       OBJECT. 
       DATA DIVISION. 
       WORKING-STORAGE SECTION. 
       77 FONT-SIZE PIC S9(9) COMP-5. 
       END OBJECT. 
</script> 
<% PERFORM VARYING FONT-SIZE FROM 1 BY 1 UNTIL FONT-SIZE > 7 %> 
<font size="<%=FONT-SIZE%>"> Hallo COBOL-Welt! </font> <br> 
<% END-PERFORM. %>

Die Zeichen <%@ leiten eine Direktive ein, die es uns ermöglicht, die Programmiersprache für die Seite auf COBOL zu setzen. Mit dem <script>-Block können wir COBOL-Code einführen, der die FONT-SIZE-Variable deklariert. Mit den Zeichen <% können wir außerdem Inline-COBOL-Code einsetzen, der eine Schleife in der HTML durchführt, die den Text "Hallo COBOL-Welt!" anzeigt.

ASP+ macht die Programmierung von interaktivem Inhalt auch wesentlich leichter, indem Standard-HTML-Elemente als Steuerelemente offen gelegt werden und es den Programmierern gestattet wird, neue Steuerelemente zu erstellen. Dieser Steuerelementtyp erhielt im .NET Framework den Namen Web Forms. Im folgenden Beispiel wird die Verwendung mehrerer Web Forms-Steuerelemente in einer Anwendung gezeigt, die das Bild einer Frucht basierend auf dem in einem Dropdownfeld angegebenen Fruchtnamen anzeigt.

<html> 
<head> 
    <script runat="server" language="COBOL"> 
       ENVIRONMENT DIVISION. 
       CONFIGURATION SECTION. 
       REPOSITORY. 
           PROPERTY SELECT-VALUE AS "Value" 
           PROPERTY IMAGE-SRC AS "Src" 
           PROPERTY SPAN-VALUE AS "InnerHtml" 
           CLASS STRING-BUILDER AS "System.Text.StringBuilder" 
           CLASS SYS-STRING AS "System.String" 
           CLASS SYS-OBJECT AS "System.Object" 
           CLASS EVENTARGS AS "System.EventArgs". 
       OBJECT. 
       METHOD-ID. FRUITLIST-CLICK. 
       DATA DIVISION. 
       WORKING-STORAGE SECTION. 
       77 IMAGE-FILE-BUILDER OBJECT REFERENCE STRING-BUILDER. 
       77 IMAGE-FILE-STR OBJECT REFERENCE SYS-STRING. 
       LINKAGE SECTION. 
       77 EVENT-SOURCE OBJECT REFERENCE SYS-OBJECT. 
       77 EVENT OBJECT REFERENCE EVENTARGS. 
       PROCEDURE DIVISION USING BY VALUE EVENT-SOURCE EVENT. 
            MOVE SELECT-VALUE OF FRUITLIST TO SPAN-VALUE OF FRUITNAME. 
            INVOKE STRING-BUILDER "NEW" USING BY VALUE "images/" 
                RETURNING IMAGE-FILE-BUILDER. 
            INVOKE IMAGE-FILE-BUILDER "Append" 
                USING BY VALUE SELECT-VALUE OF FRUITLIST 
                RETURNING IMAGE-FILE-BUILDER. 
            INVOKE IMAGE-FILE-BUILDER "Append" USING BY VALUE ".jpg" 
                RETURNING IMAGE-FILE-BUILDER. 
            INVOKE IMAGE-FILE-BUILDER "ToString" 
                RETURNING IMAGE-FILE-STR. 
            MOVE IMAGE-FILE-STR TO IMAGE-SRC OF FRUITIMAGE. 
       END METHOD FRUITLIST-CLICK. 
       END OBJECT. 
    </script> 
</head> 
<body> 
<form runat="server"> 
    <font face="Verdana"> 
    <b>Bitte wählen Sie eine Frucht: </b> 
    <select id="FRUITLIST" runat="server" size="1"> 
        <option value="Orange">Orange</option> 
        <option value="Apfel">Apfel</option> 
        <option value="Mango">Mango</option> 
        <option value="Pfirsich">Pfirsich</option> 
        <option value="Banane">Banane</option> 
    </select> 
    <input type="submit" value="submit" runat="server" OnServerClick="FRUITLIST-CLICK">     
    <p> 
    <table> 
      <tr> 
        <td> 
          <img id="FRUITIMAGE" src="images\blank.gif" runat="server" /> 
        </td> 
        <td> 
          <font face="Verdana" size=6> 
            <span id="FRUITNAME" runat="server"/> 
          </font> 
        </td> 
      </tr> 
    </table> 
    </font> 
</form> 
</body> 
</html>

Der <form>-Tag-Block umgibt das Web Forms-Steuerelementset, das in der Seite verwendet wird. Das runat="server"-Attribut informiert ASP+, dass das Verhalten des Steuerelements durch Code implementiert wird, der auf dem Server ausgeführt wird. In diesem Beispiel sind vier Web Forms-Steuerelemente enthalten, deren Namen durch das id-Attribut angegeben werden:

  • Ein Select-Steuerelement mit dem Namen "FRUITLIST", das die Liste der fünf Früchte anzeigt, aus denen der Benutzer wählen kann.

  • Ein unbenanntes Input Button-Steuerelement. Das OnServerClick-Attribut gibt an, dass mit der Schaltfläche ein programmiertes Click-Ereignis verbunden ist. Der Wert des Attributs liefert den Namen des Ereignishandlers – in diesem Fall "FRUITLIST-CLICK".

  • Ein Image-Steuerelement mit dem Namen "FRUITIMAGE", mit dem das Bild der ausgewählten Frucht angezeigt wird.

  • Ein Span-Steuerelement mit dem Namen "FRUITNAME", mit dem der Name der ausgewählten Frucht neben dem Bild angezeigt wird.

Der <script>-Block oben auf der ASP+-Seite implementiert den "FRUITLIST-CLICK"-Ereignishandler in COBOL für das Input Button-Steuerelement. Die Methode extrahiert den ausgewählten Namen aus dem "FRUITLIST"-Steuerelement, verwendet die StringBuilder-Klasse aus dem .NET-Baseframework zum Zusammensetzen eines Pfads zur Bilddatei der Frucht und setzt die entsprechenden Werte für die Steuerelemente "FRUITIMAGE" und "FRUITNAME".

Diese Technologie verbessert die Programmierfähigkeit von Webseiten und trägt dazu bei, die Beschränkungen von statischer HTML zu überbrücken. Mit dieser Technologie ist das Erstellen verfeinerter Websysteme denkbar, unter die Anwendungen wie digitale Ladenzeilen, Inventurhaltungssysteme, Versandmanagement und vieles mehr fallen. Und das Beste von allem ist: Diese Anwendungen können mit COBOL programmiert werden, wenn dies die Programmiersprache ist, mit der ihr Personal vertraut ist.

Webdienste: Programmierfähiges Web

Während ASP+ es Programmierern ermöglicht, dynamischen Inhalt auf serverseitige Webseiten zu legen, gehen Webdienste einen Schritt weiter. Sie bieten die Möglichkeit, Programmierschnittstellen im Web offen zu legen, sodass Clients ein Paket daraus entnehmen können, dass sich für ihre Zwecke eignet. Dies ermöglicht es Unternehmen, ihre Produktangebote in Komponenten aufzuteilen, die die Endbenutzer so anpassen können, dass sie in die jeweilige Anwendung integrierbar sind.

Das folgende Beispiel zeigt einen sehr einfachen Webdienst, der in COBOL geschrieben wurde:

<%@ webservice language="COBOL" %> 
       CLASS-ID. FOO. 
       FACTORY. 
       PROCEDURE DIVISION. 
       METHOD-ID. ADDME. 
       DATA DIVISION. 
       LINKAGE SECTION. 
       01 OPND-1 PIC S9(9) COMP-5. 
       01 OPND-2 PIC S9(9) COMP-5. 
       01 RET PIC S9(9) COMP-5. 
       PROCEDURE DIVISION USING BY VALUE OPND-1 OPND-2 RETURNING RET. 
           COMPUTE RET = OPND-1 + OPND-2. 
       END METHOD ADDME. 
       END FACTORY. 
       END CLASS FOO.

Das Beispiel ist eine einfache COBOL-Klassendefinition mit einer Methode namens "ADDME", die zwei Zahlen addiert. Die webservice-Direktive am Anfang teilt dem .NET Framework mit, dass wir Methoden als Webdienste offen legen möchten, und bezeichnet die Programmiersprache, in der die Methoden geschrieben sind. (In zukünftigen Versionen müssen Benutzer vermutlich eine Compilerdirektive verwenden, um ein Attribut für jede Methode anzugeben, die als Webdienst offen gelegt werden soll.)

So einfach wie dies klingt – die unterschiedlichsten Technologien müssen hier zusammenarbeiten, damit die Webdienste funktionieren. SOAP ist z.B. ein Protokoll, das Microsoft gerne als angenommenen Standard sähe; es wird zum Marshallen von Daten basierend auf XML verwendet. SOAP wird für Clients und Server verwendet, um Argumente und Ergebnisse in ein Kommunikationsformat zu bringen, das sicher per HTTP-Anforderungen übermittelt werden kann. Microsoft hat eine Dienstbeschreibungssprache (Service Description Language, SDL) geschrieben, die die offen gelegten Dienste beschreibt und Clients die Mechanismen mitteilt, über die sie diese Dienste finden können.

Webdienste eröffnen neue Möglichkeiten für die Anwendungsweitergabe. Anstatt Geschäftslogikanwendungen mit Wrappern zu verpacken, die das Webdarstellungsformat und den Webinhalt vorbestimmen, können die Firmen ihre Geschäftslogik als Webdienst offen legen, der von ihren Kunden angepasst werden kann.

Frameworks und Spracheninteroperabilität

Das Microsoft .NET Framework SDK wird mit Frameworks, also Anwendungsrahmen, ausgeliefert, die eine Vielzahl von Operationen implementieren, z.B. E/A, Datentypmanipulierung und Entwicklung grafischer Anwendungen. Da Fujitsu COBOL das Objektprogramm des .NET Frameworks ist, hat die Sprache, in der diese Bibliotheken implementiert sind, keine greifbare Form. COBOL-Programme können diese Features so verwenden, als wären sie in COBOL geschrieben worden. Die Infrastruktur für diese Spracheninteroperabilität ist eine gemeinsame Sprachlaufzeit.

Das vorherige Beispiel, die ASP+-Fruchtliste, hat bereits einige der Anwendungen von .NET Frameworks demonstriert. Die COBOL-Methode "FRUITLIST-CLICK" wurde in eine Klasse eingebettet, die den Inhalt von Klassen im .NET Framework erbte. So war der direkte Zugriff auf vererbte Eigenschaften möglich. Die "StringBuilder"-Klasse ist ein weiteres Beispiel für eine Klasse aus dem .NET-Baseframework. Im folgenden Beispiel wird die Verwendung des Win Forms-Framework gezeigt, mit dem Entwickler Win32-basierte GUI-Anwendungen erstellen können (GUI steht für Graphical User Interface, grafische Benutzeroberfläche):

       CLASS-ID. HELLO INHERITS FORM. 
       ENVIRONMENT DIVISION. 
       CONFIGURATION SECTION. 
       REPOSITORY. 
           PROPERTY WIN-TEXT AS "Text" 
           CLASS APPLICATION AS "System.WinForms.Application" 
           CLASS FORM AS "System.WinForms.Form". 
       FACTORY. 
       PROCEDURE DIVISION. 
       METHOD-ID. MAIN. 
       DATA DIVISION. 
       WORKING-STORAGE SECTION. 
       77 APP-OBJ USAGE OBJECT REFERENCE FORM. 
       PROCEDURE DIVISION. 
           INVOKE HELLO "NEW" RETURNING APP-OBJ. 
           MOVE "Hallo COBOL-Welt!" TO WIN-TEXT OF APP-OBJ. 
           INVOKE APPLICATION "Run" USING BY VALUE APP-OBJ. 
       END METHOD MAIN. 
       END FACTORY. 
       END CLASS HELLO.

Diese schlichte Anwendung ruft ein Framefenster mit dem Titel "Hallo COBOL-Welt!" auf. Sie demonstriert das Konzept der Vererbung aus der Win Forms-"Form"-Klasse und die Verwendung von Methoden/Eigenschaften in der Win Forms-Klassenbibliothek.

Migrieren von COBOL-Code in das Microsoft .NET Framework

Das Microsoft .NET Framework bietet eine Interoperabilität zwischen Code, der das Objektprogramm für die gemeinsame Sprachlaufzeit ist und auch als verwalteter Code bezeichnet wird, und bestehendem systemeigenen Code (Native Code) und COM-Anwendungen. Das heißt, dass Entwickler neuen verwalteten Code schreiben können, der Aufrufe in den bestehenden Code durchführt. Bei vorhandenen COM-Anwendungen ist dies so einfach, als würden die Entwickler ein Klassenbibliotheks-Importtool (TLBIMP Type Library Import Tool) verwenden, das die COM-Schnittstellen für den verwalteten Code sichtbar macht. Für anderen systemeigenen Code brauchen die Entwickler lediglich eine COBOL-Prototypdeklaration für den Code zu liefern, den sie gern aufrufen möchten. Für die Aufrufe aus systemeigenem Code in verwalteten Code können Entwickler ein Klassenbibliotheks-Exportprogramm (TLBEXP Type Library Exporter) verwenden. Mit einem Assembler-Registrierungstool (REGASM Assembly Registration Tool) können Entwickler ihren verwalteten Code in COM-Objekte exportieren.

Nun verfügen die Benutzer auch über die Option, ihren bestehenden Code mit dem neuen Compiler zu kompilieren, wobei sie die gesamte Ausführung der gemeinsamen Sprachlaufzeit überlassen. Fujitsu Software fühlt sich verpflichtet, dieses Szenario Wirklichkeit werden zu lassen; bei den Vorversionen des Compilers müssen jedoch noch einige Abstriche bei der Unterstützung der Gesamtheit der COBOL-Features gemacht werden.

Die COBOL-Vision

Als einziger COBOL-Anbieter, der derzeit die neue Microsoft-Umgebung unterstützen will, hat sich Fujitsu Software auf eine Vision festgelegt, die eine nahtlose Interoperabilität und leistungsstarke Programmiertools vorsieht. Der Preis, den wir für diese Festlegung zahlen müssen, ist die Entwicklung eines erweiterten COBOL-Compilers mit Spracherweiterungen für die Unterstützung der neuen Plattform, eines komplett neuen Codegenerators mit der Microsoft Intermediate Language (IL) als Objektprogramm und einer ASP+-Unterstützungscodebasis für COBOL, um nur einige Dinge zu nennen.

Die in diesem Artikel gezeigten Codebeispiele basieren auf der Implementierung, die sich in der Vorabversion des Compilers findet. Die genaue Syntax der COBOL-Spracherweiterungen kann in freigegebenen Versionen geändert werden.

Spracherweiterungen

Die gemeinsame Sprachlaufzeit basiert stark auf einem objektorientierten Programmiermodell (OOP). Das bedeutet nicht, dass alle Programme, die in dieser Umgebung ausgeführt werden, objektorientiert sein müssen. O-O-Sprachkonstrukte sind erforderlich, um einige Features der Umgebung nutzen zu können. Die Fujitsu COBOL-Implementierung wird weitestgehend mit dem aktuellsten COBOL-Entwurfsstandard konform sein, wo dies anwendbar ist.

Einige Features der gemeinsamen Sprachlaufzeit werden vom aktuellen Status des COBOL-Entwurfsstandards nicht unterstützt. Beispielsweise haben Konstrukte wie Delegates, benutzerdefinierte Attribute und Sichtbarkeitsattribute keine bestehende Darstellung in COBOL. Für diese Konstrukte wird Fujitsu möglichst sicherstellen, dass standardkonforme Programme nicht durch die Existenz von Spracherweiterungen beeinträchtigt werden, die die gemeinsame Sprachlaufzeit als Objektprogramm verwenden.

Codegenerierung

Die gemeinsame Sprachlaufzeit setzt ihre Ziele – Interoperabilität, Sicherheit und Robustheit – durch den Einsatz von MSIL anstelle von systemeigenem Code um. Das bedeutet, dass Compiler, die in dieser Umgebung agieren, neue Codegeneratoren entwickeln müssen, die MSIL und nicht systemeigenen Code erzeugen. Die gemeinsame Sprachlaufzeit verwendet Just-In-Time-Kompilierungsstrategien, um den Code für die Plattform unabänderlich in schnellen systemeigenen Code zu übersetzen.

Eine erweiterte Interoperabilität bedeutet auch, dass Anwendungen, deren Code in unterschiedlichen Programmiersprachen geschrieben ist, nahtlos debuggt werden kann. Dies ist ein enormer Produktivitätsgewinn, insbesondere, weil die meisten Entwicklungsumgebungen für COBOL (mit Ausnahme von Fujitsu COBOL) das Debuggen von sprachübergreifenden Anwendungen ziemlich unhandlich machen.

ASP+-Unterstützung

Neben einem neuen Compiler ist auch eine sprachspezifische Unterstützung für die neue ASP+-Infrastruktur erforderlich. Da ASP+ die Seiten kompiliert, muss die Unterstützung Code generieren können, um den HTML- und ASP+-Inhalt in der Sprache darstellen zu können, in der die Seite geschrieben wurde. Beim ASP+-"Hallo COBOL-Welt!"-Beispiel (siehe oben) wird z.B. Code generiert, der das folgende Fragment enthält:

            PERFORM VARYING FONT-SIZE FROM 1 BY 1 UNTIL FONT-SIZE > 7  
              INVOKE ASP_output "Write" USING BY VALUE " <font size=""" 
              INVOKE ASP_output "Write" USING BY VALUE FONT-SIZE 
              INVOKE ASP_output "Write" USING BY VALUE 
                """> Willkommen bei ASP+ (jetzt auch in COBOL!) </font> <br> " 
            END-PERFORM.

Die Zukunft von COBOL

Auf lange Sicht wird sich die Integration in das Microsoft .NET Framework vorteilhaft dahingehend auswirken, dass COBOL sich einfacher in neue Technologien einpassen lassen wird. Neue Frameworks, die für das .NET Framework (in einer beliebigen Programmiersprache) geschrieben werden, sind dann unmittelbar auch für COBOL-Programmierer zugänglich. Fujitsu Software hat es sich zur Verpflichtung gemacht, für die COBOL-Programmierer sicherzustellen, dass sie die Tools bekommen, die sie für die Entwicklung von modernsten Anwendungen benötigen. Eine Unterstützung des .NET Frameworks untermauert diese Verpflichtung.


Anzeigen:
© 2015 Microsoft