инициализация без создания экземпляра (Eiffel)

Это диаграмма BON для классов.

Обратите внимание, что в этом примере атрибуты не были созданы в виде экземпляров. Во время выполнения a использует take_off из b. Мне просто интересно, как инициализируется take_off в классе B_747. В моем задании у меня есть случай, когда это похоже на b := a.b c := a.c, где B_747 b и c имеют одинаковые атрибуты, но разные значения, присвоенные каждому. Я не знаю, как инициализировать атрибуты без их создания. В нем говорится, что мне не разрешено использовать b.make ("abc", 123). Может ли кто-нибудь дать мне пример того, как это реализовать. Кроме того, я не совсем уверен, что на самом деле означает b:=a.b.


person J0natthaaann    schedule 18.02.2014    source источник
comment
Я хотел бы спросить вашего учителя, что он имеет в виду, не создавая экземпляр? Если экземпляр не создан, ваш код не будет работать должным образом. Существует только один способ инициализировать экземпляр — вызвать процедуру создания create x.make (args). В противном случае, если тип расширяется, экземпляр автоматически инициализируется с помощью default_create.   -  person Emmanuel Stapf    schedule 19.02.2014
comment
На приведенных выше слайдах тот факт, что вы не видите инициализацию a и b, в основном потому, что это не цель слайдов, поскольку это слайд о полиморфизме и динамическом связывании.   -  person Emmanuel Stapf    schedule 19.02.2014
comment
@ J0natthaaann, приведенное описание кажется вашей новой интерпретацией задания. Публикация исходного текста и вопросы о неясных частях были бы намного лучше как для вас, так и для других, чтобы ответить. В частности, скорее всего, речь идет не об инициализации атрибутов, а об их свойствах во время компиляции и во время выполнения.   -  person Alexander Kogtenkov    schedule 19.02.2014


Ответы (1)


Пример иллюстрирует нечто другое, а не создание объекта. Отвечая на ваш первый вопрос, take_off не нужно инициализировать. Это просто особенность класса PLANE, реализованная в B_747. На слайде сказано, что хотя статический тип a — это PLANE, где take_off объявлен как отложенный (т. е. без какой-либо конкретной реализации), когда переменная прикрепляется к объекту типа B_747, она использует реализацию функции из B_747.

Отвечая на ваш последний вопрос, b := a.b означает, что результат функции b, вызванной для объекта, вычисленного выражением a, присоединен к переменной b. Последняя может быть локальной переменной или атрибутом текущего класса. Выражение a может быть функцией текущего класса, атрибутом текущего класса, аргументом текущей функции, локальной переменной текущей функции и т. д. в зависимости от контекста. Функция b, вызываемая для a, может быть функцией класса, соответствующего типу a, или атрибутом этого класса.

person Alexander Kogtenkov    schedule 19.02.2014