Eiffel (Programmiersprache)
| {{#if: Eiffel | Eiffel | {{#invoke:WLink|getArticleBase}} }} | |||
|---|---|---|---|
colspan="2" class="notheme" style="text-align:center; background-color:#Vorlage:Standardfarbe;" | Eiffel logo |
{{#if: {{#invoke:Wikidata|claim|P154}} |
|
[[Datei:{{#invoke:Wikidata|claim|P154}}|150px]]
}} }} | ||
| {{{Screenshot}}}{{#if: | {{{Beschreibung}}} }}| }} | |||
| Basisdaten | |||
| Paradigmen: | {{{Paradigma}}}
}} | ||
| Erscheinungsjahr: |
{{#if: {{#invoke:Wikidata|claim|P571}} |
|
Erscheinungsjahr: | claim|P571|references=ja}}
}} }} |
| Designer: |
{{#if: {{#invoke:Wikidata|claim|P287}} |
|
Designer: | claim|P287|parameter=link|references=ja|list=, }}
}} }} |
| Entwickler: | Bertrand Meyer und Eiffel Software |
{{#if: {{#invoke:Wikidata|claim|P178}} |
|
Entwickler: | claim|P178|parameter=link|references=ja|list=, }}
}} }} |
| Aktuelle Version: | {{{AktuelleVersion}}} ({{{AktuelleVersionFreigabeDatum}}}) |
{{#if: {{#invoke:Wikidata|claim|P348}} | |
Aktuelle Version | {{#invoke:Wikidata|claim|P348|references=ja}}{{#if: {{#invoke:Wikidata|claim|Version|qualifier=P577}} | ({{#invoke:Wikidata|claim|Version|qualifier=P577}})}}}}
}} |
| Aktuelle Vorabversion: | {{{AktuelleVorabVersion}}} ({{{AktuelleVorabVersionFreigabeDatum}}})
}} | ||
| Typisierung: | {{{Typisierung}}}
}} | ||
| Wichtige Implementierungen: | {{{Implementierung}}}
}} | ||
| Dialekte: | {{{Dialekte}}}
}} | ||
| Standardisierungen: | Ecma, ISO/IEC
}} | ||
| Beeinflusst von: | Ada, ALGOL, Simula |
{{#if: {{#invoke:Wikidata|claim|P737}} |
|
Beeinflusst von: | claim|P737|parameter=link|references=ja|list=, }}
}} }} |
| Beeinflusste: | Ruby
}} | ||
| Betriebssystem: | plattformunabhängig |
{{#if: {{#invoke:Wikidata|claim|P306}} |
|
Betriebssystem: | claim|P306|parameter=link|references=ja|list=, }}
}} }} |
| Lizenz: | GPL |
{{#if: {{#invoke:Wikidata|claim|P275}} |
|
Lizenz: | claim|P275|parameter=link|references=ja|list=, }}
}} }} |
{{{Website}}} |
{{#if: {{#invoke:Wikidata|claim|P856}} |
| |||
{{#invoke: WLink | formatURL | {{#invoke:Wikidata|claim|P856|parameter=link}}}}
}} }} | |||
Eiffel ist eine universelle, rein objektorientierte Programmiersprache und wurde 1985 von dem französischen Informatiker Bertrand Meyer und seiner Firma Interactive Software Engineering Inc. (Goleta, Kalifornien) als Alternative zu C++ entworfen. Ursprünglich war sie nur für den Gebrauch durch die eigene Firma gedacht.
Die Programmiersprache
Der Name Eiffel, eine Reverenz an Gustave Eiffel, Erbauer des Eiffelturms und einen der großen Ingenieure des 19. Jahrhunderts, dokumentiert den Anspruch, eine Programmiersprache geschaffen zu haben, mit der Softwareentwicklung gemäß den Standards des Ingenieurwesens ermöglicht wird, da sie die Erkenntnisse des Software Engineering konsequent umsetzt.
Es handelt sich im Unterschied zu C++ um einen vollständig neuen Entwurf, der auf keiner älteren Sprache aufbaut. Erklärtes Ziel der Entwicklung ist es, mit Eiffel ein Werkzeug zu schaffen, um damit umfangreiche Software aus zuverlässigen, wiederverwendbaren sowie leicht wart- und testbaren Modulen zu konstruieren. Dazu werden potenziell riskante Möglichkeiten des Programmierens (manuelle Speicherverwaltung, globale Variablen, undisziplinierte Typumwandlungen, direkte Zeigermanipulation, Goto usw.) weitgehend ausgeschlossen, Optimierungen (speziell die Ausführungsgeschwindigkeit betreffend, etwa Inline-Ersetzung) an den Compiler delegiert. Der konsequent objektorientierte Ansatz für das Design im Großen wird ergänzt durch (eher strikte) Anwendung der strukturierten Programmierung im Detail, also auf der Ebene der einzelnen Routine (in der Eiffel-Terminologie: des einzelnen „feature“).
Die Syntax ist beeinflusst von Ada und der ALGOL-Sprachfamilie (Algol, Pascal, Modula). Sie soll vor allem leicht lesbar sein.
Die Sprachdefinition von Eiffel ist Public Domain und steht unter der Kontrolle von Nonprofit International Consortium for Eiffel (NICE); diese Organisation hat das Recht, jedes Entwicklungswerkzeug bezüglich der Konformität zur Sprachdefinition zu validieren, bevor es den Namen Eiffel tragen darf.
Am 21. Juni 2005 wurde in Amsterdam in der 89. Allgemeinen Versammlung der ECMA der Standard ECMA-367 Eiffel Analysis, Design and Programming Language verabschiedet. Er ist die aktuell gültige Spezifikation der Programmiersprache, nun Standard Eiffel genannt. 2006 übernahmen ISO und IEC den Standard.<ref> {{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:|{{{autor}}}: }}{{#if:|{{#if:ISO/IEC 25436:2006 Eiffel: Analysis, Design and Programming Language|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=ISO/IEC 25436:2006 Eiffel: Analysis, Design and Programming Language}}]{{#if:| ({{{format}}})}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:https://www.iso.org/standard/42924.html%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=ISO/IEC 25436:2006 Eiffel: Analysis, Design and Programming Language}}}}|[{{#invoke:URLutil|getNormalized|1=https://www.iso.org/standard/42924.html}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=ISO/IEC 25436:2006 Eiffel: Analysis, Design and Programming Language}}}}]}}{{#if:| ({{{format}}}{{#if:2006{{#if: 2023-12-24 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| )
| {{#if:{{#ifeq:en|de||{{#if:en|1}}}}| ;
| )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:https://www.iso.org/standard/42924.html%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=https://www.iso.org/standard/42924.html}}%7C%7C}}}}{{#if:ISO/IEC 25436:2006 Eiffel: Analysis, Design and Programming Language|{{#if:{{#invoke:WLink|isValidLinktext|1=ISO/IEC 25436:2006 Eiffel: Analysis, Design and Programming Language|lines=0}}||}}}}{{#if: | In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{{werk}}}}}}}{{#if: | {{{hrsg}}}{{#if: 2006|,|{{#if: 2023-12-24 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: 2006| {{#if:{{#invoke:DateTime|format|2006|noerror=1}}
|{{#invoke:DateTime|format|2006|T._Monat JJJJ}}
|{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=2006|class=Zitationswartung}} }}{{#if: |,|{{#if: 2023-12-24 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 2023-12-24 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:2006|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:21067||(?)}}}}}}{{#if: 2023-12-24|;}}}}{{#if: 2023-12-24| {{#if:2006{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2023-12-24 |ISO|noerror=1}} }}
|4=im Jahr
|7=im
|10=am
|#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2023-12-24|class=Zitationswartung}} }} {{#invoke:DateTime|format|2023-12-24|T._Monat JJJJ}}
| {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:en|de||{{#if:en|1}}}}|{{#if:2006{{#if: 2023-12-24 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| (
| {{#if: | | (}}
}}{{#ifeq:{{#if:en|en|de}}|de||
{{#invoke:Multilingual|format|en|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:en|en|de}}|de||, }}{{{kommentar}}}}})}}{{#if: 2006{{#if: 2023-12-24 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}en|{{#if: |: {{
#if:
| „{{
#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| Vorlage:Str trim
| {{#invoke:Vorlage:lang|flat}}
}}“
| {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| „Vorlage:Str trim“
| {{#invoke:Text|quote
|1={{#if:
| {{#invoke:Vorlage:lang|flat}}
| {{#invoke:Vorlage:lang|flat}} }}
|2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
|3=1}} }}
}}{{#if:
| (<templatestyles src="Person/styles.css" />{{#if: | : }}{{#if: | , deutsch: „“ }})
| {{#if:
| ({{#if: | , deutsch: „“ }})
| {{#if: | (deutsch: „“) }}
}}
}}{{#if: {{{zitat}}}
| {{#if:
| {{#if: {{{zitat}}}
| Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
| Vorlage:": Text= fehlt }}{{#if: | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
| Vorlage:": Ungültiger Wert: ref=
| {{{ref}}} }}
}}|.{{#if:{{#invoke:TemplUtl|faculty|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:
|0|=Vorlage:Toter Link/Core{{#if: https://www.iso.org/standard/42924.html | {{#if: | [1] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://www.iso.org/standard/42924.html | {{#if:{{#invoke:URLutil|isWebURL|https://www.iso.org/standard/42924.html}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://www.iso.org/standard/42924.html Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://www.iso.org/standard/42924.html | {{#if:{{#invoke:URLutil|isWebURL|https://www.iso.org/standard/42924.html}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}[https://www.iso.org/standard/42924.html }}|{{#switch: |0|=Vorlage:Toter Link/Core{{#if: https://www.iso.org/standard/42924.html | {{#if: | [2] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://www.iso.org/standard/42924.html | {{#if:{{#invoke:URLutil|isWebURL|https://www.iso.org/standard/42924.html}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://www.iso.org/standard/42924.html Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://www.iso.org/standard/42924.html | {{#if:{{#invoke:URLutil|isWebURL|https://www.iso.org/standard/42924.html}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[https://www.iso.org/standard/42924.html }} }}}}}}}}}}{{#if:| {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|Vorlage:Webarchiv/archiv-bot}}
}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</ref>
Eigenschaften
- statische Typprüfung
- automatische Speicherbereinigung (Garbage Collection)
- Mehrfachvererbung; entstehende Namenskonflikte können durch Umbenennung aufgelöst werden
- Abstrakte Klassen (sog. deferred classes)
- Generische Klassen (vgl. Templates in C++)
- Polymorphie
- standardmäßig dynamische Bindung; wo möglich, soll der Compiler in effizientere statische Bindung optimieren
- Elemente der funktionalen Programmierung (Tupel und sog. agents)
- (Präfix- und Infix-) Operatoren können wie Funktionen vereinbart werden
- Ausnahmebehandlung
- Schnittstelle zu anderen Programmiersprachen, insbesondere C und C++
- Standardbibliothek (im Umfang der von C++ vergleichbar)
Eine Spezialität von Eiffel ist die Unterstützung von Design by Contract bei der Entwicklung. Dazu stellt die Sprache differenzierte Mittel (Vor- und Nachbedingungen sowie Invarianten) bereit, um Klassen, ihre einzelnen Funktionen sowie ganze Klassenhierarchien auf systematische Weise mit (abschaltbaren) Zusicherungen (Assertions) auf Korrektheit der Abläufe und Zustände während der Laufzeit zu überwachen.
Sicherheit und Einfachheit
- kein Überladen von Funktionen und Operatoren – ein Name oder Operator darf nicht mehrmals in einer Klasse definiert sein
- nur ein universeller Schleifentyp mit explizit angebbarer Variante und Invariante (optional)
- keine spezielle Syntax zur Indizierung von Arrays und Strings
- keine Unterscheidung von „Attributen“ (Variablen) und Funktionen ohne Parameter für den Benutzer einer Klasse
- Attribute eines Objekts können nicht durch Zuweisung von außen verändert werden
- kein Programmtext außerhalb von Klassen, daher insbesondere auch keine globalen Variablen
- Routinen können den Wert ihrer formalen Parameter nicht verändern
- Groß/Kleinschreibung ist nicht signifikant
- Semikolon zur Trennung von Anweisungen nicht erforderlich
- getrennte Namensräume für Klassennamen und sonstige Namen
- weder eine allgemeine Sprunganweisung wie
gotonoch spezielle wiecontinue,break,return - kein unsicheres Konvertieren von Typen
- keine Pointerarithmetik
- Objekte können zur Laufzeit nur
voidsein, wenn explizit gefordert (genannt void safety)
Aufbau eines Eiffel-Programms
Ein Eiffel-Programm besteht nur aus Klassen. Jede Klasse ist ein eigenes Modul. Bei der Kompilierung wird eine Root-Klasse festgelegt, von der eine Instanz beim Starten des Programms erzeugt wird.
Beispielprogramm in Eiffel
<syntaxhighlight lang="eiffel"> class HELLO -- Liberty-Eiffel create make feature
make is
do print("Hello World.%N") end end
class HELLO -- ECMA-Eiffel create make feature
make
do print("Hello World.%N") end end </syntaxhighlight>
Erläuterung
Mit class HELLO wird die Klasse HELLO angelegt. Die create-Klausel definiert die make-Methode als Konstruktor. In diesem Beispiel entspricht make der main- Methode etwa von Java. Welche Klasse die Rootklasse ist, und welche Methode dieser Klasse zuerst aufgerufen werden soll, wird im Konfigurationsfile (eiffel configuration file *.ecf) des Projekts definiert. Ohne einen Konstruktor ist es nicht möglich, eine Instanz der Klasse zu erzeugen.
Anwendungsgebiete
Als Anwendungsgebiete, für die sich Eiffel besonders anbietet, werden genannt:
- sicherheitskritische Anwendungen
- Entwurf und Spezifikation
- Implementierung komplexer Datenstrukturen
- Ausbildung in objektorientierter Programmierung
Compiler
Der verbreitetste Compiler ist EiffelStudio von der Firma Eiffel Software des Erfinders der Sprache, Bertrand Meyer. EiffelStudio wird seit April 2006 außerdem unter der GPL lizenziert (duales Lizenzsystem).
SmartEiffel (ehemals SmallEiffel) war einst einer der verbreitetsten Open-Source-Compiler für Eiffel. Nachdem sich die Entwickler entschieden hatten, die Kompatibilität mit Eiffel aufzugeben und in eine andere Richtung zu gehen, wurde das Projekt mittlerweile eingestellt.
Im November 2013 wurde die erste offizielle Version des SmartEiffel Nachfolgers Liberty-Eiffel freigegeben, neben EiffelStudio und dem noch in Entwicklung befindlichen Gobo Eiffel Compiler (aus der Gobo Klassenbibliothek) ist dies der letzte noch aktiv entwickelte Compiler für Eiffel.<ref name="eiffel">Liberty-Eiffel</ref>
Die Entwicklung der Compiler Visual Eiffel und tecomp<ref>tecomp</ref> wurde eingestellt.
Eiffel konnte bis heute nicht die Verbreitung von C++ oder Java erlangen. Es steht auch keine der großen Software- oder IT-Firmen hinter Eiffel (wie das z. B. bei Java oder .NET der Fall ist).
Der Quelltext wird gewöhnlich in den Maschinencode der Zielmaschine kompiliert. Dies geschieht über den Umweg der Umwandlung der Eiffel-Quellen in C-Code, mit Ausnahme von Visual Eiffel, das direkt x86-Code für Windows und Linux generiert. Der so erzeugte Maschinencode ist je nach Anwendung vergleichbar mit entsprechendem C- bzw. C++-Code.<ref><templatestyles src="Webarchiv/styles.css" />{{#if:20160306085340
| {{#ifeq: 20160306085340 | *
| {{#if: Diplomarbeit von Peter Haefliger an ETH Zürich | {{#invoke:WLink|getEscapedTitle|Diplomarbeit von Peter Haefliger an ETH Zürich}} | {{#invoke:Webarchiv|getdomain|http://se.inf.ethz.ch/old/projects/peter_haefliger/peter_haefliger_da.pdf}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20160306085340}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Diplomarbeit von Peter Haefliger an ETH Zürich | {{#invoke:WLink|getEscapedTitle|Diplomarbeit von Peter Haefliger an ETH Zürich}} | {{#invoke:Webarchiv|getdomain|http://se.inf.ethz.ch/old/projects/peter_haefliger/peter_haefliger_da.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20160306085340}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Diplomarbeit von Peter Haefliger an ETH Zürich | {{#invoke:WLink|getEscapedTitle|Diplomarbeit von Peter Haefliger an ETH Zürich}} | {{#invoke:Webarchiv|getdomain|http://se.inf.ethz.ch/old/projects/peter_haefliger/peter_haefliger_da.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Diplomarbeit von Peter Haefliger an ETH Zürich | {{#invoke:WLink|getEscapedTitle|Diplomarbeit von Peter Haefliger an ETH Zürich}} | {{#invoke:Webarchiv|getdomain|http://se.inf.ethz.ch/old/projects/peter_haefliger/peter_haefliger_da.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Diplomarbeit von Peter Haefliger an ETH Zürich | {{#invoke:WLink|getEscapedTitle|Diplomarbeit von Peter Haefliger an ETH Zürich}} | {{#invoke:Webarchiv|getdomain|http://se.inf.ethz.ch/old/projects/peter_haefliger/peter_haefliger_da.pdf}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Diplomarbeit von Peter Haefliger an ETH Zürich | {{#invoke:WLink|getEscapedTitle|Diplomarbeit von Peter Haefliger an ETH Zürich}} | {{#invoke:Webarchiv|getdomain|http://se.inf.ethz.ch/old/projects/peter_haefliger/peter_haefliger_da.pdf}} }}
}}}}}}}}{{#if:
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20160306085340|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://se.inf.ethz.ch/old/projects/peter_haefliger/peter_haefliger_da.pdf}}
|| {{#if: || }}
}}{{#if: Diplomarbeit von Peter Haefliger an ETH Zürich
| {{#if: {{#invoke:WLink|isBracketedLink|Diplomarbeit von Peter Haefliger an ETH Zürich}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://se.inf.ethz.ch/old/projects/peter_haefliger/peter_haefliger_da.pdf%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://se.inf.ethz.ch/old/projects/peter_haefliger/peter_haefliger_da.pdf%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://se.inf.ethz.ch/old/projects/peter_haefliger/peter_haefliger_da.pdf }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}} (PDF; 723 kB)</ref>
Literatur
- Frieder Monninger: Eiffel, Objektorientiertes Programmieren in der Praxis. H. Heise Verlag, 1993
- Jean-Marc Jezequel: Object-Oriented Software Engineering with Eiffel. Addison-Wesley Professional, 1996
- Bertrand Meyer: Touch of Class – Learning to Program Well with Objects and Contracts. Springer, 2009
- Bertrand Meyer: Object-oriented Software Construction. 2nd ed., Prentice Hall, 1997
- Bertrand Meyer: Eiffel: The Language. Prentice Hall, 1992 – enthält eine ältere Sprachdefinition von Eiffel. Das Werk wird derzeit von Bertrand Meyer auf den ECMA-Standard aktualisiert und wird den Namen Standard Eiffel tragen.
- R. Switzer: Eiffel: An Introduction. Prentice Hall, 1995
- Richard Wiener: Software Development Using Eiffel – There Can Be Life After C++. Prentice Hall, 1995
Weblinks
- ecma-international.org – Der aktuell gültige Eiffel-Standard.
- eiffel-nice.org – Non-Profit-Organisation zur Weiterentwicklung, Standardisierung und Verbreitung von Eiffel.
- eiffel.com – Eiffel Software – Open Source Eiffel IDE für Windows, Linux, Mac OS X u. a.
- sourceforge.net – The Eiffel Compiler (tecomp) – Open Source Eiffel Compiler
- gobosoft.com – Die wichtigste portable Klassenbibliothek mit Unterstützung für komplexe Datenstrukturen, Unicode, XML, Parser etc. und eines neuen Open Source Eiffel Compilers.
- linux-magazin.de – Deutschsprachige Einführung in Eiffel
- smarteiffel.loria.fr – Open Source Implementierung einer Eiffel-ähnlichen Sprache.
- visual-eiffel.org – eine weitere Open Source Implementierung, die native code für X86-Systeme generiert.
- B. Meyer: inf.ethz.ch (PDF) – erklärt das Konzept von Eiffel.
- execve.net – Cetus Eiffel Page.
- Eiffel-Entwicklungsumgebung wird Open Source. heise online
- liberty-eiffel.org – GNU Nachfolger von SmartEiffel.
Einzelnachweise
<references />
{{#ifeq: s | p | | {{#if: 4280526-0 | |
}} }}{{#ifeq:||{{#if: | [[Kategorie:Wikipedia:GND fehlt {{#invoke:Str|left|{{{GNDCheck}}}|7}}]] }}{{#if: | {{#if: | | }} }} }}{{#if: | {{#ifeq: 0 | 2 | | }} }}{{#if: | {{#ifeq: 0 | 2 | | }} }}{{#ifeq: s | p | {{#if: 4280526-0 | | {{#if: {{#statements:P227}} | | }} }} }}{{#ifeq: s | p | {{#if: 4280526-0 | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P227}} | | }} }} }} }}{{#ifeq: s | p | {{#if: | | {{#if: {{#statements:P244}} | | }} }} }}{{#ifeq: s | p | {{#if: | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P244}} | | }} }} }} }}{{#ifeq: s | p | {{#if: | | {{#if: {{#statements:P214}} | | }} }} }}{{#ifeq: s | p | {{#if: | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P214}} | | }} }} }} }}Vorlage:Wikidata-Registrierung
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Parameter:Datum
- Wikipedia:Vorlagenfehler/Vorlage:"
- Wikipedia:Weblink offline fix-attempted
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link/URL fehlt
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Archiv-URL
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Linktext fehlt
- Wikipedia:GND fehlt
- Wikipedia:Normdaten-TYP falsch oder fehlend
- Wikipedia:GND in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:GND in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Wikipedia:LCCN in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:LCCN in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Wikipedia:VIAF in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:VIAF in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Objektorientierte Programmiersprache
- Programmiersprache mit einem ISO-Standard
- Gustave Eiffel