ВУЗ:
Составители:
Рубрика:
следования) вытекает из требований к повторному использованию
кода – если несколько классов имеют сходное поведение, нет смысла
дублировать их описание, лучше выделить общую часть в общий роди-
тельский класс, а в описании самих этих классов оставить только разли-
чающиеся элементы.
Необходимость совместного использования объектов разных
классов, способных обрабатывать однотипные сообщения, требует под-
держки полиморфизма – возможности записывать разные объекты в
переменные одного и того же типа. В таких условиях объект, отправляя
сообщение, может не знать в точности, к какому классу относится адре-
сат, и одни и те же сообщения, отправленные переменным одного типа,
содержащим объекты разных классов, вызовут различную реакцию.
Отдельного пояснения требует понятие обмена сообщениями. Пер-
воначально (например, в том же Smalltalk) взаимодействие объектов
представлялось как «настоящий» обмен сообщениями, т.е. пересылка от
одного объекта другому специального объекта-сообщения. Такая мо-
дель является чрезвычайно общей. Она прекрасно подходит, например,
для описания параллельных вычислений с помощью активных объек-
тов, каждый из которых имеет собственный поток исполнения и рабо-
тает одновременно с прочими. Такие объекты могут вести себя как
отдельные, абсолютно автономные вычислительные единицы. Посылка
сообщений естественным образом решает вопрос обработки сообщений
объектами, присвоенными полиморфным переменным – независимо от
того, как объявляется переменная, сообщение обрабатывает код класса,
к которому относится присвоенный переменной объект.
Однако общность механизма обмена сообщениями имеет и другую
сторону – «полноценная» передача сообщений требует дополнительных
накладных расходов, что не всегда приемлемо. Поэтому в большинстве
ныне существующих объектно-ориентированных языков программиро-
вания используется концепция «отправка сообщения как вызов мето-
да» – объекты имеют доступные извне методы, вызовами которых
и обеспечивается взаимодействие объектов. Данный подход реализован
в огромном количестве языков программирования, в том числе C++,
Object Pascal, Java, Oberon-2. В настоящий момент именно он является
наиболее распространённым в объектно-ориентированных языках.
Концепция виртуальных методов, поддерживаемая этими и други-
ми современными языками, появилась как средство обеспечения выпол-
нения нужных методов при использовании полиморфных переменных,
т.е., по сути, как попытка расширить возможности вызова методов для
реализации части функциональности, обеспечиваемой механизмом об-
работки сообщений [3].
88
Страницы
- « первая
- ‹ предыдущая
- …
- 86
- 87
- 88
- 89
- 90
- …
- следующая ›
- последняя »
