- •Разработка классов. Освоение приемов работы с графическими объектами и манипуляции ими.
- •Содержание
- •1. Теоретическая часть
- •1.1. Абстрагирование
- •1.2. О пользе абстрагирования
- •1.3. Принципы объектно-ориентированного программирования
- •1.4. Объекты и классы
- •2. Элементы класса и их особенности
- •2.1. Состав класса.
- •2.2. Уровни доступа к членам класса.
- •2.3. Конструкторы.
- •2.4. Деструкторы.
- •2.5. Члены - данные.
- •2.6. Методы.
- •2.7. Скрытый указатель с именем this.
- •3. Проектирование классов.
- •3.1. Этапы проектирования.
- •3.2. Общие рекомендации по проектированию классов.
- •3.3. Определение набора операций.
- •3.4. Определение зависимостей между классами.
- •4. Практические рекомендации по проектированию класса фигуры
- •4.1. Проектирование класса многоугольника.
- •4.2. Изменение положения.
- •4.3. Изменение формы многоугольника.
- •5. Задание на лабораторную работу.
- •6. Рекомендуемый порядок выполнения работ
- •7. Содержание отчета.
4.1. Проектирование класса многоугольника.
Прежде всего, в классе фигуры необходимо предусмотреть наличие некоторого множества элементов, каждый из которых представляет собой структуру, состоящую, по крайней мере, из двух полей данных целого типа, например, X и Y, описывающих положение каждой вершины (точки). Подобная структура может выглядеть, например, так:
struct myPoint
{
public int X, // положение точки по горизонтали
Y; // положение точки по вертикали
}
Однако, наилучшим вариантом представляется использование уже готовой структуры, встроенной в язык С# под названием – Point. Этот значительно более мощный тип, обладающий более широкими функциональными возможностями. Она содержит в себе следующие элементы:
public struct Point
{
// Конструкторы:
public Point(int dw);
public Point(Size sz);
public Point(int x, int y);
// Статические данные
public static readonly Point Empty;
// Статические методы
public static Point Add(Point pt, Size sz);
public static Point Ceiling(PointF value);
public static Point Round(PointF value);
public static Point Subtract(Point pt, Size sz);
public static Point Truncate(PointF value);
// Статические операторы
public static Point operator -(Point pt, Size sz);
public static bool operator !=(Point left, Point right);
public static Point operator +(Point pt, Size sz);
public static bool operator ==(Point left, Point right);
public static explicit operator Size(Point p);
public static implicit operator PointF(Point p);
// Свойства:
public bool IsEmpty { get; }
public int X { get; set; }
public int Y { get; set; }
// Собственные методы класса
public void Offset(Point p);
public void Offset(int dx, int dy);
// Переопределенные виртуальные методы базового класса
public override bool Equals(object obj);
public override int GetHashCode();
public override string ToString();
}
При создании класса фигуры следует предусмотреть в нем наличие некоторого хранилища для своих вершин. В качестве такого хранилища можно использовать, например, массив или список, в которых каждый элемент имеет тип, соответствующий выбранной нами структуре данных для представления вершин многоугольника. В самом общем виде, такой класс может выглядеть следующим образом:
// Листинг 1: Для класса, содержащего массив элементов точек
class Figura
{
// Данные, характеризующие свойства объектов данного класса
….
myPoint Array[30]; // Массив из 30-ти элементов типа – myPoint
int PointsNum; // Реальное количество вершин у многоугольника
public:
Figura(); // Конструктор класса
void AddPoint(int x, int y); // Добавление новой вершины в фигуру
// Другие функции, определяющие поведение объектов данного класса
…..
}
или:
// Листинг 2: Для класса, содержащего список элементов точек
class Figura
{
// Данные, характеризующие свойства объектов данного класса
….
List<Point> PointList; // Список точек
public:
Figura(); // Конструктор класса
void AddPoint(int x, int y); // Добавление новой вершины в фигуру
// Другие функции, определяющие поведение объектов данного класса
….
}
В первом варианте класса фигуры используется представление точки в виде созданной нами структуры типа myPoint и их хранилища в виде массива из ограниченного количества элементов.
Во втором варианте класса фигуры используется встроенная в язык С# структура типа Point и хранилище вершин фигуры, представленное в виде списка.
На основании анализа понятия о многоугольнике, проведенного выше, можно предложить более детальный вариант реализации его класса:
class Figura
{
// Данные, характеризующие состояние объектов данного класса:
List<Point> PointList; // Список точек (вершин многоугольника))
Color bc, // Цвет контура
fc; // Цвет закраски
public:
Figura(); // Конструктор класса
// Свойства:
public BColor
{
set{ bc=value; }
get{ return bc; }
}
public FColor
{
set{ fc=value; }
get{ return fc; }
}
public void AddPoint(int x, int y); // Добавление новой вершины в фигуру
public void Draw(Graphics g){…}; // Рисование многоугольника
public void Move(int dx, int dy){…}; // Рисование многоугольника
// Определение попадания курсора в область фигуры
public bool IsInto(int xc, int yc){…};
}