Р. ЛАФОРЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть13) онлайн

Библиотеки классов

В традиционном процедурно-ориентированном программировании долгое вре-

мя среди разработчиков ПО было принято предоставлять программистам биб-

лиотеки функций. С помощью комбинирования этих библиотек и добавления

некоторых собственных процедур и функций получалась программа — продукт,

представляемый конечному пользователю.

Библиотеки обычно содержат очень широкий спектр готовых функций, при-

годных для различного применения. Например, разработчик может предложить

библиотеку функций для статистической обработки данных или оптимизации

работы с памятью компьютера.           , .

Поскольку C++ построен на классах, а не на функциях, неудивительно,

что библиотеки для программ на этом языке состоят из классов. Удивляет то,

насколько библиотека классов лучше и прогрессивней старомодных библиотек

функций. Поскольку классы представляют собой совокупность данных и функ-

ций для их обработки, а также из-за того, что они лучше моделируют реальную

жизнь, интерфейс между библиотеками классов и приложениями, которые их

используют, гораздо понятнее, чем между библиотеками функций и приложе-

ниями.

Поэтому библиотеки классов являются более важным предметом при про-

граммировании на C++, чем библиотеки функций при традиционном програм-

мировании. Использование этих библиотек освобождает программиста от очень

многих забот. При разработке приложений оказывается, что если доступны не-

обходимые библиотеки, то для создания полнофункционального продукта необ-

ходим минимум ручной работы по программированию. К тому же необходимо

учитывать, что создается все больше и больше библиотек, а значит, все больший

и больший спектр различного программного обеспечения можно создавать без

лишних проблем.

Крайне важный пример библиотеки классов, который мы увидим в главе 15,

это Стандартная библиотека C++ (STL).

Обычно библиотека классов состоит из интерфейса (interface) и реализации

(implementation). Это две основные части, которые присутствуют практически

всегда. Рассмотрим их подробнее.

Интерфейс

Назовем того человека, который написал библиотеку классов, разработчиком

библиотеки, а того, кто использует эту библиотеку, — программистом.

Для того чтобы библиотеку можно было использовать, программисту необ-

ходим доступ к различным определениям, включая объявления классов. Они

представляют собой общедоступную часть библиотеки и обычно поставляются

в виде исходного кода в составе заголовочного файла с расширением .H. Обыч-

но этот файл включается в текст программы с помощью директивы #include .

Объявления в заголовочных файлах должны быть общедоступными по не-

скольким причинам. Во-первых, программисту гораздо удобнее иметь перед

глазами исходный текст, чем читать руководства и описания. Во-вторых (что

 

гораздо важнее), как иначе создавать объекты библиотечных классов, как вызы-

вать библиотечные методы? Только с помощью объявлений классов в виде ис-

ходного кода это и возможно.

Эти определения называются интерфейсом, потому что это та часть библио-

теки, которую программист видит и с помощью которой он взаимодействует с

классами. При этом ему нет никакой нужды вникать в содержимое другой части

библиотеки под названием реализация (implementation).

Реализация

Если интерфейсную часть можно назвать фасадом здания, то реализация пред-

ставляет собой его внутренности. В контексте библиотеки классов реализация —

это содержимое классов. Как туристу, любующемуся архитектурными памятни-

ками, вовсе не обязательно знать, что находится внутри зданий, так и програм-

мисту не нужно вникать в то, как происходит внутренняя работа библиотечных

классов. К тому же разработчики библиотек в большинстве случаев просто не

предоставляют клиентам исходных кодов, так как они могут быть нелегально ис-

пользованы или изменены. Поэтому методы классов чаще всего поставляются в

виде объектных (.OBJ) или библиотечных (.LIB) файлов.

На рис. 13.1 показано, как соотносятся между собой компоненты многофай-

ловых систем.

 

4