Автор работы: Пользователь скрыл имя, 05 Октября 2011 в 16:20, дипломная работа
Мир компьютерных и информационных технологий без преувеличения можно назвать наиболее динамичной областью современных знаний. Практически каждый год появляются новые модели процессоров и комплектующих, новые версии операционных систем и программного обеспечения. Все это происходит на фоне постоянного усложнения не только отдельных физических и программных компонентов, но и лежащих в их основе концепций и идей. Появилась надобность создавать все более большие сложные программы.
ПОСТАНОВКА ЗАДАЧИ 6
ВВЕДЕНИЕ 7
1. ОБЩАЯ ЧАСТЬ 8
1.1. Обзор состояния вопроса 8
1.2. Основные этапы разработки программных продуктов 11
1.2.1. Концептуализация 12
1.2.2. Анализ разрабатываемого приложения 14
1.2.3. Проектирование разрабатываемого приложения 16
1.2.4. Эволюция приложения 17
1.2.5. Сопровождение приложения 19
1.3. Технологии разработки программных продуктов 20
1.3.1. Объектно-ориентированное программирование 20
1.3.2. Технология .NET 21
1.3.2.1. Компоненты .NET 23
1.3.2.2. Двоичный стандарт компонентов 25
2. СПЕЦИАЛЬНАЯ ЧАСТЬ 27
2.1. Разработка программы 27
2.1.1. Анализ разрабатываемого приложения 27
2.1.2. Проектирование разрабатываемого приложения 34
2.2. Языки программирования 35
2.3. Выбор языка программирования 37
2.4. Применение графиков в решении уравнений 38
3. ЭКОНОМИЧЕСКАЯ ЧАСТЬ 41
3.1. Исходные данные 41
3.2. Применяемые формулы с расшифровкой условных обозначений 42
3.3. Расчет полной себестоимости разработки программного
продукта по базовому варианту 45
3.4. Расчет полной себестоимости разработки программного
продукта по эксплуатационному варианту 46
3.5. Расчет полной себестоимости разработки программного
продукта по варианту разработки 57
3.6. Расчет экономической эффективности внедрения
программного продукта 48
3.7. Социально-психологические аспекты
использования разработки 50
4. ЭКСПЛУАТАЦИЯ ТЕХНИЧЕСКИХ И ПРОГРАММНЫХ
СРЕДСТВ 51
4.1. Эксплуатация технических средств 51
4.2. Эксплуатация разработанной программы 52
ЗАКЛЮЧЕНИЕ 54
СПИСОК ЛИТЕРАТУРЫ 55
ПРИЛОЖЕНИЕ 56
2. СПЕЦИАЛЬНАЯ
ЧАСТЬ
2.1.
Разработка программы
2.1.1.
Анализ разрабатываемого приложения
Имеет смысл создать два простых класса для работы с векторами и матрицами(class Vector и class Matrix). Для этого надо провести небольшой анализ, в процессе которого надо рассмотреть роли и обязанности данных абстракций (абстракция – это существенные характеристики объекта, которые отличают его от всех других объектов и четко определяют его концептуальные границы для наблюдателя). Класс Vector ответственен за операциями с векторами (сложение, вычитание, умножение, деление). Класс Matrix ответственен за операциями с матрицами (двумерные таблицы чисел). Также он ответственен за операции сложение, умножение, вращения вокруг осей X, Y, Z и операцию переноса. Определив поведение данной абстракции с точки зрения пользователя, нужно четко разделить интерфейс класса и его реализацию. Основная идея состоит в том, чтобы сначала определить внешний интерфейс каждого класса, не задумываясь при этом об особенностях его внутреннего строения.
Таким образом абстракция классов Vector и Matrix выглядит как показано на рис.2.1:
Имя:
Vector
Ответственность:
Выполнение операций с векторами.
Операции:
operator + Сложение
operator - Вычитание
operator * Умножение
operator / Деление
Атрибуты:
x,
y, z координаты вектора
Имя:
Matrix
Ответственность:
Выполнение операций с матрицами.
Операции:
operator + Сложение
operator * Умножение
RotateX поворот вокруг оси X
RotateY поворот вокруг оси Y
RotateZ поворот вокруг оси Z
Атрибуты:
X[4][4]
таблица чисел
Рис.2.1
Абстракция классов Vector и Matrix
Введенную функцию необходимо считать с элемента управления TextBox в строковую переменную. И так как необходимо строковое выражение преобразовать в алгебраическое выражение выделяется новая абстракция. Для этого создается новый класс, который мог бы реализовать данное преобразование. Экземпляр класса должен найти в строке числа и преобразовать их в вещественный тип, также он должен все неизвестные (х или x и y) преобразовать в соответствующие числа из заданного пользователем интервала. Далее он должен распознавать следующие знаки: ‘( )’, ‘*’, ‘/’, ‘+’, ‘-’, ‘^’(степень),’| |’(модуль). Также должен выявлять sin(…), cos(…), tg(…), ctg(…).
Таким образом абстракция класса SintaxAnalyser выглядит как показано на рис.2.2:
Имя:
TextAnalyser
Ответственность:
Преобразование текстового выражения в алгебраический вид и вычисление полученного выражения
Операции:
XorY определяет указывает ли в текущей индекс строки на X или Y и если указывает, то функция возвращает соответствующее значение число, в противном случае код ошибки.
Number определяет указывает ли текущей индекс строки на число и если указывает, то функция возвращает это число, в противном случае код ошибки.
FindMulDel осуществляет поиск первого знака ‘*’ или ’/’
FindSumSub осуществляет поиск первого знака ‘+’ или ’-’
FindBrackets осуществляет поиск скобок в выражении
CalculateMulDel осуществляет умножение и деление
CalculateSumSub осуществляет сложение и вычитание
Function высчитывает все выражение полностью
Рис.2.2
Абстракция класса SintaxAnalyser
Следует
создать класс для
Таким образом абстракция класса Camera выглядит как показано на рис.2.3:
Имя:
Camera
Ответственность:
Для того, чтобы “увидеть” график.
Операции:
InitCamera инициализируются параметры камеры
BuildCamera
создание матрицы
вида графика и
осей
Рис.2.3
Абстракция класса Camera
Следует создать класс, который реализовал бы возможность вычисления координат заданной функции. Также этот класс должен отвечать за хранение и преобразования локальных координат в координаты экрана. Он должен хранить следующие характеристики графика: положение в пространстве, максимальное и текущее количество координат, начало, конец и шаг интервала, масштаб графика. Также этот класс должен иметь объект Axes и Camera. Под преобразованием координат имеется ввиду изменение координат врезультате поворотов, вращении, переносов в пространстве, масштабировании. Для описании формы графических объектов, задания расположения объектов в пространстве и их проекций на экран дисплея используются различные системы координат(СК). Локальная СК представляет собой координата объекта в своей локальной СК. Т.е. центр объекта находится в начале координат. Также в этой СК осуществляется повороты объекта. Мировая СК это реальные координаты объекта в пространстве. В этой СК осуществляется перемещение и масштабирование объектов. Видовая СК(координаты камеры) нужна для того чтобы увидеть объект в мировых координатах. Экранная СК нужны для того чтобы спроецировать объекты на экран.
Таким образом абстракция класса Object выглядит как на рис.2.4 (cм. Приложение):
Имя:
Object
Ответственность:
Вычисление локальных и экранных координат.
Операции:
Calculate2D вычисление координат функции от одной неизвестной
Calculate3D вычисление координат функции от двух неизвестных
InitGraph инициализация графика
Build_XYZ_Rotation создание матрицы поворота графика и осей
TransformGraph преобразование координат для поворота графика
Local_To_World_Object преобразование координат в мировые координаты
World_To_Camera_Object преобразование координат в координаты камеры
Camera_To_Screen_Object преобразование координат в координаты экрана
MainGraph выполняет полное преобразования
Атрибуты:
num_vertices количество вершин
world_pos положение графика в мировой СК
vlist_local локальные координаты графика
vlist_trans преобразованные координаты графика
begin, end, step начало, конец и шаг интервала
scale
масштаб графика
Рис.2.4
Абстракция класса Object
Для вычисления координат осей координат с метками, с названиями осей, следует создать следующий класс Axes. Этот класс должен иметь следующую функциональность: координатные оси должны вращаться вместе с графиком функции, метки на координатных осях должны масштабироваться вместе с графиком функции. Также он должен уметь вычислять координаты координатной сетки.
Таким образом абстракция класса Axes выглядит как на рис.2.5:
Имя:
Axes
Ответственность:
Вычисления координат осей координат.
Операции:
InitLoopAxisX вычисление вычисление координат меток на оси X при повороте
InitLoopAxisY вычисление вычисление координат меток на оси Y при повороте
InitLoopAxisZ вычисление вычисление координат меток на оси Z при повороте
ChangeScaleLoopAxis
вычисление координат
меток при масштабировании
координатных осей
Рис.2.5
Абстракция класса Axes
Для определения свойств графика следует создать класс GraphicProperty. Этот класс будет отвечать определение таких свойств как четность/нечетность функции, область определения и область значения функции.
Таким
образом абстракция класса GraphicProperty
выглядит как на рис.2.6:
Имя:
GraphicProperty
Ответственность:
Определения свойств графика.
Операции:
CheckedParity проверка на четность/нечетность функции
Range определение области значения функции
Domain_of_function определение области определения функции
Рис.2.6
Абстракция класса GraphicProperty
2.1.2.
Проектирование разрабатываемого приложения
На этапе проектирования нужно четко определить архитектуру проекта. Это даст стабильный фундамент, на основе которого будут строиться функциональные части системы.
В разделе анализ выявлена несколько абстракций Vector и Matrix, которые отвечают за операции по вычислению координат. Для вывода графика на экран создан класс Object. Этот класс будет наделен такими методами как вычисление, преобразование координат и другими вспомогательными методами для вывода графика на экран.
Далее создается класс для работы с камерой. Этот класс будет отвечать за преобразование мировых координат в видовые. Также в его обязанности входит присвоить начальные значения параметрам камеры.
Класс SintaxAnalyser создан для преобразования тестового выражения в алгебраическое и вычислении этого алгебраического выражения
Ниже
на рис.2.7 приведена диаграмма структуры
классов программы построения графиков
функций.
Рис.2.7 Диаграмма структуры
классов программы построения графиков
функций
2.2. Языки программирования
В настоящее время насчитывается более двух тысяч языков
программирования высокого уровня. Большинство этих языков возникло исходя из конкретных требований некоторой предметной области. Каждый новый язык позволял переходить ко все более и более сложным задачам. На каждом новом приложении разработчики языков что-то открывали для себя и изменяли свои представления о существенном и несущественном в языке. На развитие языков программирования значительное влияние оказали достижения теории вычислении, которые привели к формальному пониманию семантики операторов, модулей, абстрактных типов данных и процедур.