07 Программирование на ЭВМ - модули.pptx
- Количество слайдов: 25
Программирование на ЭВМ Лекция 7. Основные методологии программирования. Модульное программировние Доцент, к. т. н. Исаев А. В. avisz@yandex. ru Ауд. 7 или 234
Основные современные методологии программирования • Структурное программирование; • Объектно ориентированное программирование; • И другие
Структурное программирование • • Структурное программирование — методология разработки программного обес печения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70 х года XX века Э. Дейкстрой, разработана и дополнена Н. Виртом. В соответствии с этой методологией, любая программа представляет собой структуру, построенную из трёх типов базовых конструкций: последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы; ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия; цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла). В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается. Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется команда вызова подпрограммы. При выполнении такой команды (инструкции) выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
Структурное программирование • Следование принципам структурного программирования сделало тексты программ, даже довольно крупных, нормально читаемыми. Серьёзно облегчилось понимание программ, появилась возможность разработки программ в нормальном промышленном режиме, когда программу может без особых затруднений понять не только её автор, но и другие программисты. Это позволило разрабатывать достаточно крупные для того времени (1970 е гг. ) программные комплексы силами коллективов разработчиков, и сопровождать эти комплексы в течение многих лет, даже в условиях неизбежной ротации кадров.
Структурное программирование • Основные достоинства структурного программирования: • Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и, что ещё важнее, облегчает понимание её другими разработчиками; • В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет обходиться без блок схем и других графических форм изображения алгоритмов (по сути, сама программа является собственной блок схемой); • Сильно упрощается процесс тестирования и отладки структурированных программ.
Объектно ориентированное программирование • Объектно ориентированное программирование (ООП) — методология программирования, в которой основными являются понятия объектов и классов. • Основные концепции объектно ориентированного подхода: – – – Система состоит из объектов; Объекты некоторым образом взаимодействуют между собой; Каждый объект характеризуется своим состоянием и поведением; Состояние объекта задаётся значением полей данных; Поведение объекта задаётся методами. • Кроме того, в современном объектно ориентированном программировании часто большое значение имеют понятия события (так называемое событийно ориентированное программирование) и компонента (компонентное программирование).
Объектно ориентированное программирование • Языки объектно ориентированного программирования принято делить на объектные, в которых существуют классы и объекты, и собственно объектно ориентированные, в которых программист может не только пользоваться предопределёнными классами, но и задавать собственные пользовательские классы. • Объектное и объектно ориентированное программирование возникло в результате развития идеологии структурного программирования, где данные и подпрограммы их обработки формально не связаны. • Объектно ориентированное программирование в настоящее время является абсолютным лидером в области прикладного программирования (языки Java, C#, C++, Java. Script и др. ). В то же время в области системного программирования до сих пор лидирует парадигма процедурного программирования.
Модульное программирование • Модульное программирование – это организация программы как совокупности небольших независимых блоков, называемых модулями. • Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. • Основным принципом модульного программирования является принцип «разделяй и властвуй» .
Основные принципы модульного программирования • Основной принцип программного модуля сформулировал Д. Парнас (D Parnas): Для написания одного модуля должно быть достаточно минимальных знаний о тексте другого • Таким образом, была выдвинута концепция скрытия информации (information hiding) в программировании. Для реализации этой концепции и были разработаны модули, основной особенностью которых является неподверженность влиянию глобальных переменных. • Изначально предполагалось, что при реализации сложных программных комплексов модуль должен использоваться наравне с процедурами и функциями как конструкция, объединяющая и надежно скрывающая детали реализации определенной подзадачи.
Основные принципы модульного программирования • Общее количество модулей, используемых в программе, должно определяться декомпозицией поставленной задачи на независимые подзадачи. • В предельном случае модуль может использоваться даже для заключения в него всего лишь одной процедуры, если необходимо, чтобы выполняемое ею локальное действие было гарантировано независимым от влияния других частей программы при любых изменениях.
Program primer; Uses modul 1, modul 2, modul 3 … {в программе можно использовать процедуры и функции, описанные в подключенных модулях} Unit modul 1; {описание процедур, функций} Unit modul 2; {описание процедур, функций} Unit modul 3; {описание процедур, функций}
Место модулей в технологии разработки программного проекта
Модули в Pascal • Подключаемый модуль — это файл, содержащий исходный текст на языке Pascal, имеющий определенную структуру, предназначенный для использования как в главной программе, так и в других подключаемых модулях.
Общая структура модуля • Общая структура модуля в Pascal: unit <имя модуля>; interface implementation end. • Структурно в подключаемом модуле можно выделить три раздела: • 1) Интерфейсный раздел interface (должен быть объявлен, но может быть пустым); • 2) Раздел реализаций implementation (должен быть объявлен, но может быть пустым); • 3) Тело модуля, заключенное между словами begin и end. (может отсутствовать).
Модули в Pascal • Имя модуля должно совпадать с именем файла, в который помещается исходный текст модуля. Если, например, есть заголовок модуля unit primer; то исходный текст этого модуля должен размещаться на диске в файле primer. pas (или с другим расширением, в зависимости от типа компилятора Pascal).
Общая структура модуля. Интерфейсный раздел — область модуля, начинающаяся с ключевого слова 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 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; //объявляем «прототипы» подпрограмм модуля 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; //подключаем наш модуль к программе 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.
Спасибо за внимание!