Abstrakt sinflar Abstrakt sinf tushunchasi. Abstrakt sinfdan foydalanish zarurati


Download 0.54 Mb.
bet3/8
Sana19.06.2023
Hajmi0.54 Mb.
#1600183
1   2   3   4   5   6   7   8
Bog'liq
8-Abstrakt sinflar

Abstrakt xususiyatlar.
Abstrakt xususiyatlardan foydalanishni ta'kidlash kerak. Ularni aniqlash avtomatik xususiyatlarni belgilashga o'xshaydi. Masalan:
abstract class Person
{
public abstract string Name { get; set; }
}
class Client : Person
{
private string name;
public override string Name
{
get { return "Mr/Ms. " + name; }
set { name = value; }
}
}
class Employee : Person
{
public override string Name { get; set; }
}

Person sinfi Name abstrakt xossasini belgilaydi. Bu avtoxususiyatga o'xshaydi, lekin u avtoxususiyat emas. Ushbu xususiyatni amalga oshirish shart emasligi sababli, u faqat bo'sh get va set bloklariga ega. Xosila sinflarda biz bu xususiyatni to'liq xususiyatga aylantirish uchun (Client sinfidagi kabi) yoki uni avtomatik (Employee sinfidagi kabi) qilishimiz mumkin.


Abstrakt a'zolarni amalga oshirishdan bosh tortish
Xosila sinf asosiy sinfning barcha abstrakt a'zolarini amalga oshirishi kerak. Biroq, biz amalga oshirishni to'xtatishimiz mumkin, ammo bu holda xosila sinf ham abstrakt sifatida belgilanishi kerak:
abstract class Person
{
public abstract string Name { get; set; }
}
abstract class Manager : Person
{
}


Abstrakt sinfga misol.
Geometrik figuralar tizimi xrestomatikga misol bo'la oladi. Aslida, bunday geometrik shakl yo'q. Doira, to'rtburchak, kvadrat bor, lekin oddiygina raqam yo'q. Biroq, aylana ham, to'rtburchak ham umumiy narsaga ega va ular shakllardir:
// abstrakt shakllar sinfi
abstract class Figure
{
// perimetrni olishning abstrakt usuli
public abstract float Perimeter();
// yuzani olishning abstrakt usuli
public abstract float Area();
}
// to'rtburchakning hosila sinfi
class Rectangle : Figure
{
public float Width { get; set; }
public float Height { get; set; }
public Rectangle(float width, float height)
{
this.Width = width;
this.Height = height;
}
// perimetrni qayta hisoblash qayta belgilash
public override float Perimeter()
{
return Width * 2 + Height * 2;
}
// yuzani qayta hisoblash uchun qayta belgilash
public override float Area()
{
return Width * Height;
}
}
Masalan. Aytaylik, siz ba'zi shakllarni tavsiflovchi Figure tayanch sinfini ishlab chiqishingiz kerak. Shakllarning yanada aniqroq qo'llanilishi ushbu sinfdan meros bo'lishi kerak: 1-rasmda ko'rsatilganidek, uchburchak (Triangle), doira (Circle), to'rtburchak (Rectangle).
Area() usuli rasmning maydonini aniqlaydigan sinf ierarxiyasiga kiritilsin. Figure asosiy sinfida va hosila sinflarida Area() usuli chaqirilganda polimorfizmdan foydalanadi.
Area() usulini xosila sinflarda (Triangle, Circle, Rectangle) amalga oshirish juda oddiy. Ushbu xosila sinflarning har biri hududni aniqlashning har xil usuliga ega. Biroq, Figure tayanch sinfining Area() usuli uchun maydonni aniqlashning iloji yo'q, chunki bu bosqichda maydonni qaysi raqam uchun hisoblash hali ma'lum emas. Shuning uchun Area() usulini amalga oshirish (tanasi) mantiqiy emas. Bunday usulni abstract kalit so'zi bilan abstrakt deb e'lon qilish tavsiya etiladi. Avtomatik ravishda Figure sinfi ham abstrakt bo'ladi.

1-rasm. Abstrakt sinflardan foydalanish zarurati.
Figure sinfidagi Area() usuli abstraktdir.

Download 0.54 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8




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