Главная->Інформатика та програмування->Содержание->Неконтролируемый доступ к данным

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

Неконтролируемый доступ к данным

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

Если существует необходимость совместного использования одних и тех же данных несколькими функциями, то данные должны быть объявлены как гло- бальные. Это, как правило, касается тех данных программы, которые являются наиболее важными. Примером здесь может служить уже упомянутая учетная книга. Любая функция имеет доступ к глобальным данным (мы не рассматрива- ем случай группирования функций в модули). Схема, иллюстрирующая концеп- цию локальных и глобальных данных, приведена на рис. 1.1.

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

Рис. 1.1. Глобальные и локальные переменные

Рис. 1.2. Процедурный подход

Большое число связей между функциями и данными, в свою очередь, также порождает несколько проблем. Во-первых, усложняется структура програм- мы. Во-вторых, в программу становится трудно вносить изменения. Изменение структуры глобальных данных может потребовать переписывания всех функ- ций, работающих с этими данными. Например, если разработчик программы складского учета решит сделать код продукта не 5-значным, а 12-значным, то будет необходимо изменить соответствующий тип данных с short на long. Это означает, что во все функции, оперирующие кодом продукта, должны быть вне- сены изменения, позволяющие обрабатывать данные типа Long. Можно привести аналогичный бытовой пример, когда в супермаркете изменяется расположение отделов, и покупателям приходится соответствующим образом менять свой при- вычный путь от одного отдела к другому.

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

 

31