Скачать презентацию Программирование на ЭВМ Лекция 7 Основные методологии программирования Скачать презентацию Программирование на ЭВМ Лекция 7 Основные методологии программирования

07 Программирование на ЭВМ - модули.pptx

  • Количество слайдов: 25

Программирование на ЭВМ Лекция 7. Основные методологии программирования. Модульное программировние Доцент, к. т. н. Программирование на ЭВМ Лекция 7. Основные методологии программирования. Модульное программировние Доцент, к. т. н. Исаев А. В. avisz@yandex. ru Ауд. 7 или 234

Основные современные методологии программирования • Структурное программирование; • Объектно ориентированное программирование; • И другие Основные современные методологии программирования • Структурное программирование; • Объектно ориентированное программирование; • И другие

Структурное программирование • • Структурное программирование — методология разработки программного обес печения, в основе Структурное программирование • • Структурное программирование — методология разработки программного обес печения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70 х года XX века Э. Дейкстрой, разработана и дополнена Н. Виртом. В соответствии с этой методологией, любая программа представляет собой структуру, построенную из трёх типов базовых конструкций: последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы; ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия; цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла). В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается. Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется команда вызова подпрограммы. При выполнении такой команды (инструкции) выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.

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

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

Объектно ориентированное программирование • Объектно ориентированное программирование (ООП) — методология программирования, в которой основными Объектно ориентированное программирование • Объектно ориентированное программирование (ООП) — методология программирования, в которой основными являются понятия объектов и классов. • Основные концепции объектно ориентированного подхода: – – – Система состоит из объектов; Объекты некоторым образом взаимодействуют между собой; Каждый объект характеризуется своим состоянием и поведением; Состояние объекта задаётся значением полей данных; Поведение объекта задаётся методами. • Кроме того, в современном объектно ориентированном программировании часто большое значение имеют понятия события (так называемое событийно ориентированное программирование) и компонента (компонентное программирование).

Объектно ориентированное программирование • Языки объектно ориентированного программирования принято делить на объектные, в которых Объектно ориентированное программирование • Языки объектно ориентированного программирования принято делить на объектные, в которых существуют классы и объекты, и собственно объектно ориентированные, в которых программист может не только пользоваться предопределёнными классами, но и задавать собственные пользовательские классы. • Объектное и объектно ориентированное программирование возникло в результате развития идеологии структурного программирования, где данные и подпрограммы их обработки формально не связаны. • Объектно ориентированное программирование в настоящее время является абсолютным лидером в области прикладного программирования (языки Java, C#, C++, Java. Script и др. ). В то же время в области системного программирования до сих пор лидирует парадигма процедурного программирования.

Модульное программирование • Модульное программирование – это организация программы как совокупности небольших независимых блоков, Модульное программирование • Модульное программирование – это организация программы как совокупности небольших независимых блоков, называемых модулями. • Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. • Основным принципом модульного программирования является принцип «разделяй и властвуй» .

Основные принципы модульного программирования • Основной принцип программного модуля сформулировал Д. Парнас (D Parnas): Основные принципы модульного программирования • Основной принцип программного модуля сформулировал Д. Парнас (D Parnas): Для написания одного модуля должно быть достаточно минимальных знаний о тексте другого • Таким образом, была выдвинута концепция скрытия информации (information hiding) в программировании. Для реализации этой концепции и были разработаны модули, основной особенностью которых является неподверженность влиянию глобальных переменных. • Изначально предполагалось, что при реализации сложных программных комплексов модуль должен использоваться наравне с процедурами и функциями как конструкция, объединяющая и надежно скрывающая детали реализации определенной подзадачи.

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

Program primer; Uses modul 1, modul 2, modul 3 … {в программе можно использовать Program primer; Uses modul 1, modul 2, modul 3 … {в программе можно использовать процедуры и функции, описанные в подключенных модулях} Unit modul 1; {описание процедур, функций} Unit modul 2; {описание процедур, функций} Unit modul 3; {описание процедур, функций}

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

Модули в Pascal • Подключаемый модуль — это файл, содержащий исходный текст на языке Модули в Pascal • Подключаемый модуль — это файл, содержащий исходный текст на языке Pascal, имеющий определенную структуру, предназначенный для использования как в главной программе, так и в других подключаемых модулях.

Общая структура модуля • Общая структура модуля в Pascal: unit <имя модуля>; interface implementation Общая структура модуля • Общая структура модуля в Pascal: unit <имя модуля>; interface implementation end. • Структурно в подключаемом модуле можно выделить три раздела: • 1) Интерфейсный раздел interface (должен быть объявлен, но может быть пустым); • 2) Раздел реализаций implementation (должен быть объявлен, но может быть пустым); • 3) Тело модуля, заключенное между словами begin и end. (может отсутствовать).

Модули в Pascal • Имя модуля должно совпадать с именем файла, в который помещается Модули в Pascal • Имя модуля должно совпадать с именем файла, в который помещается исходный текст модуля. Если, например, есть заголовок модуля unit primer; то исходный текст этого модуля должен размещаться на диске в файле primer. pas (или с другим расширением, в зависимости от типа компилятора Pascal).

Общая структура модуля. Интерфейсный раздел — область модуля, начинающаяся с ключевого слова interface, которая Общая структура модуля. Интерфейсный раздел — область модуля, начинающаяся с ключевого слова interface, которая может содержать: список подключаемых модулей; константы; пользовательские типы данных; переменные; прототипы процедур и функций, доступные из места подключения данного модуля (программы или другого модуля). • Основное назначение интерфейсного раздела — определять общедоступные данные/функционал для применения из программы или модуля, использующих данный модуль. • Замечание 1: Переменные, объявленные в интерфейсном разделе, являются глобальными — то есть доступны в любом месте программы, к которой подключен данный модуль, в том числе в разделе реализации самого модуля. Замечание 2: Как и в программе, вышеперечисленные секции (объявления констант, переменных и др. , за исключением секции uses) в данном разделе могут быть расположены в любой последовательности и в любом количестве. Замечание 3: Если в данном разделе объявляются прототипы (предварительные объявления, без подробного описания) процедур/функций, то их реализации должны гарантированно присутствовать в разделе implementation.

Общая структура модуля. Раздел реализаций • Раздел реализаций — область подключаемого модуля, начинающаяся с Общая структура модуля. Раздел реализаций • Раздел реализаций — область подключаемого модуля, начинающаяся с ключевого слова implementation и заканчивающаяся телом модуля (если таковое имеется) или ключевым словом end с точкой, означающим конец модуля. • Основное назначение раздела реализаций: реализация процедур и функций, описанных ранее в секции interface. Замечание: при реализации процедур и функций, описанных в интерфейсной секции, их заголовки могут быть описаны в сокращенной форме (исключение — Pascal. ABC: при использовании переменных).

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

Использование модуля • Использование модуля заключается в его подключении к программе или другому модулю Использование модуля • Использование модуля заключается в его подключении к программе или другому модулю в разделе uses: Uses <список модулей>; • <список модулей> — список модулей, с которыми устанавливается связь; имена модулей в списке перечисляются через запятую. • Если в программе (или в модуле) используются модули, то часть uses <список модулей> должно стоять сразу после заголовка программы , т. е. должно открывать раздел описаний основной программы. • В модулях Паскаля могут использоваться другие модули. В модулях предложение uses <список модулей> может стоять сразу после слова interface или сразу после слова implementation. Допускается и два предложения uses, т. е. оно может стоять и там, и там.

Дополнительные разделы модуля • Компиляторы Free Pascal (используемый, в частности, в среде Lazarus), Pascal Дополнительные разделы модуля • Компиляторы Free Pascal (используемый, в частности, в среде Lazarus), Pascal ABC, Pascal ABC. Net допускают в описании модулей, помимо перечисленных выше разделов, еще два раздела: • раздел инициализации (начинается со слова initialization)— область модуля, размещаемая после раздела реализаций implementation, заканчивающаяся разделом финализации finalization, если таковой имеется, или ключевым словом end с точкой, назначение аналогично телу модуля. • раздел финализации (начинается со слова finalization) — область модуля, размещаемая по окончании раздела инициализации initialization, если таковой имеется, или по окончании раздела реализаций implementation, и заканчивающаяся ключевым словом end с точкой. Основное назначение: освобождение ресурсов, выделенных для работы модуля.

Компиляция модулей • Каждый подключаемый модуль компилируется отдельно, а результат компиляции зависит от используемого Компиляция модулей • Каждый подключаемый модуль компилируется отдельно, а результат компиляции зависит от используемого компилятора. Компиляция в Turbo Pascal. • Результат компиляции — *. tpu файл (Turbo Pascal Compiled Unit). Компиляция в Free Pascal. • Результат компиляции — два файла: *. ррu — файл, содержащий интерфейсную часть модуля, и файл *. о — объектный файл, содержащий часть реализаций, причем последний необходим для компоновки приложения. Компиляция в Pascal ABC. Net. • В отличие от перечисленных выше, Pascal ABC. Net в процессе компиляции модуля не генерирует код на машинном языке. Компилятор данной среды завершает свою работу после выполнения семантического анализа, сохраняя семантическое дерево модуля в промежуточный формат — *. рсu файл, который в первом приближении можно считать результатом компиляции с обозначенными ограничениями.

Ускорение компиляции программ • На этапе компоновки приложения компоновщик собирает исполняемый модуль, принимая на Ускорение компиляции программ • На этапе компоновки приложения компоновщик собирает исполняемый модуль, принимая на вход объектные модули. Таким образом, имея уже откомпилированные подключаемые модули, компиляция программ с их использованием ускоряется, так как они уже обработаны. Данное справедливо для Turbo и Free Pascal. • В Pascal ABC. Net ускорение компиляции достигается только за счет того, что отсутствует необходимость проводить синтаксический и семантический анализ. • Вывод: откомпилированные версии исполняемых модулей не совместимы между различными компиляторами.

Пример модуля unit Mymatem; Interface // интерфейсный раздел function pwr(a, b: real): real; //объявляем Пример модуля unit Mymatem; Interface // интерфейсный раздел function pwr(a, b: real): real; //объявляем «прототипы» подпрограмм модуля function tg(a: real): real; Implementation // раздел реализаций function power(a, b: real): real; //расписываем каждую из объявленных подпрограмм begin if (a=0) and (b=0) then power: =1 else if a=0 then power: =0 else if (a<0) and (not odd(round(b))) then power: =exp(b*ln(abs(a))) else if (a<0) and (odd(round(b))) then power: =-exp(b*ln(abs(a))) else if a>0 then power: =exp(b*ln((a))) end; function tg(a: real): real; begin if cos(a)=0 then writeln('Error!') else tg: =sin(a)/cos(a); end. // конец модуля. Слово end. (с точкой) пишется в конце модуля, даже если перед ним не было слова begin!!!

Пример программы, использующей написанный модуль program project 1; uses mymatem; //подключаем наш модуль к Пример программы, использующей написанный модуль program project 1; uses mymatem; //подключаем наш модуль к программе var a, b: real; begin writeln('Vvedite a, b: '); readln(a, b); writeln(power(a, b)); //и используем функцию из модуля! writeln('Vvedite ugol v radianah: '); readln(a); writeln(tg(a)); //и используем другую функцию из модуля! readln; end.

Спасибо за внимание! Спасибо за внимание!