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

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

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

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

Моделирование реального мира

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

Примерами свойств (иногда называемых характеристиками) для людей могут являться цвет глаз или место работы; для машин — мощность двигателя и количество дверей. Таким образом, свойства объектов равносильны данным в программах: они имеют определенное значение, например голубой для цвета глаз или 4 для количества дверей автомобиля.

Поведение — это некоторая реакция объекта в ответ на внешнее воздействие. Поведение сходно с функцией: вы вызываете функцию, чтобы совершить какое-либо действие (например, вывести на экран учетную запись), и функция совершает это действие.

Таким образом, ни отдельно взятые данные, ни отдельно взятые функции не способны адекватно отобразить объекты реального мира.

Объектно-ориентированный подход

Основополагающей идеей объектно-ориентированного подхода является объединение данных и действий, производимых над этими данными, в единое целое, которое называется объектом.

Функции объекта, называемые в C++ методами, или функциями-членами, обычно предназначены для доступа к данным объекта. Если необходимо считать какие-либо данные объекта, нужно вызвать соответствующий метод, который выполнит считывание и возвратит требуемое значение. Прямой доступ к данным невозможен. Данные сокрыты от внешнего воздействия, что защищает их от случайного изменения. Говорят, что данные и методы инкапсулированы. Термины сокрытие и инкапсуляция данных являются ключевыми в описании объектно-ориентированных языков.

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

Типичная программа на языке C++ состоит из совокупности объектов, взаимодействующих между собой посредством вызова методов друг друга.

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

1.5. Принципы объектно-ориентированного программирования

ОБЪЕКТЫ