Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Safonov / AMPN_course_4.pptx
Скачиваний:
100
Добавлен:
16.04.2015
Размер:
156.59 Кб
Скачать

Архитектуры и модели программ и знаний

Лекция 4

Структурное и модульное программирование

Сафонов Владимир Олегович

Профессор кафедры информатики Заведующий лабораторией Java-технологии

(http://polyhimnie.math.spbu.ru/jtl)

Санкт-Петербургский государственный университет

Email: vosafonov@gmail.com

WWW: http://www.vladimirsafonov.org

Структурное программирование:

Исторически первый подход к систематизации и повышению надежности программирования

BS (Bowl-of-Spaghetti) –программы: С точки зрения TWC, наихудший

стиль программирования

 

Принципиально ненадежен

Основан на бесконтрольных переходах (goto) в обоих направлениях ,

вследствие необходимости внесения изменений в код программы на

языке низкого уровня, без передвижения фрагментов первоначального

кода:основной код; GOTO на “заплатку”; исполнение “заплатки”; GOTO

обратно

 

Как бороться с BS-стилем? (одна из основных проблем

программирования 1960х гг.)

C. Boehm, J.Jacopini (1966): Теоретически доказали, что любая

программа может быть преобразована в функционально эквивалентную

ей, НЕ использующую GOTO, а использующую лишь следующий

ограниченный набор конструкций:

Последовательность операторов: S1; S2

Условный оператор:

if B then S

Цикл while:

while B do S

Вызов процедуры:

P(X1, … Xn)

Литература:

 

1) Boehm C, Jacopini G. Flow diagrams, Turing machines and languages with only two formation rules. Communications of the ACM 1966;9(5).

2) Dijkstra EW. Go to statement considered harmful. Communications of the ACM 1968;11(3):147-148.

(C) Сафонов В.О. 2012

Литература по структурному программированию

1.Дж. Хьюз, Дж. Мичтом. Структурный подход к программированию. М.: Мир, 1978.

2.Иодан Э. Структурное программирование

ипроектирование программ. – М.: Мир, 1980.

3.Дейкстра Э. Заметки по структурному программированию. – В сб.: Структурное программирование, М.: Мир, 1975.

4.Вирт Н. Систематическое программирование. Введение. – М.: Мир, 1977

Pascal (1970) – язык систематического (структурного) программирования

(C)Сафонов В.О. 2012

Принципы структурного программирования

Использование ограниченного набора конструкций с

ясной и безопасной семантикой и простым потоком управления– последовательность операторов; оператор if; оператор while; оператор case (switch); структурный выход из конструкций; конструкции обработки исключений (try/catch – C++, Java, C#; signal/except/when

– CLU и т.д.)

Отсутствие операторов GOTO, либо, по крайней мере,

только структурный стиль использования GOTO: для прекращения сложной конструкции оператором go to на метку, помечающую оператор, следующий за конструкцией:

{ … GOTO M; … } M:

Сравните с Java:

ясен, M: { … break M; … } // поток управления более

// не требует

дополнительного анализаПошаговая детализация – метод пошагового

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

Использование мнемонических меток для обозначения

шагов алгоритма и псевдопроцедур, например:

INITIALIZATION: … PROCESS_INPUTSTREAM: …

Формальная спецификация(C) Сафонов В.О. 2012структурированных

программ и формальная версфикация их корректности

“Неструктурный” стиль программирования и не рекомендуемое использование GOTO

(рекомендуется избегать, как противоречащего принципам TWC)

GOTO из одной альтернативы CASE-оператора в другую

(Паскаль):

CASE x OF

C1: S1; GOTO M;

C2: S2;

C3: M:S3

END

Произвольное использование GOTO с целью внесения

исправлений в программу

“Проваливание” (fall through) в стиле языка C:

SWITCH (x) {CASE C1: S1; /* FALLTHRU */ CASE C2: S2; }Отсутствие обработки ошибок и исключенийОтсутствие DEFAULT-альтернативы в операторе SWITCH

(такая альтернатива настоятельно рекомендуется; в ней должно выдаваться сообщение о недопустимом значении селектора)

(C) Сафонов В.О. 2012

Пошаговая детализация

/

P

Псевдокод (варианты) :

\

P1

… Pn

PROCEDURE P;

/ \

 

BEGIN P1; … Pn END;

Q1 … Qm …

PROCEDURE P1;

BEGIN IF B1 THEN Q1 …

ELSE Qm

- Конструкции структурного программирования ~

псевдооператорыЕсли язык реализации – низкоуровневый (например,

ассемблер), то в результирующем коде сохраняется

первоначально спроектированная структура

псевдопроцедур и псевдооператоров (в форме мнемонических меток,(C) Сафоновмакросов,В.О. 2012 комментариев)

Преимещуства структурного программирования

Ясность и систематический стиль программПростота быстрой разработки прототипаРаспараллеливание проектирования и

разработки частей проектаПовышение надежности (благодаря

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

формальной верификации каждого этапа при пошаговой детализации программ

(C) Сафонов В.О. 2012

Недостатки структурного программирования

В подобном стиле гораздо сложнее проектировать и

реализовывать данные (определения, объявления и

др.)

Любое изменение может потребовать повторного

проектирования и повторной реализацииОпасность получить в результате код

ненадлежащего качества:

Опасная для качества продукта возможность

организации процесса разработки, при которой квалифицированные программисты выступают в роли

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

(C) Сафонов В.О. 2012

программирование:

Выводы

Структурное программирование –

неотъемлемая часть современной программистской культурыОднако использования одного лишь

структурного подхода недостаточно: он хорошо подходит только для структурирования исполняемых конструкций (операторов)

Необходимы другие подходы – для

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

Этим целям и служат, соответственно,

модульное программирование и абстрактные типы данных – следующие

темы данного курса(C) Сафонов В.О. 2012

Модульное

программирование

Основатели – Glenford Myers, David Parnas

(1970-е гг.)

Отечественные классики модульности –

Г.С. Цейтин (СПбГУ / IBM); Е.А. Жоголев (МГУ) Литература: Г.С. Цейтин. На пути к сборочному

программированию. – Программирование, 1990, №

1 (номер памяти академика А.П. Ершова)

Концепция программного модуля заимствована

из электроники: модуль – заменяемый блок с

минимальным числом четко определенных

контактов (интерфейсом), реализующий какую- либо функциональность в системе

Принципы TWC: каждый модуль должен быть

надежен и безопасен; взаимодействие между

модулями должно быть надежным и безопасным

(C) Сафонов В.О. 2012

Соседние файлы в папке Safonov