По мере развития вычислительной техники стала резко возрастать сложность программ. Они становились слишком велики для того, чтобы их можно было охватить и представить как единое целое. Общий принцип, используемый человеком при решении любых сложных задач, состоит в дроблении их на мелкие подзадачи, в установлении между ними связей и решении каждой из них независимо. Так и в программировании общее признание получил принцип построения программ из отдельных программных модулей, каждый из которых представляет завершенную программу, где решается часть общей задачи.
Структурное программирование (СП) является одним из методов улучшения программы. Оно предназначено для организации проектирования программ и процесса кодирования. Таким образом, чтобы предотвратить большинство логических ошибок и обнаружить те, которые допущены.
Модульное программирование – это процесс разделения программы на логические части, называемые модулями, и последовательное программирование каждой части. Когда большая единая задача делиться на подзадачи, то значительно проще прочесть и понять программу. Если проведено программирование всей задачи сверху – вниз, то она естественно разбивается на подзадачи для возможных модулей. При этом преследуется две цели:
Топ шаблонов проектирования которые должен знать программист(старая версия)
- необходимость добиться того, чтобы программный модуль был правильным и не зависел от контекста в котором он будет использоваться
- следует стремиться к тому, чтобы из модулей можно было формировать большие программы без каких-либо предварительных значений о внутренней работе модуля.
- Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что приводит к значительно снижает сложность программы.
- В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные дальше, что позволяет обходится без блок схем и других графических форм изображения алгоритмов.
- Сильно упрощается процесс тестирования и отладки структурированных программ.
- более высокую производительность работы за счет того, что действие каждой управляющей структуры хорошо известно и нет необходимости его обдумывать;
- ясность и читаемость программ;
- более высокую эффективность за счет глобальной оптимизации программы.
7.1. Модули. Сцепление и связность модулей
- распределить работы по исполнителям, обеспечив приемлемую их загрузку и требуемые сроки разработки программных продуктов;
- построить календарные графики проектных работ и осуществлять их координацию в процессе создания программных изделий;
- контролировать трудозатраты и стоимость проектных работ и др.
- отдельная компиляция;
- один вход и один выход – на входе программный модуль получает определенный набор исходных данных, выполняет содержательную обработку и возвращает один набор результатных данных, т. е. реализуется стандартный принцип IPO (Input – Process – Output) – вход-процесс-выход;
- выполнение минимального числа функций.
- функциональная завершенность – модуль выполняет перечень регламентированных операций для реализации каждой отдельной функции в полном составе, достаточных для завершения начатой обработки;
- логическая независимость – результат работы программного модуля зависит только от исходных данных, но не зависит от работы других модулей;
- слабые информационные связи с другими программными модулями – обмен информацией между модулями должен быть по возможности минимизирован;
- соответствие принципу вертикального управления;
- возможность вызова других модулей;
- обозримый по размеру и сложности программный элемент;
- независимость от истории вызовов;
Источник: studfile.net
Технологии разработки ПО Лекция 1
Структурное проектирование
Структурное проектирование понимается как методология построения алгоритмов, программ и систем, в том числе информационных, в основе которой лежит выявление структуры задачи, определение составляющих компонент и выделение связей между ними. Процесс разделения сложных задач (объектов, систем) на относительно независимые друг от друга подзадачи (части, подсистемы) называется декомпозицией.
Процедура декомпозиции может применяться повторно к отдельным компонентам, выделенным на предыдущих этапах структурирования. Процесс останавливается в том случае, когда получают компоненты, которые, по мнению проектировщика, в дальнейшей декомпозиции нс нуждаются, например, когда выделены элементарные операции или когда получены подзадачи, разработка которых не вызывает затруднений. Процедура многократного применения декомпозиции получила название пошаговой детализации.
Выделяют следующие типичные методы структурного проектирования:
- — нисходящее проектирование;
- — модульное программирование.
Структурное программирование, как указывалось в предыдущем параграфе, основано на использовании шести основных алгоритмических структур, включая три базовые. Основная суть структурного программирования заключается в том, что логика решения задачи должна соответствовать логике организации программного кода, алгоритм решения задачи должен быть ясен из исходного текста программы. Кроме алгоритмических конструкций используются относительно независимые именованные программные единицы, которые могут разрабатываться и применяться независимо друг от друга и основной программы подпрограммы. Идеи структурного программирования и поддержку подпрограмм реализуют процедурные языки программирования. Как показала практика, данный метод эффективен при разработке программ, содержащих до нескольких тысяч строк программного кода.
Нисходящее проектирование (или проектирование «сверху вниз») заключается в применении процедуры пошаговой детализации: сложная задача разбивается на более простые, которые, в свою очередь, разбиваются далее до тех пор, пока вся задача не окажется реализованной.
В итоге решение задачи представляет собой иерархическую структуру относительно независимых подзадач. На каждом уровне этой иерархии подзадачи описываются с определенной степенью детализации. Чем выше уровень, тем более конкретными становятся подзадачи и тем меньше в них абстрактного (рис. 10.10).
Под абстракцией понимают некоторую сущность, в которой выделены основные, важные признаки и в то же время исключены второстепенные, частные признаки. Абстракция является результатом мыслительного процесса человека, называемого абст/рагированием.
Каждой подзадаче может соответствовать подпрограмма, а сама исходная задача представляется в виде иерархически связанных между собой подпрограмм. При практической реализации нисходящего проектирования, а именно, программирования, возможна ситуация, когда подпрограммы нижних уровней еще не реализованы. В этом случае вместо них используют специальные отладочные модули — так называемые «заглушки», позволяющие имитировать частный случай работы подпрограммы. Например,
Рис. 10.10. Соотношение абстрактного и конкретного в описании подзадач при нисходящем проектировании
если требуется вычислить значение некоторой сложной функции, но сам ее программный код еще не написан, то функция заменяется одиночным оператором, возвращающим некоторое допустимое заранее выбранное значение (к примеру, 1). После того, как остальные связанные с вычислением функции части программы будут написаны и отлажены, реализуют эту функцию.
Использование подпрограмм в рамках структурного программирования и нисходящего проектирования имеет следующие преимущества:
- 1. Существенно облегчается отладка и тестирование приложений за счет наличия четкой логической структуры. В конечном итоге это позволяет увеличить общую надежность разрабатываемого программного обеспечения.
- 2. Изменения, вносимые в подпрограммы, не сказываются существенным образом на логике и ходе выполнения основной программы в силу относительной независимости подпрограмм друг от друга и основной программы.
- 3. Разработка приложения может выполняться различными программистами и проектировщиками. Параллельная разработка подпрограмм может существенно ускорить процесс создания конечного программного продукта.
- 4. Использование подпрограмм позволяет более рационально использовать память. В большинстве процедурных языков программирования память, выделяемая для хранения переменных и структур данных подпрограмм, выделяется только во время ее работы. После завершения подпрограммы память высвобождается.
- 5. Разработанные подпрограммы можно использовать многократно, возможно, с минимальной доработкой. В большинстве интегрированных систем программирования имеются большие библиотеки стандартных подпрограмм, использование которых позволяет существенно экономить время разработчиков.
Наличие достаточно большого количества уже созданных подпрограмм сделало возможность восходящего проектирования (или проектирования «снизу вверх»). Ее суть заключается в рассмотрении уже решенных частных задач и определения возможности их применения для решения более сложных задач. Итоговая задача в этом случае получается как результат композиции меньших задач.
Модульное программирование связано с созданием и использованием специальных программных единиц (программных) модулей (англ. unit). Каждый модуль содержит некоторое количество подпрограмм, которые используют одни и те же глобальные данные (рис. 10.11).
Также в модули объединяют подпрограммы, относящиеся к одной функциональной группе, например, математические, подпрограммы обработки графики. Подпрограммы модулей могут быть использованы как в основной программе, так и в других модулях.
Рис. 10.11. Архитектура программы, состоящей из модулей
Термин «модуль» традиционно используется в двух смыслах. Изначально, когда размеры программ были невелики, модулем называлась любая подпрограмма. Позднее, когда размеры программ ста*™ существенней, появилась возможность программно организовывать библиотеки ресурсов, включающие константы, переменные, описание типов, классов, подпрограмм. В этом случае под модулем понимают автономный набор программных ресурсов.
В структуре модулей выделяют интерфейсный раздел и раздел реализации.
В интерфейсном разделе содержатся описания ресурсов, доступ к которым могут иметь другие модули, и основная программа. В качестве подобных ресурсов выступают имена переменных, заголовки подпрограмм, имена определенных программистом типов данных, имена классов и пр. Если некоторый ресурс нс описан в интерфейсной части, то доступ к нему извне будет отсутствовать.
Раздели реализации содержит программный код, реализующий подпрограммы. Он может содержать описание ресурсов, которые используются внутри модуля (переменные, типы, подпрограммы).
Модули обладают рядом особенностей, которые необходимо учитывать при модульной разработке программ:
- 1. Модуль имеет один вход и один выход. Получаемый на входе определенный набор данных обрабатывается подпрограммами, реализованными в модуле. На выходе получают один набор результатных данных. Такая модель обработки данных иногда называется «вход-процесс-выход».
- 2. Все подпрограммы модуля обладают функциональной завершенностью. Это означает, что по завершении работы подпрограммы, даже при вызове других модулей, выполняются все регламентированные операции, достаточные для окончания начатой обработки.
- 3. Модуль обладает логической независимостью: операции обработки данных зависят только от исходных данных и не зависят от других модулей.
- 4. Информационные связи между модулями обычно сводятся к минимуму.
- 5. Отдельные модули должны быть обозримыми по размеру и сложности.
Разработка приложений в соответствии с принципами модульного программирования во многом схожа с разработкой в стиле нисходящего проектирования. Подпрограммы одного уровня иерархии и однотипные но функциональному назначению могут объединяться в модули. Функции верхнего уровня иерархии заключены в главном модуле. Нижестоящие в иерархии подпрограммы реализуются в подчиненных модулях. При организации взаимодействия между модулями различных уровней следует учитывать следующее:
- — модуль может быть вызван только модулем вышестоящего уровня; после завершения выполнения управление передается вызвавшему модулю;
- — основные действия алгоритма обычно располагают в максимально высоких в иерархии модулях;
- — повторяющиеся алгоритмы выполнения одной и той же подпрограммы оформляются в виде отдельного модуля, который вызывается по мерс необходимости.
Основным преимуществом модульного программирования является упрощение совместной разработки программного обеспечения несколькими программистами. Каждый из них может разрабатывать и отлаживать модули независимо от других членов группы разработчиков. Взаимодействие между модулями осуществляется через межмодульные интерфейсы, формат и структура которых оговариваются заранее. После окончания разработки модуля он может без изменения использоваться при разработке других приложений, что повышает производительность работы программистов.
Основываясь на практическом опыте разработки программного обеспечения, считается, что модульное программирование в совокупности с пошаговой детализацией позволяет получить достаточно надежные программы с программным кодом, не превышающим 100000 операторов. При увеличении размера программы количество и сложность межмодульных интерфейсов возрастает и, начиная с некоторого момента, охватить и осознать влияние отдельных частей программы и модулей друг на друга становится практически невозможным. Еще одним недостатком модульного программирования является тот факт, что ошибки при вызове интерфейса модуля выявляются только при выполнении программы, так как модули компилируются отдельно и, следовательно, раньше обнаружить эти ошибки невозможно.
Указанные недостатки при разработке больших программных комплексов устраняются при объектном подходе.
Источник: studme.org
ЭТАПЫ СОЗДАНИЯ ПРОГРАММНЫХ ПРОДУКТОВ
Цель главы — сформировать представления о методологии создания программного продукта, используемых технологиях проектирования и программирования.
ПОСЛЕ ИЗУЧЕНИЯ ГЛАВЫ ВЫ ДОЛЖНЫ ЗНАТЬ:
> Классификацию методов и подходов к проектированию программных продуктов
> Этапы создания программного продукта
> Техническое задание на программирование
> Работы на этапе технического проекта
> Виды документации на программный продукт
> Понятие о внутренней структуре и организации программного продукта
> Основы метода структурного проектирования алгоритмов и программ
> Основы объектно-ориентированного подхода к проектированию алгоритмов
и программ
> Особенности различных технологий создания программных продуктов
> Понятие о CASE-технологии
18.1. МЕТОДОЛОГИЯ ПРОЕКТИРОВАНИЯ
ПРОГРАММНЫХ ПРОДУКТОВ
• Классификация методов проектирования
программных продуктов
• Этапы создания программных продуктов
• Структура программных продуктов
• Проектирование интерфейса пользователя
КЛАССИФИКАЦИЯ МЕТОДОВ ПРОЕКТИРОВАНИЯ
ПРОГРАММНЫХ ПРОДУКТОВ
Проектирование алгоритмов и программ — наиболее ответственный этап жизненного цикла
программных продуктов, определяющий, насколько создаваемая программа соответствует
спецификациям и требованиям со стороны конечных пользователей. Затраты на создание,
сопровождение и эксплуатацию программных продуктов, научно-технический уровень разработки, время морального устаревания и многое другое — все это также зависит от проектных решений.
Пример 18.1. Переход к графической среде работы конечного пользователя типа
Windows или Macintosh потребует создания пользовательского интерфейса с элементами управления а виде пиктограмм, кнопок, выпадающих меню, обязательного применения манипулятора мышь и др. Отсутствие в программном продукте уже ставших
стандартом подобных элементов свидетельствует о том, что в будущем потребуются
значительные затраты на модификацию этого продукта, иначе будет падать его конкурентоспособность и привлекательность для конечного пользователя.
Методы проектирования алгоритмов и программ очень разнообразны, их можно классифицировать по различным признакам, важнейшими из которых являются:
• степень автоматизации проектных работ;
• принятая методология процесса разработки.
По степени автоматизации проектирования алгоритмов и программ можно выделить:
• методы традиционного (неавтоматизированного) проектирования;
• методы автоматизированного проектирования (CASE-технология и ее элементы).
Неавтоматизированное проектирование алгоритмов и программ преимущественно
используется при разработке небольших по трудоемкости и структурной сложности программных продуктов, не требующих участия большого числа разработчиков. Трудоемкость
разрабатываемых программных продуктов, как правило, небольшая, а сами программные
продукты имеют преимущественно прикладной характер.
При нарушении этих ограничений заметно снижается производительность труда разработчиков, падает качество разработки, и, как ни парадоксально, увеличиваются трудозатраты и стоимость программного продукта в целом.
Автоматизированное проектирование алгоритмов и программ возникло с необходимостью уменьшить затраты на проектные работы, сократить сроки их выполнения, создать
типовые «заготовки» алгоритмов и программ, многократно тиражируемых для различных
разработок, координации работ большого коллектива разработчиков, стандартизации алгоритмов и программ.
Автоматизация проектирования может охватывать все или отдельные этапы жизненного цикла программного продукта, при этом работы этапов могут быть изолированы друг
от друга либо составлять единый комплекс, выполняемый последовательно во времени. Как
правило, автоматизированный подход требует технического и программного «перевооружения» труда самих разработчиков (мощных компьютеров, дорогостоящего программного инструментария, а также повышения квалификации разработчиков и т.п.).
Автоматизированное проектирование алгоритмов и программ под силу лишь крупным
фирмам, специализирующимся на разработке определенного класса программных продуктов, занимающих устойчивое положение на рынке программных средств.
Проектирование алгоритмов и программ может основываться на различных подходах,
среди которых наиболее распространены:
• структурное проектирование программных продуктов;
• информационное моделирование предметной области и связанных с ней приложений;
• объектно-ориентированное проектирование программных продуктов.
В основе структурного проектирования лежит последовательная декомпозиция, целенаправленное структурирование на отдельные составляющие. Начало развития структурного проектирования алгоритмов и программ падает на 60-е гг. Методы
структурного проектирования представляют собой комплекс технических и организационных принципов системного проектирования.
Типичными методами структурного проектирования являются:
• нисходящее проектирование, кодирование и тестирование программ;
• структурное проектирование (программирование) и др.
В зависимости от объекта структурирования различают:
• функционально-ориентированные методы — последовательное разложение задачи
или целостной проблемы на отдельные, достаточно простые составляющие, обладающие функциональной определенностью;
• методы структурирования данных.
Для функционально-ориентированных методов в первую очередь учитываются заданные функции обработки данных, в соответствии с которыми определяется состав и логика
работы (алгоритмы) отдельных компонентов программного продукта. С изменением содержания функций обработки, их состава, соответствующего им информационного входа и выхода требуется перепроектирование программного продукта. Основной упор в структурном подходе делается на моделирование процессов обработки данных.
Для методов структурирования данных осуществляется анализ, структурирование и
создание моделей данных, применительно к которым устанавливается необходимый состав
функций и процедур обработки. Программные продукты тесно связаны со структурой обрабатываемых данных, изменение которой отражается на логике обработки (алгоритмах) и
обязательно требует перепроектирования программного продукта.
Структурный подход использует:
• диаграммы потоков данных (информационно-технологические схемы) — показывают
процессы и информационные потоки между ними с учетом «событий», инициирующих
процессы обработки;
• интегрированную структуру данных предметной области (мифологическая модель,
ER-диаграммы);
• диаграммы декомпозиции — структура и декомпозиция целей, функций управления,
приложений;
• в структурные схемы — архитектура программного продукта в виде иерархии взаимосвязанных программных модулей с идентификацией связей между ними, детальная
логика обработки данных программных модулей (блок-схемы).
Для полного представления о программном продукте необходима также текстовая информация описательного характера.
Еще большую значимость информационные модели и структуры данных имеют для
информационного моделирования предметной области, в основе которого положение об
определяющей роли данных при проектировании алгоритмов и программ. Подход появился
в условиях развития программных средств организации хранения и обработки данных —
СУБД (сл*. гл. 15).
Один из основоположников информационной инженерии — Дж.Мартин — выделяет
следующие составляющие данного подхода:
• информационный анализ предметных областей (бизнес-областей);
• информационное моделирование — построение комплекса взаимосвязанных моделей
данных;
• системное проектирование функций обработки данных;
• детальное конструирование процедур обработки данных.
Первоначально строятся информационные модели различных уровней представления:
• информационно-логическая модель, не зависящая от средств программной реализации
хранения и обработки данных, отражающая интегрированные структуры данных предметной области;
• даталогические модели, ориентированные на среду хранения и обработки данных.
Даталогические модели имеют логический и физический уровни представления. Физический уровень соответствует организации хранения данных в памяти компьютера. Логический уровень данных применительно к СУБД реализован в виде:
• концептуальной модели базы данных — интегрированные структуры данных под управлением СУБД;
• внешних моделей данных — подмножество структур данных для реализации приложений.
Средствами структур данных моделируются функции предметной области, прослеживается взаимосвязь функций обработки, уточняется состав входной и выходной информации, логика преобразования входных структур данных в выходные. Алгоритм обработки
данных можно представить как совокупность процедур преобразований структур данных в
соответствии с внешними моделями данных.
Выбор средств реализации базы данных определяет вид даталогических моделей и,
следовательно, алгоритмы преобразования данных. В большинстве случаев используется
реляционное представление данных базы данных и соответствующие реляционные языки
для программирования (манипулирования) обработки данных СУБД и реализации алгоритмов обработки (см. гл. 19). Данный подход использован во многих CASE-технологиях.
Объектно-ориентированный подход к проектированию программных продуктов основан на:
• выделении классов объектов;
• установлении характерных свойств объектов и методов их обработки;
• создании иерархии классов, наследовании свойств объектов и методов их обработки.
Каждый объект объединяет как данные, так и программу обработки этих данных и относится к определенному классу. С помощью класса один и тот же программный код
можно использовать для относящихся к нему различных объектов.
Объектный подход при разработке алгоритмов и программ предполагает:
• объектно-ориентированный анализ предметной области;
Объектно-ориентированный анализ — анализ предметной области и выделение объектов, определение свойств и методов обработки объектов, установление их взаимосвязей.
Объектно-ориентированное проектирование соединяет процесс объектной декомпозиции и представления с использованием моделей данных проектируемой системы на логическом и физическом уровнях, в статике и
динамике.
Для проектирования программных продуктов разработаны объектно-ориентированные
технологии, которые включают в себя специализированные языки программирования и инструментальные средства разработки пользовательского интерфейса.
Традиционные подходы к разработке программных продуктов всегда подчеркивали
различия между данными и процессами их обработки. Так, технологии, ориентированные
на информационное моделирование, сначала специфицируют данные, а затем описывают
процессы, использующие эти данные. Технологии структурного подхода ориентированы, в
первую очередь, на процессы обработки данных с последующим установлением необходимых для этого данных и организации информационных потоков между связанными процессами.
Объектно-ориентированная технология разработки программных продуктов объединяет данные и процессы в логические сущности — объекты, которые имеют способность
наследовать характеристики (методы и данные) одного или более объектов, обеспечивая
тем самым повторное использование программного кода. Это приводит к значительному
уменьшению затрат на создание программных продуктов, повышает эффективность жизненного цикла программных продуктов (сокращается длительность фазы разработки).При
выполнении программы объекту посылается сообщение, которое инициирует обработку
данных объекта.
ЭТАПЫ СОЗДАНИЯ ПРОГРАММНЫХ ПРОДУКТОВ
При традиционной неавтоматизированной разработке программ независимо от принятого
метода проектирования и используемого инструментария выполняют следующие работы.
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru