Softwareentwicklung heute ...
Sieht man von der explosionsartigen Entwicklung des Internets ab, so werden die wichtigsten Trends im Bereich Softwareentwicklung durch Begriffe wie "CASE-Tools", "Objektorientiertheit" oder "Sprachen der 4. Generation" markiert. Relationale Datenbanken haben sich ebenso etabliert wie die Standardbetriebssysteme UNIX/Linux oder Windows XP/Vista. Für Anwendersoftware ist es heute selbstverständliche Notwendigkeit, eine gut durchdachte, robuste und ergonomische Benutzeroberfläche bereitzustellen. Grafische Oberflächen mit Pulldown-Menüs, Listboxen, Auswahlbuttons etc. werden erwartet und sind für eine Akzeptanz durch den Anwender unverzichtbar. Der Programmieraufwand für die Erstellung dieser Oberflächen übersteigt in der Regel den Aufwand für die Realisierung der reinen Programmlogik um ein Vielfaches.
Werkzeuge der 4. Generation ...
... können hier Abhilfe schaffen! Es fehlt zwar eine präzise Definition dieses Begriffs, jedoch hat man eine intuitive Vorstellung vom Nutzen solcher Tools. Sie sollen:
- den Enwicklungszyklus drastisch beschleunigen
- leicht erlernbar sein
- Unterstützung leisten durch spezielle Editoren und Generatoren
- hohe Funktionalität an der Benutzeroberfläche bieten
- interaktive Entwicklungen ermöglichen
- Softwarepflege und Versionsmanagement unterstützen
- Mechanismen für einfachen, aber flexiblen Datenzugriff anbieten
Vor allem dieser letzte Punkt ist die Ursache dafür, dass 4. Generation-Tools - insbesondere 4GL (Sprachen) - hauptsächlich als Zusatzprodukte zu kommerziellen Datenbanksystemen angeboten werden, aber häufig nur effektiv im Zusammenhang mit dem jeweiligen DB-System eingesetzt werden können.
4GL stellen sich in der Regel als eine konsequente Weiterentwicklung der strukturierten Programmiersprachen dar: problemorientierte Sprachen auf sehr hohem Niveau mit Mechanismen für die Bildschirmverwaltung (z.B. Windowing) und einigen nonprozeduralen Elementen, insbesondere in der Datenzugriffssprache und der Definition von Integritätsregeln.
Zu den Werkzeugen mit weniger sprach-, sondern mehr objektorientiertem Ansatz zählt der Applikationsgenerator FIX/C. Gleichwohl erfüllt er die oben genannten Kriterien der 4. Generation in hohem Maße.
Entwickeln mit FIX/C:
skizzieren - generieren - retuschieren
Skizzieren: interaktiv entwerfen
FIX/C ist ein Werkzeug, mit dem Sie, ohne erst einmal eine herstellerspezifische Sprache zu erlernen, von der ersten Stunde an beginnen können, Teile Ihrer Anwendung zu erstellen.
Generatoren liefern Ihnen Bildschirmmasken aufgrund des DB-Schemas. Mit interaktiven Editoren erzeugen und gestalten Sie prototypenhaft weitere Elemente Ihrer Anwendung: Masken, Tabellen, Menüs, Anzeige- und Auswahlfenster, Hilfetexte. Ein spezieller Textinterpreter zeigt sofort das Ergebnis an und läßt Sie mit der Datenbank kommunizieren. Dies ist für einfache Programmteile wie Stammdaten häufig schon vollständig ausreichend.
Dies alles geschieht, ohne dass Sie Programmcode schreiben oder generieren müssen.
Generieren: Objekte mit individuellem Programmcode anreichern
Übersteigt die Komplexität der Anwendung ein gewisses Maß, so läßt sich von FIX/C zu dem bisher erzeugten System von Objekten eine erweiterbare Ereigniskontrolle generieren: Ein wohlstrukturiertes und kommentiertes Programm in der Sprache C von erstaunlicher Kürze. Außer einem Datendeklarationsteil für jedes beteiligte Objekt und - falls gewünscht - den expliziten Datenzugriffsbeschreibungen (SQL-Statements) erscheint im Wesentlichen die Definition von Kontrollfunktionen, die das Verhalten der beteiligten Objekte bei Programmablauf definieren: bleiben sie unverändert, so verhält sich die bisher erzeugte Anwendung genau wie unter dem Interpreter - und man hätte auf die Sourcegenerierung verzichten können.
Retuschieren: Programming by exception
Die beim "Skizzieren" entstandenen Objektbeschreibungsdateien bleiben also in der gegebenen Form bestehen, die Erweiterungen und Abänderungen der Kontrollfunktionen beschreiben genau die Abweichungen vom Standardverhalten des FIX/C-Interpreters.
Die Ausgestaltung der Benutzeroberfläche und die Programmierung der Applikation sind in so hohem Maße unabhängig voneinander, dass sie nicht nur asynchron oder von verschiedenen Personen vorgenommen werden können (z.B. Ausgestaltung durch Endanwender), sondern dass weitgehende Änderungen - bis hin zu DB-Schema Änderungen - ohne Revision des Programmcodes erfolgen können. Hierdurch wird insbesondere eine einsatzortspezifische Versionspflege erleichtert, wenn bei identischem Binärprogramm die Versionsunterschiede in den Beschreibungsdateien ausgedrückt werden können.
Die UNIX-Philosophie aufgreifen:
FIX/C verfolgt einen visuellen, objektorientierten "bottom-up" Ansatz des Entwicklungsvorgangs. Das interaktive Erstellen von Programmelementen kann sofort beginnen, unterstützt durch umfangreiche Online-Hilfen, so dass das Benutzerhandbuch zunächst selten in Gebrauch genommen wird. Eine größere Einarbeitungsphase muss nicht vorausgehen.
Jeder Entwicklungsschritt führt sofort zu konkreten, sichtbaren Ergebnissen. Mit nichtprozeduralen Beschreibungselementen wird die Interaktion der Bildschirmobjekte mit dem Benutzer und untereinander grob festgelegt. Die Beschreibungen werden, wie bei UNIX üblich in klartextlicher Form, in externen Dateien abgelegt. Erst zu einem relativ späten Zeitpunkt tritt erstmalig für Dateieingriffe Programmcode in Erscheinung. Das Verfeinern und Erweitern der Anwendung besteht im Wesentlichen im Ändern des generierten Sourcecodes.
Die in kommerzieller Software häufig vorkommenden Problemsituationen können entweder direkt auf bereits vordefinierte Objekte abgebildet werden oder mit Konstrukten auf hoher Ebene gelöst werden. Gleichwohl ist - unter anderem dank der Sprache C - eine beliebig tiefe, systemnahe Programmierung möglich, ohne den konzeptionellen Ansatz von FIX/C zu verlassen. Somit folgt FIX/C der UNIX-Philosophie: hohe, problemorientierte Ebene wo möglich; beliebig tiefe, systemnahe Ebene wo nötig; und das ohne konzeptionellen Bruch, sondern mit elegantem Übergang.
FIX/C - (k)ein 4GL-Tool:
FIX/C ist eine Sammlung von Prozeduren, Editoren, Generatoren und insbesondere einer umfangreichen Funktionsbibliothek. Es gibt eine Reihe von Merkmalen, die den meisten 4GL-Tools gemeinsam sind, was einen Hinweis darauf gibt, welche Anforderungen bei der Entwicklung kommerzieller Software am häufigsten existieren. Unterschiede gibt es hingegen bei der Handhabung und dem damit verbundenen Aufwand sowie in der Flexibilität, der Änderungsfreundlichkeit und nicht zuletzt in der Freiheit der optischen Ausgestaltung.
Selbstverständliches in FIX/C:
- ein schnelles, optimiertes Windowsystem, das es erlaubt, viele und schnell wechselnde Informationen übersichtlich und optisch ansprechend zu präsentieren - einschließlich der Behandlung von Bildschirmattributen und Semigraphik.
- mehrstufige Hilfefunktionen
- Generierung und Verarbeitung von sogenannten Bilschirmobjekten, wie:
o Masken
o Tabellen
o Menüs zum Verzweigen in verschiedene Programmteile
o Textanzeigefenster
o Auswahlfenster - Anzeigefenster für Datenbankinhalte
- Vorwärts- und Rückwärtsblättern in allen Objekten, die mehr Elemente enthalten, als sie anzeigen können
- höhere Datenbank-Zugriffsschnittstellen (z.B. Dynamic SQL)
- Mechanismen zur Prüfung von Eingabedaten
- Hardcopy-Funktion
spezielle Eigenschaften von FIX/C:
Masken und Tabellen:
- können Varianten besitzen, die verschiedene "Masken-Views" desselben Grundtyps darstellen. Der Variantenwechsel erfolgt durch Benutzeraktion oder programmgesteuert, etwa in Abhängigkeit von Eingabedaten. Ein Beispiel: eine Tabelle zeigt eine Übersicht über viele Tupel, ein Tastendruck schaltet in die Detaildarstellung des aktuellen Tupels um.
- können 1:n-Beziehungen automatisch behandeln. Der korrekte Datenbankverkehr wird über dynamisches SQL abgewickelt, ohne dass irgend etwas programmiert werden muss: die Beziehung wird nichtprozedural in der Maskenbeschreibung definiert.
- können ihre Inhalte an Betriebssytemprozesse zur Weiterverarbeitung senden
- können alle Eigenschaften (z.B. Bildschirmposition) zur Laufzeit ändern
Maskenfelder:
- sind vom Layout der Maske unabhängig und können sich ganz oder teilweise überdecken oder verborgen bleiben
- können weitere FIX/C-Objekte mit sich führen, die unter anderem zur Datenauswahl dienen: Windows, die Datenmengen anzeigen und sich zur Übernahme auswählen lassen
- können sich in der dargestellten Länge von ihrer internen Länge unterscheiden, so dass ihr Inhalt gescrollt werden kann
- können Voreinstellungen (z.B.: "today") oder eine fest vorgegebene Wertauswahl besitzen
- können auf mehrfache Weise mit Prüfroutinen versehen werden
- können ihre Eigenschaften zur Laufzeit ändern: Position, Sichtbarkeit, Betretbarkeit, Eingabepflicht, Eingabewert muss in der Datenbank vorhanden sein, u.v.m.
Auswahlfenster:
- dienen allgemein zur Auswahl eines oder mehrerer Datenelemente aus einer beliebig großen Menge
- können sich ihre Daten auf mehrfache Weise selbst beschaffen. Daten werden
o in der Objektbeschreibung angegeben
o von einer Klartextdatei gelesen
o von der Ausgabe eines anderen Programmes gelesen
o von einem SQL-Statement geliefert
o von einer Routine des Entwicklers bereitgestellt
o ausgewählte Datenelemente können an einen
o Betriebssystemprozess geschickt werden
o ausgewählte Daten können Maskenfelder füllen
Datenbankfenster:
- zeigen einen Ausschnitt aus einer View der Datenbank, wobei, beginnend bei einem Startwert, durch diese View vorwärts und rückwärts geblättert werden kann
- dienen hauptsächlich zum Füllen von Maskenfeldern durch Auswahl von in der Datenbank vorhandenen Werten
- können auch verborgene Spalten enthalten, die im Programm weiterverarbeitet werden
- können ihrem zugeordneten Maskenfeld die Eigenschaft aufzwingen, nur in der Datenbank vorhandene Werte anzunehmen
Hilfe und Anzeigetexte:
- sind in ihrer Länge ebenfalls unbegrenzt
- sind masken- oder situationsspezifisch
- können vom Entwickler - auf Wunsch auch vom Endanwender - per Tastendruck aus dem laufenden Programm in einen beliebigen Texteditor geladen und verändert bzw. erzeugt werden.
... vom Ansatz her nicht prozedural
Alles, was Sie bis hierher gelesen haben, erfordert keine Codierung in einer Programmiersprache, sondern ist interaktiv mittels masken- und hilfstextgeführtem Editor in sehr einfacher Weise beschreibbar. Sie sehen: auch ein Nichtprogrammierer kann bereits einen wesentlichen Teil einer Applikation erstellen.
Durch die externe Ablage aller beschreibenden Daten - einschließlich einer indizierten Textdatei für Benutzerhinweise - können leicht mehrsprachige Versionen erzeugt werden.
Sourcegenerierung und Funktionsbibliothek:
Verschiedene Sourcevarianten sind generierbar je nach dem Ausmaß, in dem der FIX/C-typische Ablauf verändert werden soll. Der weitgehend nichtprozedurale und objektorientierte Ansatz bleibt dabei aber erhalten. Beispiel der Bearbeitung einer Maske: Der generierte Code enthält eine Hauptprozedur, die im Wesentlichen den Aufruf "perform (Maske)" enthält. Die Funktion perform() ruft aber nun vor und nach Betreten eines Maskenelementes (dies sind in der Regel Maskenfelder, können jedoch auch andere Objekte sein) und bei jedem eintretenden Ereignis (dies ist in der Regel das Drücken einer Funktionstaste) die Kontrollfunktion der Maske, die ebenfalls in der generierten Source enthalten ist.
Somit hat der Entwickler die Möglichkeit, auf jedes Maskenelement und jedes Ereignis individuell zu reagieren und den Programmablauf zu steuern. Unterlässt er es, so verhält sich das Programm wie gewohnt, nämlich entsprechend der Standardkontrollfunktion.
Bei dieser Programmverfeinerung kann auf jede Komponente der beteiligten Objekte zugegriffen werden. Dabei stehen dem Entwickler mehr als 200 Funktionen der FIX/C-Library, des Herzstücks von FIX/C, getestet und dokumentiert, für die Manipulation der Daten- und Bildschirmobjekte zur Verfügung. Beispiel: Beim Wechsel von einer Tabellenzeile zu einer anderen soll eine weitere auf dem Bildschirm befindliche Tabelle um eine Seite geblättert werden. Dies bedarf eines einzigen Statements.
Ein FIX/C-Objekt stellt sich somit als eine Ereignismaschine dar, nicht unähnlich den "Widgets", wie sie aus der Welt der grafischen Oberflächen bekannt sind.
... aus der Praxis für die Praxis
FIX/C ist seit 1985 aus der Notwendigkeit entstanden, die Benutzeroberfläche der unter UNIX verfügbaren Datenbanksysteme zu verbessern. Durch den Einsatz in einer Vielzahl von Produkten und Projekten mehrerer Softwarehäuser ist unser Applikationsgenerator FIX/C mit den konkreten Bedürfnissen gewachsen und somit stets verbessert worden.
FIX/C befindet sich seit mehr als 15 Jahren auf dem Markt, hat in dieser Zeit durch sehr viele Portierungen seine Hardwareunabhängigkeit nachgewiesen und ist weitestgehend aufwärts kompatibel geblieben.
Dennoch wird er gerade von UNIX-Kennern als ein in seiner Konzeption sehr modernes und elegantes Werkzeug geschätzt.
Produktivität erhöhen ...
Das haben Sie schon oft gelesen: "Mit unserem Werkzeug senken Sie Ihre Entwicklungszeit um 90%". Wie will man das messen? Das klingt wie der Satz: "Mit EDV-Einsatz sparen Sie die Hälfte Ihrer Personalkosten". Sicherlich arbeiten Sie mit FIX/C in vielen Fällen schneller als mit anderen Werkzeugen, wie zum Beispiel mit COBOL. Wir meinen aber, die Entwicklungszeit ist nicht das einzige Kriterium des Produktivitätsgewinns - erst recht nicht, wenn man Lifecycle-Studien betrachtet: da schrumpft die Codierungsphase auf ca. 20%.
Unsere Schwerpunkte liegen in der Qualität unseres Produktes. Unserer Meinung nach ist eine gute Benutzeroberfläche und die damit verbundene Akzeptanz und Wartungsfreundlichkeit, und somit die Versionspflege wichtiger als eine schnellere Entwicklungszeit.
Für "große" Programme ...
Die Demo-Versionen aller auf dem Markt befindlicher Tools funktionieren sehr gut. Aber kann dies die Basis einer Entscheidung für eine langfristige Bindung an ein Werkzeug sein? Erst in Projekten ab einer nennenswerten Größenordnung zeigt sich die Brauchbarkeit eines Werkzeuges.
Dann ist Unterstützung gefragt für:
- modulare Entwicklung
- getrennte und gemeinsame Arbeitsumgebungen
- Einheitlichkeit des Quellcodeaufbaus
- Wiederverwendbarkeit von Programmteilen
- Flexibilität, z.B. bzgl. Schemaänderungen
- automatische Unterstützung der Dokumentation
- Einheitlicher Quellcode für multinationale Oberflächen
Lassen Sie sich doch einmal ein "großes" Projekt zeigen!
Es gibt mehrere Auftrags- und Buchhaltungspakete, die auf Basis von FIX/C entwickelt worden sind.
In einem Punkt leidet die aktuelle DV- Szene (bislang nicht ganz zu Unrecht) unter einem harten Kritikerurteil: Das Maß der Integration, die für proprietäre Systeme typisch war, ist heute eher selten anzutreffen. Vielmehr ist es die Regel, dass man selbst von großen Herstellern eine bunt gemischte Palette von Komponenten mit jeweils verschiedenem konzeptionellen Ansatz und erst recht verschiedenen Benutzeroberflächen angeboten bekommt.
Sie als Entwickler stehen möglicherweise vor dem gleichen Problem: Sie wissen, dass Sie Ihr vertikales Anwendungspaket um horizontale Komponenten ergänzen müssen: Finanzbuchhaltung, Lohn und Gehalt, Kostenrechnung, Anlagenbuchhaltung.
Falls Sie auf diesem Gebiet nicht Spezialist sind und entsprechende eigene Pakete entwickeln wollen, hilft Ihnen FIX/C auch hier: Eine Palette hervorragender horizontaler Produkte steht zu Ihrer Verfügung. Diese haben beachtlichen Erfolg am Markt - nicht zuletzt dank der FIX/C-Benutzeroberfläche.
... Standards und Normen
sind die Basis einer Entscheidung für FIX/C: Durch den Einsatz von Standardschnittstellen (XPG4 von X/OPEN, SQL, C) ist die Hardwareunabhängigkeit bzw. Portabilität gesichert.
Ein über Jahre hinweg angesammeltes Expertenwissen steht Ihnen - teils im Werkzeug FIX/C selbst, teils in der Unterstützung durch unsere Entwicklermannschaft - zur Verfügung: Wir verkaufen FIX/C nicht über die Ladentheke, sondern verstehen uns als langfristige Partner unserer Kunden.
FIX/C gibt es für:
- MS-Windows (NT4, 2000, 2003, XP, Vista, 2008, Windows 7) und fast alle gängigen UNIX-Derivate
(LINUX, SCO, UNIXWARE, Reliant UNIX, AIX, HP-UX, SOLARIS, DEC Unix, SunOS ...) - erweiterbar mit grafischen Frontends, wie:
FIX/Win für MS-Windows (2000, 2003, XP, Vista, 2008, Windows 7),
FIX/Web für Browser und Javaunterstützung, FIX/X für X-Windows - fast alle gängigen Hardwareplattformen:
Intel, Siemens Fujitsu RM-XXX, IBM RS 6000 (pSeries),
HP PA-RISC, SUN SPARC, DEC Alpha und viele andere Systeme. - für die Datenbanksysteme von INFORMIX und ORACLE