Языки программирования - концепции и принципы

как разрешить неоднозначности, если имя


 

 

 

 

 

Множественное наследование

Язык Eiffel поддерживает множественное наследование:

class Winged_Vehicle

feature

           Weight: Integer;

           display is . .. end;

end;

class Motorized_Vehicle



feature

          Weight: Integer;

          display is ... end;

end;

class Airplane inherit

              Winged_Vehicle, Motorized_Vehicle

              …

end;

Поскольку допускается множественное наследование, в языке должно опре­деляться, как разрешить неоднозначности, если имя унаследовано от не­скольких предков. Правило языка Eiffel в основе своей очень простое (хотя его формальное определение сложное, поскольку оно должно принимать во внимание все возможности иерархии наследования):

Если свойство унаследовано от класса предка более чем одним путем, оно используется совместно; в противном случае свойства реплицируются.

rename- и redef ine-конструкции могут использоваться для изменения имен по мере необходимости. В примере класс Airplane наследует только одно по­ле Weight. Очевидно, по замыслу предлагалось для класса иметь два поля Weight, одно для корпуса летательного аппарата и одно для двигателя. Это­го можно достичь за счет переименования двух унаследованных объектов:

class Airplane inherit

       Winged_Vehicle

              rename Weight as Airframe_Weight;

        Motorized_Vehicle

              rename Weight as Engine_Weight;

        …

end;

Предположим теперь, что мы хотим заместить подпрограмму display. Мы не можем использовать redefine, потому что при этом возникла бы неоднознач­ность указания подпрограммы, которую мы переопределяем. Решение состоит в том, чтобы использовать undefine для отмены определений обеих унасле­дованных подпрограмм и написать новую:

class Airplane inherit

         Winged_Vehicle

                undefine display end;

          Motorized_Vehicle

                 undefine display end;


Содержание раздела