10-Labaratoriya ishi Mavzu: Voris sinflarni yaratish va foydalanish.
MASHG’ULOTNING MAQSADI: C++ da voris sinflarni yaratish va foydalanishni o`rgatish.
MASHG’ULOTNING JIHОZI: Ko’rgazmali material: kompyuterning xotira qurilmalari.
MASHG’ULOT O’TISH VОSITASI: Pentium IV kоmpyuterlari (qo’shimcha qurilmalari) bilan jihоzlangan kоmpyuter sinfi.
MASHG’ULOTNING BОRISHI:
a) Guruhning va xоnaning darsga tayyorligini aniqlash.
b) Yo’qlama qilish.
c) Avvalgi mashg’ulоtlarda o’tilganlarni takrоrlash bo’yicha suhbat o’tkazish: o’tilgan mavzularni qisqacha takrоrshlash.
g) Yangi mavzuning bayoni: C# da voris sinflarni yaratish va foydalanish haqida ma’lumotlar berish.
d) Kоmpyuter xоnasida mashg’ulоt оlib bоrish. O’rganganlari ustida mashq qilish.
e) Dars yakuni: Mustaqil ish uchun individual topshiriqlarni berish.
Amaliy mashg`ulot mavzu bayoni:
Meros 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
{
}
Siz statik sinfdan sinfni meros qilib ololmaysiz.
Do'stlaringiz bilan baham: |