Достигается определенный уровень абстракции, что помогает при разработке сложных программ, т.к. позволяет идти от простого к сложному, от общего к частному, а также приводит к такому мощному средству создания классов, как наследование.
Возможность позднего связывания приводит к более гибкой манипуляции данными, т.к. позволяет использовать одни и те же действия при работе с объектами, которые отличаются некоторыми характеристиками, но имеют общие свойства (полиморфизм).
Данная программа написана в среде Delphi 5 в соответствии с основными принципами объектно-ориентированного программирования; объектный стиль программирования фиксирует поведение реального мира таким способом, при котором детали его реализации скрыты.
При проектировании сложной программной системы необходимо составлять ее из небольших подсистем, каждую из которых можно отладить независимо от других. В этом случае при разработке любого уровня системы нам необходимо будет одновременно держать в уме информацию лишь о немногих ее частях. Существуют два способа декомпозиции сложной программной системы:
- алгоритмическая декомпозиция - разделение алгоритмов по методу «сверху вниз» и соответствует структурному проектированию, где каждый модуль системы выполняет один из важных этапов общего процесса. Результат структурного проектирования можно представить в виде дерева подпрограмм.
- объектно-ориентированная декомпозиция - в качестве критерия декомпозиции системы используется принадлежность ее элементов к различным абстракциям данной предметной области.
Программа состоит из основного модуля Unit1, осуществляющего синхронизацию процесса обработки данных и взаимодействие конкретных экземпляров конкретных объектов; подключаемого модуля Unit2, в котором содержится класс Form2, с помощью которого задается размер рисунка; подключаемого модуля Unit3, в котором содержится класс Form3, с помощью которого выводится окно “О программе…”.
Модуль Unit1 просто дополненять и модифицировать. В частности, не представляет никаких затруднений добавить новые виды инструментов, добавив их в тип TDrawingTool и задав для них соответствующие действия в процедуре DrawShape.
DrawShape является наиболее функцмональной процедурой и управляет работой практически всей системы. События происходят в зависимости от выбранного инструмента( это отражается в переменной Drawingtool). События OnMouseDown, OnMouseMove, OnMouseUp вызывают процедуру и далее она производит все действия. При нажатии кнопки мыши(OnMouseDown) начинается прорисовка графического объекта, при движении мыши(OnMouseMove) объект прорисовывается в соответствии с изменением координат указателя мыши, когда кнопку отпускают(OnMouseUp) прорисовка заканчивается.
Процедура DrawShape описана в разделе public основного класса TForm1, что позволяет использовать ее в любом модуле программы
Описание метода TForm1.DrawShape:
procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
var i:integer;
begin
with image1.Canvas do
begin
Pen.Mode :=amode;
case DrawingTool of
dtHandle: //КАРАНДАШ
begin
Pen.Mode :=pmcopy;
image1.Canvas.Pixels[topleft.x,topleft.y]:=colordialog1.Color;
image1.Canvas.LineTo(BottomRight.X, BottomRight.Y);
end;
dtLine: //РИСОВАНИЕ ЛИНИИ
begin
image1.Canvas.MoveTo(TopLeft.X, TopLeft.Y);
image1.Canvas.LineTo(BottomRight.X, BottomRight.Y);
end;
dtPolyline: //ПИРАМИДА
begin
image1.Canvas.Polyline([origin, movept, point(spinedit1.Value, spinedit2.Value)]);
end;
dtSpray: //РАСПЫЛИТЕЛЬ
begin
Pen.Mode :=pmcopy;
for i:=1 to 20 do
begin
image1.Canvas.Pixels[BottomRight.X+random(20),
BottomRight.Y+random(20)]:=colordialog1.Color;
end;
end;
dtFonty: //ВЫВОД ТЕКСТА
begin
image1.Canvas.TextOut(bottomright.x,bottomright.y,edit1.Text);
end;
dtRomb: //РОМБ
begin
image1.Canvas.MoveTo(topleft.x+((bottomright.x-topleft.x) div 2),topleft.y);
image1.Canvas.LineTo(bottomright.x, bottomright.y-((bottomright.y-topleft.y) div 2));
image1.Canvas.MoveTo(topleft.x+((bottomright.x-topleft.x) div 2),topleft.y);
image1.Canvas.LineTo(topleft.x, topleft.y+((bottomright.y-topleft.y) div 2));
image1.Canvas.LineTo(topleft.x+((bottomright.x-topleft.x) div 2),bottomright.y);
image1.Canvas.LineTo(bottomright.x, bottomright.y-((bottomright.y-topleft.y) div 2));
end;
dtRectangle: //РИСОВАНИЕ ПРЯМОУГОЛЬНИКА
image1.Canvas.Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X,
BottomRight.Y);
dtEllipse: //РИСОВАНИЕ ЭЛЛИПСА
image1.Canvas.Ellipse(Topleft.X, TopLeft.Y, BottomRight.X,
BottomRight.Y);
dtGum: //ЛАСТИК
begin
Pen.Mode :=pmcopy;
pen.Color:=clwhite;
pen.Width:=10;
image1.Canvas.Pixels[topleft.x,topleft.y]:= clwhite;
image1.Canvas.LineTo(BottomRight.X, BottomRight.Y);
end;
dtBottle: //ЗАЛИВКА
image1.Canvas.FloodFill(topleft.x,topleft.y,image1.Canvas.Pixels[topleft.x,topleft.y],
fssurface);
dtRoundRect: //РИСОВАНИЕ СКРУГЛЁННОГО ПРЯМОУГОЛЬНИКА
image1.Canvas.RoundRect(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y, (TopLeft.X - BottomRight.X) div 2,
(TopLeft.Y - BottomRight.Y) div 2);
end;
end;
end;
Полный текст всех модулей приведен в Приложении А.
Были использованы методы класса Tpicture:
LoadFromFile - загрузка изображения из файла
SaveToFile - сохранение изображения в файле,
Эти методы по умолчанию выводят диалоговые окна с помощью которых легко открывать и сохранять графические файлы.
При создании рисунка в программе используется объект Bitmap: Tbitmap, который создается конструктором Bitmap.Create, а затем уничтожается при помощи процедуры Bitmap.Free. Bitmap.Free автоматически вызывает деструктор объекта, если объект инициализирован, а если объект не создан, то деструктор не вызывается, что обеспечивает корректную работу программы.
При написании программы были соблюдены основные рекомендации стандартного оформления текстов программ. Соответствие стандартам заключается в следующем:
Составление идентификаторов производится так, чтобы по ним было понятно их основное предназначение (пример: и т.д.).
Используются «форматирующие пробелы» для повышения удобочитаемости программы.
Программа разбивается на несколько модулей, каждый из которых имеет свое функциональное назначение, при этом реализуется повторная используемость.
Использование объектно-ориентированного подхода обеспечивает расширяемость.
Устойчивость к неправильным входным данным – невозможность задания неправильных данных.
4 Руководство пользователя
Программа поставляется в виде исполняемого ЕХЕ файла, запускается под управлением ОС Windows 9X, не требует большого количества системных ресурсов. Имеет удобный пользовательский интерфейс и достаточно широкие возможности для рисования, просмотра и редактирования изображений.
Кнопки выбора инструментов снабжены пиктограммами, иллюстрирующими данный графический инструмент. Помимо этого, при нажатии на кнопку, т. е. при выборе какого-либо инструмента изменяется вид курсора. Редактор снабжен системой всплывающих подсказок.
В заголовке главного окна содержится информация о редактируемом рисунке:
имя рисунка,
путь,
размер рисунка в пикселях.
Главное меню содержит подпункты:
- создать,
открыть,
сохранить,
сохранить как,
выход.
Каждый подпункт снабжен стандартной комбинацией “горячих” клавиш, которые вызывают то или иное действие:
создать Ctrl+N,
открыть Ctrl+O,
сохранить Shift+F12,
сохранить как Ctrl+S,
выход F10.
Пункт главного меню правка содержит команды для работы с буфером:
вырезать Shift+Del,
копировать Ctrl+Insert,
вставить Shift+Incert.
Подпункт “О программе…” - содержит справку о данной программе.
При создании рисунка на экране появляется вспомогательное окно для установления требуемых размеров. При открытии или сохранении файла в стандартном диалоговом окне пользователь выбирает нужные ему данные. Для инструментов прямоугольник, прямоугольник со скругленными углами, эллипс, ромб можно определить вид заполнения внутреннего пространства, толщину контура, цвет. Для инструментов карандаш, линия, пирамида можно осуществлять выбор толщины линии, цвет. Для инструмента распылитель можно выбирать цвет. Выбор цвета сводится к выбору цвета из стандартной шестнадцатицветной палитры, либо к выбору любого из оттенков 16-битового цвета. Редактор имеет инструменты выбора цвета контура и цвета внутреннего заполнения.
В редакторе можно с большими удобствами просматривать и пересохранять существующие изображения. Эта фунция вызывается при нажатии кнопки “Просмотр и выбор”, которая делает видимой панель на которой размещены элементы “Выбор диска”, “Выбор директории”, “Выбор типа файла”, “Выбор файла”.
Основные элементы панели инструментов выполняют следующие действия:
карандаш – рисование с учётом выбранного цвета, и толщины линии;
ластик - старание любого вида рисунка
заливка – заливка выбранной области, с учётом выбранного цвета;
спрей – распыление точек в определённой области, с учётом выбранного цвета;
окружность – рисование различных окружностей и эллипсов, с учётом выбранного цвета, вида заполнения;
прямоугольник – рисование квадратов и прямоугольников, с учётом выбранного цвета, вида заполнения;
скруглённый прямоугольник – рисование квадратов и прямоугольников со скруглёнными вершинами, с учётом выбранного цвета, вида заполнения;
ромб – рисование ромбов, с учётом выбранного цвета, вида заполнения;
пирамида – рисование пирамиды, с вершиной задаваемой координатами Х и Y в правом нижнем углу редактора, с учётом выбранного цвета;
вывод текста – вывод на рисунок текста выбранного шрифта и цвета, в выбранную точку;
5 Тестирование программы
Самое реалистичное тестирование программы проходило при её отладке, при тестировании проверялись функциональные возможности подсистем и отдельных инструментов. Затем осуществлялся сбор всех инструментов и производилось системное тестирование. С целью тестирования в данном редакторе создавались графические изображения при помощи многократного использования различных инструментов. Проверялась работа редактора при изменении цвета, толщины и вида линий, а также при изменении стиля заполнения различных фигур.
В редакторе можно произвести коррекцию уже созданных файлов, содержащих растровые изображения.
Тестирование показало, что программа должным образом реагирует на события от мыши, обрабатывая их определенным способом и производя заданные действия.