MP_L2.ppt
- Количество слайдов: 19
Методы программирования Хуторова Ольга Германовна Лекция 2
Темы лекции n Структурное программирование q q Маленькие и большие программы История Принципы структурного подхода при проектировании ПО Преимущества и недостатки
Маленькая программа q q q Она решает одну четко поставленную задачу, к тому же, часто не очень существенную для какой-либо практической или исследовательской деятельности. Неважно, насколько быстро она работает Ущерб от неправильной работы программы практически нулевой (за исключением возможности обрушения ею системы, в которой выполняются и другие, более важные задачи). Не требуется дополнять программу новыми возможностями, практически никому не нужно разрабатывать ее новые версии или исправлять найденные ошибки. В связи со сказанным выше не очень нужно прилагать к программе подробную и понятную документацию — для человека, который ею заинтересуется, не составит большого труда понять, как ею пользоваться, просто по исходному коду.
Большая программа n n n n решает одну или несколько связанных задач, зачастую сначала не имеющих четкой постановки, настолько важных для каких-либо лиц или организаций, что те приобретают значимые выгоды от ее использования. Существенно, чтобы она была удобной в использовании. В частности, она должна включать достаточно полную и понятную пользователям документацию, возможно, также специальную документацию для администраторов, а также набор документов для обучения работе с программой. Ее низкая производительность на реальных данных приводит к значимым потерям для пользователей. Ее неправильная работа наносит ощутимый ущерб пользователям и другим организациям и лицам, даже если сбои происходят не слишком часто. Для выполнения своих задач она должна взаимодействовать с другими программами и программно-аппаратными системами, работать на разных платформах. Пользователи, работающие с ней, приобретают дополнительные выгоды от того, что программа развивается, в нее вносятся новые функции и устраняются ошибки. Необходимо наличие проектной документации, позволяющей развивать ее, возможно, вовсе не тем разработчикам, которые ее создавали, без больших затрат на обратную разработку (реинжиниринг). В ее разработку вовлечено значительное количество людей (более 5 -ти человек). «Большую» программу практически невозможно написать с первой попытки, с небольшими усилиями и в одиночку. Намного больше количество ее возможных пользователей, и еще больше тех лиц, деятельность которых будет так или иначе затронута ее работой и результатами.
Требования к ПО n n n n Функциональность Надежность Отсутствие ошибок Удобство использования Производительность Удобство сопровождения Возможность модернизации Соблюдение сроков и бюджета при разработке и сопровождении
История n n С. Бем и К. Джакопини доказали, что любую блок-схему можно привести к структурированному виду, использовав несколько дополнительных булевых переменных. [Boehm, Giuseppe Jacopini (1966) "Flow Diagrams, Turing Machines, and Languages with Only Two Formation Rules // Communications of the ACM, Vol. 9, No. 5, p. 366 -371. ] Эдсгер Дейкстра (Edsger W. Dijkstra) "Структурное программирование" [ Edsger W. Dijkstra (1969) Structured Programming // Software Engineering Techniques // NATO Science Committee, Rome, p. 88 -93. ] Проект New York Times. (IBM –оперативная система хранения и поиска информации для справочной службы редакции) ПО для космической лаборатории Skylab, выполненной фирмой IBM по заказу NASA в 1971 -74 годах. (тренажерная система для подготовки диспетчеров службы управления полетом и астронавтов и рабочая система управления космическим кораблем в ходе полета).
Методы структурного анализа и проектирования ПО 1. 2. 3. 4. Функциональная структура системы; Информационное пространство проекта - структуры данных; Передача информации между функциональными процессами; Последовательность выполняемых действий – структура алгоритма
Принцип модульности n n n каждый программный модуль должен иметь ограниченный объем, выполнять одну функцию по обработке данных использовать композицию только трех базовых элементов - линейной, ветвящейся и циклической структур, для описания которых разработаны специальные языковые конструкции. Минимальные взаимосвязи между модулями. В ИДЕАЛЕ каждый модуль должен иметь один вход и один выход.
Информационное пространство проекта n n n Содержательно любую задачу можно описать как переработку объектов, полный набор которых называется информационным пространством задачи. Задача разбивается на подзадачи - выстраивается дерево вложенности подзадач. Информационное пространство структурируется в соответствии с деревом вложенности: для каждой подзадачи оно состоит из ее локальных объектов, определяемых вместе с подзадачей и для нее, и так называемых глобальных объектов, определяемых как информационное пространство непосредственно объемлющей подзадачи.
n n Структуры данных. Данные объединяются в логически связанные фрагменты, соответствующие структурам задачи либо вспомогательных конструкций, вводимых для ее решения. Потоки передачи данных. Разбивая задачу на подзадачи, программист предусматривает их взаимодействие по данным: одни подзадачи передают другим данные для переработки.
Особенности алгоритма в структурном программировании n n Структуры управления. Стиль структурного программирования в его общепринятом варианте предполагает использование строго ограниченного набора управляющих конструкций: последовательность операторов, условные и выбирающие операторы, все вычислительные ветви которых сходятся в одной точке программы, а также процедуры, вычисления которых всегда заканчиваются возвратом управления в точку вызова. К структурным операторам добавляются либо циклы, либо рекурсии.
нисходящее планирование – пошаговая детализация Программирование "сверху вниз" n n При нисходящем планировании начинают с предположения о том, что поставленная задача решена. Затем пытаются реализовать решение общей задачи, выделяя те его блоки, которые оказались неэлементарными, в конструкции следующего уровня. В итоге мы получаем структуру взаимоотношений между конструкциями второго уровня и спецификации на каждую из этих конструкций. Если мы реализуем каждую из конструкций в точном соответствии с полученной спецификацией, то получится решение общей задачи. В планировании процессов деятельности каждая из подзадач является процессом, чаще всего реализуемым отдельным человеком или группой людей, в конструировании технических систем каждая из подзадач дает блок конструкции, в программировании она дает модуль (в наиболее часто встречающихся достаточно простых случаях - подпрограмму). Главная задача Подзадача 1 Блок 1 -1 Подзадача 2 Подзадача 3 Блок 3 -1 Блок 3 -2
+ нисходящего программирования n n n Нисходящее программирование - нисходящее построение структур данных (абстракции данных). на каждом уровне можно ограничиваться одной моделью вычислений, в частности операционной, на которую ориентировано структурное программирование. Возможно раннее программирование, когда прототип программы позволяет продемонстрировать, как будет работать полная программа, и улучшить ее пользовательские характеристики.
- нисходящего программирования n n Невозможность при нисходящем структурном программировании увидеть тождественность процедур, работающих на разных ветвях декомпозиции, а тем более унифицировать несколько формально различных процедур на разных ветвях в одну общую. Недостаточный учет особенностей, которые могут возникнуть после конкретной реализации запланированных блоков программы, что довольно часто вызывает необходимость полной перепланировки системы после реализации ее блоков, а вслед за такой перепланировкой реализованные для других спецификаций блоки часто оказываются отнюдь не лучшими из возможных. Недостаточный перенос опыта и наработок из одного проекта в другой. В нынешних методиках нисходящего проектирования ко всему перечисленному добавляется еще и навязывание последовательного стиля мышления, что мешает воспользоваться преимуществами нетрадиционных машин.
Программирование "снизу вверх" - восходящее программирование n n методика разработки программ, при которой крупные блоки собираются из ранее созданных мелких блоков. Восходящее программирование начинается с разработки ключевых процедур и подпрограмм, которые затем постоянно модифицируются. Обобщение задачи. Методы и модули выбираются таким образом, чтобы они были применимы в различных контекстах. При создании глобального контекста могут применяться всевозможные стили. Если разделение стилей по модулям, пакетам и другим автономным структурным единицам проведено строго, то эклектического их смешения не происходит.
n n n Реальный проект - это смесь нисходящего и восходящего подходов: сначала сверху вниз для выяснения крупных строительных блоков; затем попытка движения снизу вверх, чтобы спроецировать понятия, оформившиеся ранее, на абстрактные структуры, допускающие адекватную реализацию; далее проверка соответствия, углубление нисходящей декомпозиции и обобщение понятий, выделенных восходящими приемами. Как в нисходящем, так и в восходящем подходе важно обеспечить согласование потоков управления и потоков данных. Обобщение Структура Функциональный блок
n n n структурное программирование упрощает процесс создания сложных программ и способствует значительному уменьшению количества ошибок в них; использование модулей небольших размеров позволяет упростить и ускорить процессы их отладки; Упрощается проверка качества и доказательство корректности программ при использовании структурного программирования значительно сокращается трудоемкость разработки технической документации, т. е. в качестве документации на каждый модуль используется только описание его функций; структурное программирование является хорошей базой автоматизации разработки модульных программ.
Список литературы q Харлан Миллз Структурное программирование: взгляд в прошлое и в будущее // ИСКУССТВО ПРОГРАММИРОВАНИЯ ОКТЯБРЬ 2003


