Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

End else

Begin

Repeat

Begin

Begin

Begin

Begin

Begin

F:= E + 1;

end;

Begin s:= 0;

k:= 1;

for uÎL do

if u = E then s:= s + 1;

if s = k then

begin u:= F(u);

halt;

end;

end;

writeln(‘Нужного вхождения нет’);

End;

Очевидно, что в случае модификации условий задачи изменение коснется двух операторов модуля, а структура модуля не изменится.

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

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

 

2. Проектирование программных модулей.

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

 

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

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

1) входные данные (точное указание структуры и диапазона);

2) выходные данные (описание всех реакций системы);

3) возможные изменения состояния системы при каждом виде входных данных с точки зрения пользователя;

4) характеристики надежности (как какой-либо отказ повлияет на систему, файлы, пользователя);

5) требования эффективности (время, память и т.д.);

6) замечания по программированию (если у автора спецификации есть какие-то идеи по программированию, то их нужно записать).

Проектирование логики модуля (внутреннее проектирование) представляет собой следующую последовательность шагов:

1. Проверка внешних спецификаций (они должны соответствовать информации о сопряжениях и подтверждаться анализом вызывающих модулей);

2. Выбор алгоритма и структуры данных;

3. Объявление данных из сопряжения;

4. Объявление остальных данных;

5. Детализация текста программы (начиная с верхнего уровня абстракции последовательно детализировать логику модуля, используя блок-схемы и неформальные языки);

6. Осуществление ручной проверки программы;

7. Тестирование модуля компиляцией.

Идея пошаговой детализации логики программных модулей составляет методологическую основу структурного программирования – одного из направлений в проектировании и программировании программных продуктов. Научные основы структурного программирования были заложены на рубеже 60 – 70-х годов в трудах Дейкстры и Вирта. Метод пошаговой детализации позволяет существенно упростить проектирование модулей со сложной логикой.

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

Алгоритм 3

for k:= 1 to n – 1 do

begin m:= номер допустимой строки;

if m<>k then строка[m]«строка[k];

for i:= k+1 to n do

преобразовать строку [i];

end;

End;

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

На следующем шаге детализации абстрактные функции «номер допустимой строки», «преобразовать строку», процедуру обмена строк («) необходимо наполнить конкретным содержанием с расшифровкой механизма реализации каждой процедуры.

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

Помимо реализации идеи пошаговой детализации, структурное программирование предъявляет определенные требования к внешнему виду программы.

Часто структурное программирование называют программированием без goto. Это не совсем верно. Подобная легенда возникла, видимо, из-за того, что в первой работе по структурному программированию, опубликованной Дейкстрой в 1968 году, говорилось «о вреде оператора goto». Согласно изложенной в статье концепции, между текстом программы и последовательностью выполнения ее операторов должно быть простое соответствие, благодаря которому, читая текст программы, можно достаточно просто отслеживать выполняемые действия. Неограниченное использование оператора goto, особенно goto назад по тексту программы, серьезно нарушает это соответствие.

На самом деле можно привести массу примеров, когда наличие или отсутствие операторов goto не улучшает и не ухудшает программу. Можно дать следующее, более правильное определение структурного программирования, принадлежащее Майерсу [7]: это программирование, ориентированное на общение с людьми, а не с машиной. Чтобы удовлетворять этому определению, программа должна обладать следующими качествами:

1. Текст программы должен быть композицией трех основных управляющих структур: следование, ветвление, цикл;

2. Операторов goto надо избегать всюду, где возможно;

3. Текст программы должен быть написан с правильными сдвигами (лесенкой);

4. Каждый модуль должен иметь ровно один вход и один выход;

5. Текст программы должен быть физически разбит на части для облегчения чтения;

6. Программа должна представлять собой простое и ясное решение задачи.

Цель структурного программирования – писать программы минимальной сложности, заставить программиста мыслить ясно, облегчать восприятие программы.

Пример 2.2. Функция модуля – выдать все возможные значения целочисленных переменных mi, i=1…n, удовлетворяющих следующим условиям: , dÎN.

Неструктурный вариант программы:

Алгоритм 4

for i:= 1 to n do mi:= 0;

s:= 0;

10: mn := d – s

writeln(m1, m2,…, mn);

k:= 1;

20: mk:= mk + 1;

s:= s + 1;

if s £ d then goto 10;

s:= s - mk;

mk:= 0;

k:= k + 1;

if k £ n-1 then goto 20;

End;

В этом варианте два раза используется goto назад.

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

Алгоритм 5

for i:= 1 to n do mi:= 0;

s:= 0;

if s £ d then

mn := d – s

writeln(m1, m2,…, mn);

k:= 1;

 
 


<== предыдущая лекция | следующая лекция ==>
Расчет надежности изделий с учетом надежности программ | Расчетная Работа
Поделиться с друзьями:


Дата добавления: 2015-04-30; Просмотров: 292; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.