Лекция 21

Под методом проектирования понимают выбор того или иного метода и технологии разработки программных средств, обеспечивающего создание готового программного продукта. Это подразумевает как проектирование системы и ее реализацию на каком-либо языке программирования, так и компоновку сложно программной системы из отдельных блоков. Существует несколько способов конструирования программ на основе общепризнанных подходов, к которым относятся: структурный подход; модульное проектирование; объектно-ориентированное проектирование; проектирование с использованием CASE - средств, а также групповые методы разработки программного обеспечения. Рассмотрим кратко основы каждого из подходов.

Структурный подход. В основу структурного программирования положены следующие положения:

1. Алгоритм и программа должны составляться поэтапно (по шагам).

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

3. Логика алгоритма и программы должны опираться на минимальное число простых базовых управляющих структур.

4. Соответствующее представление данных с использованием большого числа разнообразных типов.

Первые два положения будут подробно рассмотрены в следующем параграфе. Здесь более детально остановимся на третьем положении.

Фундаментом структурного программирования является теорема о структурировании, утверждающая, что как бы сложна ни была задача, схема программы всегда может быть представлена с использованием четырех базовых управляющих структур: следование (а), развилка (б), повторение (в) и выбор (г) (рисунок).

В этих схемах A, B, N - операторы, группы операторов или программные модули; T, F-TRUE (истина), FALSE (ложно); P-логическое выражение.

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

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

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

Объект (object) – это часть реального мира. Каждый объект описывается следующими элементами:

- состояние, которое описывает свойства объекта в данный момент времени;

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

- связи с окружающим миром в виде воздействий объекта на другие объекты окружающего мира и ответных воздействий на объект.

Объекты реального мира и живой природы обладают следующими фундаментальными свойствами: инкапсуляция, наследование, полиморфизм. Основной признак, по которому можно выделить объект из окружающего мира – его целостность, внутренние свойства, связывающие внутренние части объекта в единое целое. Эта скрытность сущности объекта внутри него называется инкапсуляция (Encapsulation). Объекты живой природы обладают свойством наследования (inheritance) – объект, порожденный другим объектом, наследует от него его свойства. Порожденный и порождающий объекты называются наследник и предок.

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

Возможность программного моделирования реальных объектов позволяет разрабатывать программу в понятиях реального мира, а не алгоритмов обработки данных, что существенно упрощает решение прикладных задач. Программная модель объекта является основой ООП. Терминология ООП еще не устоялась, в данной главе будет применяться терминология, используемая в языках Object Pascal и Turbo Pascal.

Элементы описания объектов реального мира программно моделируются следующим образом:

- состояние объекта моделируется полями - данными описываемыми внутри объекта и сохраняющими свои значения в течение всего времени существования объекта;

- поведение объекта моделируется методами – процедурами и функциями, изменяющими состояние объекта – значения полей в зависимости от причин;

- причины изменения состояния моделируются параметрами методов (процедур и функций);

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

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

- наследование, возможность построения объекта – наследника другого объекта, содержащего поля и методы предка и имеющего возможность добавить свои, индивидуальные поля и методы;

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

Над программными объектами, кроме операций, моделирующих поведение реальных объектов, выполняются следующие дополнительные операции:

- создание экземпляра объекта и размещение его в памяти программы;

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

- уничтожение экземпляра объекта и освобождение занимаемой им памяти.

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

- язык Turbo Pascal, начиная с версии 5.5, содержит минимум средств ООП, достаточных для изучения методологии ООП и решения несложных задач;

- язык C++ содержит мощные средства ООП, сложные для начального изучения методам ООП. Эти средства предназначены для практического применения ООП при решении сложных задач;

- язык Smalltalk-80 содержит только объектные средства, реализующие возможности современного объектного подхода, отсутствующие в языке C++ и других объектно-ориентированных языках.

Особенности построения программ на языке Паскаль с использованием объектного подхода будут рассмотрены в главе 16.

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

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