5. Абстракт синфлар


Download 50.46 Kb.
Sana02.05.2023
Hajmi50.46 Kb.
#1420462
Bog'liq
Абстракт синфлар


5. Абстракт синфлар
Одатда виртуаль ҳадларни ўз ичига олган синфлар тўғридан тўғри фойдаланилмайди ва уларнинг виртуаль ҳадлари ҳам алоҳида реализацияга муҳтож эмас. Аниқ реализация ва уларнинг виртуаль ҳадлари фақат ҳосилавий синфларда рўй беради. Шундай қилиб, синф ўзидан ҳосил бўладиган барча ҳосилавий синфларни бажариши шарт бўлган контрактдир. Ўзида эълон қилинган методларни бажармайдиган контракт синф ҳосил қилиш учун abstract спецификаторидан фойдаланилади. Шу сабабли бундай методларга абстракт методлар деб айтилади. abstract спецификатори синф олдида туриши мумкин, худди шундай метод, хосса ва индексатор олдида ҳам туриши мумкин. abstract спецификатори билан белгиланган майдон, автоматик равишда виртуаль ҳисобланади, шунинг учун уни яна қўшимча virtual спецификатори билан белгилаш маън этилади. Абстракт синфларни аниқлашнинг умумий формати қуйидаги кўринишга эга:
abstract class синф номи
{
// синф танаси
}
Абстракт синфлардан фойдаланиб, текисликда геометрик фигуралар билан ишлаш учун синфлар иерархиясини тузамиз. Аввал Shape абстракт фигуралар синфини тузамиз, сўнгра ундан ҳосил бўлган Triangle учбурчак ва Quadrangle квадрат синфларини ҳосил қиламиз. Уларни таърифлашда 9.11 листингдаги Point нуқталар синфидан фойдаланамиз:
abstract class Shape
{
protected Point[] Coordinates;
public abstract void Draw();
}
class Triangle : Shape
{
public override void Draw()
{
Console.WriteLine("Треугольник:");
for (int i = 0; i < Coordinates.Length; i++)
Console.WriteLine("({0},{1})", Coordinates[i].X,
Coordinates[i].Y);
}
public Triangle(double X1, double Y1, double X2, double Y2,
double X3, double Y3)
{
Coordinates = new Point[3];
Coordinates[0] = new Point(X1, Y1);
Coordinates[1] = new Point(X2, Y2);
Coordinates[2] = new Point(X3, Y3);
}
}
class Quadrangle : Shape
{
public override void Draw()
{
Console.WriteLine("Четырехугольник:");
for (int i = 0; i < Coordinates.Length; i++)
Console.WriteLine("({0},{1})", Coordinates[i].X,
Coordinates[i].Y);
}

public Quadrangle(double X1, double Y1, double X2, double Y2,


double X3, double Y3, double X4, double Y4)
{
Coordinates = new Point[4];
Coordinates[0] = new Point(X1, Y1);
Coordinates[1] = new Point(X2, Y2);
Coordinates[2] = new Point(X3, Y3);
Coordinates[3] = new Point(X4, Y4);
}
}
Лист. 9.14

Дастлаб листингда Shape фигура синфини аниқлаймиз. Синф фигуранинг декарт текислигидаги битта Coordinates баландлик координатаси майдонидан ва битта абстракт Draw() методидан иборат. Кейинчалик синфнинг барча авлодлари ўзининг конкрет баландликларини чиқариш учун қайта аниқланади. Сўнгра Shape синфининг иккита авлоди ҳосил қилинади: Triangle учбурчак синфи ва Quadrangle квадрат синфи. Бу иккала синф ўзининг хусусий конструкторига эга, қайсики у мерос қилиб қолдирилган Coordinates майдонини синф заруриятига кўра инициализация қилади. Шу билан бирга бу синфлар консольга ўзининг хос баландликларини чиқариш учун Draw() методини қайта аниқлайди. Энди тузган иерархиямизни текшириш учун синф ёзамиз. У Triangle учбурчак синфи ва Quadrangle квадрат синфи объектларининг бир нечтасини ҳосил қилиши керак бўлади, сўнгра уларнинг таркибини экранга чиқаришни чақириш керак:


class Program
{
static void DrawShapes(Shape[] Shapes)
{
for (int i = 0; i < Shapes.Length; i++)
Shapes[i].Draw();
}
static void Main(string[] args)
{
Shape[] Shapes = new Shape[3];
Shapes[0] = new Triangle(11, 5, 7, 8, 2, 4);
Shapes[1] = new Quadrangle(11, 5, 7, 8, 2, 4, 4, 8);
Shapes[2] = new Triangle(133, 2, 7, 3, 2, 4);
DrawShapes(Shapes);
}
}
Лист. 9.15

Даставвал бу листингда Shape синфининг учта элементдан иборат бўлган Shapes массивини ҳосил қиламиз. Сўнгра массив элементлари шундай инициализация қилинадики, натижада уларда гетероген элементлар сақлансин. Инициализациядан сўнг массив Draw() методининг ҳар бир элементини чақирадиган DrawShapes() методига узатилади.


Программа натижаси:


Треугольник:


(11,5)
(7,8)
(2,4)
Четырехугольник:
(11,5)
(7,8)
(2,4)
(4,8)
Треугольник:
(133,2)
(7,3)
(2,4)
Вывод 9.4


Фойдаланилган адабиётлар

  1. Герберт Шилдт. Полный справочник по C# - М., издательский дом «Вильямс», 2004 г.

  2. Павловская Т. A. Программирование на языке высокого уровня .С#. Москва, 2007.

  3. Методическое пособие по курсу Основы программирования на C# 2.0 , 2007г.



Download 50.46 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling