- Эйфель (язык программирования)
-
Eiffel Класс языка: Появился в: 1986 г.
Автор(ы): Bertrand Meyer
Последняя версия: 4.2
Типизация данных: Основные реализации: EiffelStudio, SmartEiffel, Visual Eiffel , Gobo Eiffel, "The Eiffel Compiler" tecomp
Испытал влияние: Повлиял на: Эйфель (англ. Eiffel) — объектно-ориентированный язык программирования с Паскаль-подобным синтаксисом, разработанный Бертраном Мейером. Программы на Эйфеле работают в MS Windows, OS/2 и Си, то есть являются своеобразным препроцессором. Далее этот код компилируется с помощью компилятора Си.
Содержание
"Hello, world!" на Eiffel
Коротко:
class HELLO creation make feature make is do print("Hello World%N") end end
Или развернуто:
indexing description: "Программа Здравствуй,мир!" author: "Elizabeth W. Brown" class HELLO creation make feature make is -- печать простого сообщения do io.put_string ("Hello World") io.put_new_line end end -- class HELLO
Примеры кода
Пример объявления класса на Eiffel:
class КВАДРАТ inherit ПРЯМОУГОЛЬНИК creation --заголовки конструкторов feature --свойства, описываемые здесь, являются видимыми для клиентов и подклассов feature {child} --свойства, описываемые здесь, являются скрытыми для клиентов, но видимыми для подклассов feature {none} --свойства, описываемые здесь, являются скрытыми для клиентов и подклассов end
где свойства — это общее название полей и методов. То есть атрибутов (attributes) и подпрограмм (routines) в терминологии Eiffel. Подпрограммы в подклассах могут замещать наследуемые только при совпадении их сигнатур. Ещё пример:
class COMPLEX creation initComplex feature real_part, imag_part: REAL feature initComplex(r, i: REAL) is do real_part := r imag_part := i end end --class COMPLEX
Ссылка определяется обычно:
complex_num: COMPLEX
Инициализация объекта (вызов конструктора):
create complex_num.initComplex(2.4, −3.2)
Иногда используется замена слова
create
на такое:!!complex_num.initComplex(2.4, −3.2);
В языке Eiffel нет деструкторов — задействуется сборка мусора, когда на объект нет ссылок.
Язык Eiffel поддерживает множественное наследование (несколько разделов
inherit
). Абстрактные классы определяются добавлением зарезервированного слова deferred («отложенный»):deffered class FIGURE -- тело класса end
«Отложенные» свойства должны содержать определения в «неотложенных» потомках «отложенного» класса.
Самым характерным свойством языка Eiffel является встроенные утверждения для создания принудительного контракта между вызывающим оператором и вызываемым кодом подпрограмм (см. также протоязык Plakalkül).
Все связывания сообщений (здесь: «сообщение» — метафора ООП, проявляющая себя в вызове метода объекта) в языке Eiffel динамические. В первоначальной версии языка все объекты размещались в динамической памяти, и доступ к ним осуществлялся с помощью ссылок. Компиляторы с Eiffel были дороги и не так распространены как компиляторы C/C++, что, в своё время, и ограничило распространение этого языка.
Стиль оформления программ на Eiffel
Язык Eiffel спроектирован с максимальным уклоном в простоту конструкций языка. Так, в нем определена лишь одна конструкция для цикла.
from ''условие на начало'' until ''условие на окончание'' loop тело цикла end
При программировании на Eiffel хорошим тоном считается придерживаться определённых строгих правил оформления. Благодаря этому, исходники читаются так, как если бы это была документация. Дополнительным стимулом соблюдать правила, является строгость самих компиляторов к оформлению. Многие из них (в частности SmartEiffel) не позволяют неправильно оформлять исходные коды, находя многие отступления от стиля, отказываясь компилировать и выводя предупреждения.
Вот некоторые рекомендации по оформлению исходников:
- в отличие от C++, в Eiffel отрицательно относятся к сокращениям.
Вместо drvMngr принято писать driver_manager
- все классы пишутся прописными буквами
class LIST
- переменные пишутся строчными буквами
item_1 : INTEGER
- константы всегда начинаются с прописной
Universal_G : REAL is 9.81
- рекомендуется использовать немоноширинный шрифт
- служебные слова набираются жирным
- все идентификаторы — курсивом
- в начале каждого класса желательно вставлять информацию о нем: кто написал, когда, функциональность класса. Вся эта информация записывается в самом начале файла с классом.
indexing description:"Класс что-то должен делать" author: "Вася Пупкин" class КЛАСС --тело класса end
- после названия каждой процедуры на следующей строке желательно описывать результат её действия:
feature IP: INTEGER is -- возвращает IP адрес локальной машины do -- тело запроса end
- особенностью Eiffel является необязательность точки-запятой «;» в конце каждой строки.
См. также
- Сравнение возможностей Eiffel с другими языками см. в статье Сравнение языков программирования
Дополнительная информация
- «Object-Oriented Software Construction», Bertrand Meyer, Prentice Hall, 2nd edition 1997.
- «Eiffel: The Language». Bertrand Meyer
- «Invitation to Eiffel». From ISE.
- «An Overview of Eiffel». Richard Paige.
- «Object-Oriented Software Engineering with Eiffel» Jean-Marc Jezequel.
- http://www.elj.com/
- http://www.cetus-links.org/oo_eiffel.html
- http://www.eiffel.com/
- news://comp.lang.eiffel/
- Документация Эйфель на русском
Основные языки программирования Используемые
в разработкеIEC61131-3 Прочие Стандарты Ecma International ANSI escape code · C++/CLI · C# · · CLI · DDS · E4X · · Eiffel · FAT · FD · HVD · Office Open XML · U3D · UDF · UMD
Wikimedia Foundation. 2010.