Теоретические сведения для студентов специальностей «Экономика и организация производства», страница 9

По терминологии языка С++ окно, меню, редактор и т.д. – это классы. Классы образуют (описывают) иерархию, которая и определяет наследование свойств между ними. Так, класс меню является производным классом и наследует свойства от класса окно, который является для него базовым. В свою очередь класс окно редактора является производным от базового класса меню и т. д. Следует заметить, что сами по себе классы - это не объекты, а шаблоны для создания объектов (или новый тип данных). При необходимости создается экземпляр класса (объект), который используется в программе. Отношение между классом и экземпляром класса такое же, как между типами данных и переменной.

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

В некоторых объектно-ориентированных системах реализуется только одиночное наследование. В Borland С++ иерархия расширяется множественным наследованием. То есть меню может наследовать свойства и поведение не только от окна, но одновременно и от других классов. Возможность множественного наследования позволяет непосредственно комбинировать характеристики двух или нескольких различных классов, что уменьшает объем необходимых модификаций программ.

ПОЛИМОРФИЗМ И ПОЗДНЕЕ СВЯЗЫВАНИЕ

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

Что же касается терминов "ранее связывание" и "позднее связывание", то они относятся к этапу, на котором обращение (вызов) к функции, к процедуре связывается с ее реальным адресом.

Для раннего связывания адреса всех функций и процедур должны быть известны в тот момент, когда происходят компиляция и компоновка программы. Это позволяет приписать каждому обращению к процедуре соответствующий адрес. В большинстве традиционных языков программирования, включая Си и Паскаль, используется только раннее связывание. В случае позднего связывания адрес процедуры не связывается с обращением к ней до того момента, пока обращение не произойдет фактически, т.е. в процессе выполнения программы.

Вернемся к нашему примеру с окнами. В такой сложной динамической системе нельзя заранее предсказать, сколько окон будет на экране, каких они будут типов и в какой последовательности будет осуществляться работа с ними.

В программе, где используется только раннее связывание, вся информация о количестве, координатах и типах окон должна хранится в основной программе, как и все возможные действия над окнами. При каждом изменении программа должна разобраться, что именно и с каким окном произошло, и вызвать соответствующие процедуры для выполнения надлежащих действий с данным окном. Такая программа становиться очень сложной, теряет гибкость. Стоит добавить новый тип окна или изменить поведение одного из них, и придется вносить коррективы во многие места такой программы.