Главная Рефераты по сексологии Рефераты по информатике программированию Рефераты по биологии Рефераты по экономике Рефераты по москвоведению Рефераты по экологии Краткое содержание произведений Рефераты по физкультуре и спорту Топики по английскому языку Рефераты по математике Рефераты по музыке Остальные рефераты Рефераты по авиации и космонавтике Рефераты по административному праву Рефераты по безопасности жизнедеятельности Рефераты по арбитражному процессу Рефераты по архитектуре Рефераты по астрономии Рефераты по банковскому делу Рефераты по биржевому делу Рефераты по ботанике и сельскому хозяйству Рефераты по бухгалтерскому учету и аудиту Рефераты по валютным отношениям Рефераты по ветеринарии Рефераты для военной кафедры Рефераты по географии Рефераты по геодезии Рефераты по геологии Рефераты по геополитике Рефераты по государству и праву Рефераты по гражданскому праву и процессу Рефераты по делопроизводству Рефераты по кредитованию Рефераты по естествознанию Рефераты по истории техники Рефераты по журналистике Рефераты по зоологии Рефераты по инвестициям Рефераты по информатике Исторические личности Рефераты по кибернетике Рефераты по коммуникации и связи |
Дипломная работа: Клиентская часть технологической среды для разработки больших экономических моделей: компоненты поддержки работы эксперта-экономиста при формировании и отладке (в расчетном режиме) структурного текста моделиДипломная работа: Клиентская часть технологической среды для разработки больших экономических моделей: компоненты поддержки работы эксперта-экономиста при формировании и отладке (в расчетном режиме) структурного текста моделиГосударственный комитет РФ по высшему образованию Московский Институт Электронной Техники (Технический Университет) Факультет МПиТК Кафедра ИУВС Пояснительная записка к дипломному проекту на тему “Клиентская часть технологической среды для разработки больших экономических моделей: компоненты поддержки работы эксперта-экономиста при формировании и отладке (в расчетном режиме) структурного текста модели”. Дипломант Авдейчев Д.В. Руководитель проекта Тареев А.Н. Консультант Фишкис В.М. Консультант по технологической части Волков . Консультант по организационно- экономической части Мормуль Н.Ф. Консультант по технике безопасности Каракеян В.И. 1999 г. Содержание 1. Введение 2. Эскизный проект 2.1 Постановка задачи 2.1.1 Определение понятия модели 2.1.2 Требования, предъявляемые к системе экономического планирования. 2.1.3 Выбор платформы проектирования и еe обоснование 2.2 Экономическая модель в системе экономического планирования 2.2.1 Структура экономической модели 2.2.2 Язык модели 2.3 Общая отруктура системы 2.4 Структуры данных 2.4.1 Инфологическая модель базы данных 2.4.2 Даталогическая модель данных 3. Технический проект 3.1 Конфигурация технических средств 3.2 Алгоритмы предварительной подготовки данных для расчета экономической модели 3.2.1 Общий алгоритм работы программы 3.2.2 Структура программы 3.2.3 Архитектура Borland Database Engine (IDAPI) – ядро доступа к данным. 3.2.4 Иерархия форм. 3.2.5 Создание псевдонима BDE. 3.2.6 Модуль формы fmNew. 4. Технология программирования с использованием средств быстрой разработки приложений. 4.1 Введение 4.2 Особенности RAD–средств 4.2.1 Визуальная компонентность. 4.2.2 Многократное использование кода. 4.3 Создание программ в среде Delphi. 4.4 Отладка программ. 5. Расчёт затрат на разработку программы 5.1 Введение 5.2 Составляющие затрат на разработку программ Kр 5.3 Затраты на непосредственную разработку КП 5.3.1 Факторы КП как объекта проектирования, влияющие на непосредственные затраты при разработке сложных программ. 5.3.2 Применение современных методов разработки КП. 5.3.3 Факторы оснащенности процесса разработки КП аппаратурными средствами, влияющими на непосредственные затраты при разработке сложных программ. 5.3.4 Факторы организации процесса разработки КП, влияющие на непосредственные затраты при создании сложных программ. 5.4 Затраты на изготовление опытного образца как продукции производственно-технического назначения. 5.5 Затраты на технологию и программные средства автоматизации разработки КП. 5.6 Затраты на ЭВМ, используемые для автоматизации разработки данной программы. 5.7 Расчет затрат на разработку системы моделирования макроэкономики 5.7.1 Исходные данные 5.7.2 Коэффициенты изменения трудоемкости 5.7.3 Расчет непосредственных затрат на разработку 5.7.4 Затраты на ЭВМ 5.8 Выводы 6. Организация рабочего места программиста 6.1 Условия производственно-экологической безопасности разработчика пользователя ЭВМ 6.2 Вредные воздействия при работе с компьютером 6.3 Факторы обитаемости 6.4 Воздействие электромагнитного излучения монитора 6.5 Оптимизация условий зрительного восприятия 6.6 Освещение 6.7 Микроклимат 6.8 Оптимизация акустических условий 6.9 Электробезопасность. 6.9.1 Меры защиты от поражения электрическим током. 6.9.2 Защита от статического электричества. 6.9.3 Защита от электромагнитных полей и ионизирующего излучения 6.10 Психофизические факторы 6.11 Организационные мероприятия 6.12 Пожаробезопасность 6.13 Мероприятия по организации рабочего места 6.14 Заключение 6.15 Выводы 7. Литература Глава 1 СПЕЦИАЛЬНАЯ ЧАСТЬ «Клиентская часть технологической среды разработки экономических моделей» Развитие современной компьютерной техники и программного обеспечения для нее в условиях жесткой конкуренции делает необходимым максимальную автоматизацию различных производственных процессов и делопроизводства с использованием самых совершенных компьютеров, которые позволяют ускорить и облегчить работу человека, а следовательно, и снизить себестоимость товаров или предоставляемых услуг и повысить их качество. Одним из проектов Российского НИИ искусственного интеллекта является создание прототипа комплексной системы по теме "Компьютерное моделирование макроэкономики Российской Федерации на основе технологии недоопределенных вычислений". Цель данного проекта - разработать технологическую среду, которая бы позволяла экономистам создавать и изучать математические модели макроэкономики страны и составляющих ее районов, максимально приближенные к действительности. Модель - это сложная структура, включающая в себя множество экономических показателей и взаимосвязи между ними и описывающая поведение макроэкономики. (более подробно понятие модели раскрыто в эскизном проекте). Соответственно, можно различить два типа пользователей системы: * Экономист - разработчик: занимается непосредственной разработкой математической модели макроэкономики, устанавливает взаимосвязи между различными компонентами макроэкономики. Предполагает высокую экономическую квалификацию. * Экономист - пользователь: занимается изучением макроэкономики на основе математической модели, построенной экономистом - разработчиком. Разработка системы моделирования позволит автоматизировать процесс расчета экономических параметров, исследовать поведение макроэкономики при изменении каких либо составляющих ее показателей. Мой дипломный проект посвящен разработке клиентской части базы данных - создание условий для формирования структурного текста модели и его представление в формате «понятного» вычислительному ядру системы. 1. Эскизный проект 1.1 Постановка задачи1.1.1 Определение понятия моделиПрежде чем определить круг требований к системе, установим, что же скрывается под понятием модели. Модель является базовым понятием для любых областей знаний, использующих аппарат математики, поскольку каждая попытка работать в точных терминах с реальным явлением должна начинаться с описания его формальной модели. Именно Модель представляет Объект исследования или расчетов и определяет характер формального аппарата, используемого для описания Задачи и выполнения необходимых вычислений. Формально, Модель определяется парой неупорядоченных множеств - множеством переменных-параметров и множеством отношений, связывающих значения этих переменных. Прежде всего, формальная Модель является особым типом общего понятия Модели. Сама семантика общего понятия включает Объект моделирования. Модель Чего? - без ответа на этот вопрос понятие Модели просто не имеет смысла. Математическая Модель реального явления представляет собой его формальную аппроксимацию и при определенных условиях может заменять оригинал в компьютерном (а иногда и аналитическом) исследовании его природы и поведения. В этом качестве Модель может служить базисом для решения обычных вычислительных Задач. Например: · каким образом данный набор значений одних параметров влияет на значения других, · какие значения параметров возможны при данном наборе ограничений, · какие сочетания значений параметров являются оптимальными для данного критерия при данном наборе ограничений, и т.п. Любая математическая Модель, которая не является формализацией реальной сущности, может быть интересна в качестве объекта исследования только самим математикам, поскольку не является аппаратом для решения практических Задач. В данной системе экономического планирования Модель описывает собой макроэкономику РФ в определенный период времени (на данном этапе с 1994 года по 2000 год) и представлена в виде неупорядоченной совокупности отношений, которые соответствуют связям, существующим между параметрами задачи (параметрами модели являются компоненты макроэкономики, например, статьи бюджета.). Эти отношения, называемые общим термином "ограничения" могут иметь вид уравнений, неравенств, логических выражений и т. п. Замечательно то, что одну и ту же модель можно использовать для решения различных задач (например, прямых и обратных). При этом постановка той или иной задачи конкретизируется путем добавления в модель ограничений на допустимые значения параметров и/или формулирования дополнительных связей между ними. В модели нет априорного разделения параметров на входные и выходные. В соответствии с требованиями решаемой задачи пользователь определяет, какие из параметров заданы точно, какие неизвестны совсем, а какие — приблизительно (исходная информация о таких параметрах задается в виде ограничений на множество их возможных значений). Применительно к модели макроэкономики можно утверждать, что все значения экономических параметров до 1998 года заданы точно, 1998 года и позднее неизвестны совсем либо заданы приблизительно. Используя модель задачи и исходную информацию о значениях ее параметров, методы программирования в ограничениях обеспечивают автоматическое нахождение решения. В самом общем виде постановка задачи в парадигме программирования в ограничениях формулируется следующим образом. Пусть на переменные x1, x2 ..., xn , областями значений которых являются множества X1 , X2 , ..., Xn , заданы ограничения Ci (x1 , x2 , ..., xn), i =1, k. Требуется найти наборы значений <a1 , a2 , ..., an> (ai Î Xi), которые бы удовлетворяли всем ограничениям одновременно. Такая постановка задачи называется проблемой удовлетворения ограничений, а для ее решения используются различные алгоритмы и методы. В частности проблема удовлетворения ограничений может формулироваться как система уравнений с числовыми параметрами, а для ее решения могут использоваться стандартные численные методы. Однако при решении многих реальных задач эти методы оказываются неприменимыми, особенно если модель включает и нечисловые параметры, а начальные данные могут задаваться приблизительно в виде множеств и интервалов, содержащих допустимые значения. Одним из наиболее развитых и практически значимых подходов, относящихся к программированию в ограничениях, являются недоопределенные модели. Метод недоопределенных моделей (Н-моделей) был предложен в начале 80-x годов для представления и обработки неполностью определенных знаний [9]. Рассматриваемый вначале как оригинальный метод из области искусственного интеллекта, он трансформировался постепенно в прикладную технологию программирования в ограничениях. Технология Н-моделей выделяется среди других подходов вычислительной мощностью, универсальностью и эффективностью. Фактически она является единственной технологией, которая позволяет решать задачу удовлетворения ограничений в самой общей постановке. Модель макроэкономики РФ и представляет собой недоопределенную модель. 1.1.2 Требования, предъявляемые к системе экономического планирования.Теперь можно уточнить постановку задачи. Требуется написать систему, которая представляет собой технологическую среду для разработки больших экономических моделей. Система должна работать под управлением Windows95, реализована в среде разработки Borland Delphi 3 и должна состоять из двух компонентов - вычислительного ядра системы (engine) и оболочки над ним. Оболочка включает в себя: · Набор интерфейсов для всех типов процессов · База данных (БД), структура которой предполагает несколько проекций: a. несколько моделей, b. несколько вариантов одной модели (в процессе ее разработки), c. несколько вариантов значений (для отладки комплекса данных и\или бюджета) · "Кожух" для engine: - два уровня программы: на внешнем языке и на внутреннем, - два уровня данных: внутренний и внешний (с заданной точностью) - компонент управления процессом: поиск корней, управление «сужением» интервалов, задание точности и т.д. - определение состава данных, выдаваемых на интерфейс. · Сервис: графика, генерация отчетов, help. 1.1.3 Выбор платформы проектирования и еe обоснованиеВ качестве операционной среды, в которой реализовался данный ПП, была выбрана среда Windows’95 (Windows NT). Причины этого следующие: · Распространенность этих ОС, в связи с чем получается охват большого числа возможных пользователей; · Возможность работы с большими массивами данных, реализация чего в среде Windows 3.1 или в среде MS-DOS представляет нетривиальную и трудновыполнимую задачу; · Удобство графического интерфейса дает возможность при минимизации затрат на его реализацию максимизировать удобство работы пользователя с программой. Интерфейс интуитивно понятен и стандартизован, соответственно пользователь не потратит много времени на освоение программы и в дальнейшем количество возможных ошибок в его действиях будет минимизировано. · 32-разрядность систем Windows’95 и Windows NT увеличивает скорость работы с соответствующими числами. В качестве среды программирования была выбрана среда Borland Delphi 3, сочетающая в себе как все преимущества всех средств, относящихся к RAD[1], так и свои собственные преимущества: · Простота и надежность создания и отладки программы; · Использование всех преимуществ операционных систем Windows’95 и Windows NT, включая 32-разрядность, многозадачность, удобный интерфейс и прочее; · Использование обработки исключений (exceptions), что позволяет повысить надежность работы программного продукта; · Наличие и доступность большого количества компонент, реализующих многие стандартные функции. Таким образом, в качестве платформы для реализации была выбрана связка Windows’95 (NT) - Borland Delphi 3. 1.2 Экономическая модель в системе экономического планирования1.2.1 Структура экономической моделиЭкономическая модель состоит из трех частей: * переменных * описания взаимосвязей между переменными * подмоделей Под переменной подразумевается некий экономический параметр (например, доходы в процентах от ВВП). В системе каждый параметр представляется в виде табличной функции, где каждое значение (которое может быть как в виде определенного числа, так и в виде интервала, либо вообще не задано) - это значение переменной при дискретном значении индекса. Под индексами понимается значение квартала или года. На данном этапе развития проекта индексов может быть максимум два, т.е. переменная может зависеть либо от года либо от квартала и года. Индекс обязательно должен иметь диапазон изменения, например, для года - от 1994 до 2000 года; для квартала - от 1 до 4-х. Описание взаимосвязей между переменными или система ограничений параметров представляет собой систему уравнений и неравенств. В системе она представляется в виде отдельного файла. Язык описания очень схож с описанием выражений на языках высокого уровня, таких как Basic, Pascal или C/C++. Подмодель представляет вполне законченную экономическую модель, для которой также определены свои переменные, система ограничений и свои подмодели. Такая модель может рассчитываться совершенно автономно, причем ей «неизвестно», входит ли она сама в какую-либо большую модель как подмодель. В качестве примера большой экономической модели, например, можно взять бюджет Российской Федерации, а в качестве одной из подмоделей - бюджет Свердловской области. Пример простейшей модели бюджета, на которой испытывался прототип данной системы, можно посмотреть на рис.1 Рис.1. Простейшая модель бюджета РФ. 1.2.2 Язык моделиПод языком экономической модели понимается совокупность правил описания ограничений, т.е. формат записи уравнений и неравенств Этот язык можно разделить на внешний и внутренний. Под внешним языком подразумевается форма записи, которой придерживается экономист - разработчик. Внутренний язык - это формат записи, который «понимает» вычислитель системы. Фактически, в системе внешний язык идентичен внутреннему, но, чтобы добиться совместимости с первой версией (макетом), предусмотрена возможность распознавания текста модели макета. 1.2.2.1 Внутренний язык - язык вычислителя UniCalcЯзык UniCalc - это правила по которым записывается модель для решателя UniCalc. На языке решателя UniCalc пользователь можете записать модель в виде совокупности выражений, включающих переменные, константы, стандартные математические функции, пользовательские функции. Язык решателя максимально приближен к общепринятой математической нотации. Каждое выражение должно заканчиваться символом ";". Алфавит входного языка решателя UniCalc состоит из всех букв латинского алфавита и русского алфавита, всех цифр и набора специальных символов: +, -, *, /, ^, (, ), [, ], =, <, <=, >, >=, <>, :=, ,, ;, and, or, not, ->, (*, *). Имена служат для обозначения переменных и функций. Имя может состоять только из букв и цифр, причем первым символом обязательно должна быть буква. Переменные в UniCalc’е рассматриваются двух типов: целые и вещественные. Тип переменной принимается по умолчанию. Имена целых переменных начинаются с букв i, j, k, l, m, n для латинского алфавита, и соответственно - с букв и, й, к, л, м, н для русского алфавита. Остальные переменные считаются вещественными. Большие и малые буквы в имени различаются. 1.2.2.1.1 КонстантыВ системе определены константы двух типов: целые и вещественные. Целые константы - целые числа в диапазоне от -2147483646 до 2147483646. Пример записи целого числа: -10, -5, 0, 15, 100,... Вещественные константы - вещественные числа в диапазоне от -1e+19 до 1e+19. Пример записи вещественных констант: -0.03, 3.14, 0.9999999, 10.44e-5,... Язык содержит встроенные константы для задания постоянных величин: p= 3.14159, e = 2.71828, g = 9.80665. Эти константы изображаются следующим образом: p - @pi; e - @e; g - @g. Пример: l:=[-@pi/2, @pi/2]; S = @pi*r^2; f = (@e^x - @e^(-x))/2; F = M*@g^2/2. 1.2.2.1.2 ПеременныеВ UniCalc'e рассматриваются переменные двух типов: целые и вещественные. Тип переменной определяется первым символом ее имени. Имя может состоять из букв латинского и русского алфавита, а также цифр, причем первым символом обязательно должна быть буква. Имена распознаются по первым восьми символам. Большие и малые буквы в имени различаются. Имена целых переменных начинаются с букв i, j, k, l, m, n, для латинского алфавита, и соответственно с букв и, й, к, л, м, н, для русского алфавита. Для больших букв умолчание сохраняется. Остальные переменные считаются вещественными. 1.2.2.1.3 Стандартные математические функцииsin() синус; cos() косинус; asin() арксинус; acos() арккосинус; tg() тангенс; ctg() котангенс; atan() арктангенс; ln() натуральный логарифм; exp() экспонента; abs() абсолютное значение; sign() знак числа; sqrt() квадратный корень; dif() функция символьного дифференцирования max(a,b,..,c) максимальное значение; min(a,b,...,c) минимальное значение; lower(0 нижнее значение; upper() верхнее значение; 1.2.2.1.4 Пользовательские функцииПользовательские функции записываются в виде: имя_функции (список формальных параметров) := выражение; Допускается использование только арифметических выражений. Вызов функции: имя_функции (список фактических параметров); Пример описания пользовательской функции: f(x,y) := x^2 + y^2 - 1; Пример вызова функции: f(23.1, z+5) = 0; 1.2.2.1.5 КомментарииЛюбая последовательность символов, заключенная между комбинациями символов "(*" и "*)", является комментарием и может вставляться в любое место программы. 1.2.2.1.6 Арифметические операции+ операция сложения; - операция вычитания и унарный минус; * операция умножения; / операция деления; ^ операция возведения в степень. Арифметические операции по приоритету в порядке убывания располагаются следующим образом: ^, /, *, -, +. Фактически операции "+" и "-" имеют одинаковый приоритет, так же как и /" и "*". Для изменения приоритета операций используются круглые скобки. Результатом операции деления в случае обоих целых операндов является целая часть частного. 1.2.2.1.7 Логические операцииOR логическое "ИЛИ"; AND логическое "И"; NOT логическое "НЕ"; -> импликация. Логические операции по приоритету в порядке убывания располагаются следующим образом: NOT, AND, OR, ->. 1.2.2.1.8 Операции отношения= равно; <> не равно; < меньше; > больше; <= меньше или равно; >= больше или равно. 1.2.2.1.9 Оператор присваиванияОператор присваивания используется для инициализации переменных и для задания начального интервала переменных. Вид оператора присваивания - := . Пример операции присваивания: х := 999; Y := [5+6*10, 999]. 1.2.2.1.10 Переменные - массивыВ последних версиях решателя возможно использование массивов произвольной размерности: <array_name>[index_expr1, index_expr2, ... , index_exprN] Тип элементов массива определен в имени массива <array_name> согласно правилам, действующим для имен переменных. Индексные выражения <index_expri> должны быть целыми константами или выражениями, результат которых - целое число. Элемент массива - это та же самая переменная, только записанная в специфической форме. 1.2.2.2 Внешний языкВнешний язык модели полностью идентичен внутреннему, поскольку разработкой модели будет заниматься эксперт - экономист, что, в свою очередь, подразумевает некие навыки программирования. Но, для совместимости с первой версией системы возможно распознавание текста модели макета. Отличие внешнего языка от внутреннего в данном случае состоит в том, что в языке макета не существовало понятия циклов, поскольку вычислитель системы их не поддерживал, т.е. для него не было определено понятие массивов. Таким образом, чтобы описать в формуле зависимость параметра от индексов, нужно было вводить некоторые скобки - разделители, в которых записывались обозначения индексов. Таким образом, на внешнем языке формула, описывающая ограничение, была одна, а во внутреннем языке, после обработки препроцессором, получалось N формул, где N - число сочетаний индексов, используемых в формуле и не выходящих за границы диапазона изменения индекса. Вместо обозначения индекса во внутреннем языке подставлялось его значение. 1.2.2.3 Пример формулы на внешнем языке и внутреннем языкеПусть существует несколько параметров A, B и С которые зависят от индекса Y, изменяющегося в диапазоне от 1992 до 1995. Параметр С, кроме этого зависит от индекса K, изменяющегося в диапазоне от 1 до 4-х. Также от параметра К зависит параметр D. Между ними существует взаимосвязь: C{K,Y}=A{Y}+B{Y-1}+D{K+2}; Фигурные скобки {} «показывают» препроцессору, что перед ним переменная, которая зависит от индексов, находящихся в этих скобках. После трансляции на внутренний язык получается система уравнений: C[1,1993]=A[1993]+B[1992]+D[3]; C[1,1994]=A[1994]+B[1993]+D[3]; C[1,1995]=A[1995]+B[1994]+D[3]; C[2,1993]=A[1993]+B[1992]+D[4]; C[2,1994]=A[1994]+B[1993]+D[4]; C[2,1995]=A[1995]+B[1994]+D[4]; Но все это сделано для распознавания «старых» моделей. Эту формулу также можно записать в виде, применяемом в нынешней версии. 1.3 Общая отруктура системыРис.2. Структура системы. Учитывая специфику задачи и возможности операционной системы, разрабатываемая система должна иметь следующую структуру, показанную на рис.2 Вычислитель системы - UniCalc - реализован в виде динамически связываемой библиотеки (Dynamic Link Library), которая экспортирует функции и переменные. Вычислитель основан на принципах недоопределенной математики и разрабатывается в Академгородке в Новосибирске. База данных реализована в формате DB, т.е. в формате Paradox. В этом формате, в основном, хранятся значения экономических параметров, т.е. входные и выходные данные. Ограничения параметров, т.е. система неравенств, уравнений представлена в виде текстового файла, поскольку данная информация не упорядочивается и не структурируется. Макропрепроцессор реализован в виде функций, находящихся в основном модуле системы, и функций динамически связываемой библиотеки. Такая реализация обусловлена проблемой совместимости с первой версией системы - функции библиотеки DLL служат для конвертирования модели из старого формата. 1.4 Структуры данныхВходные и выходные данные экономической модели хранятся в базе данных, реализованной в формате Paradox. В ней хранятся данные по экономическим параметрам, т.е. их описания и значения, и по структуре модели. 1.4.1 Инфологическая модель базы данныхИнфологическая модель подразумевает собой описание предметной области, которую следует представить в виде некоторой структуры базы данных, без привязки к какой-либо системе управления базами данных, имеет целью упорядочить информацию о предметной области, ее составе, и включает в себя следующие описания: · предметной области; · объектов и связи между ними; · лингвистическое; · ограничения целостности; · алгоритмических связей между показателями объектов; · информационных потребностей пользователя. 1.4.1.1 Предметная областьПод предметной областью подразумевается какая-либо область человеческой деятельности, вызывающая интерес для исследования. В данном случае предметной областью является макроэкономика РФ в целом и макроэкономика составляющих ее районов. 1.4.1.2 Описание объектовРис.3. Структура объектов базы данных. 1.4.1.3 Связи между объектамиРис.4. Связи между объектами. 1.4.1.4 Лингвистическое описаниеБаза данных описывает экономическую модель, поэтому одним из объектов, входящих в базу, является объект «Экономическая модель». Объект «Экономическая модель» описывает файловую структуру экономической модели. Признаками данного объекта являются · обозначение модели - статический атрибут, который показывает, под каким псевдонимом выступает экономическая модель в различных выходных формах системы, например, в форме с деревом модели; · описание модели - статический атрибут, целью которого является пояснение - какую, собственно, часть макроэкономики описывает данная модель. В частности, это может быть представление макроэкономики какого-нибудь региона; · путь к базе данных модели - динамическое свойство; · название файла ограничений (файл, содержащий систему уравнений и неравенств для данной модели) - динамический атрибут. Кроме этого в базе существуют объекты, которые описывают логическую структуру модели. Объект «Экономический параметр». Синонимом данного объекта также является «экономическая переменная». Объект имеет следующие свойства: · обозначение параметра в модели - статический признак, который показывает, под каким псевдонимом (алиасом) используется данная переменная в системе, например, в системе ограничений; · описание параметра (название параметра) - статическое свойство. Объект «Индекс» - некая переменная, от которой зависят экономические параметры, в данном проекте эта переменная обозначает различные годы и кварталы. Признаки данного объекта следующие: · обозначение индекса модели - статический атрибут, показывающий, под каким псевдонимом используется индекс. В проекте обычно имеет вид «Y» (year); · минимальное значение - данное свойство, как и остальные, является статическим; · максимальное значение; · шаг изменения, в проекте обычно имеет значение «1». Поскольку целью работы системы является автоматизация расчетов различных параметров макроэкономики, а также проверка различных предложений по разработке экономической политики, поэтому в базе существует объект «Версия расчета модели». Данный объект нужен для регистрации расчета системы, т.к. рассчитываться может либо вся модель, либо в автономном режиме ее подмодель, и для реализации «отката» в системе, т.е. попытки вернуться на N шагов назад к данным предыдущих расчетов. Но на данной стадии производится расчет всей модели, автономный режим пока не реализован. Все свойства данного объекта являются статическими и выглядят следующим образом: · номер версии. После запуска системы, т.е. до всех расчетов, по умолчанию номер версии равен нулю; · комментарий по версии - например, «Проверка предложения фракции ЛДПР по введению новых налогов» В базе имеется агрегированный объект, содержащий значения экономических параметров в зависимости от версии расчетов. Атрибутами данного объекта являются: · порядковый номер в переменной - статической свойство. По существу, экономическая переменная представляет собой массив, у которого, в общем случае, неизвестна ни размерность, ни диапазон изменения индексов. Данный признак введен для простоты работы с базой. Фактически, он отражает уникальную комбинацию значений индексов, от которых зависит экономический параметр; · значение - динамическое свойство. Имеет вид либо точного значения, либо некоторого интервала. 1.4.1.5 Алгоритмические связиПорядковый номер в переменной равен номеру уникальной комбинации значений индексов, от которых зависит экономическая переменная. Номера в переменной вычисляются по взаимосвязи переменной с индексами. Значение индекса = минимальное значение + i * шаг изменения, i - некоторое целое число, при условии, что значение индекса меньше либо равно максимальному значению индекса. 1.4.1.6 Информационные потребности пользователяПользователю очень важно знать все значения экономических параметров, чтобы на основании всех полученных данных успешно моделировать поведение экономики при различных воздействиях на нее. 1.4.1.7 Ограничение целостностиВ объекте «Версия расчета модели» нужно, чтобы номер версии был неотрицательным, поскольку при отрицательном значении он не имеет смысла. Нулевое значение номер принимает при создании новой экономической модели, т.е. до ее первого расчета. В объекте «Индекс» минимальное значение должно быть меньше максимального значения. Кроме того, сумма минимального значения индекса с шагом изменения должна быть меньше либо равно максимального значения индекса. Шаг изменения - это неотрицательное значение. В объекте «Значение переменной» порядковый номер переменной может изменяться в пределах от единицы до произведения количества значений всех индексов, входящих в данную переменную. 1.4.2 Даталогическая модель данныхПод даталогической моделью (ДЛМ) подразумевается отображение конечных связей между реальными объектами предметной области к их смысловому содержанию в среде хранения. ДЛМ строится в терминах информационных единиц, предусмотренных в конкретной системе управления базами данных. Все объекты и связи между объектами в нашем случае можно выразить следующими соотношениями: · экономическая модель(обозначение модели, описание модели, путь к базе данных модели, название файла ограничений) - таблица Model.db; · экономический параметр(обозначение параметра в модели, описание параметра) - таблица Params.db; · индекс(обозначение индекса, минимальное значение индекса, максимальное значение, шаг изменения) - таблица Indexes.db; · версия расчета модели(номер версии, обозначение модели, комментарий по версии) - таблица Version.db; · зависимость экономического параметра от индексов(обозначение параметра, обозначение индекса) - таблица Inter.db; · зависимость значения переменной от версии расчета (обозначение параметра, обозначение индекса, значение индекса, номер версии, значение переменной). Данную связь можно представить двумя таблицами, которые описываются следующими отношениями: 1. Различные сочетания индексов в переменной(обозначение параметра, обозначение индекса, значение индекса, номер сочетания индексов) - таблица Param.db. 2. Значение параметра(обозначение экономической переменной, значение переменной, порядковый номер в переменной, номер версии расчета) - таблица Ver_value.db. В приведенных отношениях номер сочетания индексов и порядковый номер в переменной - это одно и то же. Данное разбиение позволяет избежать избыточности - таблица, построенная на первом отношении будет содержать не изменяющиеся данные и, если в модель не добавлять новых переменных, будет служить неким неизменяемым справочником. На уровне таблиц это выглядит следующим образом: В приведенных ниже таблицах обозначение вида «X» в колонке «№», где X - номер поля, означает, что данное поле является ключевым. Indexes.db
Model.db
Inter.db
Неописанные в отношениях поля: · InForm - необходимо для распознавания файла ограничений. Показывает номер в последовательности индексов, например, при обозначении некоторой переменной f, зависящей от индексов K и Y, в виде f(Y,K), позиция Y равняется единице, для K - два. · Kind - введено для дальнейшего развития проекта. Для описанного отношения значение будет «v» (variable), т.е. запись в таблице описывает взаимосвязь переменной с индексом. В дальнейшем будет использоваться для описания вхождения в модель некоторых глобальных переменных, т.е. модель будет выступать в качестве подмодели, значение в этом случае «g» (global). Param.db
Params.db
Version.db
2. Технический проект В этом разделе рассматриваются алгоритмы клиентской части реализации доступа к данным в архитектуре клиент/сервер. 2.1 Конфигурация технических средствТребования к составу и параметрам технических средств соответствуют требованиям к программному продукту - системе моделирования макроэкономики. Минимально необходимое оборудование: PC.................................................... 80486 SX2-66; RAM................................................ 12 MB; HDD................................................ 50 MB свободных; Screen.............................................. Color VGA. Рекомендуемое оборудование: PC.................................................... Pentium 133 МГц; RAM................................................ 32 MB; HDD................................................ 30 MB свободных; Screen.............................................. Color SVGA; Необходимое программное обеспечение: ОС................................................... Windows’95; Машина баз данных....................... Borland DataBase Engine 3.0; Приложение.................................... Система моделирования макроэкономики. 2.2 Алгоритмы предварительной подготовки данных для расчета экономической модели2.2.1 Общий алгоритм работы программы2.2.2 Структура программыСтруктура программы представлена на риc.5 Рис.5. Структура программы. 2.2.3 Архитектура Borland Database Engine (IDAPI) – ядро доступа к данным.За более чем 25-летнюю историю развития реляционных баз выработался ряд новых требований к методам и средствам доступа к данным.За такую долгую историю в промышленном использовании нашли своё применение огромное количество форматов хранения данных.Поэтому одним из основных вопросов дальнейшего развития СУБД стал вопрос о создании единой среды обработки данных.На базе многолетнего опыта создания инструментальных средств компания Borland предоставила разработчикам свою технологию доступа к данным – Borland Database Engine, Известную также как IDAPI (Integrated Database API).Идеология доступа к локальным и клиент/серверным данным существенно отличаются (в одном случае используется навигационный подход, в другом – язык SQL, ориентированный на множество данных). BDE объединяет эти подходы без уменьшения функциональных возможностей кождого из них. Поэтому BDE (IDAPI) положен в основу инструментов создания масштабируемых систем обработки данных, одним из которых является Delphi. BDE предоставляет единый набор функций (API) обработки локальных и серверных данных. Обращение к различным источникам данных основано на коцепции драйверов. Таким образом обеспечивается интерфейс к наиболее распространённым форматам/способам хранения данных: dBase, Paradox и серверным источникам InterBase, Oracle, Sysbase, Informix, MS SQL-Server. Когда речь заходит об обработке данных в структуре клиент/сервер следует понимать, что реализация доступа к серверным данным несколько усложняется. В этом случае вводится понятие middleware некоего среднего звена, отвечающего за взаимодействие универсального интерфейса (в нашем случае IDAPI) с клиентскими средствами сервера БД. В качестве такого middleware для пользователей BDE выступает Borland SQL Links, также реализованный в виде набора драйверов для каждого конкретного сервера. Рис. 6 отражает такой подход к обработке серверных данных.
2.2.4 Иерархия форм.Формы баз данных Delphi можно разделить на четыре следующих функциональных класса. 1. Редактирование и ввод. Простая форма, представляющая одну запись одной таблицы. 2. Сетка. Форма, которая отображает несколько строк одной таблицы, как это делается в программах электронных таблиц (каждая строка таблицы базы данных занимает одну строку на экране). 3. Управляющая сетка. Форма, которая отображает несколько строк одной таблицы (каждая строка таблицы базы данных занимает несколько строк экрана). 4. Главная-подчиненная. Форма, которая показывает строки двух или более связанных таблиц. При разработке приложения прежде всего создаются и сохраняются в хранилище объектов Delphi формы-предки. Затем на их основе создаются все формы, являющиеся потомками.
Первое, что надо сделать при разработке приложения базы данных с помощью Delphi, - создать псевдоним BDE, представляющий базу данных нашего приложения. Созданный псевдоним будет использоваться в приложении для обращения к реальной базе данных. Для создания псевдонима мы используем многофункциональное средство Delphi Database Explorer.
Далее рассмотрим подробнее некоторые модули отвечающие за связь с базой данных. 2.2.6 Модуль формы fmNewЕсли мы выберем пункт меню Файл®Новая модель, тогда вызывается модуль, который отвечает за открытие новой модели. Рис.8. Форма fmNew.
Модуль состоит из пяти процедур. Рассмотрим только наиболее интересующие нас.
Процедура TfmNew.BitBtn1Click
Описываем переменные: var s : String; i : longint; Если в строке не ввели имя модели тогда вывести сообщение ‘Введите имя модели’ begin if eNew.Text='' then begin MessageDlg('Введите имя модели', mtError, [mbOk], 0); eNew.SetFocus; exit; end; Если не ввели путь к базе данных модели вывести сообщение об ошибке if ePath.Text='' then begin MessageDlg('Введите путь к базе данных модели', mtError, [mbOk], 0); ePath.SetFocus; exit; end; Если не ввели название файла модели вывести сообщение об ошибке if eModel.Text='' then begin MessageDlg(‘Введите название файла модели', mtError, [mbOk], 0); eModel.SetFocus; exit; end; Идентификация имени модели fmMain.DbPath:=ePath.Text+'\'+eNew.text+'.gdb'; fmMain.Model:=ePath.Text+'\'+eNew.text+'.gdb'; Вырезаем имя файла с текстом формул s:=UpperCase(eModel.Text); if (pos('.MDL',s)=0) then begin s:=''; if pos('.',eModel.Text)=length(eModel.Text)-3 then for i:=1 to length(eModel.Text)-4 do s:=s+eModel.Text[i]; s:=eModel.Text+'.MDL'; end; fmMain.FModel:=s; Обработка исключительной ситуации try fileUtil.copyfile(extractfilepath(application.ExeName)+'base.gdb',ePath.Text+'\'+eNew.text+'.gdb',nil); except showmessage(Не найден прототип базы); exit; end; Добавляем параметры подключения к базе данных. with fmmain.DataBase do begin Connected:=false; Params.Clear; params.Add('user name=sysdba'); params.Add('password=masterkey'); params.Add('server name='+ePath.Text+'\'+eNew.text+'.gdb'); Connected:=true; end; Модуль формы fmForm1.
Процедура TfmForm1.FormCreate. begin i:=1; strQ:='select ID,path,MFile from Model'; qMain.Close; qsec.Close; with db1 do begin Connected:=false; Params.Clear; params.Add('user name=sysdba'); params.add('password=masterkey'); params.Add('server name='+fmmain.dbPath); Connected:=true; end; model_name:=fmMain.DbPath; qMain.SQL.Clear; qSec.SQL.Clear; qsec.Close; Выборка имени модели из таблицы ‘Model’ Self.qMain.SQL.Add(strQ); Self.qMain.Open; model:=tv.Items.AddFirst(nil,Self.qMain.FieldByName('ID').AsString); fmMain.FModel:=Self.qMain.FieldByName('MFile').AsString; Цикл рекурсивной выборки подмоделей и переменных while i<Self.qMain.RecordCount do begin Self.qMain.First; Self.qMain.MoveBy(i); child_model:=tv.Items.AddChild(model,Self.qMain.FieldByName('ID').AsString); strTmp:=Self.qMain.FieldByName('Path').AsString; Self.qMain.close; showchild(child_model, strTmp); inc(i); strQ:='select ID,path from Model'; Self.qMain.SQL.Clear; Self.qMain.SQL.Add(strQ); Self.qMain.Open; end; Выборка параметров моделей из таблицы ‘Params’ i:=0; strQ:='Select id from params'; Self.qMain.close; Self.qMain.SQL.Clear; Self.qMain.SQL.Add(strQ); Self.qMain.Open; Заполнение дерева while i<Self.qMain.RecordCount do begin (tv.Items.AddChild(model,Self.qMain.FieldByName('id').AsString)); Self.qMain.Next; inc(i); end; count_grids:=0; qMain.Close; qSec.close; fmMain.SpeedButton3.Enabled:=true; fmMain.SpeedButton2.Enabled:=true; fmMain.SpeedButton1.Enabled:=true; treevisible:=true; tablevisible:=true; graphvisible:=true; model.Expand(true); end; Модуль формы fmVar Форма отвечающая за ввод переменных.
Рис.11. Форма fmVar. Процедура TfmVar.BitBtn1Click. Дерево модели может включать в себя переменные, подмодели, а также группы из переменных и подмоделей, но на данном этапе развития проекта понятие группы пока не рассматривается.. Также пока не существует модели макроэкономики, которая была бы структурирована достаточным образом, т.е. в нее кроме переменных входила бы хоть одна подмодель. Таким образом, на данном этапе развития проекта имеет смысл говорить о модели, состоящей только из переменных. Программно это выполнено следующим образом: после ввода имени переменных, комментария и индексов, от которых зависит переменная, из таблицы indexes.db с помощью SQL - запроса выбирается информация по индексам, от которых зависит переменная, и, на основании этой информации, формируется таблица для первоначальных значений. Далее, после того, как пользователь ввел начальные значения переменной, заполняются таблицы inter.db, param.db, params.db и var_value.db. Все это делает процедура класса fmVar.
var i,j,num : longint; Two : Boolean; - имеет значение True, когда переменная зависит от 2-х индексов begin if (eVar.Text='') or (lbVar.Items.Count=0) then exit; if lbVar.Items.Count>2 then begin MessageDlg('В переменной должно быть не больше двух индексов',mtError,[mbOk],0); exit; end; IndexChance:=not IndexChance; lbAll.Enabled:=not lbAll.Enabled; lbVar.Enabled:=not lbVar.Enabled; sgVar.Enabled:=not sgVar.Enabled; eVar.Enabled:=not eVar.Enabled; eRem.Enabled:=not eRem.Enabled; sgVar.ShowHint:=not sgVar.ShowHint; if lbVar.Items.Count=2 then Two:=True else Two:=False; Кнопка Ok нажата один раз if not IndexChance then begin fmMain.qMain.SQL.Clear; Выборка параметров индексов fmMain.qMain.SQL.Add('SELECT * from Indexes where ID='+#39+lbVar.Items.Strings[0]+#39+';'); fmMain.qMain.Open; Количество столбцов таблицы sgVar sgVar.ColCount:=round((fmMain.qMain.FieldByName('Mx').AsInteger-fmMain.qMain.FieldByName('Mn').AsInteger) div fmMain.qMain.FieldByName('Step').AsInteger+1)+1; Если переменная зависит от 2-х индексов if Two then begin fmMain.qSec.SQL.Clear; fmMain.qSec.SQL.Add('SELECT * from Indexes where ID='+#39+lbVar.Items.Strings[1]+#39+';'); fmMain.qSec.Open; Количество строк таблицы sgVar для второго индекса sgVar.RowCount:=round((fmMain.qSec.FieldByName('Mx').AsInteger-fmMain.qSec.FieldByName('Mn').AsInteger) div fmMain.qSec.FieldByName('Step').AsInteger+1)+1; end; Заполнение верхней строки таблицы sgVar значениями индекса sgVar.FixedRows:=1; sgVar.FixedCols:=1; for i:=1 to sgVar.ColCount-1 do sgVar.Cells[i,0]:=IntToStr(fmMain.qMain.FieldByName('Mn').AsInteger+(i-1)*fmMain.qMain.FieldByName('Step').AsInteger); Если переменная зависит от 2-х индексов if Two then begin Заполнение первого столбца таблицы sgVar значениями второго индекса for i:=1 to sgVar.RowCount-1 do sgVar.Cells[0,i]:=IntToStr(fmMain.qSec.FieldByName('Mn').AsInteger+(i-1)*fmMain.qSec.FieldByName('Step').AsInteger); sgVar.Cells[0,0]:=fmMain.qSec.FieldByName('Id').AsString+'\'+fmMain.qMain.FieldByName('Id').AsString; end else sgVar.Cells[0,0]:=fmMain.qMain.FieldByName('Id').AsString; fmMain.qMain.Close; fmMain.qSec.Close; end Кнопка Ok нажата второй раз else begin for i:=0 to lbVar.Items.Count-1 do begin fmMain.qMain.SQL.Clear; Заносим имя переменной и ее индекс в таблицу Inter fmMain.qMain.SQL.Add('INSERT INTO Inter VALUES('+#39+eVar.Text+#39+','+#39+lbVar.Items.Strings[i]+#39+',1,'+#39+'v'+#39+');'); fmMain.qMain.ExecSQL; end; num:=0; Заносим в базу данных значения переменных иэ табл. sgVar for i:=1 to sgVar.ColCount-1 do for j:=1 to sgVar.RowCount-1 do begin fmMain.qMain.SQL.Clear; inc(num); fmMain.qMain.SQL.Add('INSERT INTO Param VALUES('+#39+eVar.Text+#39+','+#39+lbVar.Items.Strings[0]+#39+','+#39+sgVar.Cells[i,0]+#39+','+IntToStr(num)+');'); fmMain.qMain.ExecSQL; Заносим в табл. Param имена переменных и их комментарии if Two then begin fmMain.qMain.SQL.Clear; fmMain.qMain.SQL.Add('INSERT INTO Param VALUES('+#39+eVar.Text+#39+','+#39+lbVar.Items.Strings[1]+#39+','+#39+sgVar.Cells[0,j]+#39+','+IntToStr(num)+');'); fmMain.qMain.ExecSQL; end; fmMain.qMain.SQL.Clear; fmMain.qMain.SQL.Add('INSERT INTO Var_value VALUES('+#39+eVar.Text+#39+','+IntToStr(num)+','+#39+sgVar.Cells[i,j]+#39+','+'0);'); fmMain.qMain.ExecSQL; fmMain.qMain.SQL.Clear; fmMain.qMain.SQL.Add('INSERT INTO Var_value VALUES('+#39+eVar.Text+#39+','+IntToStr(num)+'," ",'+'-1);'); fmMain.qMain.ExecSQL; end; fmMain.qMain.SQL.Clear; fmMain.qMain.SQL.Add('INSERT INTO Params (id,remark) VALUES('+#39+eVar.Text+#39+','+#39+eRem.Text+#39+')');// changed for MDI fmMain.qMain.ExecSQL; Добавляем переменную в дерево переменных if not(TfmForm1(fmMain.ActiveMDIChild).tv.Selected.HasChildren or not(TfmForm1(fmMain.ActiveMDIChild).tv.Selected.Parent<>nil )) then TfmForm1(fmMain.ActiveMDIChild).tv.Items.AddChild(TfmForm1(fmMain.ActiveMDIChild).tv.Selected.Parent,eVar.Text) else TfmForm1(fmMain.ActiveMDIChild).tv.Items.AddChild(TfmForm1(fmMain.ActiveMDIChild).tv.Selected,eVar.Text); Close; end; end; Модуль формы fmSetInter.
Процедура TfmSetInter.cb1Change. var i:integer; begin Если минимальное значение изменено if TComboBox(sender).name='cb1' then begin Списку максимальных значений присвоить список минимальных cb2.items:=cb1.items; Если выбрано мин. значение – удаляем из макс. списка лишнее if cb1.itemindex<>-1 then for i:=0 to cb1.itemindex-1 do cb2.Items.Delete(0); end; Если выбраны все значения – кнопка Ok доступна if (cb1.ItemIndex<>-1) and (cb2.itemindex<>-1) then OKBtn.enabled:=true else okBtn.enabled:=False; Сохраняем значения min:=cb1.items[cb1.itemindex]; max:=cb2.items[cb2.itemindex];
Модуль формы fmIndex. Рис.14. форма fmIndex. Рис.15. алгоритм работы процедуры TfmIndex.FormClose.
i : longint; begin Курсор в начало таблицы tIndex.First; цикл по всем строкам таблицы for i:=1 to tIndex.RecordCount do begin условия корректности if (tIndex.FieldByName('Mn').AsInteger>tIndex.FieldByName('Mx').AsInteger) or (tIndex.FieldByName('Mn').AsInteger+tIndex.FieldByName('Step').AsInteger>tIndex.FieldByName('Mx').AsInteger) then begin сообщение об ошибке MessageDlg('Введите привильное значение индекса', mtError, [mbOk], 0); Action:=caNone; exit; end; переход на следущую строку tIndex.Next; end; закрытие таблицы tIndex tIndex.Active:=False; end; Глава 2 ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ “ Технология программирования с использованием средств быстрой разработки приложений” 2. Технология программирования с использованием средств
быстрой разработки приложений
Тема данной главы - технология быстрой разработки приложений - RAD (Rapid Application Development). Данная технология сравнительно нова, но она быстро становится популярной, многие производители средств разработки приложений взяли эту технологию на вооружение. Хотя это и новый подход в программировании, но и до появления RAD–средств делались попытки облегчить труд программиста, сделать этот труд более продуктивным, повысив этим быстродействие и удобство создания приложений. Первоначально появились интегрированные среды разработки - IDE (Integrated Development Environment), объединяющие компилятор, специальный текстовый редактор, ориентированный на работы с текстами на целевом языке программирования и средства отладки - трассировщик—дебаггер и другие. По сравнению с предыдущими средствами программирования это был большой шаг вперед, но затем появились CASE–средства, которые позволяли максимально визуализировать процесс создания программы, но пользоваться ими было чересчур неудобно из-за их негибкости. В большинстве случаев написать достаточно сложную программу было очень трудно. Сейчас эти средства используются там, где подход достаточно однообразен - например при написании средств работы с базами данных. Средства же быстрой разработки приложений (в дальнейшем - RAD–средства), взяв все лучшее из интегрированных сред разработки и CASE систем, объединили мощь и гибкость работы с исходными текстами с удобством создания графического интерфейса пользователя - GUI (Graphic User Interface). К сожалению, большинство RAD–средств не позволяют визуализировать логику самой программы, но и те методы, которые заложены в современные RAD–средства, позволяют поднять производительность разработки программ в 2-3 раза. Первой вариантом RAD–средств можно назвать продукт фирмы Microsoft - Visual Basic, появившийся в начале девяностых годов. Но пик популярности подобных средств наступил совсем недавно - сразу несколько ведущих фирм по производству средств создания приложений анонсировали новые версии своих продуктов, которые уже могут по праву называться RAD–средствами. Среди них можно назвать Microsoft Visual C++, Microsoft Visual Java, Power Builder (PowerSoft), Optima++ (PowerSoft), Borland Delphi, Borland C++ Builder и много других. В данной главе основной акцент будет делаться на систему Borland Delphi 3, поскольку именно эта среда использовалась при разработке программы в рамках данного дипломного проекта. Соответственно, большее внимание будет уделяться и диалекту языка Pascal - Object Pascal, который используется в качестве языка программирования в среде Delphi. 2.2 Особенности RAD–средствДве основных черты RAD–средств - это визуальная компонентность и многократное использование кода. Каждая из этих черт предназначена для повышения производительности программирования. Рассмотрим их подробнее. 2.2.1 Визуальная компонентность Данный подход является логическим развитием объектно-ориентированного программирования (ООП). Каждый компонент имеет свои события (events), методы (methods) и свойства (properties). Методы и события пришли из объектно-ориентированного программирования, а свойства являются привилегией компонентного подхода. Свойства позволяют изменить состояние компонента, причем как динамически - во время работы программы, так и статически - визуально во время разработки. Естественно, что компоненты имеет все те особенности, что и объекты в объектно-ориентированном программировании - наследование, полиморфизм и инкапсуляция. Таким образом, описание типичного компонента выглядит следующим образом: TBitBtn = class(TButton) private FCanvas: TCanvas; FGlyph: Pointer; FStyle: TButtonStyle; FKind: TBitBtnKind; FLayout: TButtonLayout; FSpacing: Integer; FMargin: Integer; IsFocused: Boolean; FModifiedGlyph: Boolean; procedure DrawItem(const DrawItemStruct: TDrawItemStruct); procedure SetGlyph(Value: TBitmap); function GetGlyph: TBitmap; function GetNumGlyphs: TNumGlyphs; procedure SetNumGlyphs(Value: TNumGlyphs); procedure GlyphChanged(Sender: TObject); function IsCustom: Boolean; function IsCustomCaption: Boolean; procedure SetStyle(Value: TButtonStyle); procedure SetKind(Value: TBitBtnKind); function GetKind: TBitBtnKind; procedure SetLayout(Value: TButtonLayout); procedure SetSpacing(Value: Integer); procedure SetMargin(Value: Integer); procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM; procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM; procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK; protected procedure CreateHandle; override; procedure CreateParams(var Params: TCreateParams); override; function GetPalette: HPALETTE; override; procedure SetButtonStyle(ADefault: Boolean); override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Click; override; published property Cancel stored IsCustom; property Caption stored IsCustomCaption; property Default stored IsCustom; property Enabled; property Glyph: TBitmap read GetGlyph write SetGlyph stored IsCustom; property Kind: TBitBtnKind read GetKind write SetKind default bkCustom; property Layout: TButtonLayout read FLayout write SetLayout default blGlyphLeft; property Margin: Integer read FMargin write SetMargin default -1; property ModalResult stored IsCustom; property NumGlyphs: TNumGlyphs read GetNumGlyphs write SetNumGlyphs stored IsCustom default 1; property ParentShowHint; property ShowHint; property Style: TButtonStyle read FStyle write SetStyle default bsAutoDetect; property Spacing: Integer read FSpacing write SetSpacing default 4; property TabOrder; property TabStop; property Visible; property OnEnter; property OnExit; end; В данном примере описан стандартный компонент TBitBtn, наследующий от стандартного класса Tbutton - стандартная кнопка, используемая повсеместно в Windows. Он имеет четыре секции в описании - private, protected, published и public. Данные секции регламентируют доступ к методам, полям и свойствам, находящимся в них для других компонент и для программ пользователя. 2.2.2 Многократное использование кода Термин «многократное использование кода» (code reuse) говорит сам за себя. Данная технология подразумевает возможность написания таких участков программ, которые затем с небольшими изменениями (или совсем без изменений) могут быть использованы в другой программе. Нельзя сказать, что такой подход является привилегией средств быстрой разработки приложений - еще раньше программисты поняли преимущества возможности выделения универсальных и часто используемых подпрограмм в отдельные библиотеки (модули). Таким образом появлялись библиотеки подпрограмм для различных языков программирования, работающие с графикой, базами данных, реализующие многие математические функции и прочие универсальные задачи. Но именно в RAD–средствах технология многократного использования кода приобрела законченный и целостный вид - существует широкий набор стандартных компонентов, которые могут использоваться во многих программах различного типа, а при необходимости получения какого-либо компонента с отличными от стандартных возможностями, его написание облегчается из-за механизма наследования от уже существующих компонентов их свойств и методов. Сложность данного подхода в изменении идеологии программирования - разработчик должен изначально ориентироваться на создания кода, который затем можно будет многократно использовать. Особенно актуальна эта проблема для групп разработчиков. В этом случае необходимо мыслить глобально, с учетом требований всех членов группы и перспективы дальнейших разработок. Кроме описанных особенностей средств быстрой разработки приложений, следует отметить наличие определенного инструментария, который призван помогать разработчику при создании стандартных элементов приложений. Эти средства автоматизируют рутинную работу при генерации например графического интерфейса. В различных средах они носят различное наименование - expert и master в средах фирмы Borland и wizard в средах, разработанных фирмой Microsoft. 2.3 Создание программ в среде DelphiБлагодаря всем вышеописанным преимуществам технологии быстрого проектирования приложений, создание программ в среде Delphi является удобным и необременительным делом. Для генерации программы первоначально необходимо создать файл проекта, имя которого будет совпадать с именем будущей программы. Причем Delphi сама сделает каркас программы - пользователю необходимо только выбрать соответствующий пункт в диалоговом окне New, которое показано на рис.6 Рис.6. Окно выбора объекта создания Таким образом, выбрав тип создаваемой программы, программист получит готовый шаблон, который затем необходимо будет заполнить содержанием. Каждое окно в Delphi называется формой. На форме располагаются различные визуальные и не визуальные компоненты. Весь набор компонент, доступных в системе, хранится в файле complib.dcl или в файле с другим именем и отображается в специальном окне среды Delphi, называемом «палитрой компонент» (component palette). Рис.7. Палитра компонентов Палитра разбивается на страницы, группирующие компоненты по каким-либо общим признакам. Рис.8. Пример создания экранной формы Например, на одной странице помещаются компоненты работы с данными, на другой - сетевые и т.д. Гибкость среды Delphi позволяет настраивать палитру по своему усмотрению - объединять, разбивать страницы, переносит компоненты с одной страницы на другую и т.п. Для того, чтобы поместить компонент на форму, необходимо нажать на его изображении на палитре компонент кнопку «мыши», затем переместить указатель «мыши» на нужное место и там отпустить. Это процесс приведет к тому, что у класса формы появится поле типа этого компонента. Собрав на одну форму несколько компонентов, можно получит сколь угодно сложные диалоговые окна с полями ввода, мемо-полями и прочими компонентами. Простой пример создаваемого окна (в режиме разработки) показан на рис.8. На рис.8 показана разрабатываемая форма с несколькими визуальными компонентами. Хотя количество визуальных компонент на форме практически не ограничено, здравый смысл подсказывает, что перегружать форму ими не целесообразно, поскольку пользоваться программой с большим количеством кнопок, полей ввода и т.д. будет трудно из-за информационной перенасыщенности. Кроме того, рекомендуется каждый визуальный компонент снабжать строкой описания, чтобы пользователь мог догадаться, что же от него требуется. Кроме визуальных, существуют также невизуальные компоненты. Поместив такой компонент на форму и запустив программу, мы ничего не увидим. Но некоторые компоненты во время работы себя отображают, правда для этого необходимо вызвать их методы. К таким компонентам относится всевозможные диалоговые компоненты, например OpenDialog, который является стандартным окном для открытия файла. Другие невизуальные компоненты внешне никак себя не проявляют, например компонент DataSet. Свойства каждого компонента и формы в целом, а также события, на которые они откликаются, отображаются в окне инспектора объектов (object inspector). Инспектор объектов имеет две страницы - страницу со свойствами и страницу с событиями. Общий вид обеих страниц указан на рис.9
При редактировании свойства в инспекторе объектов учитывается тип этого свойства. Например, если свойство логического типа, то возможен будет выбор только лишь между значениями True и False. Для более сложных свойств, например, для списков строк, существуют свои редакторы свойств. Например, компонент ComboBox с рис.8 имеет свойство Items типа списка строк - TStrings. В этом случае нажатие на кнопку с многоточием, расположенную рядом с именем свойства, приведет к активизации редактора списка строк. Его вид показан на рис.10 Для нестандартных свойств, описанных программистом, существует возможность создания своего редактора свойств методами Delphi. Рис.10. Редактор списка строк Кроме задания значений свойств, инспектор помогает задавать реакцию на всевозможные события, которые могут происходить в программе - перемещение указателя «мыши», нажатие и отпускание клавиш клавиатуры и т.п. На соответствующей страничке инспектора есть список множества стандартных для компонента (или формы) событий. Каждому событию соответствует своя процедура обработки этого события. Причем одна процедура может обрабатывать несколько событий. Все это указывается с помощью инспектора событий. Замечу, что визуальными средствами среды Delphi построить законченное приложение практически невозможно. Такими средствами можно только облегчить создание программы. Всю логику придется писать старым, испытанным методом - для каждой процедуры обработки событий вручную вписывать код. В этом параграфе была рассмотрена упрощенная схема разработки программы в среде Delphi. Но кроме создания исходного текста необходимо помнить и об отладке программ.
Процесс отладки программ в средах быстрой разработки приложений также упрощен по сравнению с обычной схемой. После компиляции программы можно посмотреть структуру ее классов с помощью окна Browse, представленного на рис.11 Это окно дает много полезной информации об иерархии классов и их структуре в данной программе. Кроме того, можно посмотреть значения любых полей и свойств во время работы программы, если программа запущена из-под среды. Для этого используется отладчик. Функционально отладчик ничем не отличается от стандартного отладчика, который используется во всех программных продуктах фирмы Borland. Он имеет режим пошагового выполнения с заходом или без захода в подпрограммы, возможность установки точек останова, окно просмотра значений переменных и другие функции. Гибкость, простота и удобство работы со средствами быстрой разработки приложений, объединенные с мощью языковой поддержки, позволяют сделать вывод о перспективности таких средств в будущем. Уже сейчас практически каждый месяц в средствах массовой информации появляются сообщения о появлении новых RAD–средств, и в дальнейшем такая тенденция должна сохраниться. Организационно - экономическая часть “Расчёт затрат на разработку программы” 3. Расчёт затрат на разработку программы3.1 ВведениеЦель составления любых программ состоит в получении определенных результатов в процессе эксплуатации и оценивается эффективностью программного средства. Уточним применяемое далее понятие эффективности процесса разработки программного средства. Выбор адекватных показателей эффективности программных средств зависит от их назначения, области применения, а также от ряда характеристик программ, проявляющихся при их применении. Поэтому, для выбора технических решений могут использоваться различные критерии. Целесообразно подразумевать под эффективностью процесса разработки минимум затрат на разработку программ при заданной экономической эффективности применения и качества программных средств. Минимизация затрат на обеспечение жизненного цикла комплекта программ (далее КП) в некоторой степени эквивалентны максимизации разности эффекта и затрат, если предположить, что экономический эффект от применения программ зафиксирован и стабилен. Затраты в жизненном цикле ПО определяются не только этапом разработки, но и этапами эксплуатации и сопровождения, причем затраты на этих этапах могут значительно превосходить затраты на этапе проектирования и разработки и характеризуются своими особыми закономерностями. Неодновременность групп затрат не учитывается, и предполагается, что абсолютная величина и влияние затрат со временем не изменяется. Обычно, критерии качества изделий используются в совокупности, с разных сторон отражающей основные характеристики функционирования объекта. Тем не менее во многих случаях доминирует экономический эффект, который наиболее прост, и обобщенно принято описывать суммарным доходом Э от использования изделия в течении его жизненного цикла продолжительностью Тж. В первом приближении это разность между полной идеальной экономической эффективностью программы Эо и суммарными потерями и затратами K , снижающими предельный доход за весь жизненный цикл: Э = Эо - K В качестве идеальной эффективности Эо рассматривается совокупный доход, который можно получить от использования программ за весь жизненный цикл, если бы они не требовали затрат на создание, производство и эксплуатацию, а также функционировали бы на реализующих ЭВМ без потерь и искажений. Предполагается, что при любых затратах на разработку всегда достигается заданная идеальная эффективность последующего применения ПО в процессе его эксплуатации и необходимые показатели качества функционирования. Это предположение позволяет в дальнейшем исключить из анализа эффективность применения программных средств Эо и сосредоточить внимание на эффективности процесса их разработки. Дополнительным основанием такого допущения может служить то, что многие виды программ невозможно или очень трудно характеризовать доходом от их функционирования. Тогда исследования эффективности процесса создания ПО можно проводить, минимизируя затраты K в предположении, что обеспечены заданные функциональные характеристики программ. Снижение эффективности Э на величину K происходит прежде всего вследствие затрат на разработку, производство, сопровождение и эксплуатацию программ, а так же вследствие различных сбоев программ и оборудования. В соответствии с этапами жизненного цикла ПО основные затраты K, снижающие идеальную эффективность за цикл жизни Тж, можно представить следующими составляющими: · затраты на создание КП и обеспечение решения заданных задач (в том числе на документацию, технологическое обеспечение, аппаратную оснащенность разработки) - Kр; · затраты на эксплуатацию программных и аппаратных средств ЭВМ, реализующих КП - Sэ; · затраты на сопровождение КП, включающие затраты на хранение и контроль его состояния, проведение модификации и разработку документации, исправление ошибок и рекламу и т.д. - Kс; · накладные расходы Kн; в результате совокупную реальную эффективность функционирования ПО за весь жизненный цикл длительностью Тж можно представить в виде: Э = Эо - Kр - Sэ - Kс - Kн 3.2 Составляющие затрат на разработку программ KрРазработка программ является областью с малой материало- и энергоемкостью, и основные затраты связаны с непосредственным или овеществленным трудом специалистов различных категорий. Наибольшее значение в составе Ср при разработке сложных комплексов программ ( КП ) имеют следующие составляющие затрат: · на непосредственное проектирование, программирование, отладку и испытания программ в соответствии с требованиями пользователя или заказчика - K1р; · на изготовление опытного образца КП как продукции производственно-технического назначения - K2р; · на разработку, подготовку и применение технологии программных средств автоматизации разработки программ - K3р; · на технологические и реализующие ЭВМ, используемые для автоматизации разработки программ - K4р; · на подготовку и повышение квалификации специалистов-разработчиков - K5р. Первые две составляющие K1р и K2р являются непосредственными затратами на создание программных средств. Составляющие K3р и K4р можно рассматривать как затраты, обеспечивающие оснащенность процесса создания КП. Затраты на подготовку и повышение квалификации наиболее трудно формализовать и учитывать в конкретной разработке программных средств. В данном случае эта составляющая не учитывается. 3.3 Затраты на непосредственную разработку КПЗатраты на непосредственную разработку комплекса программ K1р являются важнейшей составляющей в жизненном цикле КП. Наибольшее влияние на них оказывает объем КП. Затраты на разработку K1р и объем программ Пк связаны через показатель интегральной средней производительности труда разработчиков Р. Для учета влияния на K1р различных факторов удобно пользоваться коэффициентами изменения трудоемкости (КИТ) - Сij, учитывающими зависимость i-ой составляющей совокупных затрат от j-го фактора. Непосредственные затраты на разработку можно представить как частное от объема КП и производительность труда, корректируемое произведением коэффициентов изменения трудоемкости: Выделим четыре основных группы факторов, влияющих на затраты K1р при непосредственной разработке программ: * факторы, отражающие особенности создаваемого комплекса программ как объекта разработки, и требования к его общим характеристикам; * факторы, характеризующие технологическую и программную оснащенность средствами автоматизации процесса разработки программ; * факторы, отражающие оснащенность процесса создания КП аппаратурными средствами, на которых базируются системы автоматизации разработки; * факторы, определяющие оснащенность процесса разработки программ и его обеспечение квалифицированными специалистами. Для каждого фактора может быть выделен параметр, наиболее полно отражающий его содержание численными значениями. Для большинства факторов произведены оценки диапазона возможного изменения относительных затрат на разработку одной команды в КП при варьировании соответствующего параметра в указанном диапазоне. Эти изменения затрат характеризуются коэффициентами Сij изменения усредненной трудоемкости разработки строки текста программы за весь цикл создания КП при варьировании j-го фактора i-ой группы. Кроме оценок предельных значений КИТ, приводятся их средние значения.
3.3.1 Факторы КП как объекта проектирования, влияющие на непосредственные затраты при разработке сложных программЭта группа факторов отличается наибольшим влиянием на затраты и производительность труда. Наиболее активно в качестве показателя сложности программ используется ее объем, выраженный числом операторов на ассемблере или строк на языке программирования высокого уровня. Объем программ является одной из наиболее достоверно измеряемых характеристик КП. Логично предположить, что по мере увеличения объема КП возрастает относительная трудоемкость разработки каждой команды в программе. Такая зависимость может быть описана логарифмической функцией: Надежность функционирования КП является наиболее важным фактором, отражающим качество программных средств. В качестве параметров, характеризующих надежность системы, наиболее широко используется наработка на отказ Тн и коэффициент готовности Кг. Оба показателя тесно связаны, что позволяет ограничить внимание на первом из них. Изучение математических моделей процесса выявления ошибок в программах привело к тому, что одной из наиболее достоверных и простых является экспоненциальная зависимость числа оставшихся ошибок от времени ее тестирования. Эти соображения позволяют аппроксимировать средние значения С13 при повышении требований к надежности КП логарифмической зависимостью: Ограничение ресурсов производительности и оперативной памяти реализующей ЭВМ: при использовании создаваемым КП производительности и памяти реальной ЭВМ менее чем на 50% можно и не учитывать эти ограничения, однако в нашем случае ресурсы ЭВМ используются практически полностью: С14 = (1.14 * (1 - р)1/2)-1 где р - реальная загрузка ЭВМ ( в относительных величинах ). Длительность предполагаемой эксплуатации КП изменяется от нескольких месяцев до нескольких лет. По экспертным оценкам, увеличение предстоящей длительности эксплуатации КП на порядок от 1 до 10 лет приводит к увеличению КИТ С15 примерно в 1.5-2 раза. Такую зависимость можно описать логарифмической функцией: где а15 изменяется в диапазоне от 1 до 1.5. Предполагаемый тираж программ: при переходе от уникального КП к программам, подлежащим тиражированию, затраты заметно возрастают: Мобильность (переносимость) использования КП из других разработок позволяет снижать затраты при сборочном программировании новых КП. При этом относительное повышение производительности труда (КИТ - С17) пропорционально доле использования в новом КП. При сборочном программировании кроме 10-20% затрат на создание новых программных компонент, необходимы ресурсы на комплексирование нового КП, его комплексную отладку, испытания и документирование. В результате суммарные затраты заметно возрастают и эквивалентное повышение производительности труда С17 может составлять 2.5-3 раза. Необходимо учитывать затраты, которые требуются на создание адаптируемых компонент и всего первичного КП. В результате программная мобильность с учетом затрат на ее подготовку в среднем дает снижение КИТ на 30-50%. Мобильность (переносимость) использования компонентов КП для других разработок приводит к необходимости их проектирования как автономных комплектующих изделий. В результате может быть достигнута возможность сборочного программирования. Для обеспечения сборочного программирования КИТ на строку в программе С18 увеличивается в среднем на 10-20%. В нашем случае неизвестно, потребуются ли в дальнейшем универсальные компоненты, поэтому С18=1. 3.3.2 Применение современных методов разработки КППри создании данного КП использовалась пошаговая разработка компонентов программы. В этом случае интегральная оценка эффективности метода более-менее стабильна и характеризуется повышением производительности труда приблизительно на 30 - 40% (С31=0.6-0.7). Уровень автоматизации разработки КП рассматривается прежде всего как фактор, влияющий на С1р и на производительность труда специалистов. В нашем случае С32 = 1. Уровень языков программирования КП. При разработке нашей программы ЯВУ (а именно - система быстрой разработки приложений Borland Delphi 3) дал увеличение производительности на 50% (С33= 0.5). Тираж системы автоматизации разработки. С34 = 1. 3.3.3 Факторы оснащенности процесса разработки КП аппаратурными средствами, влияющими на непосредственные затраты при разработке сложных программПри анализе фактора аппаратурной оснащенности процесса разработки программ целесообразно учитывать интегральные характеристики всех вычислительных средств, использующих при создании данного КП. При разработке данной программы применяется только реализующая ЭВМ. Относительное быстродействие ЭВМ на одного специалиста, участвующего в разработке КП, определяет доступный уровень автоматизации разработки программ. Влияние относительного быстродействия на полные затраты можно оценить на уровне 20-30%.(С41 = 0.7 - 0.8). Относительный объем оперативной памяти на одного специалиста, участвующего в разработке КП, может также проявиться как заметный фактор, изменяющий производительность труда разработчиков. В нашем случае недостаточный объем памяти вызвал снижение производительности труда на 10-20% (С42 = 1.1-1.2) 3.3.4 Факторы организации процесса разработки КП, влияющие на непосредственные затраты при создании сложных программИндивидуальные особенности специалистов могут приводить к изменению производительности труда во много раз. В среднем технологическую квалификацию можно считать выше среднего (С52=0.7), тематическую квалификацию - как средняя (С51=0.8). Программистская квалификация и опыт работы с языками проектирования составил 4 года ( С53 = 0.9) Уровень квалификации заказчика высок, но техническое задание на разработку было сформировано с дальнейшими доработками (С54=1.2). 3.4 Затраты на изготовление опытного образца как продукции производственно-технического назначенияЗатраты на изготовление опытного образца КП как продукции производственно-технического назначения С2р определяется необходимостью обеспечить отчуждение всего комплекса программ от его непосредственных разработчиков. Для изготовления КП как продукции производственно-технического назначения необходимо: * изготовить и оформить опытный образец КП на носителях данных; * разработать комплект документации, обеспечивающий квалифицированную эксплуатацию КП. Для системы экономического планирования затраты K2p не имеют смысла, поскольку данная система существует в единственном экземпляре и не предполагается ее тиражировать, т.е. эти затраты не что иное как затраты на разработку данной системы. 3.5 Затраты на технологию и программные средства автоматизации разработки КПЗатраты на технологию и программные средства автоматизации разработки КП K3p обычно являются весьма весовыми только при использовании автоматизированных технологий. В нашем случае мы имеем принципиально новую систему, технология разработки которой пока не определена, поэтому затратами на технологию можно пренебречь. 3.6 Затраты на ЭВМ, используемые для автоматизации разработки данной программы.Затраты на ЭВМ, используемые для автоматизации разработки данного КП - С4р включают капитальные затраты на закупку и установку соответствующих ЭВМ, а также текущие затраты на их эксплуатацию в течении разработки КП. В нашем случае затраты распределяются только на эксплуатацию ЭВМ в течение разработки КП. Поэтому общие затраты на ЭВМ будут выглядеть как: С4р = С4р1 = а41*Тр. Где а41 - стоимость машинного времени реализующей ЭВМ. 3.7 Расчет затрат на разработку системы моделирования макроэкономики3.7.1 Исходные данные· ограничение ресурсов производительности и оперативной памяти реализующей ЭВМ не менее 90%; · предположительно длительность эксплуатации составит не более 1 года; · данная программа будет существовать в единственном экземпляре; · после создания КП предполагается использовать около 60% наработок; · при создании КП число наработок из других программ составило не более 30%; · при разработке программы, которая относится к программному продукту ниже среднего класса сложности, применялась только реализующая ЭВМ; · уровень квалификации заказчика выше среднего.
3.7.2 Коэффициенты изменения трудоемкости· сложность программы - С11 = lg(4693.5 * 10-3)=0.67; · ограничение ресурсов производительности ЭВМ - С14 = (1.14 * (1 - р)1/2)-1 = 2.8; · мобильность использования компонент из других разработок - С17=0.7; · современные методы разработки - С31 = 0.7; · уровень языка программирования - С33 = 0.5; · относительное быстродействие ЭВМ - С41 = 0.8; · относительный объем памяти - С42 = 1.1; · технологическая квалификация - С51 = 0.7; · тематическая квалификация - С52 = 0.8; · программистская квалификация - С53 = 0.9; · квалификация заказчика - С54 = 1.2; · остальные коэффициенты примем равными единице. 3.7.3 Расчет непосредственных затрат на разработкуСчитаем, что на каждого разработчика пришлось одинаковое число команд - П * 1.5 / 6 команд, т.е. считаем, что в одной строке содержится в среднем 1.5 команды и, т.к. в разработке принимало участие шесть человек, то в результате стыковки модулей общее количество строк составило сумму количества строк каждого разработчика. Пк = П *1.5 / 6 = 3282 (команд/чел.); Производительность P = Пк / Тр = 2.07 (команд/чел./день); Считаем, что в месяце, в среднем, 22 рабочих дня, тогда средняя дневная заработная плата разработчика Sд = 90.9 (руб.) Произведение коэффициентов Сij - Пij Cij = 0.245; Также необходимо учитывать накладные расходы, включающие в себя: · заработную плату административно - управленческого персонала с отчислением на социальное страхование; · аренду помещения; · хозяйственные нужды; · приобретение специальной литературы. Считаем, что накладные расходы составили 50% от непосредственных затрат. Теперь можем рассчитать непосредственные затраты на разработку - К1р : K1р = Пк * ПijCij * Sд * S * 1.5 / P = 522 * 0.245 * 90.9 * 6 * 1.5 / 2.07 = 50544 (рублей). Затратами на создание опытного образца являются затраты на разработку, т.е. программа сама по себе и есть опытный образец. Затратами на технологию и программные средства мы пренебрегаем. 3.7.4 Затраты на ЭВМСчитаем, что в году 250 рабочих дней. Тр = 84 (дней); Рассчитаем затраты на ЭВМ: К4р = а41*Тр * Tдн = 20 * 84*3 = 5040 (руб.) Все результаты сведем в таблицу. Затраты на разработку КП
Таким образом затраты на разработку системы моделирования макроэкономики составляют Kр = 55584 руб. 3.8 ВыводыМы рассчитали суммарные затраты на разработку данного Кп и увидели, что они составили примерно 55584 рублей. Наибольшие затраты были на разработку программы, кроме того, очень высокий процент непосредственных затрат на эксплуатацию реализующей ЭВМ. Это может объясняться тем, что еще не отработана технология на создание подобных систем. Возможным методом уменьшения затрат является более продуктивное использование машинного времени программистами. Глава 4 ПЭБ “Организация рабочего места программиста” 4. Организация рабочего места программиста4.1 Условия производственно-экологической безопасности разработчика пользователя ЭВМВ этой части рассматриваются факторы, влияющие на условия безопасности труда разработчиков - пользователей ЭВМ. Приводятся их основные характеристики и рекомендации по преодолению или ограничению вредного воздействия аппаратуры, входящей в состав рабочего места пользователя ЭВМ. 4.2 Вредные воздействия при работе с компьютеромРаботая за дисплеем компьютера человек подвергается воздействию различных факторов. К таким воздействиям можно отнести следующие: электромагнитное излучение; тепловое излучение; недостаток или избыток общей освещенности; механическое воздействие; шумовое воздействие; опасность поражения электрическим током. Наличие подобных факторов обусловлено предметами и средствами труда программиста, к которым можно отнести следующее оборудование: системная часть компьютера; дисплей; принтер; электрооборудование рабочего места другие внешние устройства. Особенно сильно проявляется влияние дисплея компьютера. Дисплей принадлежит к числу тех компонентов, работа с которыми требует особенного внимания. Практически большую часть времени работы за компьютером человек смотрит на экран, или, по крайней мере, находится перед ним, подвергаясь таким образом воздействию электромагнитного излучения, уровень которого целиком зависит от качества электронных лучевых трубок (ЭЛТ), которое еще не всегда удовлетворительное. Поэтому вопросам организации рабочего места следует уделить первостепенное внимание. 4.3 Факторы обитаемости1) Физические факторы обитаемости: электрическая опасность; тепловое излучение; электромагнитное излучение; освещенность; шумовое воздействие; микроклимат. 2) Психофизические факторы обитаемости: монотонность труда; статические нагрузки; перенапряжение зрения; умственное перенапряжение. Для количественной характеристики некоторых из этих факторов можно привести следующие цифры: 1) Электроопасность : 0.5 - 0.8 ампера при предельно допустимой норме 0.01 ампера. 2) Электромагнитное излучение : до 1.5 В/А при норме 50 В/А. 3) Звуковое воздействие : до 37 дБ при норме до 54 дБ. 4) Тепловое воздействие : средняя температура 22 - 24 градуса при норме до 26 градусов. 4.4 Воздействие электромагнитного излучения монитораС начала 1990-х годов самые широкие круги пользователей компьютеров осознали, наконец, истинную серьезность вопроса о возможной опасности воздействия на организм электромагнитных излучений дисплейных мониторов. В настоящее время ведутся медицинские и научные исследования с тем, чтобы исследовать данную проблему и выработать по отношению к ней единое мнение. Спектр излучения компьютерного монитора включает в себя рентгеновскую, ультрафиолетовую и инфракрасную область, а также широкий диапазон электромагнитных волн других частот. От рентгеновских лучей опасности практически нет, так как они полностью поглощаются веществом экрана. Наибольшую опасность представляют биологические эффекты низкочастотных электромагнитных полей, которые до настоящего времени считались абсолютно безвредными. В ряде экспериментов было обнаружено, что электромагнитные поля с частотой 60 Гц могут инициировать биологические сдвиги (вплоть до нарушения синтеза ДНК) в клетках животных. В отличие от рентгеновских лучей электромагнитные волны обладают необычным свойством - опасность их воздействия не обязательно уменьшается с уменьшением интенсивности облучения; определенные электромагнитные волны действуют на клетку лишь при малой интенсивности излучения или в конкретных частотах - в окнах прозрачности. Исследователи из Macworld обнаружили, что если на расстоянии 10 см перед мониторами, обычно используемыми с компьютерами Macintosh, напряженность магнитного поля составляет примерно от 5 до 23 мГс, то на расстоянии 70 см от экрана ни у одного из обследованных мониторов напряженность поля не превышала величины 1 мГс. (Интенсивность поля вне указанных пределов составляла 0.1 - 0.5 мГс.) Пользователям Macintosh, желающим снизить уровень облучения переменными магнитными полями, следует расположить мониторы так, чтобы расстояние до них составляло величину, равную длине вытянутой руки (с вытянутыми пальцами). Поскольку магнитные поля сзади и по бокам большинства мониторов значительно сильнее, чем перед экраном, пользователи должны располагать свои рабочие места на расстояниях не менее 1,22 м от боковых и задних стенок других мониторов. Следует иметь в виду, что магнитное излучение не задерживается ни перегородками, ни стенками, ни свинцовыми фартуками, ни даже телом человека. 4.5 Оптимизация условий зрительного восприятияЭффективность зрительного восприятия зависит от ряда условий. Чтобы видеть и различать объект при нормальной остроте зрения необходимо обеспечить: определенный уровень освещенности и размера объекта, необходимая контрастность фона; достаточный размер объекта; необходимую экспозицию, т. е. время различения объекта. Оптимальное расстояние от глаза до объекта наблюдения зависит от линейной величины рассматриваемого объекта и остроты зрения. При работе за дисплеем это расстояние обычно равно 35 - 60 см. Пользователь обычно работает с текстовой информацией, поэтому символы на экране должны быть увеличены в 1.5 - 2 раза по сравнению с печатным текстом. Для пользователя ЭВМ зрительное восприятие играет очень большую роль. Это предъявляет значительные требования к освещенности рабочего места, так как во многом именно от освещенности рабочего места зависит степень утомляемости человека. 4.6 ОсвещениеСистема освещения машинного зала ПЭВМ должна отвечать следующим основным требованиям: 1. Уровень освещенности рабочих мест должен соответствовать характеру выполняемых работ. 2. Достаточно равномерное распределение яркости на рабочих поверхностях и в окружающем пространстве. 3. Отсутствие резких теней, прямой и отраженной блескости. 4. Постоянство освещенности во времени. 5. Оптимальная направленность светового потока. 6. Долговечность, экономичность, электро- и пожаробезопасность, эстетичность, удобство и простота эксплуатации. Для обеспечения нормальной естественной освещенности, площадь оконных проемов должна быть не менее 25% площади пола. Строительные нормы и правила СНиП II-4-79 устанавливают следующие нормы искусственной освещенности рабочих мест (с высотой рабочей поверхности над полом 80 см): 1. Норма освещенности: а) при комбинированном освещении – 750 лк; б) при общем освещении – 400 лк; 2. Коэффициент пульсаций освещенности рабочего места Кп ≤ 15%. Рекомендуемая освещенность при работе с дисплеем составляет 200 лк, а при работе с экраном в сочетании с работой над документами –400 лк. Рекомендуемые перепады яркости в поле зрения оператора должны лежать в пределах 1:5 – 1:10. Расчет общего освещения Рассчитаем общее освещение в машинном зале ПЭВМ методом коэффициента использования светового потока по уравнению: 1. Выбираем рекомендованное для машинного зала люминесцентное освещение. 2. Располагаем светильники рядами вдоль длинной стороны помещения. 3. Будем использовать светильники типа УСП-35 с двумя лампами типа ЛБ-40. 4. Для обеспечения наилучших условий освещения, расстояние между рядами светильников L должно соответствовать отношению: где h-высота подвеса светильников, где H = 3.0 м – высота помещения, hc = 0.2 м – свес светильника, hp = 0.75 м – высота рабочей поверхности от пола. h = 3.0-0.2-0.75 = 2.05 [м] Þ L = л*h = 2.3 … 3.4 [м] 5. Количество рядов светильников N найдем из уравнения: L * (0.33* 2 + N-1) = B N = 2 ряда. Согласно нормам, нормируемая минимальная освещенность при общем освещении: Eн = 400 лк. Так как запыленность воздуха меньше 1 мг/мі, то коэффициент запаса: кз = 1.5. Площадь помещения S = A*B = 6*4 = 24 [мІ]. Так как мы предполагаем создать достаточно равномерное освещение, то коэффициент неравномерности освещения: z = 1.15. Индекс помещения: 6. Коэффициенты отражения светового потока принимаем: от потолка сп = 70%, от стен сс = 50%, от пола спола = 10%. Тогда по таблице находим коэффициент использования светового потока: з = 0.46. 7. Так как затенения предполагаем не создавать, то коэффициент затенения: г = 1. 8. По таблице находим световой поток лампы ЛБ-40: Фл = 3120 лм. 9. Количество светильников в одном ряду: Расположение светильников: Длина светильника lсв = 3 м Количество светильников в ряду М = 3 шт Длина помещения А = 6 м Количество рядов светильников N = 2 шт Ширина помещения В = 4 м Так как А – М*lсв = 2.1<4*L = 9.2 [м] (где L – рассчитанное минимальное расстояние между светильниками), то расстояние между светильниками в одном ряду L2 можно сделать равным расстоянию от крайнего светильника в ряду до стены. Тогда Расстояние между рядами L1 при расстоянии крайнего ряда от стены 0.33*L1: Итак, для нормального освещения машинного зала ПЭВМ используем 6 светильников типа УСП-35 с двумя лампами типа ЛБ-40. 4.7 МикроклиматПараметры микроклимата согласно ГОСТ 12.1.005-88 являются: · температура; · относительная влажность; · скорость движения воздуха; · запыленность воздуха. С целью обеспечения комфортных условий для операторов ПЭВМ и надежной работы оборудования, необходимо поддерживать следующие метеорологические условия (согласно СН 512-78):
Атмосферное давление в помещении машинного зала должно быть 1013.25±266 ГПа. При пониженном давлении воздуха ухудшается отвод теплоты от элементов ПЭВМ, снижаются изоляционные свойства воздуха. Воздух, используемый для вентиляции машинного зала, должен очищаться от пыли. Запыленность воздуха не должна превышать 1 мг/мі, а размеры пылинок – 3 мкм. Пыль, попадающая на платы комплекса, приводит к снижению теплообмена и способствует перегреву приборов. В помещении машинного зала необходимо предусмотреть систему отопления. Она должна обеспечивать достаточное, постоянное и равномерное нагревание воздуха в помещении в холодный период года, а также безопасность в отношении пожара и взрыва. При этом колебания температуры в течении суток не должны превышать 2-3 °С; в горизонтальном направлении – 2 °С на каждый метр длины; а в вертикальном – 1 °С на каждый метр высоты помещения. Для отопления помещения машинного зала рекомендуется использовать водяные или воздушные системы центрального отопления. Дежурное отопление должно включаться в помещении машинного зала ночью, в выходные и праздничные дни и, когда ПЭВМ не работают. Оно должно поддерживать в зале температуру воздуха в пределах 15-16 °С. 4.8 Оптимизация акустических условийРаботающие ЭВМ и мини ЭВМ могут являться источниками шума на предприятиях. Шум неблагоприятно действует на организм человека, вызывая различные физиологические отклонения в организме, психологические заболевания и снижает работоспособность. Утомление пользователей и операторов ЭВМ из-за шума увеличивает число ошибок при работе, способствует возникновению травм. Шум - это совокупность звуков различной частоты и интенсивности. Характеристикой шума с точки зрения физиологического восприятия является понятие "громкость шума". Количественную оценку уровня громкости шума различных источников проводят путем сравнения с шумом на частоте 1000 Гц, для которого уровень силы принят равным уровню громкости. При этом для измерения уровня громкости шума введена единица в 1 фон. За один фон принят уровень громкости шума с частотой 1000 Гц при уровне силы шума 1 дб. ГОСТ 12.1.003-83 "Шум, общие требования безопасности" устанавливает, что уровень звука на рабочем месте (в том числе при работе на ЭВМ) не должен привыкать 50 дб. Источниками шума в системах с ЭВМ являются периферийные устройства: принтеры, плоттеры, дисководы, системы охлаждения (вентиляторы), которые создают уровень шума до 70 - 80 дб. Для уменьшения уровня шума желательно устанавливать дисплеи в других помещениях, отдельно от машин. Это связано с тем, что воздействие шумов оказывает неблагоприятное влияние на эмоциональный настрой и вызывает сильные сопутствующие раздражения, повышающие рабочую нагрузку и снижающие творческий потенциал. Как следствие возрастает число ошибок. По данным американских журналов увеличение шума на 10 дб ведет к возрастанию числа ошибок на 30 - 40%. Основными мероприятиями по борьбе с шумом и вибрацией являются: - облицовка залов ЭВМ шумопоглащающей плиткой; - использование различных шумоуловителей; - размещение устройств на резиновых прокладках и амортизаторах. - если возможно, то источники шума следует располагать подальше от пользователя. 4.9 ЭлектробезопасностьПомещение для работы с ЭВМ и ее внешними устройствами относят к категории помещений с повышенной опасностью так как имеется возможность поражения электрическим током. Источниками электроопасности являются блоки ЭВМ, корпус устройства и приборы в случае возникновения неисправности (например, при нарушении защитного заземления, изоляции проводов, применении неправильных приемов включения в сеть и выключения из сети вилок электропитания). 4.9.1 Меры защиты от поражения электрическим током.Оценим электрическую опасность работы пользователя за персональным компьютером: Напряжение в сети Uсети=220 B; Потребляемая мощность P»250Вт Находим Iсети»1,14А. Таким образом, работа является электрически опасной. Помещение машинного зала ПЭВМ не должно относится к категории помещений с повышенной электроопасностью, то есть: · Относительная влажность воздуха в помещении должна быть не более 75%. · Должна отсутствовать токопроводящая пыль. · Не должно быть повышенной температуры воздуха в помещении (температура постоянно или периодически, более одних суток, превышает +35 єС). · Должна отсутствовать возможность одновременного прикосновения человека к имеющим соединение с землей металлическим конструкциям здания, оборудованию и т. д., с одной стороны, и к металлическим корпусам аппаратуры или токоведущим частям, с другой стороны. · Не должно быть токопроводящих полов. Кроме того должны применяться такие основные технические средства защиты от поражения электрическим током в помещении машинного зала ПЭВМ, как: · Электрическая изоляция токоведущих частей. · Защитное заземление. · Защитное отключение. Вся, подлежащая заземлению аппаратура должна подсоединяться к заземляющей шине отдельными заземляющими проводниками. Все заземляющие проводники должны быть доступны для осмотра и защищены от механических повреждений. 4.9.2 Защита от статического электричества. Электрический ток статического разряда мал и не может вызвать поражения человека. Однако искровой разряд может явиться косвенной причиной несчастного случая (возникновения пожара, порчи аппаратуры и т. д.). Для снижения величин статических разрядов в помещении машинного зала ПЭВМ покрытие полов следует выполнять из однослойного поливинилхлоридного антистатического линолеума типа АСН. Кроме того, в помещении относительная влажность должна быть не ниже 40%. 4.9.3 Защита от электромагнитных полей и ионизирующего излучения.Источниками электромагнитных излучений являются индукторы, конденсаторы, ВЧ-транзисторы, электровакуумные приборы, при работе которых создается электромагнитное поле. Систематическое воздействие электромагнитных излучений может оказать неблагоприятное воздействие на человека, выражающееся в функциональных нарушениях нервной, эндокринной и сердечно-сосудистой систем. При этом появляется повышенная утомляемость, головные боли, нарушение сна, гипертония и гипотония, боли в области сердца, тормозящие рефлексы. Могут также наблюдаться изменения крови, помутнение хрусталика глаз, нервно-психические и трофические заболевания (выпадение волос, ломкость костей). Для количественной оценки облучения электромагнитными полям принята интенсивность излучения, выраженная в величинах плотности потока энергии в пространстве данного участка (т.е. Вт/м или мкВт/см). Предельно допустимая норма:
ПДК=(200 мкВт/см)/Тсмены(8 часов)=25 мкВт/(см*ч) Ионизирующее излучение – поток частиц и квантов электромагнитного излучения, прохождение которого через вещество проводит к ионизации или возбуждению атомов или молекул этого вещества. Источниками ионизирующего излучения в ЭП являются высоковольтные электровакуумные приборы. Рентгеновское излучение на расстоянии от экрана дисплея составляет 0.5 мР/час и убывает с увеличением расстояния так, что на расстоянии 50 см от экрана и более равно 0.005 мР/час. Эта величина соответствует основному фоновому уровню. К основным методам защиты от излучений относятся расположение компьютеров, при котором достигается минимальное влияние излучения на оператора, правильная планировка рабочего места, организация работы оператора. 4.10 Психофизические факторыКак уже было сказано выше, к психофизическим факторам обитаемости относятся: монотонность труда; статические нагрузки; перенапряжение зрения; умственное перенапряжение. Так как программист много времени проводит за компьютером то уже примерно через час начинают появляются первые признаки утомления. Связано это с тем, что человек находится в одной и той же позе и вынужден сильно напрягать зрение при работе с монитором. Работа с клавиатурой составляет около 15% от общего рабочего времени программиста. Причиной этому является то, что чаще всего используемые командные строки активизируются из командного меню посредством устройства мыши, не прибегая к помощи клавиатуры. Использование двух устройств ввода информации - мыши и клавиатуры, приводит к проблеме одновременного сосуществования данных устройств. Так как мышь является первичным устройством ввода информации, то клавиатура обычно откладывается в сторону. Такое расположение приводит к повернутому положению туловища и рук при работе с клавиатурой, то есть неестественному расположению кистей и запястья, что также способствует быстрому утомлению. Работа с монитором - самый вредный фактор воздействующий на пользователя ЭВМ. Длительное нахождение перед дисплеем компьютера вредно отражается на зрении человека - снижает его остроту, повышается раздражимость, ухудшается работа головного мозга - у человека могут возникать головные боли и резь в глазах. Для того чтобы снизить вредное воздействие оказываемое на пользователя ЭВМ, необходимо устраивать 5-10 минутные перерывы в работе приблизительно через каждый час. Необходимо встать из-за стола пройтись по коридору или выйти на улицу - размяться. Это позволяет снизить утомляемость и поднять работоспособность человека. 4.11 Организационные мероприятияВажным организационным мероприятием является проведение инструктажа по электро- и пожароопасности всех лиц, допущенных к работе на ЭВМ. При проведении противопожарных инструктажей необходимо добиваться, чтобы персонал практически умел пользоваться первичными средствами тушения пожара и средствами связи. В каждой лаборатории, в производственных цехах и других помещениях назначается ответственный за пожарную безопасность, который должен следить за тем, чтобы все противопожарные средства были в исправном состоянии и находились в отведенном для этого месте. Все сотрудники должны быть ознакомлены с планом эвакуации из помещения в случае пожара. 4.12 ПожаробезопасностьГлавную пожарную опасность в машинном зале представляет электрооборудование. При эксплуатации электрооборудования должны выполняться инструкции техники безопасности. Также мебель, корпуса аппаратуры, выполненные из легковоспламеняющихся материалов, могут послужить причиной пожара. Помещение должно соответствовать нормативам по огнестойкости строительных конструкций, планировке зданий, этажности, оснащенности устройствами противопожарной защиты. Система профилактики пожара предусматривает обеспечение пожарной безопасности оборудования, электроустановок, систем отопления и вентиляции, предотвращение образования и внесения источников зажигания, предотвращение образования горючей среды. Система пожарной защиты предусматривает применение негорючих и трудногорючих материалов, изоляцию горючей среды, применение средств для тушения пожара, пожарной сигнализации и извещения о пожаре, применение средств защиты людей, организацию пожарной охраны объекта. В качестве средств тушения пожаров используются вода, химическая и механическая пена, негорючие газы и пары, порошкообразные вещества, покрывала из негорючих материалов и др. Помещение машинного зала должно обладать I или II степенью огнестойкости (см. СНиП 2.01.02-85 “Противопожарные нормы”), то есть самой высокой. 4.13 Мероприятия по организации рабочего местаРабочее место - это та часть пространства в котором человек осуществляет свою трудовую деятельность и проводит большую часть своего рабочего времени. Для пользователя у дисплея - это зона расположения экрана и клавиатуры. Оптимальная рабочая зона - это часть рабочей зоны , в которой конечности человека способны продолжительное время совершать естественные рабочие движения с оптимальным эффектом, т. е. с наибольшей точностью, быстротой, безопасностью и меньшим напряжением. Рекомендуемая планировка рабочего места оператора ПЭВМ, учитывающая антропометрические данные человека и габариты аппаратуры представлена на рисунке Автоматизированное рабочее место (АРМ) - должно быть хорошо приспособлено к человеку и его трудовой деятельности, должно обеспечивать ему удобное положение при работе и достаточно высокую производительность труда при наименьшем психологическом и физическом напряжении. При выборе рабочего места необходимо выполнить следующие соотношения: размер орудия труда должен соответствовать размерам тела и рук; при определении площади рабочего помещения необходимо учитывать рост человека , вид работы; при размещении органов управления необходимо обеспечить оптимальную зону досягаемости, а также возможность легкого и удобного манипулирования и управления. Для создания оптимальных условий для широкого контингента людей следует предусмотреть возможность изменения рабочего места по индивидуальным параметрам. В частности, размещая рабочие места пользователей ЭВМ, необходимо распределить их по площади помещения так, чтобы были выполнены эргономические требования, предъявляемые к рабочей зоне и рациональному использованию площади пола; на одного человека минимальная площадь пола составляет 6 кв. м , объем 20 куб. м, высота 3м. ЗаключениеУчет норм производственно - экологической безопасности и правил работы за персональным компьютером необходим для создания комфортных и безопасных условий труда разработчика - пользователя ЭВМ. Основой для безопасной эксплуатации ЭВМ является высокая техническая грамотность пользователей ЭВМ. Для обеспечения высокой работоспособности уровень шума на рабочем месте не должен превышать установленных норм. Правильно спроектированное и выполненное производственное освещение повышает производительность труда, оказывает благоприятное психологическое воздействие, повышает безопасность труда и не вредит здоровью пользователя ЭВМ. Необходимо уделять внимание эргономическим требованиям, предъявляемым к рабочему месту, так как от его конструкции во многом зависит производительность труда и здоровье пользователя ЭВМ. Поскольку никаких вредных экологических воздействий на окружающую среду не оказывается, то есть рабочее место пользователя является экологически безопасным, то никаких особых требований по обеспечению экологической безопасности не предъявляется. ВыводыВ результате работы была проанализирована сущность явлений при работе за компьютером. Определены возможные опасности, и оценена их степень воздействия на оператора. Предложены методы частичного и полного устранения опасностей, способы профилактики. Рассчитана рекомендуемая освещенность машинного зала, выявлены нормы работы за компьютером. Таким образом, оператор, работающий с системой, может квалифицированно изыскать способы и методы работы, которые позволят избежать травматизма, профессиональных заболеваний и устранить влияние на организм работающего опасных и вредных воздействий.C точки зрения экологической безопасности окружающей среды работа за компьютером и сам компьютер не представляет опасности. Охрана труда. Под ред. Б.А. Князевского. - "Высшая школа" 1982. Методические указания по выполнению раздела "Охрана труда" в дипломном проекте. Под ред. В.И. Каракеяна. - МИЭТ, 1983. Константинова Л.А. Ларионов Н.М., Писеев В.М., "Методические указания по выполнению раздела "Охрана труда" в дипломном проекте для студентов". МИЭТ 1988. Константинова Л.А. Ларионов Н.М., Писеев В.М., "Методы и средства обеспечения безопасности технологических процессов на предприятиях электронной промышленности".МИЭТ 1990. Каракеян В.И., Константинова Л.А., Писеев В.М., Лабораторный практикум по курсу «Произведственная и экологическая безопасность в микроэлектронике», МИЭТ 1990. [1] RAD - Rapid Application Development - быстрая разработка приложений. Такие средства, благодаря своей реализации, позволяют за минимально короткое время создать и отладить программный продукт со сложным графическим интерфейсом. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||