Abstrakt sinflar Abstrakt sinf tushunchasi. Abstrakt sinfdan foydalanish zarurati


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


Abstrakt sinflar
1. Abstrakt sinf tushunchasi. Abstrakt sinfdan foydalanish zarurati.
Vaqti-vaqti bilan siz asosiy sinfning eng umumiy shaklini yaratishingiz kerak bo'ladi, ular xosila(meroslangan)sinflarda tafsilotlar bilan to'ldiriladi. Bunday holda, asosiy sinfning elementlari (usullar, xususiyatlar va boshqalar) juda noaniq va ularni amalga oshirish mantiqqa ega emas. Aniq amalga oshirilmagan elementlarni o'z ichiga olgan sinflar abstrakt deyiladi. Abstrakt sinfda faqat elementning umumiy harakteri e'lon qilinadi, ular meros qilib xosila sinflarda tarkib bilan to'ldiriladi.
Abstrakt sinf - bu kamida bitta abstrakt element (usul, xususiyat) e'lon qilingan sinf. Agar abstrakt element (usul, xususiyat) abstrakt sinfda e'lon qilingan bo'lsa, u holda bunday sinf nomidan oldin abstract kalit so'zi qo'yiladi. Agar xosila sinfda abstrakt sinf elementining (usuli, xossasi) aniq amalga oshirilishini aniqlash kerak bo'lsa, u holda elementni e'lon qilishda override kalit so'zi ko'rsatiladi.
Abstrakt sinf boshqa meros qilib xosila sinflar uchun asos sifatida foydalanishni ta'minlaydi. O'z navbatida, meros qilib xosila sinf asosiy abstrakt sinfning barcha abstrakt elementlarini amalga oshirishi kerak. Agar biron sababga ko'ra meros qilib xosila sinf abstrakt sinf elementlarini amalga oshirishga zarurarat bo'lmasa, unda bunday sinf ham abstrakt deb e'lon qilinishi kerak.


Abstrakt sinflar va sinf a'zolari
Oddiy sinflardan tashqari, C # tilida abstrakt sinflar mavjud. Abstrakt sinf oddiy sinfga o'xshaydi. Bundan tashqari, o'zgaruvchilar, usullar, konstruktorlar, xususiyatlar bo'lishi mumkin. Yagona narsa shundaki, abstrakt sinflarni belgilashda abstract kalit so'zi ishlatiladi:
abstract class Human
{
public int Length { get; set; }
public double Weight { get; set; }
}

Ammo asosiy farq shundaki, biz uning ob'ektini yaratish uchun abstrakt sinfning konstruktoridan foydalana olmaymiz. Masalan, quyidagicha:


Human h = new Human();

Nima uchun bizga abstrakt sinflar kerak? Aytaylik, bank sektori dasturimizda ikkita asosiy sub'ektni belgilashimiz mumkin: bank mijozi va bank xodimi. Ushbu sub'ektlarning har biri boshqacha bo'ladi, masalan, xodim uchun siz uning pozitsiyasini, mijoz uchun esa - hisobdagi miqdorni belgilashingiz kerak. Shunga ko'ra, mijoz va xodim alohida Client va Employee sinflarini tashkil qiladi. Shu bilan birga, bu ikkala ob'ekt umumiy narsaga ega bo'lishi mumkin, masalan, ism va familiya, boshqa umumiy funktsiyalar. Va bu umumiy funktsiyani alohida sinfga qo'yish yaxshiroqdir, masalan, Person, bu odamni tavsiflaydi. Ya'ni, Employee (xodim) va Client (bank mijozi) sinflari Person sinfidan kelib chiqadi. Va bizning tizimimizdagi barcha ob'ektlar bank xodimi yoki mijozni ifodalashi sababli, biz to'g'ridan-to'g'ri Person sinfidan ob'ektlar yaratmaymiz. Shuning uchun uni abstrakt qilish mantiqiy:


abstract class Person
{
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
public void Display()
{
Console.WriteLine(Name);
}
}
class Client : Person
{
public int Sum { get; set; } // hisob miqdori
public Client(string name, int sum)
: base(name)
{
Sum = sum;
}
}
class Employee : Person
{
public string Position { get; set; } // lavozim
public Employee(string name, string position)
: base(name)
{
Position = position;
}
}

Keyin biz ushbu sinflardan foydalanishimiz mumkin:


Client client = new Client("Tom", 500);
Employee employee = new Employee ("Bob", "Apple");
client.Display();
employee.Display();

Yoki, shunday:


Person client = new Client("Tom", 500);
Person employee = new Employee ("Bob", " To'lovchi");

Lekin biz Person sinfi konstruktori yordamida Person obyektini yarata olmaymiz:


Person person = new Person ("Bill");

Biroq, ob'ektni yaratish uchun biz to'g'ridan-to'g'ri Person sinfining konstruktorini chaqira olmasligimizga qaramay, abstrakt sinflardagi konstruktor muhim rol o'ynashi mumkin, xususan, hosila sinflari uchun umumiy bo'lgan ba'zi o'zgaruvchilar va xususiyatlarni ishga tushirishda. Name xususiyatining holati. Yuqoridagi misol Person konstruktorini chaqirmasa ham, Client va Employee hosila sinflari unga kirishlari mumkin.



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