Блочная структура. Структура программы: блочная. Суть блочной вёрстки
Приступая к разработке каждой программы ПС, следует иметь в виду, что она является большой системой, поэтому нужно принимать меры для ее упрощения. Для этого программу разрабатывают по частям, которые называются программными модулями. Такой метод программирования называют модульным программированием.
Модуль - это самостоятельная часть программы, имеющая определенное значение и обеспечивающая заданные функции обработки автономно от других программных модулей. Каждый программный модуль программируется, компилируется и отлаживается отдельно от других модулей программы, и тем самым физически разделен с другими программными модулями. Каждый программный модуль может включаться в состав разных программ, если выполнены условия его использования, описанные в документации по ее использованию. Т.е. хорошо продуманный модуль позволяет избежать дублирования в программировании.
Любое ПС имеет свою структуру, которая разрабатывается для удобства:
- 1. разработки
- 2. программирования
- 3. отладки
- 4. внесения изменений
Также структуризация ПС позволяет:
- 1. распределить работы по исполнителям, обеспечив их загрузку и требуемые сроки разработки
- 2. построить календарные графики проектных работ и осуществлять их координацию в процессе создания ПИ.
- 3. контролировать трудозатраты и стоимость проектных работ.
При создании ПС выделяются многократно используемые модули, их типизируют и унифицируют, за счет чего сокращаются сроки и трудозатраты на разработку ПС в целом.
Некоторые ПС используют готовые модули из библиотек стандартных процедур, функций, объектов и методов обработки данных.
Типовая структура ПС:
носитель отладка программный модуль
Таблица. Типы модулей
Свойства модуля:
- 1. один вход и один выход - на входе программный модуль получает определенный набор исходных данных, выполняет обработку данных и возвращает результат
- 2. функциональная завершенность - модуль выполняет перечень операций для реализации каждой отдельной функции в полном составе.
- 3. логическая независимость - результат работы модуля зависит только от исходных данных, и не зависит от работы других модулей.
- 4. слабые информационные связи с другими программными модулями - обмен информации между модулями должен быть по возможности минимизирован.
- 5. обозримый по размеру и сложности.
Каждый модуль состоит из спецификации и тела модуля.
Спецификация - правила использования модуля.
Тело - способ реализации процесса обработки.
Принцип модульного программирования ПС:
- 1. Определение состава и подчиненность функций
- 2. определение набора программных модулей, реализующих эти функции
При составлении алгоритма необходимо учитывать:
1. каждый модуль вызывается на выполнение вышестоящим модулем и закончив работу, возвращает управление вызвавшему модулю.
Методы разработки структуры программы.
В качестве модульной структуры программы принято использовать древовидную структуру, включая деревья со сросшимися ветвями. В узлах дерева размещаются модули, а стрелки показывают подчиненность модулей (т.е. в тексте модуля, из которого она исходит, имеется ссылка на модуль, в который она входит).
Модульная структура программы должна включать и совокупность спецификаций модулей, образующих эту программу. Спецификация программного модуля содержит:
- 1. синтаксическую спецификацию его входов, позволяющую построить обращение к нему на используемом языке программирования
- 2. функциональную спецификацию модуля (описание всех функций, выполняемых этим модулем).
Существуют разные методы разработки структуры программы. Обычно используют 2 метода:
- 1. Метод восходящей разработки
- 2. метод нисходящей разработки
Метод восходящей разработки.
Сначала строится модульная структура программы в виде дерева. Затем поочередно программируются модули программы, начиная с модулей самого нижнего уровня, в таком порядке, чтобы для каждого программируемого модуля были уже запрограммированы все модули, к которым он может обращаться. После того, как все модули программы запрограммированы, производится их поочередное тестирование и отладка в принципе в таком же (восходящем) порядке, в каком велось их программирование. На первый взгляд такой порядок разработки программы кажется вполне естественным: каждый модуль при программировании выражается через уже запрограммированные непосредственно подчиненные модули, а при тестировании использует уже отлаженные модули. Не рекомендуется, т.к.:
- 1. для программирования какого-либо модуля совсем не требуется текстов, используемых им модулей - для этого достаточно, чтобы каждый используемый модуль был лишь специфицирован (в объеме, позволяющем построить правильное обращение к нему), а для тестирования его возможно используемые модули заменять их имитаторами (заглушками).
- 2. каждая программа в какой-то степени подчиняется некоторым внутренним для нее, но глобальным для ее модулей соображениям (принципам реализации, предположениям, структурам данных и т.п.), что определяет ее концептуальную целостность и формируется в процессе ее разработки. При восходящей разработке эта глобальная информация для модулей нижних уровней еще не ясна в полном объеме, поэтому очень часто приходится их перепрограммировать.
- 3. при восходящем тестировании для каждого модуля (кроме головного) приходится создавать ведущую программу (модуль), которая должна подготовить для тестируемого модуля необходимое состояние информационной среды и произвести требуемое обращение к нему. Это приводит к большому объему "отладочного" программирования и в то же время не дает никакой гарантии, что тестирование модулей производилось именно в тех условиях, в которых они будут выполняться в рабочей программе.
Метод нисходящей разработки.
Сначала строится модульная структура программы в виде дерева. Затем поочередно программируются модули программы, начиная с модуля самого верхнего уровня (головного), переходя к программированию какого-либо другого модуля только в том случае, если уже запрограммирован модуль, который к нему обращается. После того, как все модули программы запрограммированы, производится их поочередное тестирование и отладка в таком же (нисходящем) порядке.
Положительные стороны
- 1. При таком порядке разработки программы вся необходимая глобальная информация формируется своевременно, т.е. ликвидируется весьма неприятный источник просчетов при программировании модулей.
- 2. Существенно облегчается и тестирование модулей, производимое при нисходящем тестировании программы. Первым тестируется головной модуль программы, который представляет всю тестируемую программу и поэтому тестируется при "естественном" состоянии информационной среды, при котором начинает выполняться эта программа. При этом все модули, к которым может обращаться головной, заменяются на их имитаторы. Имитатор модуля - простой программный фрагмент, сигнализирующий, о самом факте обращения к имитируемому модулю с необходимой для правильной работы программы обработкой значений его входных параметров и с выдачей, если это необходимо, заранее запасенного подходящего результата. После завершения тестирования и отладки головного и любого последующего модуля производится переход к тестированию одного из модулей, которые в данный момент представлены имитаторами, если таковые имеются. Для этого имитатор выбранного для тестирования модуля заменяется на сам этот модуль и добавляются имитаторы тех модулей, к которым может обращаться выбранный для тестирования модуль. При этом каждый такой модуль будет тестироваться при "естественных" состояниях информационной среды, возникающих к моменту обращения к этому модулю при выполнении тестируемой программы. Таким образом, большой объем "отладочного" программирования заменяется программированием достаточно простых имитаторов используемых в программе модулей. Кроме того, имитаторы удобно использовать для подыгрывания процессу подбора тестов путем задания нужных результатов, выдаваемых имитаторами.
Рассмотренные методы называются классическими. В них модульная древовидная структура программы должна разрабатываться до начала программирования модулей. Однако такой подход вызывает ряд возражений: маловероятно, чтобы до программирования модулей можно было разработать структуру программы достаточно точно и содержательно.
При конструктивном и архитектурном подходах к разработке программ модульная структура формируется в процессе программирования модулей.
Конструктивный подход (Модификация нисходящей разработки)
Модульная древовидная структура программы формируется в процессе программирования модуля. Сначала программируется головной модуль, исходя из спецификации программы в целом, причем спецификация программы является одновременно и спецификацией ее головного модуля, так как последний полностью берет на себя ответственность за выполнение функций программы. В процессе программирования головного модуля, в случае, если эта программа достаточно большая, выделяются внутренние функции, в терминах которых программируется головной модуль. Это означает, что для каждой выделяемой функции создается спецификация реализующего ее фрагмента программы, который в дальнейшем может быть представлен некоторым поддеревом модулей. Важно заметить, что здесь также ответственность за выполнение выделенной функции берет головной (может быть, и единственный) модуль этого поддерева, так что спецификация выделенной функции является одновременно и спецификацией головного модуля этого поддерева. В головном модуле программы для обращения к выделенной функции строится обращение к головному модулю указанного поддерева в соответствии с созданной его спецификацией. Таким образом, на первом шаге разработки программы (при программировании ее головного модуля) формируется верхняя начальная часть дерева, например, такая, которая показана на рис. 7.1.

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

Рис. 7.2
Метод нисходящей реализации. Каждый запрограммированный модуль начинают сразу же тестировать до перехода к программированию другого модуля.
61.1KСайты тоже имеют свой скелет. Но о его особенностях спрашивать врачей бесполезно. Да и ветеринары тоже не в курсе строения сайта. Об этом ведомо лишь верстальщикам. Именно от них зависит строение скелета будущего ресурса. А главным способом создания костей его скелета является блочная верстка.
Верстка сайта – ремесло для посвященных
Есть в верстке сайта что-то таинственное. Но это до тех пор, пока не познакомишься с этим ремеслом поближе. Начинаем наше посвящение:
Следующим этапом разработки сайта после создания его макета является верстка. Задача верстальщика перенести с помощью html кода и таблиц css скелет будущего сайта в виртуальный мир. Проще говоря, перенести размеры и пропорции ресурса в форму, понятную для браузера.
В процессе верстки кодом html происходит разбивка «скелета » сайта на части. А с помощью css (каскадных таблиц стилей ) задаются размеры его «костей », цвет и расположение.
Различают несколько видов верстки:
I. Табличная – ранее была основным способом верстки. В табличной верстке для задания структуры сайта используется тег
| ; конец процедуры | ; в вызывающей программе |
| POP BP | CALL p |
| RET | ADD SP, 2*k ; коррекция SP |
| P ENDP | … |
- Проблема сохранения регистров при обращении к процедуре
{имя проц} proc
PUSH BP для обслуживания
Mov BP, SP стека
PUSH сохранение регистров,
используемых в процедуре
тело проц.
РОР... восстановление регистров
РОР ВР восстановление BP
На этапе проектирования необходимо выполнить проектирование модульной структуры программы. Модульная структура представляет собой иерархию процедур и функций (называемых модулями), с помощью которых программа решает поставленную задачу. При этом программа является головным модулем в данной иерархии.
Размер модуля измеряется числом содержащихся в нем операторов или строк. Модуль не должен быть слишком маленьким или слишком большим. Маленькие модули приводят к громоздкой модульной структуре программы и могут не окупать накладных расходов, связанных с их оформлением. Большие модули неудобны для изучения изменений, они могут существенно увеличить суммарное время повторных трансляций программы при отладке программы. Обычно рекомендуются программные модули размером от нескольких десятков до нескольких сотен операторов.
В качестве модульной структуры программы принято использовать древовидную структуру, включая деревья со сросшимися ветвями. В узлах такого дерева размещаются программные модули, а направленные дуги (стрелки) показывают статическую подчиненность модулей, т.е. каждая дуга показывает, что в тексте модуля, из которого она исходит, имеется ссылка на модуль, в который она входит. Другими словами, каждый модуль может обращаться к подчиненным ему модулям, т.е. выражается через эти модули. При этом модульная структура программы, в конечном счете, должна включать и совокупность спецификаций модулей, образующих эту программу.
Спецификация программного модуля содержит:
Синтаксическую спецификацию его входов, позволяющую построить на используемом языке программирования синтаксически правильное обращение к нему (к любому его входу);
Функциональную спецификацию модуля (описание семантики функций, выполняемых этим модулем по каждому из его входов).
В процессе разработки программы ее модульная структура может по-разному формироваться и использоваться для определения порядка программирования и отладки модулей, указанных в этой структуре.
Модульная структура программы представлена на (схема 1)
Схема 1.Модульная структура программы
ПРОГРАММИРОВАНИЕ
Одним из методов, улучшающих программу, является структурное программирование. Структурное программирование позволяет организовать процесс проектирования и кодирования так, чтобы избежать большинства ошибок обнаружить т.е., которые уже допущены. Структурное программирование 3 составляющих:
Модульное программирование.
Структурное кодирование.
Проектирование сверху вниз.
Модульное программирование – это процесс разделения программы на логические части. Использование модулей приводит к снижению сложности. Модульную программу легче написать и протестировать.
Структурное кодирование предполагает использование управляющих конструкций (условного оператора, циклов). Оператор безусловного перехода должен использоваться как можно реже, т.к. программы с ним трудно отлаживать и они часто имеют побочные эффекты.
Проектирование сверху вниз имеет иерархическую структуру и начинается с краткого обзора задачи. Затем задача разбивается на несколько более мелких подзадач, которые в свою очередь тоже разбиваются на подзадачи. Процесс разбиения продолжается до тех пор, пока подзадачи не станут настолько простыми, что каждой из них будет соответствовать один модуль.
Определим некоторые базовые понятия объектно-ориентированного программирования.
Объекты – некоторые элементы, из которых строится программное приложение.
Свойство – определяющая характеристика некоторых вещей, с которыми работает программист, которая влияет на то, как будет выглядеть компонент, а также на его невидимые черты (поведение).
Событие – это то, что происходит в реальном времени и может вызвать те или иные ответные действия.
Метод - способ, которым объект может реагировать на те или иные события. Это процедура, которая определена как часть класса и содержится в нем.
Методы объектов иметь любой из типов:
Статический
Виртуальный
Динамический
Диспетчеризация вызовов методов объектов – то, каким образом приложение будет определять, какой код требуется выполнить при вызове того или иного метода.
Делегирование - то, что некий объект может предоставить другому объекту отвечать на некоторые события. Такая модель в некоторых случаях значительно упрощает программирование.
Среда разработки Delphi ориентирована, прежде всего, на создание программ для семейства операционных систем Windows. При этом большое внимание уделяется возможности визуальной разработки приложений с помощью большого набора готовых компонентов, а в стандартную поставку Delphi входят основные объекты, которые образуют удачно подобранную иерархию из 270 базовых классов, позволяющих избежать ручного кодирования. Эти компоненты охватывают практически все аспекты применения современных информационных технологий.
В процессе построения приложения необходимо выбирать из палитры компоненты, на основе которых будет строиться проект. Еще до компиляции видно результаты своей работы. В этом смысле проектирование в Delphi мало чем отличается от проектирования в интерпретирующей среде, однако после выполнения компиляции получаем код, который исполняется в 10-20 раз быстрее, чем то же, самое, сделанное при помощи интерпретатора. Cреда Delphi включает в себя полный набор визуальных инструментов для скоростной разработки приложений (RAD - rapid application development), поддерживающей разработку пользовательского интерфейса.
Первоначальная форма имеет два основных блока: тест и редактор. В окне «Тест» находятся кнопки, позволяющие выбрать тест по указанной теме. Во вкладке «Конструктор» присутствуют поля, куда будет вводиться название теста, вопрос, и несколько вариантов ответов, где выбирается правильный ответ.
Для разработки программы конструктора тестов использовались следующие компоненты Delphi7:
PageControl- позволяет в ходе проектирования объединять на одной форме несколько вкладок, которые содержат разные элементы управления. Доступ к каждой из вкладок осуществляется при помощи корешков с названиями. Этот компонент использовался в разработке программы тестирования для создания нескольких вкладок.
Button- то стандартная кнопка делфи, кнопка имеет на поверхности надпись (описывающая её назначение при нажатии). Основное событие для кнопки является OnClick, выполняемое при нажатии, при этом кнопка меняет внешний вид, подтверждая этим происходящее действие визуально. Этот компонент использовался в разработке программы тестирования для удобного перехода между формами.
Image- предназначен для отображение на форме графических изображений по умолчанию выводит на поверхность формы изображения представленных в bmp формате. Для вывода изображений в jpg формате необходимо в дерективе uses подключить модуль JPEG. После размещения на форме компонента Image, он принимает вид выделенной прямоугольной области
MainMenu- не визуальный компонент delphi(место размещения которого на форме не имеет значения для пользователя так как он увидит не сам компонент, а меню, с генерированное им), предназначенный для вывода главного меню на форме
Memo- являются окном редактирования многострочного текста который можно загружать из файла либо сохранять введенную информацию в файл текстового формата
OpenDialog- не визуальный компонент предназначенный для поддержки операции открытия файлов способный работать с любыми типами файлов. При обращении к этому компоненту вызывается стандартное диалоговое окно открытия файла.
SaveDialog- не визуальный компонент предназначенный для поддержки операции сохранения файлов способный работать с любыми типами файлов. При обращении к этому компоненту вызывается стандартное диалоговое окно сохранения файла.
Label- предназначен для показа текста на форме нашей программы, которые не будет меняются в течение работы программы. Текст надписи компонента Label можно изменить, но делается это только программно.Текст, отображаемые в компоненте, определяются значением свойства Caption. Он прописывается в процессе проектирования или задается программно во время выполнения программы
Timer- невизуальный компонент, который может размещаться в любом месте формы. Он имеет два свойства, позволяющие им управлять: Interval - интервал времени в миллисекундах иEnabled - доступность. Свойство Interval задает период срабатывания таймера. Через заданный интервал времени после предыдущего срабатывания, или после программной установки свойства Interval, или после запуска приложения, если значение Interval установлено во время проектирования, таймер срабатывает, вызывая событие OnTimer. В обработчике этого события записываются необходимые операции.
ТЕСТИРОВАНИЕ И ОТКЛАДКА
Тестирование – это динамический контроль программы, т.е. проверка правильности программы при ее выполнении на компьютере.
При разработке программ наиболее трудоемким является этап отладки и тестирования программ. Цель тестирования, т.е. испытания программы, заключается в выявлении имеющихся в программе ошибок. Цель отладки состоит в выявлении и устранении причин ошибок.
Отладку программы начинают с составления плана тестирования. Такой план должен представлять себе любой программист. Составление плана опирается на понятие об источниках и характере ошибок. Основными источниками ошибок являются недостаточно глубокая проработка модели или алгоритма решения задачи; нарушение соответствия между схемой алгоритма или записью его на алгоритмическом языке и программой, записанной на языке программирования; неверное представление исходных данных на программном бланке; невнимательность при наборе программы и исходных данных на клавиатуре устройства ввода.
Нарушение соответствия между детально разработанной записью алгоритма в процессе кодирования программы относится к ошибкам, проходящим вследствие невнимательности программиста. Отключение внимания приводит и ко всем остальным ошибкам, возникающим в процессе подготовки исходных данных и ввода программы в ЭВМ. Ошибки, возникающие вследствие невнимательности, могут иметь непредсказуемые последствия, так как наряду с потерей меток и описаний массивов, дублированием меток, нарушением баланса скобок возможны и такие ошибки, как потеря операторов, замена букв в обозначениях переменных, отсутствие определений начальных значений переменных, нарушение адресации в массивах, сдвиг исходных данных относительно полей значений, определенных спецификациями формата.
Учитывая разнообразие источников ошибок, при составлении плана тестирования классифицируют ошибки на два типа: 1 – синтаксические; 2 – семантические (смысловые).
Синтаксические ошибки – это ошибки в записи конструкций языка программирования (чисел, переменных, функций, выражений, операторов, меток, подпрограмм).
Семантические ошибки – это ошибки, связанные с неправильным содержанием действий и использованием недопустимых значений величин.
Обнаружение большинства синтаксических ошибок автоматизировано в основных системах программирования. Поиск же семантических ошибок гораздо менее формализован; часть их проявляется при исполнении программы в нарушениях процесса автоматических вычислений и индицируется либо выдачей диагностических сообщений рабочей программы, либо отсутствием печати результатов из-за бесконечного повторения одной и той же части программы (зацикливания), либо появлением непредусмотренной формы или содержания печати результатов.
В ходе тестирования были выявлены ошибки: программа не правильно отсчитывала время данное пользователю для ответа на вопрос, ошибка выявилась в том что по невнимательности указали не верную переменную, до исправления код выглядел так:
TmrLabel: TLabel;
if TimeToAnswer = 0 then
dec(TimeToAnswer);
TmrLabel.Caption:= Format("Время на ответ: %b сек.", );
После выявления ошибки и её исправления, программа стала правильно отсчитывать время данное пользователю для ответа на вопрос. После исправления код выглядит так:
procedure TForm3.Timer1Timer(Sender: TObject);
TmrLabel: TLabel;
if TimeToAnswer = 0 then
dec(TimeToAnswer);
TmrLabel:= TLabel(PageControl1.ActivePage.FindComponent("Panel1").FindComponent("TmrLabel"));
TmrLabel.Caption:= Format("Время на ответ: %d сек.", );
Так же при тестировании была выявлена ошибка в том, что не правильно подобрана процедура для ввода пароля. Изначально код выглядел так:
Password: String;
if Password <> "1234" then
if not InputQuery (Form2) then
Form2.BringToFront;
Ошибка заключалась в том, что для вывода пароля использовалась процедура InputQuery, а нужно было использовать Assigned. Код после использования выглядит так:
procedure TForm1.N2Click(Sender: TObject);
Password: String;
if Password <> "1234" then
ShowMessage("Неверный пароль!");
if not Assigned(Form2) then
Application.CreateForm(TForm2, Form2)
Form2.BringToFront;
При тестировании так же выявлены ошибки в интерфейсе программы, для удобства чтения и решения тестов был исправлен цвет интерфейса программы и подобран более комфортный для глаз шрифт текста.
Программный продукт тестировался несколько раз, все ошибки, выявленные на настоящий момент, исправлены.
ДОКУМЕНТИРОВАНИЕ
Последней составляющей процесса программирования является документирование. Оно включает широкий спектр описаний, облегчающих процесс программирования. Пользовательская документация программы объясняет пользователям, как они должны действовать, чтобы использовать данную программу.
При разработке программы создается большой объем разнообразной документации. Она необходима как средство передачи информации между разработчиками программы, как средство управления разработкой программы и как средство передачи пользователям информации, необходимой для применения и сопровождения программы
АИС «Конструктор теста» предназначена для создания тестов, для очного итогового контроля качества усвоения теоретического материала, приобретенных знаний и практических навыков обучаемых в учебных заведениях по дисциплинам относящимся к информационным технологиям.
Главная форма (рис. 1) представляет собой меню где выбираешь между конструктором и тестом.
Рис. 1. Первоначальная форма
При нажатии на вкладку конструктор, открывается форма, где можно открыть, сохранить, создать и редактировать выбранный вами тест (рис. 2).
Рис. 2. Конструктор
При нажатии на вкладку тест открывается форма, где можно пройти тестирование по выбранному вами тестом (рис. 3).
Рис. 3 Тест
ЗАКЛЮЧЕНИЕ
В результате выполнения курсовой работы был разработан программный продукт представляющий собой программу по созданию и редактированию тестов предназначенных для тестирования знаний, созданная для очного итогового контроля качества усвоения теоретического материала, приобретенных знаний и практических навыков, обучаемых в учебных заведениях по дисциплинам, относящимся к информационным технологиям.
Интерфейс программы позволяет без особых затруднений пользоваться ей как опытному, так и начинающему пользователю ПК, поэтому она может применяться в учебных заведениях.
Для создания программы были изучены теоретические материалы по дисциплинам, относящимся к информационным технологиям и материалы по программированию.
В итоге была создана программа тестирования знаний для контроля качества усвоения теоретического материала и практических навыков обучаемых в учебных заведениях.
В процессе выполнения курсовой работы были осуществлены следующие задачи:
Закрепились и углубились теоретические знания;
Приобретены практические навыки при разработке программного продукта;
В результате проделанной работы были достигнуты все задачи, поставленные перед началом курсовой работы.
СПИСОК ЛИТЕРАТУРЫ
1. Вигерс И.К. Разработка требований к программному обеспечению: «Русская редакция», 2010, 576 с.
2. Бобровский С. Delphi 5: Учебный курс. - СПб.: Издательство "Питер", 2010. - 640 с.
3. Вонг, Уоллес. Основы программирования. М. 2011, 336 с.
4. П.П. Беленький. Учебное пособие по информатике - Ростов на дону «Феникс» 2012. – 448c.
5. Дантеманн Дж., Мишел Д., Тэйлор Д. Программирование в среде Delphi.- К.: НИПФ-"Diasoft-Ltd.",2011. - 608с.
6. Рубенкинг. Программирование в Delphi для "чайников". - К.: Диалектика, 1996. - 304с.
7. Дарахвелидзе П.Г., Марков Е.П. Delphi - среда визуального программирования.- СПб: BHV-Санкт-Петербург, 2011. - 352с
8. Сурков К.А., Сурков Д.А., Вальвачев А.Н. Программирование в среде DELPHI 2.0. - Минск: ООО "Попурри", 2012. - 640с.
9. Савицкая, Г.В. Анализ программной деятельности: Учебник / Г.В. Савицкая. - Минск: ООО «Новое знание», 2010;
10. Дж.Хьюз, Дж.Мичтом. Структурный подход к программированию. М.: Мир, 2011. - С. 29-71.
11. Диплом-Экспресс. Руководство пользователя. Версия 1.8. НТЦ «АРМ-Регистр», 2010, 41 с.
12. Коржинский С.Н Самоучитель работы на компьютере.- 2-е изд., перераб. и доп.- М.: ТК Велби, Изд-во Проспект, 2011, 370 с.
13. Леонтьев В.П. Новейшая энциклопедия ПК, 2011, 960 с.
14. Мазуркевич А., Еловой Д. РНР: настольная книга программиста, 2011, 480с.
15. Максимов Н.В. Архитектура ЭВМ и вычислительные системы, 2013, 512с.
16. Орлов С.А. Технология разработки программного обеспечения. – М.: Питер, 2013, 474 с.
17. Симонович С.В. Общая информатика. - М.: «Инфорко-Пресс», 2010, 428с.
18. Ташков П. Защита ПК на 100%: сбои, ошибки и вирусы, 2010, 288 с.
19. Шалин П.А. Энциклопедия Windows XP. - СПб.: «Питер», 2012, 688 с.
20. Культин Н.Б. - Основы программирования в Delphi 7, – СПб.: БХВ-Петербург, 2013
21. Ревич Ю. - Нестандартные приемы программирования на Delph. – СПб.: БХВ-Петербург, 2012
22. Сухарев - Основы Delphi. Профессиональный подход. – СПб.: Наука и Техника, 2011
23. Фленов - Библия Delphi. – СПб.: БХВ-Петербург, 2011
24. Ремизов Н. Delphi – М.: Питер, 2013.
25. Шпак Ю.А. - Delphi 7 на примерах. – К.: Издательство Юниор, 2012
26. Дарахвелидзе П., Марков Е. - Программирование в Delphi 7 (+ дискета). – СПб.: БХВ-Петербург, 2013
27. Кэнту - Delphi 7 для профессионалов. – СПб. Питер, 2012.
Как было отмечено выше, тело функции может быть блоком или составным оператором . Блок как совокупность описаний объектов и операторов может включать вложенные блоки, и тогда появляются внешние и локальные переменные по отношению к блоку, а также глобальные переменные, описанные вне функций программы.
В дополнение к атрибутам имени и типа объекта существует ещё два атрибута – область действия и время жизни , определяемые классом хранения (памяти) по умолчанию или задаваемые программистом. Область действия (видимости) – это часть текста программы, в котором видим и может быть использован данный объект. Переменные, описываемые в охватывающем блоке, являются внешними для вложенных блоков и включают их в область своего действия за одним исключением – внутренняя переменная имеет приоритет над одноимённой внешней переменной, закрывая её, и даже тип внутренней переменной может быть переопределён.
Время жизни – это интервал времени, в течение которого значение объекта (переменной или функции) доступно для использования в некоторой части программы. Время жизни переменной может быть локальным или глобальным . Объект, с глобальным временем жизни, имеет распределённую для него память и определённое значение на протяжении всего времени выполнения программы. Для локального объекта выделяется новая область памяти при каждом входе в блок и освобождается при выходе из блока, при этом значение объекта теряется . Переменные, описанные в функции, в том числе формальные параметры имеют локальную область действия. Сами функции в программе являются внешними по отношению друг к другу и имеют глобальное время жизни, то есть существуют на протяжении всего времени выполнения программы.
Си-программа является отдельным программным модулем, который оформляется и записывается во внешнюю память как исходный файл с расширением “.c”, например, myprog.c.
Структуру модуля программы и области действия её объектов можно представить следующей схемой:
/* Глобальные объекты и описания */ /* Область действия */
Директивы предпроцессора глобальная макроопределения
прототипы функций
описания типов
описания глобальных переменных
заголовок функции локальная
{внешние переменные блока;
операторы;
{ внутренний блок локальная
описания других функций
/* конец программы */
Пример. Применение вложенных блоков с одноимёнными переменными.
Программа :
{ int i=2; /* i – переменная внешнего блока */
int count=0; /* count – внешняя переменная */
while (count <= i) /* цикл внешнего блока */
{ int=0; /* i – локальная переменная внутреннего блока */
count++; /* счётчик циклов */
printf (“В цикле: count=%d; i=%d\n”, count, i);
/* конец внутреннего блока, возврат к переменной i внешнего блока */
printf (“Вне цикла: count=%d, i=%d”, count, i);
Результат программы :
В цикле count=1 i=0
В цикле count=2 i=0
В цикле count=3 i=0
Вне цикла count=3 i=2
Программист может явно задать атрибуты области действия и времени жизни с помощью спецификаторов классов памяти (хранения): для переменных (auto – локальный, register – регистровый, static – статический, extern – внешний) и для функций (static, extern).
Переменные с классом хранения auto (принимается по умолчанию) и register относятся к локальным в блоке и по области действия и по времени жизни. Для переменных с классом auto выделяется память в стеке (временная память), а с классом register – в одном из свободных регистров процессора.
Память для переменных с классом static отводится в сегменте данных (статическая память программы), а не в стеке, благодаря чему они сохраняют своё значение при выходе из блока. Если отсутствует явная инициализация таких переменных, то по умолчанию они устанавливаются в 0. Инициализация выполняется один раз и не повторяется при новом входе в блок. Объекты класса static имеют локальную область действия (блок) и глобальное время жизни (время выполнения программы).
Пример . Использование статических переменных.
Программа :
void example (int c); /* прототип функции */
void main () /* главная функция */
{ int count; /* локальная переменная блока */
for (count=9; count >= 5; count -= 2) /* цикл счетчика */
example (count); /* вызов функции */
void example (int c) /* заголовок функции */
{ int f=1; /* локальная переменная */
static int stat=1; /* статическая переменная */
printf (“c=%d, f=%d, stat=%d\n”, c, f ,stat);
stat++; /* изменение статической переменной */
Результаты программы : c=9, f=1, stat=1
c=7, f=1, stat=2

