1. Разработка и анализ технического задания
1.1 Цель и назначение разработки
Целью разработки является создание элемента управления для отображения карт, представляющих собой векторные изображений в формате EPS (Encapsulated PostScript), удобного и простого в использовании. Работа векторными картами предоставляет возможность визуального представления информации связанной с геополитикой, геологическими исследованиями.
1.2 Основание разработки
Основанием для разработки данного элемента управления послужила тема выбранная мной в качестве выпускной квалификационной работой бакалавра. Данная тема была выбрана исходя из личного интереса к данной тематике, а также реального применения результатов моей работы в процессах разработки программного обеспечения.
1.3 Область применения
Данный комплекс элементов управления может использоваться при разработке программного обеспечения для работы с векторными картами в формате EPS (Encapsulated PostScript).
1.4 Требования предъявляемые к проекту
-элемент управления должен обеспечивать необходимую функциональность для работы с векторными картами.
- простой и понятный интерфейс для построения приложений использующих этот элемент.
- использование современных технологий разработки программного обеспечения.
- расширяемость, возможность усовершенствования, на ряду с основным назначением.
- выводом векторных карт в формате EPS (Encapsulated PostScript), необходимо предусмотреть вывод дополнительной информации.
Элемент управления должен предоставлять следующие основные функции:
- масштабирование
- автомасштабирование в пределах видимой области
- расположение изображения в пределах видимой области
- перемещение изображения
- выделение замкнутых областей по щелчку мыши
- раскрашивание выделенной замкнутой области
- автораскрашивание
- раскрашивание с учётом дополнительной информации
1.5 Требования к программному и техническому обеспечению
Операционная система Windows XP и выше.
Microsoft.NET Framework SDK v1.1иливыше
Microsoft Visual Studio.NET 2003 иливыше
Pentium 4 1800 Мгц, 512 оперативной памяти, 2Мб на жёстком диске.
1.6 Анализ технического задания
Исходя из требований проекта и учитывая изученные на данный момент языки программирования выбор делался из следующего перечня языков: Visual Basic, Borland Delphi, Borland C++ Builder, Visual C++, Visual Studio.Net 2003 Visual C#. Язык Visual Basic очень прост в освоении но его возможности ограничены он скорее подходит для быстрого создания красивых приложений, и приложений использующих пакет Microsoft Office. Данный язык не подходит по функциональности и сложен для реализации предъявляемых требований. Borland C++ Builder представляет классический язык С++ с набором библиотек. Основным недостатком является моральное устаревание и отсутствие поддержки современных технологий. Язык С++ прекрасно переноситься на другие платформы в частности Linux но так как в Borland C++ Builder присутствуют собственные библиотеки не реализованные в других платформах что не возможно осуществить переноску даже с открытым кодом, что ставит под сомнение коммерческое использование компонента. Visual C++ тоже отличается наличием собственных библиотек что более сильно связывает его с ОС Windows. Конечно в последних версия есть поддержка Framework обозначаемая как ‘управляемый С’, но зачем использовать что-то подогнанное. По этому этот язык не подходит нам. Borland Delphi очень хороший язык. Функционален, имеются достаточные инструменты для реализации нашего проекта, в последних версия имеется поддержка технологии.Net разработанной компанией Microsoft что повышает переносимость программного обеспечения на другие платформы, конечно с реализованной технологией.Net на этой платформе. Если сравнить его с Visual C#. То видны неоспоримые преимущества последнего. Также идёт соперничество между двумя с моей точки зрения наиболее перспективными языками С# и Java. С# - это язык программирования, синтаксис которого очень похож на синтаксис Java (но не идентичен ему). Например, в С# (как в Java) определение класса состоит из одного файла (*.cs), в отличие от C++, где определение класса разбито на заголовок (*.h) и реализацию (*.срр). Однако называть С# клоном Java было бы неверно. Как С#, так и Java основаны на синтаксических конструкциях C++. Если Java во многих отношениях можно назвать очищенной версией C++, то С# можно охарактеризовать как очищенную версию Java. Синтаксические конструкции С# унаследованы не только от C++, но и от Visual Basic. Например, в С#, как и в Visual Basic, используются свойства класс сов. Как C++', С# позволяет производить перегрузку операторов для созданных вами типов (Java не поддерживает ни ту, ни другую возможность). С# — это фактически гибрид разных языков. При этом С# синтаксически не менее (если не более) чист, чем Java, так же прост, как Visual Basic, и обладает практически той же мощью и гибкостью, что и C++. Подводя итоги, еще раз выделим основные особенности С#.
- Указатели больше не нужны! В программах на С#, как правило, нет необходимости в работе с ними (однако если вам это потребуется, пожалуйста, возможности для работы с указателями в вашем распоряжении).
- Управление памятью производится автоматически.
- В С# предусмотрены встроенные синтаксические конструкции для работы с перечислениями, структурами и свойствами классов.
- В С# осталась возможность перегружать операторы, унаследованные от C++. При этом значительная часть возникавших при этом сложностей ликвидирована.
- Предусмотрена полная поддержка использования программных интерфейсов. Однако в отличие от классического СОМ применение интерфейсов это не единственный способ работы с типами, используя различные двоичные модули..NET позволяет передавать объекты (как ссылки или как значения) через границы программных модулей.
- Также предусмотрена полная поддержка аспектно-ориентированных программных технологий (таких как атрибуты). Это позволяет присваивать типам характеристики (что во многом напоминает COM IDL) для описания в будущем поведения данной сущности. Возможно, самое важное, что необходимо сказать про язык С#, — это то, что он генерирует код, предназначенный для выполнения только в среде выполнения. NET. Например, вы не сможете использовать С# для создания классического СОМ-сервера. Согласно терминологии Microsoft код, предназначенный для работы в среде выполнения.NET, — это управляемый код (managed code).
2. Разработка архитектуры элемента управления
При разработке архитектуры было принято решение отдельно создать элемент управления который будет служить только для отображения векторных карт и хранения данных(цвет, набор координат замкнутых областей). Дополнительные элементы управления буду выдавать лишь набор цветов(выбранных по определённому алгоритму) для раскрашивания.
2.1 Основной элемент управления
При разработке элемента управления мы будем руководствоваться принципами Объектно-Ориентированного Программирования. Основная парадигма которого гласит: “Реши какие потребуются классы обеспечь полный набор операций ля каждого класса явно вырази общность через наследование”. В результате проведения объектной декомпозиции были выделены следующие классы:
Класс «элемент управления» CntrIm который наследуется от класса UserControl который предоставляет возможности создания элементов управления. Класс CntrIm выступует как класс в котором будет осуществляться отрисовка векторных изображений и обеспечиваться доступ к хранимой информации о изображении и вложенных объектах, осуществляется получение координат замкнутых областей из файла и передачу их в экземпляр класс MyMap для объединения в замкнутые области и хранения.
Класс MyMap. Для класса CntrIm является вложенным и будет являться своего рода диспетчером управляющим картой. Будет управлять вложенными объектами, осуществлять передачу необходимых данных в обоих направлениях, отвечать за систему координат, масштабирование изображения, переключение между выделенными областями, предоставление координат для отрисовки объектов на элементе управления. В нём будет хранится коллекция объектов обозначающих замкнутые области из которых составлена карта.
Класс PathD. Смысловая нагрузка этого класса это замкнутые области на векторных картах, которыми могут быть страны, регионы и д.р. Данный класс хранит коллекцию экземпляров класса PointD. Класс PointD является вложенным для класса PathD. Данный класс также хранит описание в какой цвет будет раскрашена данная замкнутая область. Он будет обеспечивать доступ к коллекции хранимых точек из которых состоят замкнутые области.
Класс PointD. Смысловая нагрузка этого класса это точка из которых создаются замкнутые области. Этот класс предназначен лишь для хранения координат полученных из файла. Иерархия представлена на Рис. 2.1