nach unten
Home Mobil   Home PC   nächste Seite

Informatik 01

Eine persönliche Einschätzung der Informatik, mit Kommentaren zu Hardware und Software. Der Text behandelt im Wesentlichen meine Erfahrungen, die schon mehr als 10 Jahre zurückliegen. Referenziert werden Prolog, Lisp, KEE, Java, C++. Neuere Entwicklungen wie php, Mediawiki, HTML 5 werden in dieser Darstellung nicht erwähnt.


Links auf die Folgeseiten:

02   02a   03   03a   04  


05   06   07


Allgemeines

Die Informatik umfasst im weitesten Sinne alle theoretischen und praktischen Disziplinen, die sich mit Informationsverarbeitung befassen. Ein wesentliches Hilfsmittel zur Unterstützung dieser Arbeit ist der Computer (früher auch Rechenmaschine genannt), man spricht in diesem Zusammenhang von elektronischer Datenverarbeitung (EDV).

Im Laufe der Zeit wurden eine Reihe von Hilfsmitteln entwickelt, um der "Rechenmaschine" bestimmte Anweisungen zu geben, wie sie ein Problem lösen soll.

Dabei musste ein Problem der realen Welt zunächst in einen sogenannten Algorithmus umgesetzt werden, der von der "Rechenmaschine" verstanden wird. Die Algorithmen wurden mit Hilfe von Programmiersprachen beschrieben, die Umsetzung der Algorithmen in lauffähige Programme heisst Programmierung. Lauffähig ist ein Programm, wenn es von einem Computer ohne Fehler ausgeführt werden kann, und es (im Idealfall) die gewünschten (korrekten) Ergebnisse produziert.

Die Algorithmen beinhalteten zu Beginn der Programmierung fest vorgegebene Ablauffolgen mit eingebauten Verzweigungen (parallele Ablauffolgen), die nach bestimmten Kriterien durchlaufen werden können.

Dabei waren (und sind z.T. auch heute noch) Sprünge innerhalb dieser Ablaufsequenzen zugelassen (vorwärts und rückwärts).

Später wurden einzelne Teile der Algorithmen in Unterprogrammen (oder Makros) zusammengefaßt, die dann bei Bedarf ausgeführt werden konnten. Dies führte in der weiteren Entwicklung zu einer sogenannten Modularisierung der Programmierung.

Die internen Abläufe der Programmmodule sollten dabei für die Außenwelt verborgen bleiben. Das Modul agierte mit seiner Umwelt über sogenannte Schnittstellen, über die Informationen eingegeben und abgefragt werden können.

Die Gesamtheit dieser (anwendungsorientierten) Module wird auch als  Software bezeichnet, die Information, die zwischen diesen Modulen ausgetauscht wird, sind sogenante  Daten.

Im Gegensatz dazu wird der Rechner und die zu seiner Funktionalität unabdingbaren Systemprogramme als Hardware bezeichnet.

Das angegeben Verfahren der Zerlegung eines Problems in Softwaremodule ist auch heute noch gebräuchlich. Es ermöglicht die Verfeinerung einer komplexen Aufgabe in einzelne Teilaufgaben, zu deren Erfüllung jeweils bestimmte Softwaremodule zu entwickeln sind. Über die Schnittstellen der Module wird dann das komplexe Softwaresystem zusammengebaut.

Soweit die Idealform der Softwareentwicklung.

In Laufe der Zeit haben sich in allen Einheiten der Soft - und Hardware Fehler eingeschlichen, die es zu identifizieren und zu bewältigen gilt. Zu der eigentlichen Softwareentwicklung ist ein Fehlermanagement erforderlich, das über erkannte Soft- und Hardwarefehler und der parallel fortlaufenden Weiterentwicklung zu unterschiedlichen Softwareversionen führt. Um die Fehler zu erkennen, müssen Tests durchgeführt werden. Der Aufwand für Tests und Korrekturmaßnahmen ist erheblich und er kann sogar den Aufwand für die eigentliche Softwareentwicklung übersteigen.

Wie kann man nun die Softwareentwicklung verbessern? Ich denke es sind zu wenig intelligente Bausteine vorhanden. Die entwickelten Programmfragmente sind z.T. dermaßen kompliziert, dass Tester für Software u.U. Monate brauchen um die Abläufe zu reproduzieren, die vom Software Entwickler vorgegeben wurden. Eine interne logische Struktur ist für "nicht Eingeweihte" kaum erkennbar. Hier hilft auch die sogenannte Spezifikation, die der eigentlichen Entwicklung vorangehen sollte, nur wenig, da sie zum großen Teil unverständlich geschrieben ist. Es sieht so aus, als wenn die Umsetzung von realen Problemen, die man in der Welt lösen möchte, in Softwareprogramme gewaltige geistige Klimmzüge erfordert, die insgesamt aber nur ein System produzieren, das im Detail kaum durchschaubar ist.

Dies ist sicher kein Problem, das man allein der Softwareentwicklung zuschreiben muss. Es wird zum Teil von der heutigen gebräuchlichen Bürororganisation geerbt, deren Probleme ja in Software umgesetzt werden sollen. Aber auch die Software zur Steuerung von Maschinen, Flugzeugen etc. ist zunächst mal nicht besser als die ingenieurmäßige Problembeschreibung selbst, und wird somit auch nicht zuverlässiger arbeiten als Maschinen, die ohne Software betrieben werden.

Meiner Meinung ist es erforderlich, Information zum Programmcode durchsichtiger und zum Verständnis erforderliche Referenzen verfügbar zu machen, damit die Funktionalität der Programme verständlich wird (z.B. durch Hypertextlinks). Es bedarf auch einer größeren Anstrengung, Problembeschreibungen zumindest im logischen Sinne konsistent und vollständig abzufassen.

Entsprechende Entwicklungen sind in manchen Unternehmen vorhersehbar.

Auch das Internet könnte interessanter werden, wenn Suchanfragen "intelligent" bearbeitet werden könnten. Die reine textuelle Informationsgewinnung vermittelt zu viel unbrauchbares Material, aus dem die eigentlichen gewünschten Inhalte oft nicht mehr herausgefiltert werden können. Eine Abhilfe wäre eine Klassifizierung von Information, in die jedes erstellte Dokument eingebettet werden kann.

KEE - Knowledge Engineering Environment

Die nachfolgende Abbildung vermittelt einen Eindruck, wie  Information klassifiziert werden könnte. Das gescannte Bild entstand als Kopie einer Kopie, so dass das Bild leider nicht sehr deutlich ist, es zeigt aber, wie Wissen mit diesem System organisiert werden kann. Die verwendete graphische Benutzeroberfläche gehört zu KEE (Knowledge Engineering Environment, um 1990 herum am FAW Ulm (Forschungsinstitut für Anwendungsorientierte Wissensverarbeitung, in Ulm) im Einsatz.

Klassen mit KEE

Click auf die Grafik liefert ein größeres Bild.

Das Wissen ist in Klassen und Instanzen organisiert. Die oberste Klasse heisst Begriffe. Eine Instanz ist z.B. Analytische Geometrie.

Zu einer Klassen kann eine Subklasse (Unterklasse) definiert sein.

So ist z.B. die Klasse Metrische Begriffe eine Unterklasse von Begriffe.

Betrachtet man das ganze als Baum, so sind die Instanzen in der Regel die Blätter des Baumes, während die Klassen in Unterklassen verzweigen können und mit Ausnahme der obersten Klasse anderen Klassen untergeordnet sind (man spricht von Subsummierung).

Zu den einzelnen Klassen können Attribute definiert werden, die dann an die Unterklassen vererbt werden, d.h. alle Unterklassen beinhalten dieses Attribut, definiert man z.B. für Begriffe das Attribut Erstellungsdatum, so beinhalten alle Subklassen und die darunter hängenden Instanzen dieses Attribut.

KEE realisiert multiple Vererbung, d.h. wenn eine Instanz mehreren Klassen zugehört, erbt sie die entsprechenden Attribute der Oberklassen.

Man bezeichnet die Instanzen auch als Objekte, sie beschreiben die realen Dinge der Welt. Die Klassen dienen demgegenüber zur Definition von Eigenschaften, die ein Objekt haben soll.

Zwischen den Klassen können über die Attribute Verbindungen hergestellt werden.

Die Wertemenge eines Attributs kann sowohl Daten als auch Prozeduren (Funktionen) enthalten. Man bezeichnet die einer Klasse oder Instanz zugeordneten prozeduralen (ausführbaren) Attribute als Methoden.

Der Klassenbaum kann interaktiv mit der graphischen Oberfläche erstellt werden, daneben gibt es noch die Möglichkeit, die einzelnen Klassen bzw. Instanzen mittels einer Programmiersprache zu verknüpfen.

KEE wurde auf Workstations eingesetzt, dazu gibt es eine PC Version, die als KAPPA bezeichnet wird.

Über den derzeitigen Stand der Entwicklung dieser Systeme bin ich allerdings nicht auf dem laufenden, die Abbildungen wurden etwa 1993 erstellt.

Sie sollten im wesentlichen auch nur einen Eindruck vermitteln, wie Wissen organisiert werden kann.

Zur Darstellung von Klassenhierarchien kann man auch JAVA und C++ verwenden. Welches Tool man für eine spezifische Anwendung verwenden will, bedarf einer genauen Analyse. Der derzeitige Entwicklungsbereich ist allerdings mehr an der Entwicklung von Graphiktools interessiert, die dynamische und statische Zusammenhänge in einer Organisation darstellen können, und die gegebenenfalls durch schrittweise Verfeinerung die automatische Generierung von Code ermöglichen
(z.B. UML: Unified Modelling Language, Fa. Rational). Ziel ist die Integration von Design und Codierung eines Softwaresystem, wünschenswert wäre auch die Integration der Dokumentation.

Daneben gibt es eine Reihe von Softwareentwicklungsumgebungen, die das Programmieren erleichtern, z.B. HTML Editoren zur Erstellung von HTML Files oder die JBuilder Entwicklungsumgebung für JAVA.

Zur Darstellung von objektorientierten Strukturen (Objekte, Klassen, Instanzen) vgl. auch die Beschreibungen zu JAVA und C++.


nächste Seite
nach oben

Valid HTML 4.01 Transitional