Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C# - лекции IntUit (Биллиг В.А.).pdf
Скачиваний:
140
Добавлен:
13.02.2015
Размер:
4.13 Mб
Скачать

25. Лекция: Финальный проект

Вэтой заключительной лекции новый материал появляться не будет, не будет и традиционных вопросов в конце лекции. Лекция особенная - она посвящена описанию финального проекта, в котором объединены многие, надеюсь, уже хорошо знакомые элементы.

Вфинальном проекте создается семейство классов, описывающих геометрические фигуры. Проектирование начинается с абстрактного класса поведения, который описывает общие свойства и методы, характерные для всех фигур семейства. Затем, используя наследование, создаются классы конкретных геометрических фигур, начиная

спростейших, таких, как круги и прямоугольники, до составных, таких, как класс Person. Мы добавим в наш проект динамические структуры данных, такие, как список с курсором, для хранения в нем фигур семейства. Наконец, мы создадим интерфейс, включающий меню с десятками команд и панель с инструментальными кнопками. Интерфейс позволяет конечному пользователю выполнять различные действия над геометрическими фигурами - создавать, рисовать их на форме, перемещать их с помощью команд и перетаскивать их мышью, менять их размеры и цвет, сохранять в списке и удалять из списка, отображать все фигуры списка или очистить его полностью.

Проект может служить образцом полноценного Windows-приложения, примером проектирования в классах с демонстрацией преимуществ, предоставляемых наследованием. Закончим на этом рекламную часть и приступим к делу. Хочу предупредить, вас ждут программные тексты, почти без всяких комментариев. Все нужные комментарии были даны в предыдущих лекциях. С моей точки зрения, наиболее интересная часть программистских книжек - это та, в которой приводится программный код. И значит, эта глава самая интересная.

Абстрактный класс Figure

Приведем код класса:

using System;

using System.Drawing; namespace Shapes

{

///<summary>

///Figure - это абстрактный класс; прародитель семейства

///классов геометрических фигур. Все фигуры имеют:

///центр - center, масштаб - scale. статус

///перетаскивания - dragged center - объект встроенного

///класса (структуры) Point. Этот объект задает характерную

///точку фигуры - чаще всего ее центр (тяжести)

///scale задает масштаб фигуры, первоначально единичный.

///drugged = true, когда фигура следует за курсором мыши.

///над фигурами определены операции: параллельный

///перенос - Move(a,b) масштабирование - Scale(s)

///Показ фигуры - Show. Область захвата - Region_Capture

///возвращает прямоугольник, характерный для фигуры,

///перетаскивание фигуры возможно при установке курсора

///мыши в области захвата.

///</summary>

abstract public class Figure

{

///<summary>

///закрытые для клиентов атрибуты класса - center, scale

///</summary>

protected Point center; protected double scale ;

protected bool dragged; protected Color color; //Доступ к свойствам public Point center_figure

{

get{return(center);} get {center = value;}

}

public double scale_figure

{

get{return(scale);} get {scale = value;}

}

public bool dragged_figure

{

get{return(dragged);} get {dragged = value;}

}

public Color color_figure

{

get{return(color);} set {color = value;}

}

///<summary>

///базовый конструктор фигур

///</summary>

///<param name="x">координата X характерной точки

///фигуры</param>

///<param name="y">Координата Y характерной точки

///фигуры</param>

public Figure(int x, int y)

{

center = new Point(x,y); scale = 1;

dragged = false;

color = Color.ForestGreen;

}

///<summary>

///отложенный метод

///Параллельный перенос фигуры на (a,b)

///require : true;

///ensure : для любой точки фигуры p(x,y):

///x = old(x) +a; y = old(y) + b;

///</summary>

///<param name="a">a - перемещение по горизонтали

///вправо </param>

///<param name="b">b - перемещение по вертикали

///вниз</param>

///Замечание: Для того, чтобы фигура при рисовании была

///полностью видимой, координаты всех ее точек должны

///быть в пределах области рисования.

public void Move (int a,int b)

{

center.X +=a; center.Y += b;

}

///<summary>

///изменяет масштаб фигуры

///</summary>

///<param name="s">масштаб изменяется в s раз</param> public void Scale(double s)

{

scale*=s;

}

///<summary>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]