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

и тип параметра. Для каждого


Airplanes Airplane;                         // Экземпляр класса Airplanes

int index;

Airplanes::Airplane_Data a;

Airplane.new_airplane(a, index);           // Вызов подпрограммы для экземпляра

Классом может быть и тип параметра. Для каждого экземпляра будет выделе­на память всем переменным, объявленным в классе, точно так же, как для пе­ременной типа запись выделяется память всем полям.

    Синтаксис вызова подпрограммы отличается от синтаксиса, принятого в языке Ada, из-за различий в исходных концепциях. Вызов в языке Ada:

Airplane_Package.New_Airplane(Airplane, A, Index);

рассматривает пакет как применение ресурса — процедуры New_Airplane, ко­торой должен быть задан конкретный объект Airplane. Язык C++ полагает, что объект Airplane — это экземпляр класса Airplanes, и, если вы посылаете объекту сообщение (message) new_airplane, для этого объекта будет выполнена соответствующая процедура.

    Обратите внимание, что даже такие подпрограммы, как find_empty_entry, которые используются только внутри класса, объявлены в определении класса. Язык C++ не имеет ничего похожего на тело пакета, пред­ставляющее собой единицу, которая инкапсулирует реализацию интерфей­са и других подпрограмм. Конечно, внутренняя подпрограмма недоступна другим модулям, потому что она объявлена внутри закрытой части. В языке C++ проблема состоит в том, что, если необходимо изменить объявление find_empty_entry или добавить другую приватную подпрограмму, придется перекомпилировать все модули программы, которые используют этот класс; в языке Ada изменение тела пакета не воздействует на остальную часть про­граммы. Чтобы достичь на языке C++ реального разделения интерфейса и реализации, следует объявить интерфейс как абстрактный класс, а затем получить конкретный производный класс, который содержит реализацию

(см. раздел 15.1).

    Где находятся подпрограммы реализованного класса? Ответ состоит в том, что они могут быть реализованы где угодно, в частности в отдельном файле, который обращается к определению класса через включаемый файл.

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