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

жете сказать, какая именно подпрограмма


Посмотрев только на SST_Package (и без комментариев!), вы не смо­ жете сказать, какая именно подпрограмма замещается, а какая перегру­жается:





Ada

procedure Proc(A: Airplane_Data'Class) is

begin

              Set_Speed(A, 500);                                -- Правильно, диспетчеризуется

              Set_Speed(A, 500.0);                             -- Ошибка, не может диспетчеризоваться!

end Proc;

15.6. Методы динамического полиморфизма

 

Мы заключаем эту главу подведением итогов по динамическому полимор­физму в языках для объектно-ориентированного программирования.

 

Smalltalk. Каждый вызов подпрограммы требует динамической диспетче­ризации, которая включает поиск по иерархии наследования, пока под­программа не будет найдена.

 

Eiftel. Каждый вызов подпрограммы диспетчеризуется динамически (если оптимизация не привела к статическому связыванию). В отличие от язы­ка Smalltalk, возможные замещения известны во время компиляции, по­этому диспетчеризация имеет фиксированные издержки, вносимые таб­лицей переходов.

C++. Подпрограммы, которые явно объявлены виртуальными и вызыва­ются косвенно через указатель или ссылку, диспетчеризуются динами­чески. Диспетчеризация во время выполнения имеет фиксированные из­держки.

Ada  95. Динамическая диспетчеризация неявно используется для примитивных подпрограмм тегового типа, когда фактический параметр является CW-типом, а формальный параметр имеет конкретный тип. Затраты на диспетчеризацию во время выполнения фиксированы.

    Языки отличаются деталями программирования и затратами, требующи­мися для динамического полиморфизма, и это влияет на стиль программиро­вания и эффективность программ. Ясное понимание заложенных в языках принципов поможет вам сравнивать объектно-ориентированные языки и разрабатывать и создавать хорошие объектно-ориентированные программы на любом языке, который вы выберете.


Содержание  Назад  Вперед