Методология объектно-ориентированного программирования
Основной методологией разработки программного обеспечения АС до начала 90-х годов являлась процедурно-ориентированная методология [Леоненков ]. При этом программный код организовывался в виде множества процедур или алгоритмов.
Алгоритм являлся исходным понятием и точно предписывал последовательность действий, необходимых для решения поставленной задачи. Применительно к компьютерам конкретные алгоритмы в языках программирования получили название процедур.
Разработка больших систем потребовала декомпозиции процедур на более мелкие фрагменты. Отдельные части крупных процедур, автономно оформленные как единицы компиляции, были названы модулями. Модули, в свою очередь, содержали более мелкие процедуры и функции – особого вида небольшие процедуры со своим способом вызова и обязательным возвратом значения (результата выполнения процедуры). Были разработаны методы структурного программирования, которые помогали в процедурно-ориентированной методологии осуществлять разбиение всей программы на модули и более мелкие фрагменты – процедуры и функции (70-80е годы).
Со временем ситуация существенно изменилась. Реальная трудоемкость начальных этапов проектирования и программирования стала все больше превосходить плановую. Сроки разработки всё более сложного программного обеспечения стали затягиваться. Коллективные разработки стали типовым и сложным процессом, возникли серьезные трудности управления проектами в условиях динамически меняющихся требований заказчиков. Приходилось часто и в больших объемах менять коды программ. Плохо накапливался и использовался опыт программистов. Языки спецификаций программ были сложны и мало понятны обычному заказчику непрограммисту. Возникла настоятельная необходимость в изменении самой методологии программирования и проектирования. Основные принципы нового подхода к разработке программного обеспечения были сформулированы в середине 80-х в виде объектно-ориентированного программирования (ООП) [ ].
Фундаментальными понятиями ООП являются понятия класса и объекта.
Класс – некоторая абстракция совокупности объектов, имеющих общий набор свойств и обладающей одинаковым поведением.
Объект – экземпляр соответствующего класса с конкретными значениями свойств. Класс образуется операцией обобщения, каждый объект является (ISA) частным примером своего класса. Классы могут быть организованы в иерархическую структуру, напоминающую по своему виду схему классификации. Среди классов может быть выделен самый общий (верхний) класс самого высокого уровня абстракции, например, система, сущность, связь, событие и т.д. Основным принципами ООП являются наследование,инкапсуляция и полиморфизм.
Наследование - принцип, в соответствии с которым родительский класс (предок) передает все свои наборы свойств и поведение дочерним классам (потомкам). Дочерние классы называются производными классами (рис.1).
Рис.1. Иерархия классов, полученная операцией обобщения
Фрагмент иерархии классов библиотеки VCL среды программирования Borland Delphi представлен на рис.2.
Рис.2. Фрагмент иерархии классов библиотеки VCL Borland Delphi
Класс является дальнейшим расширением понятий структура (structure) и запись (record).
Инкапсуляция - сокрытие деталей внутреннего устройства классов от внешних для него объектов или пользователей. В некоторых языках модули делятся на 2 группы: интерфейс и реализация.
Полиморфизм (много форм) - действия, выполняемые одноимёнными методами, могут отличаться в зависимости от того, к какому из классов относится метод.
Использование объектов заранее подготовленных библиотечных классов с определёнными свойствами и методами позволило решить многие кризисные вопросы создания программного и информационного обеспечения сложных АС.
1.2. Методология объектно-ориентированного анализа и проектирования
Уже давно стало ясно, что анализ предметной области очень важен для успешного проектирования АС. Прежде, чем непосредственно генерировать структуру БД, необходимо построить концептуальную модель хранения данных в виде ER- или SHM-модели [ ]. Эта работа проводится совместно с экспертами, хорошо знающими предметную область.
Здесь могут помочь так называемые CRC-карточки, предложенные Баддом [ ] (рис.3). (см. Бадд Т. Объектно-ориентированное программирование в действии: Перевод с английского. – Спб: Питер, 1997. – 464с.)
Компонента <название> Описание обязанностей, выполняемых данной компонентой | СПИСОК <всех взаимодействующих с ней компонент> |
Рис.3. CRC-карточка
CRC расшифровывается как Component, Responsibility, Collaborator (компонента, обязанность, взаимодействие ). Под компонентой понимается функционально самостоятельная часть системы, решающая одну или несколько задач (например, отдел маркетинга, прокатный стан, отдельные сотрудники и т. д.). Многие компоненты естественным образом преобразуются в классы и объекты программного и информационного обеспечения.
Выделение компонент предметной области – искусство системного аналитика или архитектора системы.
Для АС, рассматриваемой в виде информационной системы запросно-ответного типа, прежде всего надо составить перечень запросов и отчетов с формами документов и требованиями пользователей к виду результата (числа, текст, графика, мультимедиа и т.д.). Для каждого запроса и отчёта (выходного воздействия) следует определиться с алгоритмом
получения результата, а также составом и структурами данных, которые должны поступать
на вход и храниться в течение длительного периода. Алгоритмы решения задач в процессе проектирования реализуются методами соответствующих классов или самостоятельно компилируемыми классами программных модулей и процедур.
.