|
Mavzu: Vorislik sinflarini yaratish va foydalanish Bajardi: M. Soqiyeva
|
bet | 3/7 | Sana | 01.12.2023 | Hajmi | 25,27 Kb. | | #109367 |
Bog'liq Mavzu Vorislik sinflarini yaratish va foydalanish Bajardi M. S-fayllar.orgSINFLARDA VORISLIK
Vorislik – bu OYD ning asosiy ustunlaridan biridir. Vorislik sinflarda ierarxik ko’rinishdagi sinflanishni ta’minlaydi. C++ terminologiyasida:
• Asos sinf (ya’ni voris olinadigan sinf ) base class (asos sinf) deb ataladi.
• Voris sinf (ya’ni voris olish orqali yaratiladigan yangi sinf) derived class (voris sinf) deb ataladi.
Voris sinf boshqa bironta sinf uchun asos sinf bo’lishi mumkin.Demak bu orqali, ko’p sathli vorislik (multiple inheritance) vujudga keladi.
Vorislikdan foydalanish
• Biron bir sinfdan Voris olingandan keyin, ushbu asos sinf a’zolari voris sinfning ham a’zolari bo’lib hisoblanadi.
• C++ dasturlash tilida voris olish umumiy formasi quyidagicha:
Vorislik olish
Vorislik olish. Merosxo'rlik (inheritance) - ob'ektga yo'naltirilgan dasturlashning muhim nuqtalaridan biri. Meros orqali bir sinf boshqa sinfning funksionalligini egallashi mumkin.
Aytaylik, bizda individual shaxsni tavsiflovchi quyidagi Person klassi mavjud:
class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public void Display()
{
Console.WriteLine(Name);
}
}
Ammo kutilmaganda bizga korxona ishchisini - Employee sinfini tavsiflovchi sinf kerak bo'ldi. Ushbu sinf Person sinfi bilan bir xil funktsiyani amalga oshirishi sababli, xodim ham shaxs bo'lganligi sababli, Employee sinfini Person sinfining lotiniga (yoki merosxo'riga yoki subklassiga) aylantirish oqilona bo'ladi, bu esa o'z navbatida asosiy sinf deb nomlanadi. sinf yoki ota-ona (yoki superklass):
class Employee : Person
{
…
}
Ikki nuqtadan so'ng biz ushbu sinf uchun asosiy sinfni ko'rsatamiz. Employee sinfi uchun Person asos bo'lib, shuning uchun Employee klassi Person sinfidagi barcha bir xil xususiyatlarni, usullarni, maydonlarni meros qilib oladi. Merosga o'tmaydigan yagona narsa bu asosiy sinf konstruktorlari.
Shunday qilib, meros _is-a (tegishli, ichida yotadi) munosabatlarini amalga oshiradi, Employee sinfining ob'ekti ham Person sinfining ob'ekti hisoblanadi:
static void Main(string[] args)
{
Person p = new Person { Name = "Tom"};
p.Display();
p = new Employee { Name = "Sam" };
p.Display();
Console.Read();
}
Hamda Employee ob'ekti ham Person ob'ekti bo'lgani uchun biz quyidagicha o'zgaruvchini aniqlashimiz mumkin: Person p = new Employee().
Odatiy bo'lib, barcha sinflar Object asosiy sinfidan meros qilib oladi, hatto biz aniq meros o'rnatmasak ham. Shuning uchun, yuqorida tavsiflangan Person va Employee sinflari, o'zlarining uslublaridan tashqari, Ob'ektlar sinfining usullariga ega bo'ladi: ToString(), Equals(), GetHashCode() va GetType().
Dastlabki holat bo'yicha barcha sinflar meros qilib olinishi mumkin. Biroq, bir qator cheklovlar mavjud:
Ko'p merosni qo'llab-quvvatlamaydi, sinf faqat bitta sinfdan meros olishi mumkin.
Hosil qilingan sinfni yaratishda, asosiy sinfga kirish turini ko'rib chiqing - olingan sinfga kirish turi asosiy sinf bilan bir xil yoki cheklangan bo'lishi kerak. Ya'ni, agar asosiy sinf internal kirish turiga ega bo'lsa, u holda olingan sinf internal yoki private kirish turiga ega bo'lishi mumkin, ammo public emas.
Shu bilan birga, shuni ham hisobga olish kerakki, agar baza va hosil qilingan sinf har xil yig'ilishlarda (loyihalarda) bo'lsa, u holda hosil bo'lgan sinf faqat public modifikatoriga ega bo'lgan sinfdan meros olishi mumkin.
Agar sealed modifikatori bilan sinf e'lon qilingan bo'lsa, u holda bu sinf meros qilib olinmaydi va hosil bo'lgan sinflarni yaratish mumkin emas. Masalan, quyidagi sinf avlodlarni yaratishga yo'l qo'ymaydi:
sealed class Admin
{
}
|
| |