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

Автор: admin | 20 Июнь 2008 – 21:59 -


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

Приведем теперь программные коды классов, являющихся потомками класса 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,

/// клиент классов Circle, Rect, LittleCircle.

/// </summary>

public class Person:Figure

{

int head_h;

Circle head;

Rect body;

LittleCircle nose;

public Person(int head_h, int x, int y): base(x,y)

{

//head_h – радиус головы, x,y – ее центр.

//остальные размеры исчисляются относительно

//размера головы.

this.head_h = head_h;

head = new Circle(head_h,x,y);

int body_x = x;

int body_y = y + 3*head_h;

int body_w =2*head_h;

int body_h = 4*head_h;

body = new Rect(body_w, body_h, body_x,body_y);

nose = new LittleCircle(x+head_h +2, y);

}

public override void Show(System.Drawing.Graphics g,

System.Drawing.Pen pen, System.Drawing.Brush brush)

{

int h = Convert.ToInt32(head_h*scale);

//head

int top_x = center.X – h;

int top_y = center.Y – h;

g.DrawEllipse(pen, top_x,top_y, 2*h,2*h);

g.FillEllipse(brush, top_x,top_y, 2*h,2*h);

//body

top_y += 2*h;

g.DrawRectangle(pen, top_x,top_y, 2*h,4*h);

g.FillRectangle(brush, top_x,top_y, 2*h,4*h);

//nose

top_y -=h;

top_x += 2*h;

g.DrawEllipse(pen, top_x,top_y, 8,8);

g.FillEllipse(brush, top_x,top_y, 8,8);

}

public override System.Drawing.Rectangle

Region_Capture()

{

int h = Convert.ToInt32(head_h*scale);

int top_x = center.X – h;

int top_y = center.Y – h;

return new

System.Drawing.Rectangle(top_x,top_y,2*h,2*h);

}

}

}


Tags: , , , , , , , , , , , , , ,
Находится в Учебник | No Comments »

Ответить

Вы должны быть в системе, дабы комментировать.


C# — язык программирования, сочетающий объектно-ориентированные и аспектно-ориентированные концепции. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств вроде Visual Studio. лепной декор. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к С++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков С++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).