Чтение онлайн

на главную - закладки

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №9
Шрифт:

{

get {return(scale);}

set {scale = value;}

}

public bool dragged figure

}

get {return(dragged);}

set {dragged = value;}

}

public Color color figure

{

get {return (color);}

set {color = value;}

}

/// <summary>

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

/// </summary>

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

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

/// <param name="у">Координата Y

характерной точки

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

public Figure(int x, int y)

{

center = new Point(x,y);

scale = 1;

dragged = false;

color = Color.ForestGreen;

}

/// <summary>

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

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

/// require: true;

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

/// х = old(x) + а; у = old(у) + Ь;

/// </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>

/// рисование фигуры в окне, передающем объекты g и реп

/// </summary>

/// <param name="g"> графический объект, методы которого

/// рисуют фигуру</param>

/// <param name="pen">перо рисования</param>

public abstract void Show(Graphics g, Pen pen,

Brush brush);

public abstract System.Drawing.Rectangle Region_Capture;

}

Абстрактный класс, относящийся к этапу проектирования системы, вместе с тем является важнейшим элементом заключительного семейства классов. В этом проявляется мощь объектно-ориентированного подхода к разработке программных систем. Заметьте, на данном уровне большая часть текста представляет документацию, являющуюся неотъемлемой частью программного проекта. Документация записана в тегах <summary>, что позволяет автоматически ее извлечь и сохранить в виде XML-отчета.

Классы семейства геометрических фигур

Приведем теперь

программные коды классов, являющихся потомками класса Figure.

Класс Ellipse

Вот программный код этого класса:

using System;

using System.Drawing;

namespace Shapes

{

/// <summary>

/// Класс Ellipse — потомок класса Figure.

/// </summary>

public class Ellipse: Figure

{

int axisA,axisB;

Rectangle rect;

public Ellipse (int A, int B, int x, int у): base(x,у)

{

axisA = A; axisB = B;

rect =Init;

}

public override void Show(Graphics g, Pen pen, Brush brush)

{

rect = Init;

g. DrawEllipse(pen,rect);

g. FillEllipse (brush, rect);

}

public override Rectangle Region_Capture

{

rect = Init ;

return rect;

}

Rectangle Init

{

int a =Convert.ToInt32(axisA*scale);

int b =Convert.ToInt32 (axisB*scale);

int leftupX = center.X — a;

int leftupY = center.Y — b;

return (new Rectangle(leftupX,leftupY,2*a,2*b));

}

}

}

Класс Circle

Этот класс является потомком класса Ellipse:

using System;

using System.Drawing;

namespace Shapes

{

/// <summary>

/// Класс Circle — потомок класса Ellipse.

/// </summary>

public class Circle: Ellipse

{

public Circle (int radius,int x, int y):base(radius,radius,x,y)

{

// Круг — это эллипс с равными полуосями (радиусом круга)

}

}

}

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

Класс LittleCircle

Этот класс, задающие маленькие кружочки фиксированного радиуса, в свою очередь, является наследником класса Circle. Устроен он также чрезвычайно просто:

using System;

namespace Shapes

{

/// <summary>

/// Класс LittleCircle — потомок класса Circle.

/// </summary>

public class LittleCircle: Circle

{

public LittleCircle(int x,int y): base(4,x,y)

Поделиться:
Популярные книги

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Прорвемся, опера! Книга 3

Киров Никита
3. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера! Книга 3

Черный Маг Императора 9

Герда Александр
9. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 9

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Мастер 7

Чащин Валерий
7. Мастер
Фантастика:
фэнтези
боевая фантастика
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Мастер 7

Тактик

Земляной Андрей Борисович
2. Офицер
Фантастика:
альтернативная история
7.70
рейтинг книги
Тактик

Гридень 2. Поиск пути

Гуров Валерий Александрович
2. Гридень
Детективы:
исторические детективы
5.00
рейтинг книги
Гридень 2. Поиск пути

Свет Черной Звезды

Звездная Елена
6. Катриона
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Свет Черной Звезды

Возвышение Меркурия. Книга 3

Кронос Александр
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 3

Птичка в академии, или Магистры тоже плачут

Цвик Катерина Александровна
1. Магистры тоже плачут
Фантастика:
юмористическое фэнтези
фэнтези
сказочная фантастика
5.00
рейтинг книги
Птичка в академии, или Магистры тоже плачут

Инквизитор тьмы 3

Шмаков Алексей Семенович
3. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор тьмы 3

Старая дева

Брэйн Даниэль
2. Ваш выход, маэстро!
Фантастика:
фэнтези
5.00
рейтинг книги
Старая дева

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой