Eiffel

Eiffel
Eiffel
Класс языка:

объектно-ориентированный

Появился в:

1986

Автор(ы):

Bertrand Meyer

Типизация данных:

строгая, статическая

Основные реализации:

EiffelStudio[1], SmartEiffel[2], Visual Eiffel[3], Gobo Eiffel[4], The Eiffel Compiler tecomp[5]

Испытал влияние:

Ada, Algol-60, Simula, Z

Повлиял на:

C#, D, Delphi, Java, Lisaac, Ruby, Sather

Eiffel (Эйфель) — объектно-ориентированный язык программирования с алголоподобным синтаксисом, разработанный Бертраном Мейером. В этом языке впервые был реализован метод контрактного программирования.

Существуют компиляторы Эйфеля для Windows, DOS, OS/2 и UNIX. Большинство реализаций Eiffel генерирует код Си, то есть являются своеобразным препроцессором. Далее этот код компилируется с помощью компилятора Си. Однако есть системы, которые порождают и непосредственно машинный код. Например, Visual Eiffel.[3]

Содержание

Ключевые особенности

  • Объектно-ориентированная программная структура, в которой класс выступает в качестве основной единицы декомпозиции.
  • Дизайн по контракту тесно интегрирован с другими языковыми конструкциями.
  • Автоматическое управление памятью, как правило, осуществляется в процессе сборки мусора.
  • Наследование, в том числе множественное наследование, переименование, переопределения, конструкция select («выбор»), наследование без полиморфизма, и другие механизмы, призванные сделать наследование безопасным.
  • Ограниченное и неограниченное обобщённое программирование.
  • Единая система типов, использующая механизмы как значащих, так и ссылочных типов данных, в которых все типы, включая базовые, например, INTEGER, являются классами.
  • Типо-безопасность (статическая типизация).
  • Статическая защита от вызовов по пустой ссылке, используя механизм прикрепления типов (англ. attached-types mechanism).
  • Агенты — объекты, сворачивающие вычисления внутри себя, — тесно связаны с механизмами замыканий и лямбда-выражений.
  • «Единоразовые» (англ. once) процедуры или процедуры выполняющиеся только один раз, для совместного использования объекта и децентрализованной инициализации.
  • Традиционный синтаксис на основе ключевых слов языков Алгол и Паскаль, но без использования сепаратора (точка с запятой в конце инструкции не является обязательной).
  • Нечувствительность к регистру.

Переопределение операций

Для подпрограмм доступен синтаксис операций. То есть инфиксный оператор + является псевдонимом для метода plus, а * — для product:

class INTEGER 
  featurefeature
    plus alias "+" (other: like Current): like Current
      doend
 
    product alias "*" (other: like Current): like Current
      doendend

Данный синтаксис является развитием способа переопределения операций в языке Клу. В отличие от С++ и Клу, Eiffel позволяет также определение свободных операций, знаки которых могут состоять из одного или более символов из следующего набора

: \ ? = ~ / ! # $ % & * + - / < > @ ^ ` |

при условии, что этот символ или комбинация символов не заняты в синтаксисе Eiffel для других целей. Вот примеры возможных свободных операций:

!-! @ |> <| -|-> <-|- ==> <== ++

Hello, world!

Коротко:

class HELLO 
  create
    make
  feature
    make
      do
        print("Hello World%N")
      end
end

или развёрнуто, соблюдая стиль написания:

note
   description: "Программа Здравствуй,мир!" 
   author: "Elizabeth W.Brown"
class 
  HELLO 
create    
  make
feature
  make
    -- Напечатать простое сообщение.
    do      
      print ("Hello World%N")
    end
end

Примеры кода и особенности языка

Пример объявления класса на Eiffel:

class КВАДРАТ
  inherit ПРЯМОУГОЛЬНИК
    -- КВАДРАТ - подкласс ПРЯМОУГОЛЬНИКа
    -- может быть указано более одного блока inherit.
    -- для каждого родительского класса может быть указан список наследуемых методов.
    -- таким образом решается проблема конфликтов множественного наследования.
  create
    -- перечень имен конструкторов
  feature
    -- свойства, описываемые здесь, являются видимыми для всех клиентов. 
    -- Более точно такая запись эквивалентна записи feature {ANY} - 
    -- что означает, что свойства, определенные в этом разделе,
    -- доступны классу ANY и всем его наследникам. 
    -- А так как класс ANY является родителем всех классов (истоком графа классов),
    -- у которых в явном виде не заданы родительские классы, 
    -- то это означает доступность для использования любым классом 
  feature {CHILD}
    -- свойства, описываемые здесь, являются доступными для использования для класса CHILD и его наследников
  feature {NONE}
    -- свойства, описываемые здесь, являются скрытыми для использования клиентами.
    -- Более точно доступны только для класса NONE, который является стоком графа классов
end

где свойства — это общее название полей данных и методов. То есть атрибутов (англ. attributes) и подпрограмм (англ. routines) в терминологии Eiffel. Подпрограммы в подклассах (классах наследниках) могут замещать (переопределять) наследуемые только при конформности (то есть совпадении) их сигнатур.

Ещё пример:

class COMPLEX
  create
    make
  feature
    real_part, imag_part: REAL
  feature
    make(r, i: REAL)
      do
        real_part := r
        imag_part := i
      end
end

Описание переменной выглядит сходно с описанием переменных в Паскаль-подобных языках:

идентификатор_переменной: ТИП

Например:

 complex_num: COMPLEX

Инициализация (создание) объекта c вызовом конструктора:

 create complex_num.make (2.4, −3.2)

Ранее использовался несколько иной синтаксис, при котором служебное слово create заменялось на двойной восклицательный знак !!:

 !! complex_num.make (2.4, −3.2)

В языке Eiffel нет деструкторов, но есть автоматический сборщик мусора. Когда на объект не останется ссылок, он будет уничтожен сборщиком мусора.

Язык Eiffel поддерживает множественное наследование (несколько разделов inherit).

Абстрактные классы определяются добавлением зарезервированного слова deferred («отложенный»):

deferred class FIGURE
  -- тело класса
end

«Отложенные» свойства будут определяться в классах наследниках. Для того, чтобы можно было создать объект класса, он не должен содержать ни одного «отложенного» свойства.

Самым характерным свойством языка Eiffel являются встроенные утверждения для создания принудительного контракта между вызывающим оператором и вызываемым кодом подпрограмм (см. также: Планкалкюль).

Все обращения к свойствам объектов по умолчанию динамические, хотя компиляторы могут разобраться, где динамическое связывание может быть заменено на статическое и естественно делают это. Такая особенность позволяет не вводить понятие virtual («виртуальный»). Наоборот, вводится понятие frozen («замороженное»), то есть «непереопределяемое» свойство.

Язык различает на уровне описаний два вида классов ссылочные и expanded («структурные», «развёрнутые»), что также применимо к описаниям переменных. Это позволяет минимизировать разницу между ссылкой на объект и самим объектом. Разница эта проявляется при присваивании, копировании и создании объектов.

Причины слабого распространения языка

Компиляторы с Eiffel от автора языка дороги и не так распространены, как компиляторы C/C++, что, в своё время, и ограничило распространение этого языка, свободных/бесплатных альтернатив долгое время не было.

Стиль оформления программ

Язык Eiffel спроектирован с максимальным уклоном в простоту конструкций языка.

Так, в нём определена лишь одна конструкция для цикла.

from 
  начальная инициализация
until 
  условие выхода из цикла
loop
  тело цикла
end

При программировании на Eiffel хорошим тоном считается придерживаться определённых правил оформления.

Благодаря этому, исходники читаются так, как если бы это была документация. Дополнительным стимулом соблюдать правила является строгость самих компиляторов к оформлению. Многие из них (в частности SmartEiffel[2]) не позволяют неправильно оформлять исходные коды, находя многие отступления от стиля, выводя предупреждения или даже отказываясь компилировать.

Вот некоторые рекомендации по оформлению исходных текстов:

  • служебные слова набираются жирным (актуально для печати и вывода на современные мониторы)
  • все идентификаторы — курсивом
  • в отличие от Cи-подобных языков, в Eiffel отрицательно относятся к сокращениям. Вместо drvMngr принято писать driver_manager
  • все классы пишутся прописными буквами
class LIST
  • переменные пишутся строчными буквами
count_of_sheeps: INTEGER
  • константы всегда начинаются с прописной
Gravity: REAL = 9.81
  • рекомендуется использовать немоноширинный шрифт
  • в начале каждого класса желательно вставлять информацию о нём: кто написал, когда, функциональность класса. Вся эта информация записывается в самом начале файла с классом.
note
   description: "Описание этого класса."
   author: "Вася Пупкин"
class КЛАСС
   -- тело класса
end
  • после названия каждой процедуры на следующей строке желательно описывать результат её действия:
feature
   IP: INTEGER
         -- IP адрес локальной машины.
      do
         -- тело запроса
      end
  • особенностью Eiffel является необязательность точки c запятой «;» в конце синтаксических конструкций.

Примечания

Литература

  • Bertrand Meyer. Object-Oriented Software Construction. 2nd edition, Prentice Hall, 1997.
  • Bertrand Meyer. Eiffel: The Language
  • Invitation to Eiffel. From ISE.
  • Richard Paige. An Overview of Eiffel
  • Jean-Marc Jezequel. Object-Oriented Software Engineering with Eiffel

Ссылки



Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "Eiffel" в других словарях:

  • Eiffel 65 — Saltar a navegación, búsqueda Eiffel 65 Información personal Origen Turín, Italia Información artística Género(s) …   Wikipedia Español

  • Eiffel — can refer to several things: * The Eiffel Tower in Paris * Gustave Eiffel, engineer and designer of the Eiffel Tower * Eiffel (company), successor of Gustave Eiffel s engineering company * The Eiffel (programming language), developed by Bertrand… …   Wikipedia

  • Eiffel — Saltar a navegación, búsqueda Eiffel tiene los siguientes significados: Torre Eiffel: torre metálica emblemática de la ciudad de París. Gustave Eiffel: ingeniero francés creador de la torre homónima. Lenguaje de programación Eiffel: lenguaje de… …   Wikipedia Español

  • EIFFEL (G.) — EIFFEL GUSTAVE (1832 1923) Né à Dijon, Gustave Eiffel arrive à Paris en 1850 pour terminer ses études au collège Sainte Barbe, voisin de la toute nouvelle bibliothèque Sainte Geneviève, dont la structure métallique a peut être influencé ses… …   Encyclopédie Universelle

  • Eiffel — tiene los siguientes significados: 1. Torre Eiffel: Creada por el arquitecto francés Gustave Eiffel. 2. Lenguaje de programación Eiffel: Lenguaje de programación orientado a objetos. * * * Eiffel, Gustave …   Enciclopedia Universal

  • Eiffel 65 — Маурицио Лобина, Джеффри Джей на сцене в Ostia, Италия Основная информация Жанр …   Википедия

  • Eiffel — (Gustave) (1832 1923) ingénieur français, pionnier de l architecture du fer. Il réalisa le viaduc de Garabit (1882 1884), l armature de la statue de la Liberté (1886, New York), la tour Eiffel, tour métallique construite (1887 1889) pour l… …   Encyclopédie Universelle

  • Eiffel — Ce nom mondialement célèbre est en fait un surnom, porté dans la famille de Gustave Eiffel depuis le début du XVIIIe siècle et renvoyant sans doute à l Eifel, massif boisé d Allemagne (Rhénanie Palatinat). Le vrai nom de cette famille est… …   Noms de famille

  • Eiffel 65 — Als Bloom 06: Links: Maurizio Lob …   Deutsch Wikipedia

  • Eiffel — Eiffel, Alexandre Gustave, Ingeuieur, geb. 15. Dez. 1832 in Dijon, besuchte 1852–55 die École centrale des arts et manufactures und widmete sich seit 1858 der Ausführung von Eisenbauten. Er baute die große Brücke bei Bordeaux und unter… …   Meyers Großes Konversations-Lexikon


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»