www.wikidata.de-de.nina.az
Self sɛlf ist eine Programmiersprache die vor allem in Hinblick auf Ausdrucksfahigkeit und Formbarkeit hin von Randall B Smith und David Ungar entworfen wurde Um diese Ziele zu erreichen wurde ein rein prototypenbasiertes Objektmodell mit einheitlichem Zugriff auf Zustand und Verhalten der Objekte also auf ihre Attribute und Methoden entwickelt Im Gegensatz zu anderen Programmiersprachen ist es in Self moglich den Zustand von Objekten zu vererben und die Vererbung zur Laufzeit dynamisch anzupassen SelfBasisdatenEntwickler David Ungar Randall SmithErscheinungsjahr 1987Aktuelle Version 2017 1 Mandarin 24 Mai 2017 Betriebssystem Linux macOS u a Programmiersprache dynamisch streng typisiertKategorie Objektorientierte Programmiersprache Prototypenbasierte Programmierung IDELizenz BSD artige licenseselflanguage orgDie letzte von Sun herausgegebene Version 4 3 wurde im Juni 2006 veroffentlicht Sie lauft auf Intel und PowerPC basierten Apple Rechnern und auf Sun SPARC aber nicht unter Linux oder Microsoft Windows 1 Die Weiterentwicklung wird danach nicht mehr durch Sun betrieben und geschieht derzeit unabhangig Ideen und Konzepte die ihren originaren Ursprung in der Programmiersprache Self haben wurden uber die Jahre sowohl in das Squeak Smalltalk System ubernommen als auch in Programmiersprachen wie Slate oder io weitergefuhrt Das Self UniversumDie herausragende Self Eigenschaft ist wohl das Self Universum eine Art grafische Benutzeroberflache GUI innerhalb derer mit dem Self Laufzeitsystem interagiert werden kann Eine Interaktion erfolgt hierbei in der Regel uber die Maus und oder die Tastatur Visualisiert wird das Self Universum mittels des GUI Frameworks Morphic Betritt eine Person das Self Universum so geschieht dies immer uber die Lobby eine Anspielung auf die Empfangshalle eines Hotels In ihr befinden sich alle im System vorhandenen Objekte Module Namensraume und Traits Das Konzept des Programmier Universums als auch das Morphic Konzept wurde nahezu identisch im Squeak Smalltalk System umgesetzt Trotz der diversen Portierungen sollte man bedenken dass es sich bei der Programmiersprache Self um ein eher akademisch motiviertes Unterfangen handelt Trotzdem hatte und haben die in Self erprobten Neuheiten Einfluss auf neuere objektorientierte Programmiersprachen Inhaltsverzeichnis 1 Geschichte 2 Die Entwicklungsumgebung 3 Sprachbeschreibung 3 1 Sprachkonstrukte 4 Ein kurzes Programm 5 Vererbung 6 Slots hinzufugen 7 Versionen 8 Siehe auch 9 Literatur 10 Weblinks 11 EinzelnachweiseGeschichte BearbeitenSelf wurde ursprunglich 1986 von David Ungar und Randall B Smith wahrend ihrer Arbeit am Xerox Parc Institut entworfen Ihr Ziel war es nachdem Smalltalk 80 veroffentlicht worden war die Software Technologie weiter voranzubringen Sie wechselten zur Stanford Universitat und veroffentlichten im Folgejahr den ersten funktionierenden Compiler Das erste vollstandige Self System wurde 1990 veroffentlicht im Jahr darauf wechselte die Gruppe zu Sun Microsystems wo das Self System als Experimentierfeld fur die Entwicklung genutzt wurde Hier kam Urs Holzle dazu der neue Compiler und VM Techniken entwickelte und an der Entwicklung der Programmiersprache Strongtalk beteiligt war 1995 wurde die Entwicklung bei Sun Microsystems offiziell eingestellt Self 4 0 ist in einem gewissen Sinn der Gipfelpunkt des Self Projekts das aber bei Sun offiziell nicht weitergefuhrt wird 2 Allerdings gab es noch die Entwicklergruppe an der Stanford Universitat sowie verschiedene andere Initiativen Trotz des offiziellen Stops wurde im September 2002 die Version 4 1 6 veroffentlicht 3 Im April 2004 erschien dann die Version 4 2 und im Juni 2006 die Version 4 3 1 Seit Juli 2010 gibt es eine Version 4 4 4 Im Februar 2011 wurde ein experimenteller Snapshot einer Version 4 5 herausgegeben 5 Bis zur Veroffentlichung einer fertigen Version unter dem Namen Mallard dauerte es jedoch bis Januar 2014 6 Eine weitere Version mit dem Namen Mandarin entstand 2017 7 Die Entwicklungsumgebung BearbeitenDas Self System kann als prototypenbasierte Smalltalk Variante verstanden werden Die Entwickler bezeichnen die Sprache als Smalltalk Dialekt und meinen damit dass sich die Syntax der Sprache und auch die Objektbibliothek weitgehend an Smalltalk orientiert Der Klassenbrowser von Smalltalk wurde durch einen Objektbrowser ersetzt Wie Smalltalk beruht Self auf einer Laufzeitumgebung und einer virtuellen Maschine Self Programme benotigen genau wie andere auf virtuelle Maschinen beruhende Systeme immer die zugehorige Speicherumgebung um ausgefuhrt werden zu konnen Als Folge werden Anwendungen haufig als Abbild des Speichers ausgeliefert Dieses Speicherabbild wird auch Snapshot genannt Eine Alternative zur Auslieferung von Snapshots sind Textdateien in die Anderungen am System oder auch ganze Module uber den sogenannten Transporter ex und importiert werden konnen Diese Textdateien lassen sich mit einem beliebigen Editor bearbeiten Sie sind vergleichbar mit einem C Quelltext jedoch wesentlich machtiger Das gesamte System lasst sich damit steuern Da diese Textdateien auch automatisch mit dem Start des Systems eingelesen werden konnen kann Self genau wie Perl als Skriptsprache genutzt werden Die typische Grosse eines Snapshots ist ca 13 MB fur ein vollstandiges System mit JIT Compiler Interpreter und der Entwicklungsumgebung Der von Smalltalk geerbte Vorteil ist dass die Arbeit am System jederzeit auch mitten in einer Berechnung unterbrochen werden und in Snapshots gespeichert werden kann Alle Anderungen also das was bei klassischen Systemen dem Programmieren einer Zeichnung oder irgendeiner Arbeit mit dem System entspricht konnen beim nachsten Neustart auf Wunsch wieder vorhanden sein Das System wacht da auf wo es verlassen wurde Self ist persistent Die Self Entwicklungsumgebung ermoglicht es Quellcode Objekte Vererbung die Objekthierarchie oder einzelne Werte zur Laufzeit zu verandern Moglich wird das durch die Fahigkeit zum Multitasking und einen nahtlos in das System integrierten Debugger Das fuhrt zu einer inkrementellen Art des on the fly Entwickelns Einige moderne Methoden der Softwareentwicklung etwa die Agile Softwareentwicklung oder das Adaptive Software Development propagieren Ahnliches So ist die Entwicklungsumgebung auf das schnelle und kontinuierliche Andern einzelner Objekte zugeschnitten Das Refactoring des Objekt Designs ist beinahe so einfach wie das Entfernen einer Methode via Drag amp Drop um sie so einem neuen Objekt zuordnen zu konnen Einfachere Aufgaben wie das Erstellen von Test Methoden konnen durch eine Kopie bewaltigt werden Die entsprechende Methode wird anschliessend in die Objekt Kopie gezogen um sie so verandern zu konnen Im Vergleich zu traditionellen Systemen besitzt nur das soeben neu erzeugte Objekt auch neuen Quellcode Es ist folglich nicht erforderlich Code neu zu kompilieren um ihn testen zu konnen Sobald sichergestellt wurde dass die Test Methode entsprechend der Spezifikation funktioniert kann diese zuruck in das Ausgangs Objekt kopiert werden Sprachbeschreibung BearbeitenIm Folgenden soll nur ein erster Eindruck dieser Programmiersprache vermittelt werden Fur umfassende Informationen sei auf The Self Language 8 und Teaching Self and Prototype Based Programming 9 verwiesen Self ist eine objektorientierte prototypenbasierte Programmiersprache Die Grundlage bilden einige wenige einfache Konstrukte Prototypen Steckplatze und das Verhalten Im Gegensatz zu den Konzepten von Smalltalk und vielen anderen Programmiersprachen gibt es weder Klassen noch Variablen Das Programmiermodell beruht im Wesentlichen auf kommunizierenden Objekten und einer einfachen Form von Vererbung In Self werden keine Programme im eigentlichen Sinn geschrieben stattdessen wird das Self Universum beschrieben Hier gibt es nur Objekte die durch das Verschicken von Nachrichten miteinander kommunizieren Dieses Verschicken einer Nachricht entspricht einem Prozedur Aufruf in der klassischen Programmierung Neue Objekte werden durch Klonen bestehender Objekte erzeugt Durch das Prototypen Konzept ist eine interaktive Programmierung moglich Der Programmierer interagiert mit den Objekten im Self Universum In Self wird nicht zwischen dem Zustand eines Objekts und seinem Verhalten unterschieden Der Zustand eines Objekts ergibt sich aus seinen Eigenschaften also den Werten seiner Attribute Das Verhalten eines Objekts wird in seinen Methoden beschrieben Dadurch dass es keinen Unterschied zwischen dem Zustand und dem Verhalten gibt wird die Lucke verringert die in anderen Programmiersprachen zwischen Objekten Prozeduren und Variablen besteht In Self ist alles eins So liefert beispielsweise der Aufruf einer Eigenschaft sofern das Objekt oder eines seiner Vorfahren diese Eigenschaft denn hat deren Wert aPerson name In dieser Anweisung wird die Eigenschaft name des Objekts aPerson aufgerufen bzw abgefragt Mit der folgenden Anweisung wird derselben Eigenschaft ein Wert zugewiesen aPerson name myself Sprachkonstrukte Bearbeiten Objekte bestehen aus theoretisch beliebig vielen Steckplatzen slots Ein Steckplatz hat einen Namen und kann ein Attribut Wert oder eine Methode Prozedur enthalten In jedem Fall ist es ein Objekt das er aufnimmt Ein Objekt besteht somit aus einem oder mehreren Steckplatzen fur Objekte auf die mittels des Namens zugegriffen werden kann Ein Methoden Objekt enthalt eine oder mehrere Anweisungen die ausgefuhrt werden wenn das Methoden Objekt aufgerufen wird Ein Attribut Objekt liefert sich selbst zuruck wenn es wie ein Methoden Objekt aufgerufen wird Neue Objekte werden durch Klonen erzeugt Dazu wird ein passendes Objekt als Prototyp benutzt also sozusagen als eine Kopiervorlage Jedes Objekt kann als Prototyp genutzt werden Ein kurzes Programm BearbeitenHier das klassische Hallo Welt Programm Hello World print Der Punkt am Ende der Anweisung bewirkt dass die Ruckgabe des Wertes die eigentlich bei allen Nachrichten erfolgt unterdruckt bzw vermieden wird Hier noch einmal in einer aufwandigeren Form desktop activeWindow draw labelWidget copy label Hello World Erlauterung Als erstes wird das desktop Objekt nach dem aktiven Fenster gefragt Das desktop Objekt sieht dazu in seiner Liste der aktuellen Fenster nach und liefert das entsprechende Objekt zuruck Diesem Objekt wird in dem Steckplatz namens draw eine zuvor erzeugte Kopie des labelWidget Objekt eingetragen Bevor das passiert wurde der labelWidget Kopie bereits die Nachricht geschickt dass es einen Steckplatz mit dem Namen label anlegen soll und dort den Wert Hello World ablegen soll Vererbung BearbeitenTheoretisch ist jedes Self Objekt eine eigenstandige Entitat Es existieren keine Klassen keine Meta Klassen etc um die Eigenschaften und Verhaltensweisen eines Objektes zu spezifizieren Anderungen am Objekt selbst beeinflussen das Verhalten anderer Objekte nicht In Einzelfallen jedoch ware dies durchaus sinnvoll Grundsatzlich versteht ein Objekt nur die Nachrichten die auch einem seiner Slots eindeutig zugeordnet werden konnen Verweisen jedoch ein oder mehrere Slots auf ein parent Objekt so ist das Objekt imstande Nachrichten an diese Elternobjekte zu delegieren insofern es diese selbst nicht zu interpretieren vermag Auf diesem Weg verwaltet Self Aufgaben die in traditionellen objektorientierten Sprachen das Vehikel der Vererbung benotigt hatten Diese Verfahrensweise wird zudem benutzt um Namensraume zu implementieren Um den Zusammenhang der Vererbung besser veranschaulichen zu konnen soll an dieser Stelle von einem Objekt namens BankKonto ausgegangen werden Dieses soll in einer einfachen Buchhaltungsanwendung zum Einsatz kommen Es liegt nahe das Objekt BankKonto mit den Methoden einzahlen und abheben auszustatten Zusatzliche Slots fur einfache Daten werden ebenfalls benotigt Das soeben spezifizierte Objekt ist ein Prototyp stellt aber bereits ein voll funktionsfahiges Bankkonto dar Erstellt man einen Klon des Objekts BankKonto fur Bobs Konto so erhalt man eine Kopie die mit dem ursprunglichen Prototyp identisch ist Eine effektivere Herangehensweise ist es jedoch ein einfaches Objekt namens traits object zu erstellen das all die Elemente enthalt die man normalerweise mit einer Klasse assoziieren wurde Analog zum aktuellen Beispiel wurde das Objekt BankKonto als logische Konsequenz weder eine einzahlen noch eine auszahlen Methode besitzen Vielmehr hat es nun ein Elternobjekt das diese Methoden enthalt Auf diese Weise ist es moglich unzahlige Kopien des Bankkonto Objekts zu erzeugen deren Verhalten durch eine einzige Anderung am ElternObjekt verandert werden konnen Wie unterscheidet sich der geschilderte Sachverhalt von den traditionellen Klassen einer OO Sprache Was bedeutet wohl das nachfolgende Konstrukt myObject parent someOtherObject Dieses Konstrukt verandert die Klasse von myObject zur Laufzeit indem der Wert der mit dem Slot parent assoziiert ist verandert wird der Stern ist Teil des Slot Namens und gehort folglich nicht zur Nachricht die dieser Slot empfangt Slots hinzufugen Bearbeiten nbsp Ein Self Slot ObjektAn dieser Stelle stellt sich die Frage wie Kopien eines Self Objekts modifiziert werden mussen damit diese neue Slots enthalten Benutzt man die grafische Self Programmierumgebung gestaltet sich dies ziemlich einfach Programmatisch gesehen ist es am sinnvollsten ein sogenanntes Mirror Objekt des Objekts zu erzeugen und dann zu modifizieren Dazu schickt man diesem Mirror Objekt entsprechende Nachrichten Ein Weg der schneller zum Ziel fuhrt ist den Primitiv AddSlots zu verwenden Ein Primitiv hat dieselbe Syntax wie eine normale Schlusselwort Nachricht Jedoch beginnt dessen Name mit einem Unterstrich Der AddSlots Primitiv gilt inzwischen als uberholt wegen seiner Kurze wird er hier trotzdem verwendet Eines der ersten Beispiele beschaftigte sich mit dem Refactoring einer einfachen Klasse namens Fahrzeug Das Refactoring wurde notwendig um zwischen Personen und Lastkraftwagen unterscheiden zu konnen Versucht man das Refactoring in Self umzusetzen so sieht dies etwa aus wie folgt AddSlots vehicle lt parent traits clonable Da der Empfanger des AddSlots Primitivs nicht angegeben wurde ist dieser automatisch self Wird ein Ausdruck innerhalb des Shell Prompt der Entwicklungsumgebung eingegeben und ausgefuhrt so ist das Objekt das daraus resultierende Nachrichten empfangt immer das lobby Objekt Das an AddSlots ubergebene Argument ist das Objekt das in das Empfanger Objekt kopiert wird In diesem Fall handelt es sich um ein Objekt Literal mit genau einem Slot Der Name des Slots ist vehicle und dessen Wert ist ein weiteres Objekt Literal Die Notationsweise lt impliziert einen weiteren Slot namens vehicle der notwendig ist um den Wert des ersten Slots zu verandern Das weist auf einen Slot mit konstantem Wert hin Aus diesem Grund gibt es auch keinen korrespondierenden parent Slot Das Objekt Literal das den Initialwert vehicle reprasentiert hat einen Slot um auf Nachrichten des Klonens reagieren zu konnen Ein Objekt das tatsachlich leer ist wird durch oder einfach dargestellt Ein solches Objekt ist nicht in der Lage Nachrichten zu empfangen vehicle AddSlots name lt automobile In diesem Beispiel ist der Nachrichten Empfanger das vorherige Objekt das zusatzlich zum parent Slot sowohl einen name als auch einen name Slot enthalt AddSlots sportsCar lt vehicle copy sportsCar AddSlots driveToWork some code this is a method Trotz der Tatsache dass es sich zuvor bei den Objekten vehicle und sportsCar um identische Objekte handelte beinhaltet das aktuelle Objekt nun einen Slot dem eine Methode zugeordnet ist die es zuvor nicht gab Methoden konnen nur in Slots mit konstantem Wert enthalten sein AddSlots porsche911 lt sportsCar copy porsche911 name Bobs Porsche Versionen Bearbeiten4 0 lauft auf SPARC basierten Sun Workstations mit SunOS 4 1 x Solaris 2 3 oder Solaris 2 4 als Betriebssystem 4 1 6 lauft auch als Anwendung unter Mac OS X Die Unterstutzung fur Mac OS 9 wurde eingestellt 4 2 1 lauft auch auf G3 Macs 4 3 lauft auch auf Intel basierten Macs 4 4 lauft unter Mac OS X und Linux x86 4 5 lauft unter Mac OS X und LinuxSiehe auch BearbeitenSmalltalk StrongtalkLiteratur BearbeitenA Self Bibliography engl Literaturliste bei Sun s ehemaliger Self Group Weblinks BearbeitenYahoo Gruppe uber SelfWebsites der Self Entwickler David Ungar Randall B Smith Urs HolzleListe einiger Self Implementierungen Die originare Self Implementierung von Sun Self Implementierung fur x86 Linux und Cygwin Aktuelle Weiterentwicklung und DokumentationEinzelnachweise Bearbeiten a b Release 4 3 Memento vom 28 Juni 2008 im Internet Archive bei sun com Release 4 0 Memento vom 31 Mai 2008 im Internet Archive bei sun com Release 4 1 Memento vom 31 Mai 2008 im Internet Archive bei sun com Version 4 4 Version 4 5 fruher Snapshot auf blog selflanguage org Version 4 5 Release Mallard Memento vom 6 Dezember 2017 im Internet Archive auf blog selflanguage org Self Mandarin 2017 1 Memento vom 24 Mai 2017 im Internet Archive The Self Language Memento vom 20 Juni 2008 im Internet Archive auf research sun com Teaching Self and Prototype Based Programming Memento vom 4 Juni 2008 im Internet Archive auf research sun com Abgerufen von https de wikipedia org w index php title Self Programmiersprache amp oldid 227359345