Eiffel ist eine objektorientierte Programmiersprache von Bertrand Meyer, konzipiert 1985 und erstmals 1986 veröffentlicht (Eiffel Software). Ihr Markenzeichen ist Design by Contract: Software wird über explizit formulierte Verträge spezifiziert — Vorbedingungen, Nachbedingungen und Klasseninvarianten.
Klassen und Vererbung
class...end— Klassenrahmenfeature— Abschnitt für Attribute und Routinen (Sichtbarkeit)inherit— Vererbung und Merkmals-Umbenennungcreate— Konstruktor-Routinen festlegendeferred/effective— abstrakte vs. konkrete Merkmaleonce— Routine nur einmal ausführen (Singleton-Muster)
Verträge und Schleifen
deposit (amount: INTEGER)
require
amount > 0
do
balance := balance + amount
ensure
balance = old balance + amount
invariant
balance >= 0
require— Vorbedingung der Routineensure— Nachbedingung nach der Ausführunginvariant— Klasseninvariante, gilt vor und nach jeder Routineold— Wert eines Ausdrucks vor der Routineloop...invariant...until...variant...end— Schleifen mit Vertrag
Weitere Elemente
local deklariert lokale Variablen, Result liefert den Rückgabewert einer Funktion, across iteriert über Container, attached prüft angehängte Referenzen und Void entspricht einer Null-Referenz. Entwicklungsumgebung ist EiffelStudio mit Compiler und der Klassenbibliothek EiffelBase.
Design by Contract hat viele Nachfolger gefunden — von Assertions über Contracts in .NET bis Ada. Verwandte Grundlagen: Objektorientierung und Smalltalk-Befehle.