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

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

///</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 y ): base(x,y)

{

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)

{

// маленький круг радиуса 4

}

}

}

Класс Rect

Этот класс является еще одним прямым потомком класса Figure:

using System;

using System.Drawing; namespace Shapes

{

///<summary>

///Класс Rect - потомок класса Figure.

///</summary>

public class Rect:Figure

{

int sideA, sideB; Rectangle rect;

public Rect(int sideA,int sideB, int x, int y): base(x,y)

{

this.sideA = sideA; this.sideB = sideB; rect =Init();

}

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

{

rect = Init(); g.DrawRectangle(pen,rect); g.FillRectangle(brush,rect);

}

public override Rectangle Region_Capture()

{

rect = Init(); return rect;

}

Rectangle Init()

{

int a =Convert.ToInt32(sideA*scale); int b =Convert.ToInt32(sideB*scale); int leftupX = center.X - a/2;

int leftupY = center.Y - b/2;

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

}

}

}

Класс Square

Квадрат - это частный случай прямоугольника. Соответствующий класс является потомком класса Rect:

using System; namespace Shapes

{

///<summary>

///Класс Square - потомок класса Rect.

///</summary>

public class Square:Rect

{

public Square(int side, int x, int y): base(side,side,x,y)

{

//квадрат - это прямоугольник с равными сторонами

}

}

}

Класс Person

Этот класс является прямым потомком класса Figure. Вместе с тем, класс является клиентом трех других классов семейства - Circle, Rect и LittleCircle, поскольку элементы фигуры, составляющие человечка, являются объектами этих классов%

namespace Shapes

{

///<summary>

///Класс Person - потомок класса Figure,

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