Модульное программирование

Автор: Пользователь скрыл имя, 11 Января 2011 в 17:41, курсовая работа

Краткое описание

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

Оглавление

Введение 3
1 Постановка задачи 5
2 Модульное программирование 6
3 Описание программы 11
Заключение 16
Список литературы 17
Приложение А 18
Приложение Б 19

Файлы: 1 файл

ГОТОВАЯ курсоваая ВСССТ.docx

— 82.56 Кб (Скачать)

       Содержание 

       Введение 3

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

       2 Модульное программирование 6

       3 Описание программы 11

       Заключение 16

       Список  литературы 17

       Приложение  А 18

       Приложение  Б 19

       Введение

 

       Структурное программирование —  методология программирования, базирующаяся на системном подходе к анализу, проектированию и реализации программного обеспечения. Эта методология зародилась вначале  70-х гг. и оказалась настолько жизнеспособной, что и до сих пор является основной в большом количестве проектов. Ее основу составляет концепция модульного программирования.

       Концепцию модульного программирования можно  сформулировать в виде нескольких понятий  и положений. Основа концепции модульного программирования — модуль, который является продуктом процесса разбиения большой задачи на ряд более мелких функционально самостоятельных подзадач. Этот процесс называется функциональной декомпозицией задачи. Каждый модуль в функциональной декомпозиции представляет собой «черный ящик» с одним входом и одним выходом. Модули связаны между собой только входными и выходными данными.

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

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

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

       Для достижения поставленной цели необходимо решить следующие задачи:

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

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

 

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

       2 Модульное программирование

 

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

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

       Модуль  – это программа, обладающая тремя  основными атрибутами:

    1. Он выполняет одну или несколько функций;
    2. Модуль реализует некоторую логику (алгоритм);
    3. Используется в одном или нескольких контекстах.

       При этом функция – это то, что  делает модуль, а не то, как он это  делает. А вот логика характеризует, как модуль выполняет свои функции. Контекст описывает конкретное применение.

       Принципы  модульного программирования позволяют  получать программные комплексы  минимальной сложности. Эти  принципы следующие:

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

       б) ослабление взаимосвязи между модулями (иначе этот принцип называется ослаблением  сцепления модулей).

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

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

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

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

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

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

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

       В нашей программе мы будем использовать два модуля - один основной модуль (loc) и один вспомогательный (loc1). В основе связки этих двух модулей лежат две директивы TASM: EXTRN и PUBLIC. Директива EXTRN предназначена для объявления некоторого имени внешним по отношению к основному модулю. Это имя во вспомогательном модуле должно быть объявлено в директиве PUBLIC. Директива PUBLIC предназначена для объявления некоторого имени, определенного в этом модуле и видимого в других модулях. Синтаксис этих директив следующий:

       EXTERN  имя: тип    имя: тип

       PUBLIC  имя,..., имя

       Здесь имя — идентификатор, определенный в другом модуле. В качестве идентификатора могут выступать:

    • имена переменных, определенных директивами типа DB, DW и т. д.;
    • имена процедур;
    • имена констант, определенных операторами = и EQU.

       В нашем случае в качестве идентификатора выступают имена процедур.

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

    • если имя — это имя переменной, то тип может принимать значения BYTE, WORD, DWORD, PWORD, FWORD, QWORD и TBYTE;
    • если имя — это имя процедуры, то тип может принимать значения NEAR или FAR;
    • если имя — это имя константы, то тип должен быть ABS.

       Следовательно, тип идентификатора в нашем случае может принимать значения NEAR или FAR.

       Но  не менее важно организовать информационный обмен между модулями. Рассмотрим основные способы организации такой  связи.

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

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

       Переменная  — это нечто, размещенное в регистре или ячейке памяти, что может в дальнейшем подвергаться изменению.

       Константа — информационный объект простого типа, значение которого никогда не изменяется.

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

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

       На  практике используются следующие варианты передачи аргументов в модуль (процедуру):

       -   через регистры

       -    через общую область памяти;

       -    через стек;

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

                                                                                   
 
 
 
 
 
 

       3 Описание программы

 

       Основным модулем мы будем называть тот, который получает управление после запуска программы. В основном модуле происходит вызов двух  процедур COPY(процедура копирования двух строк в буфер) и PRINT(процедура вывода полученной строки кодом) с помощью межсегментной команды CALL. Команда CALL в основном модуле должна  "знать", что процедуры COPY и PRINT существуют вне данного сегмента  (иначе ассемблер выдаст сообщение о том,  что идентификаторы COPY и PRINT не определены).

       

       CALL COPY

       

Информация о работе Модульное программирование