Объединение данных и операций обработки в один модуль
Объединение данных и операций обработки в один модуль способствует повышению надежности программы, так как при возникновении любой ошибки в операциях с денежными суммами мы точно будем знать, где ее искать.
Наш модуль уже почти похож на новый тип данных. Однако мы по-прежнему имеем ряд проблем. Самой большой неприятностью является абсолютная незащищенность нашей структуры. Объявив переменную типа ТМопеу, программист может в обход всех функций обработки присвоить любые значения полю Summa. Но с этой проблемой можно частично справиться, написав соответствующую функцию инициализации. Прототип такой функции мог бы выглядеть так:
1 О разработке многомодульных программ рассказывается в главе 13.
ТМопеу Init(const long double &г);
Здесь параметр г представляет собой денежную сумму. Вызов такой функции мог бы быть таким:
TMoney t = Init(123.67);
Однако заставить программиста всегда поступать «правильно», то есть использовать для присвоения значений только функцию инициализации, мы не можем. Более того, поле Summa можно непосредственно задействовать в арифметических операциях с числами (что мы и делали в приведенных ранее функциях). Конечно, «в здравом уме и твердой памяти» такое делать никто не будет, но отсутствие каких бы то ни было конструкций, защищающих внутреннюю структуру данных, здорово подрывает надежность наших программ. Основная причина такой ситуации состоит в том, что функции и структуры данных, которыми они оперируют, достаточно слабо связаны друг с другом. Объектно-ориентированный подход возник, в первую очередь, чтобы ликвидировать эту «пропасть» между данными и обрабатывающими их операциями.
Опубликовал Kest
August 15 2013 21:21:49 ·
0 Комментариев ·
3466 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.