Главная страница
Навигация по странице:

  • 1.2. ЦИКЛ ЖИЗНИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

  • 1.3. ЭТАПЫ СОЗДАНИЯ ПРОГРАММ

  • 1.4. ДОКУМЕНТИРОВАНИЕ ПРОГРАММ

  • 1.5. ОБЩЕСИСТЕМНЫЕ ПРИНЦИПЫ СОЗДАНИЯ ПРОГРАММ

  • 1.7. ТРАНСЛЯЦИЯ И ИНТЕРПРЕТАЦИЯ ПРОГРАММ

  • Лекции по программированию. Основные понятия классификация программного обеспечения


    Скачать 1.57 Mb.
    НазваниеОсновные понятия классификация программного обеспечения
    АнкорЛекции по программированию.doc
    Дата15.01.2018
    Размер1.57 Mb.
    Формат файлаdoc
    Имя файлаЛекции по программированию.doc
    ТипДокументы
    #14117
    КатегорияИнформатика. Вычислительная техника
    страница1 из 6
      1   2   3   4   5   6

    ОСНОВНЫЕ ПОНЯТИЯ

    1.1. КЛАССИФИКАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

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

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

    системное: операционные системы; драйверы устройств; раз­личные утилиты;

    для разработчиков: среды программирования; трансляторы и интерпретаторы; CASE-средства; библиотеки программ;

    для конечных пользователей: текстовые процессоры; электрон­ные таблицы; графические редакторы; решатели математических задач; обучающие и контролирующие системы; компьютерные иг­ры; прикладные программы.

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

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

    1.2. ЦИКЛ ЖИЗНИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

    Жизненный цикл ПО (softwarelife-cycle) - весь период времени существования системы программного обеспечения, начи­ная от выработки первоначальной концепции этой системы и кончая ее моральным устареванием.

    Жизненный цикл (рис. 1) представляется в виде некоторого числа последовательных фаз, в определенных местах охватывае­мых обратными связями, когда может возникнуть необходимость повторения какого-либо одного или даже всех этапов разработки системы. Такая модель обеспечивает отражение итеративности* процессов существования ПО.



    Итерация - повторение численного или нечисленного процесса, когда ре­зультаты одного или нескольких шагов являются входной информацией для сле­дующего начального шага этого цикла. Как правило, такая циклическая процедура заканчивается при достижении заданных результатов, или после того, как резуль­таты перестают меняться.

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

    1.3. ЭТАПЫ СОЗДАНИЯ ПРОГРАММ

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

    а) уточнение видов и последовательности всех работ;

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

    в) выявление аналогов, обеспечивающих достижение подобных целей, их достоинств и недостатков.

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

    а) постановка задачи на разработку новой программы;

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

    Далее, при необходимости, этапы 1-2 могут быть повторены до достижения удовлетворительного облика программной систе­мы с описанием выполняемых ею функций и некоторой ясностью реализации ее функционирования.

    3. Проектирование программы. На этом этапе проводится ком­плекс работ по формированию описания программы. Исходными данными для этой фазы являются требования, изложенные в спе­цификации, разработанной на предыдущем этапе. Принимаются решения, касающиеся способов удовлетворения требований спе­цификации. Эта фаза разработки программы делится на два этапа:

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

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

    1. Кодирование и тестирование. Эти виды деятельности осу­ществляются для отдельных модулей и совокупности готовых мо­дулей до получения готовой программы.

    2. Комплексное тестирование.

    3. Разработка эксплуатационной документации.

    7.Приемо-сдаточные и другие виды испытаний.

    8. Корректировка программ. Проводится по результатам пред­шествующих испытаний.

    1. Сдача заказчику. Осуществляется окончательная сдача про­граммного изделия заказчику.

    10. Тиражирование.

    11. Сопровождение программы. В понятие «сопровождение» входят все технические операции, необходимые для использования данной программы в рабочем режиме. Сюда входит не только ис­правление ошибок. На этом этапе также осуществляется модифи­кация программы, внесение исправлений в рабочую документацию, усовершенствование программы и др. Вследствие широких мас­штабов подобных операций сопровождение является итеративным процессом, который желательно осуществлять не столько после,
    сколько до выпуска программного изделия для широкого исполь­зования. Работы по сопровождению часто поглощают более поло­вины затрат, приходящихся на весь жизненный цикл программной системы в тоимостном выражении.

    Современные технологии проектирования программного обес­печения направлены на частичную автоматизацию описанных вы­ше этапов и на совмещение их во времени с целью сокращения сроков выполнения проектов.
    1.4. ДОКУМЕНТИРОВАНИЕ ПРОГРАММ

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

    Программная спецификация (programspecification) - точное описание того результата, которого нужно достичь с помощью про­граммы. Это описание должно точно устанавливать, что должна делать программа, не указывая, как она должна это делать.

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

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

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

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

    объекты, участвующие в задаче (что делает программа и что делает человек, работающий с этой программой);

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

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

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

    Различают внешнюю программную документацию, которая со­гласуется с заказчиком, и промежуточную внутреннюю документа­цию проекта. При составлении программной документации сначала разрабатываются внешние спецификации, а затем — внутренние.

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

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

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

    1.5. ОБЩЕСИСТЕМНЫЕ ПРИНЦИПЫ СОЗДАНИЯ ПРОГРАММ

    При создании и развитии ПО рекомендуется применять следующие общесистемные принципы:

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

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

    принцип развития, который предусматривает в ПО возмож­ность его наращивания и совершенствования компонентов и свя­зей между ними;

    принцип комплексности, который заключается в том, что ПО обеспечивает связанность обработки информации, как отдельных элементов, так и для всего объема данных в целом на всех стадиях обработки;

    принцип информационного единства, то есть во всех подсис­темах, средствах обеспечения и компонентах ПО используются единые термины, символы, условные обозначения и способы пред­ставления;

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

    принцип инвариантности определяет инвариантность подсис­тем и компонентов ПО к обрабатываемой информации, то есть яв­ляются универсальными или типовыми.

    1.6. ТЕХНОЛОГИИ И ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ

    Технологии программирования - это апробированные стратегии создания программ, которые излагаются в виде методик с информационными фондами, описаниями проектных процедур и проектных операций. Существуют технология структурного про­граммирования, технология проектирования программ с рациональ­ной структурой данных, технология объектно-ориентированного программирования, технология визуального программирования.

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

    Существуют четыре основные парадигмы, которые описывают большинство сегодняшних методов программирования: императивная, аппликативная, основанная на системе правил и объектно-ориентированная.

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

    Оператор_1:

    Оператор_2:

    ...

    Обычно при первом знакомстве с концепциями программиро­вания люди сталкиваются именно с этой моделью, и многие широ­ко распространенные языки поддерживают именно ее (например, С, C++, FORTRAN, ALGOL, PL/I, Pascal, Ada, Smalltalkи COBOL).

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

    Языки, в которых акцентирован именно этот взгляд на вычис­ления, называются аппликативными, или функциональными. Син­таксис такого языка, как правило, выглядит следующим образом:

    Функция_n (... функция_2 (функция_1 (данные) )...)

    Такую модель поддерживают такие языки как MLи LISP.

    Парадигма, основанная на системе правил. Язы­ки, основанные на этой парадигме, осуществляют проверку нали­чия необходимого разрешающего условия и в случае его обнару­жения выполняют соответствующее действие. Наиболее известным языком, основанным на системе правил, является Prolog. Он назы­вается также языком логического программирования.

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

    разрешающее условие_1 —> действие_1 разрешающее условие_2 —> действие__2

    разрешающее условие_n —> действие _n

    Иногда правила записываются в виде «действие if разрешаю­щее условие», когда выполняемое действие записывается слева.

    Объектно-ориентированная парадигма. В этой модели строятся сложные объекты данных. Для операций над ними определяется некоторый ограниченный набор методов. Создавае­мые объекты могут наследовать свойства более простых объектов. Благодаря такой возможности объектно-ориентированные про­граммы имеют высокую эффективность, свойственную програм­мам, написанным на императивных языках. Возможность разра­ботки различных классов, которые используют ограниченный на­бор объектов данных, обусловливает гибкость и надежность, которые свойственны аппликативному языку.

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

    1.7. ТРАНСЛЯЦИЯ И ИНТЕРПРЕТАЦИЯ ПРОГРАММ

    Компьютер представляет собой интегрированный на­бор алгоритмов и структур данных, способный хранить и выпол­нять программы. Компьютер может быть создан как реальное физическое устройство, которое называют просто компьютером. Но он также может быть построен с помощью программ, выполняемых на каком-то другом компьютере, тогда он называется программно-моделируемым или виртуальным компьютером, состоящим частич­но из аппаратуры и частично из программного обеспечения.

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

    Поэтому возникает вопрос: как организовать выполнение таких программ на конкретном компьютере? Для этой задачи существует два основных решения.

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

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

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

    Компилятор — транслятор, для которого исходным является язык высокого уровня, а его объектный язык близок к машинному языку реального компьютера. Это либо язык ассемблера, либо какой-нибудь вариант машинного языка. Например, программы на языке С компилируются, как правило, в программы на языке ассемблера, ко­торые затем транслируются ассемблером в машинный язык.

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

    Подпрограмма

    Адреса

    Адреса в выполняемой после компиляции программе

    Р

    0-999

    0-999

    Q

    0-1999

    1000-2999

    Библиотека

    0-4999

    3000-7999

    Препроцессор (макропроцессор) - это транслятор, исходный язык которого является расширенной формой какого-либо языка высокого уровня (например, Javaили C++), а объектный язык — стандартной версией этого языка. Объектная программа, созданная препроцессором, готова к трансляции и выполнению обычными процессорами исходного стандартного языка.

    Главным недостатком трансляции является потеря информации о программе. Если в программе есть ошибка, то часто трудно опре­делить, какой из операторов программы на исходном языке выпол­нялся и какие объекты данных использовались в нем. Кроме того, поскольку оператор на языке высокого уровня содержит гораздо больше информации, чем команда машинного языка, то исполняе­мая форма программы занимает в памяти гораздо больше места.

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

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

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

    Смешанные системы реализации. Чаще всего для реализации языка высокого уровня на компьютере используется комбинированный подход. Сначала программа транслируется из своей исходной формы в форму, более удобную для выполнения. Обычно это делается путем создания нескольких независимых час­тей программы, называемых модулями. На этапе загрузки эти неза­висимые части объединяются с набором программ поддержки вы­полнения, реализующих программно-моделируемые (интерпрети­руемые) операции. Это приводит к созданию выполняемой формы программы, операторы которой декодируются и выполняются по­средством их интерпретации.
      1   2   3   4   5   6


    написать администратору сайта