Vision&Reality
     of Hypertext and Graphical User Interfaces

Über das Verhältnis von OO-Programmierung und GUI-Design

Korrespondenz mit Ines aus Wien

[…]

9 Sep 2010, Matthias Müller-Prove

Kulturelle und sozialle Aspekte der Informatik finde ich auch sehr spannend, habe die Wechselwirkungen zwischen Mensch(en) und Technik/Medien aber erst annähernd durchschaut. Sehe mich da eher als Amateur-McLuhanianer. Aber lieber zu Ihren Fragen.

Smalltalk ein wichtiges Fundament für das grafische User-Interface (1x überlappende Fenster, Benutzerillusion,...) ... und es war die erste objekt-orientierte Programmiersprache...

Ja, Smalltalk von Kay/Ingalls/Goldberg war die erste richtig objekt-orientierte Programmiersprache. Alles, wirklich alles, wird darin als Objekt begriffen: Von Zahlen bis hin zu Menüs und Fenstern. Da die Objekte voneinander abgeleitet sind (Vererbung) ist es recht leicht neue Objekte auf der Basis von existierenden zu erstellen, bzw. das Verhalten des Systems grundlegend zu verändern und zu erweitern, indem man das Basisobjekt modifiziert. (Eigentlich müsste ich Basisklasse sagen, aber das führt zu weit.)

Das Gesamt-System ist also aus vielen einfachen Einzelobjekten zusammen gesetzt. Die Analogie mit einem Zellorganismus wäre Alan Kay durchaus recht.

... gibt es auch heute noch einen Zusammenhang zwischen objekt-orientiertem Programmieren und grafischem Interface?

Heute haben sich C++, C# ("si sharp" von Microsoft), Objective-C (Apple), und Java (Web und Handys) als Programmiersprachen in der Softwareentwicklung durchgesetzt. Allesamt objekt-orientiert. Damit programmiert man heute *alles*, also insbesondere auch die grafischen Interfaces.
Betriebssysteme bieten vorgefertigte Komponenten (Klassen) an, damit der Anwendungsentwickler nicht das Rad immer wieder neu erfinden muss. Braucht er ein Fenster oder einen Button, erzeugt er aus der Klasse ein entsprechendes Objekt und benutzt es in seinem Programm. Der Vorteil ist eine visuelle und Verhaltens-Konsistenz zwischen den Programmen eines Betriebssystems.
Erst für neue Funktionen müssen neue Klassen und Objekte geschrieben werden.

Das Web ist in gewisser Weise ein trauriges Kapitel. Es ist eigentlich nicht für das konzipiert, was man heute damit macht. Und daher gibt es ganz viel Flickwerk und Inkonsistenzen. Websites sind entweder stark visuell geprägt (der Webdesigner erfindet gerne das Rad immer wieder neu), oder man merkt ihnen die prozedurale Programmiersprache an: Knopf drücken und eine Funktion oder eine neue Seite wird aufgerufen. Das Web ist somit eher Seiten-orientiert und die Interaktion kommt durch diverse Tricks hinzu: Formulare, JavaScript, CSS. Standardisierte und vorgefertigte Komponenten gibt es nicht, bzw. es bringt jeder Entwickler-Baukasten für das Web seine eigenen Elemente mit.

Inwiefern steht das Klassen-Instanz-Konzept in Verbindung mit direkter Manipulation bzw. gibt es da einen Zusammenhang

Wenn ich Drag&Drop für eine Icon-Klasse definiert habe, ist es egal, ob man eine Dokument-Instanz, eine Programm-Instanz, oder eine Ordner-Instanze mit der Maus bewegt. Das genaue Resulat der Aktion bestimmen die Objekte (=Instanzen) in dem Moment selbst in dem sie irgendwo abgelegt werden.
Direkte Manipulation bedeutet, dass man mit der Maus an den Objekten direkt hantiert. Zum Beispiel zieht man mit der Maus ein Fenster einfach größer. Man könnte auch ein Dialog aufrufen und die gewünschte Breite und Höhe eintippen. Das wäre dann indirekte Manipulation.

Und noch ein Versuch: Instanzen/Objekte reagieren auf Impulse/Nachrichten von außen. Das Hantieren des Anwenders liefert genau solche Nachrichten an die Objekte, die darauf unmittelbar reagieren.

Unglaublich direkt wirkt die Manipulation bei Touch-Geräten: Anfassen und Schieben mit der Hand auf dem Bildschirm. Mehr dazu unter http://blogs.oracle.com/mprove/entry/reipadsnui

Ich wäre Ihnen sehr zu Dank verpflichtet, wenn Sie mir das kurz- für geistenwissenschaftliche Programmier-Dummies- darlegen könnten.

Das müssen nun Sie entscheiden, ob mir das gelungen ist. Falls nicht, fragen Sie gerne nochmal nach.

Es grüßt
Matthias MP

10. Sep 2010, Matthias Müller-Prove

Hi,

Wäre es richtig zu behaupten, dass

1) die Benutzung des Computers für "non-expert-users" erst durch das Klassen- Instanz-Konzept der objekt-orientierten Programmierung möglich wurde, zumal Objekte (Icons, Fenster,....) mit vordefinierten Eigenschaften und Aktionen als visuelle Komponenten von Programmfunktionen (die man sonst mitels schriftlicher Befehl eingeben muss?) am Bildschirm direkt manipuliert werden können und

2) dass sich durch die Vererbung eine visuelle und Anwendungskonsistenz ergibt, die das Erlernen des Systems erleichtert?

Bei Kays Smalltalk lag der Fokus ja auch stark auf dem Selberentwicklen von Tools (insofern versteh ich das Vererbungsprinzip und die Erweiterung bereits definierten Klassen).... doch der Star basierte schon nicht mehr auf Smalltalk, behielt aber dennoch das Klassen-Instanz-Konzept, oder? Smalltalk war sozusagen die Initalzündung und wurde weiterentwicklelt?

Ja. Die ersten Non-Expert Users waren Schüler in der Learners Research Group von Adele Goldberg und Alan Kay (Mitte der 1970er am Xerox PARC). Das Bildhafte und die Anfänge des Ikonographischen in Smalltalk ermöglichten den Zugang für Nichttechniker.

Die Anwendungen des Xerox Star sind in Mesa programmiert. Über die Sprache weiß ich recht wenig. Sie ist aber nach Smalltalk auch am Xerox PARC entstanden, um aus den Ideen zur Graphischen Benutzungs-Schnittstelle ein kommerzielles Produkt für Büroanwendungen zu machen. Insofern stimme ich Ihren Aussagen zu; es fehlen aber noch ein paar Aspekte: Das konsequente Icon-Konzept stammt von David Canfield Smith und die "Physical Office Metaphor" gab es auch noch nicht für den Alto Computer, sondern erstmalig für den Star. Die Zielgruppe waren Büroangestellte, denen mittels der Desktop-Metapher der Einstieg in die Computer-Welt erleichtert werden sollte.

Aus dem Smalltalk von damals hat sich kontinuierlich bis heute Squeak entwickelt. Und Alan Kay ist auch noch mit dabei.

Ich habe gelesen, dass C++ etc. nicht rein objekt-orientiert sind, insofern verwirrt mich Ihre Aussage ein wenig.. doch das grafische Interface arbeitet, wie Sie meinen, schon mit Objekten als Instanzen von Klassen, nicht?? Kann man theoretisch alles, was man am Bildschirm sieht als visualisiertes Objekt von im Betriebssystem definierten Klassen auffassen? Was wäre das Gegenteil zu objekt-orientierten Sprachen?

C++ ist, wie der Name schon andeutet, aus der prozeduralen Programmiersprache C hervor gegangen. In prozeduralen Programmiersprachen gibt es nicht die Kapselung von Daten und Prozeduren zu Objekten und folglich auch keine Vererbung. Die Programme können daher für den Entwickler schnell unübersichtlich werden und es besteht die Gefahr sich im Spaghetti-Code zu verheddern. Man kann mit prozeduralen Sprachen Programme für Desktop-GUIs entwickeln -- das macht heute aber niemand mehr. Somit korrespondieren alle Elemente des Anwendungsebene mit Objekten der Systemebene.
Ich muss nochmals eine Einschränkung für das Web nachschieben. HTML ist eine Seitenbeschreibungssprache. Sie ist weder prozedural noch objekt-orientiert, sondern lediglich eine Art Laufzettel, wie eine Seite nacheinander aufgebaut werden soll. Etwas dynamischer wird es dann mit JavaScript, um einfache Funktionen auf einer Seite auszuführen. Für große Websites gibt es dann aber entsprechend komplexe Baukästen, die oftmals auch wieder die Ideen der Objektorientierung benutzen.

Ach ja, und die Rasteransteuerung des Bildschirms- bitmapping- wodurch eine direkte Verbindung der manipulierbaren Objekte zum Speicherinhalt gegeben ist, war auch wesentlich dafür, oder sehe ich das falsch?

Ja genau. Die Rastergrafik ermöglicht zB. auch typographische Zeichensätze und eine visuelle Entsprechung zwischen der Bildschirmdarstellung und dem Ausdruck. Das Schlagwort dazu ist What-You-See-Is-What-You-Get, kurz WYSIWYG.
Der Laser-Drucker selbst wurde auch am Xerox Parc erfunden; sowie das lokale Netzwerk Ethernet, um die Alto Compututer miteinander und mit dem Drucker zu verbinden.

Und es fehlt in der Betrachtung noch die Maus, um die Pixel auf dem Bildschirm "anfassen" zu können. Die Maus ist aber nochmals 10 Jahre älter. Sie wurde 1963 von Doug Engelbart und Bill English am Stanford Research Institute entwickelt.

So dann, ich bin gespannt auf Ihre Antworten und verspreche Ihnen, dass die Fragerei dann aufhört :-)

Schade. Es war mir eine Freude.
Matthias Müller-Prove