Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Основы алгоритмизации и языков программирования



Основы алгоритмизации и языков программирования

 

Введение

Несколько замечаний в качестве введения:

1 замечание: методология программирования на ЭВМ по мнению классиков (Турский В. «Методология программирования») включает три компонента, которые почти невозможно отделить друг от друга:

1.наука

2.ремесло

3.фольклор (мифология)

Научный компонент (методики, технологии и обобщения) объясняет, что надо делать и чего надо избегать в программировании, чтобы получать правильные и эффективные программы. Он, показывает (демонстрирует), например, следующее:

1) пути и способы приведения сложной задачи к набору более простых, для которых решение уже известно или не представляет труда (процесс сведения сложной задачи к набору простых называется декомпозицией);

2) объясняет, как достичь поставленной цели (решить задачу, написать программу, собрать программу из частей), применяя для сборки (при сборке) строго определенный набор правил к простейшим основным конструктивным элементам языка или программы (процесс сборки называется синтезом).

3) объясняет, как получить программу с заданными свойствами за счет знаний о том, как свойства программы в целом выводятся из свойств отдельных компонентов, ее составляющих.

Научный компонент - это в настоящее время то, что называется технология программирования (программная инженерия)

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

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

2 замечание: почти всех представителей профессий летчика, хирурга и программиста объединяет общий стиль (характер) их работы: необходимость (и должна быть способность) уверенно действовать при значительной доле неопределенности в исходных спецификациях (требованиях) на задачу (программу у программиста) и резко изменяющихся условий ее решения. Например, при обсуждении новой программы программисту кажется (точнее, он уверен), что заказчику нужно нечто, назовем это первое. При утверждении ТЗ на первое накладываются кое-какие ограничения и допущения, исходная задача переформулируется (чтобы она стала менее неопределенной) и сформулированные к выходному продукту требования уже описывают нечто второе. При написании программы у программиста получается не все из задуманного и на выходе получается нечто третье. При сдаче проекта заказчику, наконец, выясняется, что он хотел получить нечто четвертое ( см. рисунок с качелями ). Для того, чтобы избежать такой ситуации, необходимо:

- тщательно слушать, анализировать и учитывать пожелания заказчика;

- по завершении каждого этапа проверять, делается ли то, что нужно заказчику.

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

3 замечание: производительность труда всех людей из коллектива программистов (включая постановщиков) до сих пор часто оценивается числом отлаженных строк кода программы в день. Здесь имеется непонимание: а) «индийский» стиль программирования (индусский код) = писать большое число простых операторов вместо сложных (не использовать подпрограммы, вместо одного Case использовать несколько IF); б) аналитики нередко вообще не пишут ни одной строки кода программы (и не обязаны этого делать).

4 замечание: на этапе проектирования программы от программиста требуется немалая изобретательность, а этому вряд ли можно научить. Но программирование это одновременно и техническая задача, для решения которой можно сформулировать технологические правила и им учить (см. выше – научный компонент = технология программирования).

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

 

Рисунок - Как понимают задачу Заказчик, Постановщик и Программист

...

время выполнения предписания

Объясняется дискретность следующими моментами:

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

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

Пример:

Пусть надо вычислить . На ЭВМ решение таких задач обычно сводится к следующей последовательности шагов (выполняющихся сверху вниз):

S1=x1

S2=S1+x2

S3=S2+x3 порядок выполнения

S4=S3+x4

...............

Sn=Sn-1+xn

 

Определение: предписание, содержащее указания по решению некоторой задачи и обладающее перечисленными свойствами, называется алгоритмом. Алгоритм, составленный на языке (переведенный на язык), понятном (понятный) ЭВМ (т.е. в этом случае исполнителем д.б. ЭВМ), называется программой.

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

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

2. Критерии оценки качества программ (программных проодуктов)

Программа в настоящее время рассматривается как некоторый продукт деятельности по её разработке. Появился даже термин «программный продукт». Решение одной и той же инженерной задачи может обеспечиваться выполнением различных программ (для решения одной задачи может существовать несколько методов, а каждый метод может быть реализован несколькими алгоритмами). При этом возникает проблема выбора одной программы (лучшей) из нескольких. Эту проблему решают на основе оценки качества программ. Существует довольно большое число таких критериев [Бутаков Е.А. Методы создания качественного ПО ЭВМ. М.: Энергоиздат. – 1984, с. 6-45], но мы рассмотрим лишь некоторые из них. К сожалению эти характеристики часто трудно формально определить, поэтому их вводят в форме " имеющая данное свойство программа должна быть такой-то".

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

· выбора соответствующего языка высокого уровня (Паскаль является учебным и простым языком, а Си - профессиональным, поэтому программы на языке Си обычно получаются менее понятны, чем на языке Паскаль, но на обоих этих языках программы на порядок понятнее, чем на Ассемблере);

на Паскалена Си

S: = 0; for (s=0, i=1; i< =10; s+=a[i++]);

for i: = 1 to 10 do

begin

{

s: = s + a[i];

}

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

- программа (и подпрограммы) должна занимать не более 1 листа;

- ограничение использования goto - не должны использоваться переходы вверх по тексту программы, что не позволяло бы читать программу последовательно сверху вниз, а не вверх-вниз, вверх-вниз, и т.д.;

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

· использование осмысленного набора имен а) имена должны соответствовать решаемой задаче (надо избегать конструкций типа z: = x*(1-0.13)-y, где неизвестно, что такое z, x, y. В то же время формула зарплата=начислено*(1-0.13) – аванс понятна всем или почти всем); б)надо использовать длинные имена;

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

· использование стиля программирования:

- использование отступов для отображения подчиненности (иерархии) элементов программы (при этом элементы одного и того же уровня иерархии должны иметь один и тот же размер отступа);

- запись операторных скобок на отдельных строках программы

for i: =1 to 10 do

begin

…….

end;

- использование пробелов (отступов) для лучшего (более наглядного) отделения элементов операторов друг от друга

Var

a: char;

begin

c: = a + b;

end;

- использование пустых строк для отделения (выделения) участков программы друг от друга

Участок1
Пусто
Участок2
Пусто
Участок3

Замечание:

Часто понятность программы достигается за счет снижения ее эффективности (на языке Си программы менее понятны, но более эффективны, чем на Паскале).

Эффективность : Ее трудно определить как некоторую абсолютную величину, однако в первом приближении за эффективность программы можно принять характеристику, значения которой прямо пропорционально быстродействию (скорости работы) программы и обратно пропорционально объему используемых (требуемых для выполнения) ресурсов ЭВМ. К таким ресурсам обычно относят:

· требуемое машинное время (чистое время процесса и время оператора ЭВМ)

· требуемая оперативная память;

· требуемая память на магнитных дисках;

· количество типов и единиц используемых программой внешних устройств (внешние по отношению к системному блоку);

· интенсивность использования устройств и т.п.

Эта характеристика была исключительно важна на ранней стадии развития вычислительной техники, когда ЭВМ имели небольшой (ограниченный) объем ресурсов. Для достижения эффективности требуется учет всех особенностей конкретной ЭВМ, что невозможно на уровне алгоритмического языка. Поэтому для достижения максимальной эффективности программировать надо на языке Ассемблера или писать программы прямо в машинных кодах. Сейчас объем ресурсов ЭВМ обычно настолько велик, и они настолько дешевы, что экономить эти ресурсы не имеет смысла и стоит пожертвовать эффективностью в пользу понятности.

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

Надежность : обычно считается, что надежная программа - это та, которая работает без ошибок.

Существует две стороны надежности:

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

Работа

Состояния сбой из-за ошибок

системы отказ

(программы)

Сбой – это кратковременная потеря программой работоспособности. После сбоя, как правило, запуск программы завершится нормально. Возможные причины – скачок питания, перегрев процессора из-за остановки вентилятора и т.д..

Отказ – устойчивая длительная потеря программой работоспособности.

б) Надежность как качество (см. Лебланк «Защищенный код», 2004 и 2008 г.г.): к огда мы говорим о надежности ПО, то подразумеваем отсутствие ошибок в программе. Однако поскольку ошибки неизбежны, то надежная программа д.б. организованна так, чтобы возможные ошибки не вели к фатальным последствиям (отказам) и могли быть быстро исправлены (программистом или пользователем – если ошибки в данных). То есть надежной программой считается та, которая даже при наличие ошибок не завершается аварийно. Для этого в программе должна быть предусмотрена обработка ошибок (исключительных ситуаций). Ошибки в общем случае делятся на:

1) ошибки внешние по отношению к программе:

· ошибки в исходных данных (чтобы себя от них обезопасить, надо проверять правильность ввода данных);

· ошибки, связанные с работой оборудования (чтобы обезопасить себя от этих ошибок, надо перехватывать обработку таких событий у системы, анализировать причины ошибки и выполнять соответствующие ошибке действия);

2) ошибки в самой программе, точнее в голове ее разработчика ( внутренние ):

- ошибки в постановке,

- ошибки в проектировании

- ошибки в кодировании

- ошибки в записи на внешний носитель.

Выводы:

1. внутренние ошибки (в голове) желательно не делать.

2. при их (внутренних ошибках) обнаружении (при тестировании) правильное выполнение программы возможно лишь после их полного исправления.

3. для программ, сделанных не для себя (на продажу) необходимо тщательно выполнять обработку как можно большего числа внешних ошибок.

4. Удобство сопровождения -

Этапы жизненного цикла ПО после завершения его разработки:

эксплуатация оператор (пользователь)

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

испытания заказчик

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

- исправление найденных при эксплуатации ошибок;

- адаптация ПО к новым условиям (новая ОС, новое оборудование и т.п.);

- повышение скорости работы ПО (если замечено, что оно работает слишком медленно).

Удобнее всего сопровождать ту программу, которая:

а) построена по модульному принципу (надо исправлять только тот модуль, в котором замечена ошибка);

б) понятна программисту.

5. Стоимость: Улучшение той или иной из перечисленных характеристик сказывается на стоимости программы. Поэтому должен достигаться определенный компромисс между степенью улучшения наиболее важных характеристик и увеличением стоимости программы следствие этого улучшения.

Этапы разработки программы

Как осуществляется программирование, какие процес­сы происходят при этом?

Решение любой сложной задачи состоит из четырех этапов:

1) Осознание и формулирование задачи, когда решающий задачу определяет, что дано и какова цель (что требуется получить в итоге);

2) Разработка плана, в котором раскрывается стра­тегия решения (стратегия достижения цели);

3) Выполнение (реализация) плана. При этом любой сложный план преобразует­ся в определенную последовательность достаточно простых (по сравнению с исходной задачей) действий;

4) Проверка правильности решения;

5) Документирование;

6) Сдача решения потребителю.

Эти этапы применительно к программированию называ­ют соответственно так:

1) определение требований к ПО и целей проектирования ПО (постановка задачи, ее формализация и разработка ТЗ);

2) проектирование ПО (разработка метода решения, структуры программы и алгоритмов);

3) кодирование (написанием собственно программы на выбранном языке программирования) и отладка программы;

4) тестирование программы, в том числе и на стороне Заказчика (по ПМИ);

5) выпуск документации (руководство программиста, руководство системного программиста и т.п.);

6) выпуск программного продукта для передачи потребителю (Заказчику).

По ГОСТ 19.102-77 «Стадии разработки» определены следующие этапы разработки ПО:

1) разработка ТЗ (ему соответствует названный выше этап «Постановка задачи и ее формализация»)

2) разработка ЭП (им соответствует названный выше этап «разработка метода решения,

3) разработка ТП структуры программы и алгоритмов»)

4) разработка РП (он включает названные выше этапы «Кодирование и отладка», «Тестирование» и «Документирование».

5) внедрение (ему соответствует названный выше этап «Выпуск программного продукта для передачи потребителю (Заказчику)»).

Более подробно о некоторых этапах (или подэтапах) разработки ПО.

Постановка задачи

Выполняется на языке предметной области, т.е. с использованием используемой в предметной области технической терминологии (антенна, телевизор, резистор...). На этом этапе:

- указываются (выбираются из предметной области) исходные объекты (объекты предметной области, относительно которых поставлена задача), их типы (структура, организация) а так же отношения между ними (исходными объектами);

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

- выбираются, согласовываются и фиксируются ограничения (на исходные данные и метод решения).

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

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

- теория графов;

- теория вероятностей;

- теория массового обслуживания;

- теория множеств

- и т.д.

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

Хорошая математическая постановка задачи часто позволяет сразу увидеть способ решения.

Поиск метода решения задачи (на этапе проектирования)

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

- те, которые уже ранее встречались, и решение их уже известно;

- те, для которых известна постановка, и решение их не представляет (для программиста) труда.

Таким образом, метод решения определяет замену исходной задачи на некоторую эквивалентную ей последовательность известных задач.

Откуда эти известные задачи появляются в поле зрения разработчика, зависит от выбранного им подхода к разработке программ (алгоритмов) - восходящий или нисходящий.

Замечание: Кроме названных двух подходов к разработке алгоритмов (программ) обычно выделяют следующие методологии (парадигмы) программирования:

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

- объектно-ориентированная (по сути тоже восходящий подход, но не процедурный);

- логическая (логико-ориентированная);

- функциональная.

Мы об этих парадигмах поговорим чуть позже.

Кодирование проходит обычно следующие шаги:

1).Перевод алгоритма на один из языков программирования, в результате чего получается (вначале на бумаге) рукописный (исходный) текст программы.

2).Подготовка программы для ПЭВМ, т.е. перенос рукописного текста программы с бумаги на машинный носитель информации. Для этого используется текстовый редактор.

3). Компиляция текста программы в машинный код с помощью программы, называемой компилятором.

 
 

 


Машинный код

(понятен ЭВМ)

Замечание: фраза, что программа – это алгоритм, составленный на языке, понятном ЭВМ, означает, что при наличии посредника-компилятора текст, написанный на ЯВУ, уже считается понятным ЭВМ. Этот посредник-компилятор занимается переводом текста программы с ЯВУ на машинный язык.

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

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

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

4). Компоновка (линковка) программы: т.е. объединение отдельных частей программы, добавление стандартных подпрограмм и установление необходимых связей между частями программы. Эти действия выполняются программой, называемой линкером (компоновщиком).

На этапе компиляции все обращения (адреса обращений) из программы к чужим (внешним, не реализованным в данной программе) функциям заменяются нуль-кодами, т.к. реальные адреса загрузки функций в память в момент компиляции неизвестны. На этапе компоновки эти места корректируют с учетом реального размещения программы и функций в разных частях программы. Эта работа выполняется компоновщиком (линковщиком). В результате получается исполняемая программа (загрузочный модуль), т.е *.exe.

Замечание: компилятор Турбо-Паскаля (и Free Pascal) производит компиляцию сразу в исполняемый код (отдельный этап линковки не требуется).

Все адресные ссылки в загрузочном модуле - относительны (относительно начала загрузочного модуля). Перед передачей программе управления надо настроить все адресные ссылки на начальный адрес размещения программы в оперативной памяти. Эту функцию выполняет Загрузчик.

Отладка и Тестирование: После получения готового к выполнению кода программы начинается этап ее отладки и тестирования - поиск ошибок в программе (debugging), например, ошибок при работе с данными, логических ошибок и т.п.

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

Различают методы тестирования: а) белого ящика (структурное тестирование) и б) черного ящика (функциональное тестирование - может начинаться сразу после получения ТЗ).

Различают виды тестирования: а) альфа-тестирование (проводит сам программист) б) бета-тестирование (проводится у Заказчика или потенциального Потребителя).

По завершении (успешном) тестирования программа готова к передаче ее заказчику.

Замечание:

Все перечисленные выше программы (редактор, компилятор, линковщик, отладчи и т.д.) могут быть запущены и использованы по отдельности (в описанном порядке), но в Турбо-Паскале они объединяются в так называемую интегрированную среду разработки (IDE), позволяющею создавать, отлаживать и запускать программы не выходя из среды с помощью системы меню.

4. Средства записи и классификация алгоритмов.

Восходящий подход

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

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

Поскольку рассуждения, выполненные в ходе поиска способа решения задачи, не фиксируются, то они теряются и не могут быть использованы при дальнейшем составлении алгоритма. В связи с этим от разработчика требуется выполнить восстановление структуры решения (которое у него сложилось на момент подбора базовых конструкций). Когда число базовых конструкций, уровней иерархии и связей между ними достаточно велико или когда опыт разработчика еще не велик, то способности разработчика часто не хватает на то, чтобы: 1) Просто не допустить логических ошибок в алгоритме; 2) Итоговая структура алгоритма соответствовала той, которую разработчик мысленно получил при подборе базовых средств.

 

 
 

 


… … … …

 
 

 

 


базовые средства

 

6.2 Нисходящий подход.

           
 
Постановка1
 
Постановка2  
     
ПостановкаN  
 
 
 
Программа1
 
Программа2  
 
 
Исполнтель1
 
Исполнтель2  


………

 
 
Программа N  


………

           
 
     
 
 

 


………

 

Стадия 1 Стадия 2 ….. Стадия N

Разработка программы проходит несколько этапов уточнения. На самом верхнем уровне (этапе) решение задачи описывается в терминах небольшого числа (в простейшем случае - одного) действий самого высокого уровня, выполняемые над данными, которые также рассматриваются на самом высоком уровне абстракции. Каждое действие высокого уровня затем уточняется посредствам описания его в терминах действий более низкого уровня. Одновременно уточняются и данные, над которыми выполняются эти действия. Процесс уточнения продолжается до тех пор, пока действия и данные не станут выражаться непосредственно на используемом языке программирования. Каждому этапу уточнения соответствует некоторый отличный от других экземпляр программы (со своим набором документации). При этом для каждой программы предполагается некоторый исполнитель, способный ее (программу) выполнить (ЭВМ).

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

Достоинства данного подхода:

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

Недостатки этого подхода:

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

2) ошибки, допущенные на начальных этапах, будут дублироваться на всех последующих этапах

Замечание по двум подходам: и восходящий и нисходящий подходы к разработки алгоритмов - оба являются разными сторонами одного и того же задачного (процедурного) подхода. При использовании данного подхода основное внимание фокусируется на разработке процедур (подпрограмм), в том смысле, что программист пытается разделить поставленную задачу на составляющие подпрограммы, т.е. проводит декомпозицию задачи на подпрограммы, при этом разработчик в алгоритме сам устанавливает порядок выполнения подпрограмм, т.е. какая подпрограмма какую будет вызывать и при каких условиях. Исходные данные и подпрограммы объявлялись отдельно. В подпрограммы данные передаются как параметры . При использовании данного подхода предполагается, что исходные объекты либо не взаимодействуют, либо взаимодействуют, но очень слабо.

Данные

7.1 Понятие данных.

Исходная задача ставится относительно некоторых объектов из предметной области - исходных объектов. В алгоритме мы имеем дело не с самими объектами, а с их моделями (аналогами).

Целью разработки алгоритма является создание предписания для исполнителя по выполнению действий над моделями исходных объектов, приводящих к решению поставленной задачи.

Согласно свойствам определённости и понятности алгоритма эти модели и выполняемые с ними действия д.б. известны исполнителю и пониматься им однозначно. В результате в алгоритмах можно использовать только такие модели объектов, которые:

- заранее известны исполнителю или м.б. однозначно описаны в терминах известных ему понятий.

- допускают описание действий над ними в терминах известных и однозначно понятных исполнителям операций

NB: именно такие модели реальных объектов называются данными.

В зависимости от момента образования и периода их существования различают следующие типы данных:

Исходные: Это сведения о предметной области, которые требуются исполнителю в ходе выполнения алгоритма, но неизвестные заранее (их надо вводить в начале выполнения программы). К ним относятся знания об исходных объектах.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-12; Просмотров: 583; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.119 с.)
Главная | Случайная страница | Обратная связь