Abstrakt sinflar


Download 89.02 Kb.
bet1/2
Sana28.12.2022
Hajmi89.02 Kb.
#1012723
  1   2
Bog'liq
d 17


Abstrakt sinflar
Oddiy darslardan tashqari C# da ham abstrakt sinflar mavjud. Ular nima uchun kerak? Sinflar odatda qandaydir ob'ekt yoki ob'ekt uchun qandaydir rejani ifodalaydi. Masalan, avtomobillarni ifodalash uchun Car sinfini yoki odamlarni ifodalash uchun Person sinfini ushbu sinflarga ushbu ob'ektlarni tavsiflovchi tegishli xususiyatlar, maydonlar va usullarni joylashtirish orqali belgilashimiz mumkin.
B
iroq, biz dasturlash tilidan foydalangan holda ifodalamoqchi bo'lgan ba'zi ob'ektlar o'ziga xos dasturga ega bo'lmasligi mumkin. Masalan, 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 raqamlardir. Va aniq amalga oshirishga ega bo'lmagan bunday ob'ektlarni tavsiflash uchun mavhum sinflar mo'ljallangan. Abstrakt sinf oddiy sinfga o'xshaydi. Bundan tashqari, o'zgaruvchilar, usullar, konstruktorlar, xususiyatlar bo'lishi mumkin. Yagona narsa shundaki, mavhum sinflarni belgilashda mavhum kalit so'z ishlatiladi. Masalan, transport vositasini ifodalovchi mavhum sinfni aniqlaymiz:
Avtomobil ma'lum bir amalga oshirishga ega bo'lmagan ba'zi bir mavhumlikni ifodalaydi. Ya'ni, mashinalar va yuk mashinalari, samolyotlar, kemalar bor, kimdir kosmik kemaga minishni yaxshi ko'radi, ammo bunday transport vositasi yo'q. Biroq, barcha transport vositalarining umumiy jihati bor - ular harakatlana oladi. Va buning uchun sinfda harakatga taqlid qiluvchi Move usuli aniqlanadi.

A
mmo mavhum sinflar va oddiy sinflar o'rtasidagi asosiy farq shundaki, biz sinfning namunasini yaratish uchun mavhum sinf konstruktoridan foydalana olmaymiz. Masalan, quyidagicha:


Biroq, mavhum sinflar olingan sinflar meros qilib olishi va foydalanishi mumkin bo'lgan ba'zi umumiy funktsiyalarni tavsiflash uchun foydalidir:


Bunday holda, Transport klassi har xil turdagi transport vositalarini ifodalovchi uchta sinfni meros qilib oladi. Biroq, ularning bir umumiy tomoni bor - ular Move() usuli yordamida ko'chirilishi mumkin.


Yuqorida mavhum sinfning konstruktoridan foydalanib, ushbu sinfning namunasini yaratish mumkin emasligi haqida yozilgan edi. Biroq, bunday sinf konstruktorlarni ham belgilashi mumkin:



Bunday holda, konstruktor mavhum Transport sinfida aniqlanadi - parametrdan foydalanib, u avtomobil nomini saqlaydigan Name xususiyatining qiymatini o'rnatadi. Va bu holda, hosila sinflar o'zlarining konstruktorlarida ushbu konstruktorni chaqirishlari kerak.

Abstrakt sinf a'zolari


Odatdagi xossalar va usullardan tashqari, mavhum sinf abstrakt kalit so'z yordamida aniqlangan va hech qanday funksionallikka ega bo'lmagan mavhum sinf a'zolariga ega bo'lishi mumkin. Xususan, mavhum bo'lishi mumkin:
Usullari

Xususiyatlari


Indekslovchilar


Ishlanmalar


Abstrakt sinf a'zolari shaxsiy modifikatorga ega bo'lmasligi kerak. Bunday holda, olingan sinf asosiy abstrakt sinfdagi barcha mavhum usullar va xususiyatlarni bekor qilishi va amalga oshirishi kerak. Olingan sinfda bekor qilinganda, bunday usul yoki xususiyat bekor qilish modifikatori bilan ham e'lon qilinadi (virtual usullar va xususiyatlarning normal bekor qilinishi kabi). Shuni ham ta'kidlash kerakki, agar sinfda kamida bitta abstrakt usul (yoki mavhum xususiyat, indeksator, hodisa) bo'lsa, u holda bu sinf mavhum sifatida belgilanishi kerak.


Mavhum a'zolar, virtual a'zolar kabi, polimorf interfeysning bir qismidir. Ammo virtual usullarda biz merosxo'r klassi amalga oshirishni meros qilib oladi desak, mavhum usullarda ushbu mavhum usullar bilan ifodalangan interfeys meros qilib olinadi.

Abstrakt usullar


Masalan, yuqoridagi avtomobil misolida Move usuli transport vositasining harakatini tasvirlaydi. Biroq, har xil turdagi transport vositalari har xil harakat qiladi - ular erda ovqatlanadilar, havoda uchadilar, suvda suzib yuradilar va hokazo. Bunday holda, biz Move usulini mavhum qilishimiz va uni hosil qilingan sinflarga amalga oshirishni kechiktirishimiz mumkin:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

abstract class Transport
{
public abstract void Move();
}
// класс корабля
class Ship : Transport
{
// мы должны реализовать все абстрактные методы и свойства базового класса
public override void Move()
{
Console.WriteLine("Корабль плывет");
}
}
// класс самолета
class Aircraft : Transport
{
public override void Move()
{
Console.WriteLine("Самолет летит");
}
}
// класс машины
class Car : Transport
{
public override void Move()
{
Console.WriteLine("Машина едет");
}
}

Ilova sinflari:



1
2
3
4
5
6
7

Transport car = new Car();
Transport ship = new Ship();
Transport aircraft = new Aircraft();
car.Move(); // машина едет
ship.Move(); // корабль плывет
aircraft.Move(); // самолет летит

Abstrakt xususiyatlar


Mavhum xususiyatlardan foydalanishga e'tibor bering. Ularning ta'rifi avtoxususiyatlarning ta'rifiga o'xshaydi. Masalan:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

abstract class Transport
{
// абстрактное свойство для хранения скорости
public abstract int Speed { get; set; }
}
// класс корабля
class Ship: Transport
{
int speed;
public override int Speed
{
get => speed;
set => speed = value;
}
}
class Aircraft : Transport
{
public override int Speed { get; set; }
}

Transport klassi avtomobil tezligini saqlashi kerak bo'lgan Tezlik mavhum xususiyatini belgilaydi. Bu avtoxususiyatga o'xshaydi, lekin bu avtoxususiyat emas. Bu xususiyat amalga oshirishga ega bo'lishi shart emasligi sababli, unda faqat bo'sh olish va o'rnatish bloklari mavjud. Olingan sinflarda biz bu xususiyatni to'liq huquqli xususiyatga aylantirish (Kema sinfidagi kabi) yoki uni avtomatik (Samolyot sinfidagi kabi) qilish orqali bekor qilishimiz mumkin.


Mavhum sinflar umumiy tushunchalar sifatida ishlatiladi, ulardan aniqroq hosila sinflarni olish mumkin. Sinfning mavhum tipidagi ob'ektni yaratish mumkin emas. Biroq, mavhum sinf turlariga ko'rsatgichlar va havolalardan foydalanishingiz mumkin.



Download 89.02 Kb.

Do'stlaringiz bilan baham:
  1   2




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