Компьютерная графика. Полигональные модели ему сообщения; например, следующий фрагмент кода вызывает метод mouseMoved с аргументом theEvent у объекта obj: [obj moiiseMoved:theEvent]; Привязка посылаемого сообщения к конкретному методу осуществляется на этапе выполнения программы путем поиска соответствующего метода в таблице методов объекта (а не простой индексации, как для языка С++). За счет этого можно послать объекту фактически любое сообщение, не заботясь о том, реализован ли в этом объекте обработчик соответствующего сообщения; в случае отсутствия соответствующего метода в качестве результата будет просто возвращен NULL. Язык предоставляет также возможность спросить объект, поддерживает ли он данный метод или. протокол (совокупность методов). При этом сама ОС содержит огромное количество уже готовых классов, на которых, собственно, она сама и написана, и программист может все их использовать или создавать на их основе новые. Не случайно, что именно NextStep признана самой удобной средой для разработки.
Еще одним примером удачной объектно-ориентированной системы является BeOS, целиком написанная на языке С++.
В отличие от приведенных выше систем Microsoft Windows написана фактически на языке С и объектно-ориентированной может быть названа с очень большой натяжкой.
Для облегчения программирования в Microsoft Windows существуют специальные библиотеки классов С++, облегчающие программирование в этой среде. Для обеспечения связи между номером сообщения и функцией обработки сообщения вводятся специальные макрокоманды, очень загромождающие программу и заметно понижающие ее читаемость. Пример этого приводится ниже.
class CMFMenuWindow : public CFrameWnd
{
public:
CMFMenuWindow ();
afx__msg void MenuCommand (); afx_msg void ExitApp ();
DECLAREJvlESSAGEJvlAP ()
};
BEGIN Jv1ESSAGEJv1AP(CMFMenuWindow, CFrameWnd)
ON__COMMAND(ID__TEST_BEEP, MenuCommand);
ON_COMMAND(ID_TEST_EXIT, ExitApp); END_MESSAGE_MAP()
Выглядят подобные конструкции нелепо, а их появление свидетельствует о двух вещах: во-первых, язык С++ плохо подходит для написания действительно объектно-ориентированных распределенных приложений (вся подобная работа с таблицами должна неявно делаться средствами самого языка, а не посредством искусственных макросов) и, во-вторых, среда Microsoft Windows с большим трудом может быть названа действительно объектно-ориентированной, поэтому и написание объектно-ориентированных приложений под нее является таким неудобным.