Автор работы: Пользователь скрыл имя, 27 Мая 2013 в 04:20, курсовая работа
В настоящее время рынок программного обеспечения переполнен различными программами и редакторами, позволяющими обрабатывать и редактировать цифровые фото. Человеку, не слишком хорошо понимающему особенности тех или иных программных средств, порой очень сложно разобраться в этом многообразии софта. Однако, правильный выбор программных средств для решения конкретной задачи по обработке фотоснимков является одним из залогов успеха получения законченных фотографий.
Введение……………………………………………………………………… 5
1 Аналитический обзор литературы 7
2 Разработка алгоритма ………………………………………………………. 9
3 Разработка программного стредства 11
3.1 Описание классов 11
3.2 Диаграмма классов…………………………………………………… 16
4 Обоснование технических приемов программирования 18
5 Тестрование, эксперементальные исследования и анализ полученных результатов………………………………………………………………………...19
6 Руководство пользователя………………………………………………………28
Заключение 33
Список литературы 34
Приложение листинг программы……………..……………………………....35
Ведомость…………………………………………………………………….....
3.1 Абстрактный класс Shape
Абстрактный класс предоставляющий методы для описания фигуры. Основные методы приведены в таблице 4.
Таблица 4 – Краткое описание методов класса Core
Метод |
Описание |
public SetPenColor(Pen tmppen) |
Метод, который определяет цвет фигуры |
public SetPenWidth(Pen tmppen) |
Метод, который определяет ширину кисти |
public abstract void draw() |
Абстрактный метод который переопределяется в фигуру которую будем прорисовывать |
public virtual void PickOutMe(Graphics grph) |
Метод, который прорисовывает для фигуры рамку выделения и области перемещения, растягивания |
3.2 Абстрактный класс ShapeBuilder
Абстактный класс который реализует “Фабрику фигур”. Он переопределяется на фигуру которую будем рисовать. Всего сначала у нас 4 стандартные фигуры но еще загружаются те фигуры которые пользователи нарисовали в пред. сеансах. Абстрактный класс ShapeBuilder имеет 1 абстрактный метод CreateShape который переопределяется на нужную фигуру и строку public string namebuilder с именем фигуры.
3.3 Класс LineBuilder
Класс, наследуемый от Абстрактного класса ShapeBuilder , который является фабрикой создания линий . Класс LineBuilder содержит конструктор LineBuilder, который в свою очередь записывает название фигуры, и метод CreateShape, который является переопределением абстрактного метода CreateShape класса Shape Builder на фигуру линия.
3.4 Класс TriangleBuilder
Класс, наследуемый от Абстрактного класса ShapeBuilder , который является фабрикой создания линий . Класс TriangleBuilder
содержит конструктор
3.5 Класс RectangleBuilder
Класс, наследуемый от Абстрактного класса ShapeBuilder , который является фабрикой создания линий .Класс RectangleBuilder содержит конструктор RectangleBuilder, который в свою очередь записывает название фигуры, и метод CreateShape, который является переопределением абстрактного метода CreateShape класса Shape Builder на фигуру линия.
3.6 Класс CircleBuilder
Класс, наследуемый от Абстрактного класса ShapeBuilder , который является фабрикой создания линий .Класс CircleBuilder содержит конструктор CircleBuilder, который в свою очередь записывает название фигуры, и метод CreateShape, который является переопределением абстрактного метода CreateShape класса Shape Builder на фигуру линия.
3.7 Класс Line
Класс содержащий метод draw, который является переопределением абстрактного метода draw класса Shape Builder на фигуру линия.
3.8 Класс Rectangular
Класс содержащий метод draw, который является переопределением абстрактного метода draw класса Shape Builder на фигуру прямоугольник.
3.9 Класс Circle
Класс содержащий метод draw, который является переопределением абстрактного метода draw класса Shape Builder на фигуру эллипс.
3.10 Класс Triangle
Класс содержащий метод draw, который является переопределением абстрактного метода draw класса Shape Builder на фигуру треугольник.
3.11 Класс UserShapeBuilder
Класс, наследуемый от Абстрактного класса ShapeBuilder , который является фабрикой создания пользовательских фигур(т.е. тех фигур которые пользователи нарисовали и сохранили на предудыщих сеансах) . Класс UserShapeBuilder содержит метод SaveNameandList, который в свою очередь записывает название фигуры, а также записывает преобразованные координаты созданной фигуры. Такж класс содержит метод CreateShape, который является переопределением абстрактного метода CreateShape класса Shape Builder на пользовательскую фигуру.
3.12 Класс UserShape
Статический класс, содержащий методы для рисования пользовательской фигуры и последующей работы над ней. Основные методы приведены в таблице 9.
Таблица 9 – Краткое описание методов класса MTemplateShape
public UserShape(List<Shape> tmplist, int x, int y) |
Конструктор, который записывает list_of_shapes, образующий пользовательскую фигуру, а также ее координаты. |
public override void draw() |
Преобразование координат и |
3.13 Класс ManagerUndoRedo
Класс который реализует паттерн “Хранитель”
Таблица 10 – Краткое описание методов класса ManagerUndoRedo
public void AddNewCurrentState(List<Shape> list_of_shapes) |
Добавляет в стек текущее состояние объектов |
public void ClearStack() |
Очищение стеков |
public List<Shape> Redo() |
Возобновление последней операции |
public List<Shape> Redo()
|
Отмена последней операции |
public void SaveMementoes(string path) |
Сохранение состояния в файл |
public List<Shape> LoadMementoes(string path) |
Загрузка состояния из файла |
3.2 Диаграмма классов
4 Обоснование технических
1) Использование шаблона проектирования “фабричный метод”
Фабричный метод — порождающий шаблон проектирования, предоставляющий подклассам интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс создавать. Иными словами, Фабрика делегирует создание объектов наследникам родительского класса. Это позволяет использовать в коде программы не специфические классы, а манипулировать абстрактными объектами на более высоком уровне.
Достоинства:
-позволяет сделать код
- позволяет установить связь
между параллельными
Недостатки:
- необходимость создавать
В программе используется т.к. у нас есть множество фигур и можно в это множество пользователь может сам вписывать фигуры и фабричный метод в данном случае очень даже удобен .
2) Использование сериализации
Сериализация представляет собой процесс преобразования объекта в поток байтов с целью сохранения его в памяти, в базе данных или в файле. Ее основное назначение — сохранить состояние объекта для того, чтобы иметь возможность воссоздать его при необходимости. Обратный процесс называется десериализацией.
На этом рисунке показан общий процесс сериализации.
Объект сериализуется в поток, который переносит не только данные, но сведения о типе объекта, такие как его версию, язык и региональные параметры, а также имя сборки. Из этого потока объект можно сохранить в базе данных, файле или памяти.
3) Использование шаблона проектирования Хранитель
Поведенческий шаблон проектирования, позволяющий, не нарушая инкапсуляцию, зафиксировать и сохранить внутреннее состояния объекта так, чтобы позднее восстановить его в этом состоянии.
Существует два возможных
Классический вариант: Шаблон Хранитель
используется двумя объектами: "Создателем"
(originator) и "Опекуном" (caretaker). "Создатель"
- это объект, у которого есть внутреннее
состояние. Объект "Опекун" может
производить некоторые действия
с "Создателем", но при этом необходимо
иметь возможность откатить изменения.
Для этого "Опекун" запрашивает
у "Создателя" объект "Хранителя".
Затем выполняет
Нестандартный вариант: Отличие данного
варианта от классического заключено
в более жёстком ограничении
на доступ "Опекуна" к внутреннему
состоянию "Создателя". В классическом
варианте у "Опекуна" есть потенциальная
возможность получить доступ к внутренним
данным "Создателя" через "Хранителя",
изменить состояние и установить
его обратно "Создателю". В данном
варианте "Опекун" обладает возможностью
лишь восстановить состояние "Хранителя",
вызвав Restore. Кроме всего прочего,
"Опекуну" не требуется владеть
связью на "Хранителя", чтобы восстановить
его состояние. Это позволяет
сохранять и восстанавливать
состояние сложных
5 Тестирование, эксперементальные исследования и анализ полученных результатов
Функциональное тестирование:
При функциональном тестировании осуществляется проверка каждой команды из графического редактора, с целью проверки выполнения всех методов. Функциональное тестирование должно гарантировать работу всех элементов управления.
1)Функциональное тестирование рисования фигур:
Содержит в себе проверку на рисование всех фигур. Запускаем программу появляется окно:
После загрузки на панели стандартных фигур выберем линию. Зажимаем кнопку мыши, ведем ее по экрану и отпускаем. Получилась линия:
Аналогично проделываем все предыдущие операции со всеми остальными фигурами. Получили:
Все фигуры рисуются с любыми размерами , значит отрисовка работает.
2)Функциональное тестирование создание новой фигуры:
Запустили программу. Нажмем Shape->Add my Shape
Появилось новое окно
Н
Нарисовали фигуру из стандартных фигур, написали имя новой фигуры, нажали Save.
После этого в разделе Shape появилась новая строчка с названием новой фигуры.
Выбрав эту строчку рисуется наша новая фигура, а это значит, что процессы создание и загрузки новой фигуры произошли успешно
Выбираем фигуру, которую хотим изменить; нажимаем на нее двойным кликом. Вокруг нее должно появиться выделение с двумя прямоугольниками для изменения.
Чтобы изменить размер ставим курсор на прямоугольник в углу области выделения, а затем тянем за него в любую сторону, в зависимости от того, как мы хотим изменить размер.
Растягивание овала вниз
Для перемещения фигуры, необходимо зажать маленький прямоугольник в центре фигуры и потянуть фигуру куда нам необходимо.
При клике на левую синюю стрелку (отмена последней операции) Овал вернется туда, откуда был перенесен:
При выборе правой стрелки вернется туда, куда мы ее перемещали:
Полное тестирование:
Полное тестирование
выполняется после успешного
завершения функционального тестирования,
продемонстрировавшего
Полное тестирование должно показать работу программного продукта с момента запуска до завершения с иллюстрацией реакций программы на некорректные действия пользователя.
При проведении
тестирования был выполнен конкретный
пример действий пользователя и описаны
результаты, которые должны быть получены
при работе программного продукта.
Были описаны все возможные действия
пользователя и реакции программного
продукта, которые были ожидаемы и
соответствовали
6 Руководство пользователя
Рассмотрим последовательность команд,
необходимых выполнять
Сначала нужно выбрать фигуру которую пользователь хочет нарисовать (с панели или из меню Shape)
Затем переместить курсор в точку с которой начнет рисовать и зажав левую кнопку мышки начать тянуть в конечную точку
Если пользователь решил создать фигуру то ему нужно выбрать пункт меню Shape->Add my shape. Появится новое окно:
Н
Нужно нарисовать нужную фигуру из стандартных фигур при этом если пользователь случайно ошибся, нарисовав не ту фигуру, пусть нажмет на Clear и попробует снова. Чтобы сохранить фигуру, нужно нажать на кнопку Save:
После этого в разделе Figure появилась новая строчка с названием новой фигуры.
Если пользователь решил
отредактировать уже
Информация о работе Построение и обработка графических объектов