Mirzo Ulug‘bek nomidagi O‘zbekiston Milliy universiteti Jizzax filiali “Amaliy matematika” fakulteti



Download 33,58 Kb.
bet1/5
Sana31.12.2021
Hajmi33,58 Kb.
#237951
  1   2   3   4   5
Bog'liq
4-Mustaqil ish



Mirzo Ulug‘bek nomidagi
O‘zbekiston Milliy universiteti Jizzax filiali
“Amaliy matematika” fakulteti

Amaliy matematika va informatika” yo`nalishi



101-19 guruh talabasi Boltayeva Maftunaning

Dasturlash texnologiyalari fanidan tayyorlagan

MUSTAQIL ISHI

Mavzu: Umumlashgan sinflar ierarxiyasi.

Qabul qiluvchi: Qayumov Oybek

Jizzax-2021

Mavzu: Umumlashgan sinflar ierarxiyasi.





  1. Kirish.

1.1. Mavzuning dolzarbligi;

1.2. Mavzuning maqsad va vazifalari;



  1. Asosiy qism.

2.1. Bir nechta umumiy parametrlardan foydalanish

2.2. Umumlashtirilgan usullar



3. Yakuniy qism.

3.1. Xulosa;

3.2.Foydalangan adabiyotlar;

Umumiy sinflar umumiy bo'lmagan sinflar singari sinf ierarxiyasiga kiritilishi mumkin. Shuning uchun umumiy sinf asos yoki olingan sinf vazifasini bajarishi mumkin. Umumiy va umumiy bo'lmagan sinflar ierarxiyalarining asosiy farqi shundaki, avvalgi holatda umumiy bazaviy sinf talab qiladigan tip argumentlari konstruktor argumentlari singari ierarxiyadagi barcha olingan sinflar tomonidan o'tkazilishi kerak.

Umumiy tayanch sinfidan foydalanish

Quyida umumiy tayanch sinfidan foydalanadigan iyerarxiyaning oddiy misoli keltirilgan.

// Umumiy sinflarning oddiy ierarxiyasi,

tizim yordamida;

// Umumlashtirilgan asosiy sinf,

sinf Gen {

T ob;

ommaviy Gen (T o) {



ob = o;

}

// ob qiymatini qaytaring.



ommaviy T GetOb () {

qaytish ob;

}

}

// Gen-dan olingan sinf.



sinf Gen2 : Gen {

ommaviy Gen2 (T o): asos (o) {

// ...

}

}



sinf GenHierDemo {

statik bo'shliq Asosiy () {

Gen2 g2 = yangi Gen2 ("Salom");

Console.WriteLine (g2.GetOb ());

}

}

... Bu shuni anglatadiki, olingan sinf umumiy bo'lishiga hojat bo'lmasa ham, har doim olingan sinf o'zining umumiy asosiy klassi talab qiladigan tip parametrlarini ta'minlashi kerak.



Albatta, agar kerak bo'lsa, siz o'zingizning turdagi parametrlarni olingan sinfga erkin qo'shishingiz mumkin. Masalan, quyida Gen2 sinfining o'ziga xos parametr parametriga ega bo'lgan oldingi sinf iyerarxiyasining varianti keltirilgan.

// Olingan sinfga o'zingizning parametr parametrlarini qo'shishga misol,

tizim yordamida;

// Umumlashtirilgan asosiy sinf,

sinf Gen {

T ob; // T tipidagi o'zgaruvchini e'lon qilish

// Konstruktorga T. tipidagi ma'lumotnomani yuboring.

ommaviy Gen (T o) {

ob = o;

}

// ob qiymatini qaytaring.



ommaviy T GetOb () {

qaytish ob;

}

}

// Gen-dan olingan sinf. Ushbu sinfda



// V tipdagi ikkinchi parametrni belgilaydi.

Gen2 sinfi: Gen {

V ob2;

ommaviy Gen2 (T o, V o2): asos (o) {



ob2 = o2;

}

ommaviy V GetObj2 () {



return ob2;

}

}



// Gen2 sinf ob'ektini yarating.

GenHierDemo2 sinfi {

statik bo'shliq Asosiy () {

// Parametrlar bilan Gen2 sinf ob'ektini yarating

// string va int tipidagi.

Gen2 x =

yangi Gen2 ("Qiymat:", 99);

Console.Write (x.GetOb ());

Console.WriteLine (x.GetObj2 ());

}

}



Sinf iyerarxiyasining ushbu variantida quyida Gen2 sinf deklaratsiyasiga e'tibor bering.

Gen2 sinfi: Gen {

Ushbu deklaratsiyada T - asosiy Gen sinfiga o'tgan tur; va V - bu Gen2 olingan sinfiga xos tur. B2 ob'ekti e'lon qilish uchun va GetObj2 () usulining qaytish turi sifatida ishlatiladi. Main () usulida Gen2 sinf ob'ekti satr turining T parametri va int tipidagi V parametri bilan yaratiladi. Shuning uchun yuqoridagi misoldan olingan kod quyidagi natijani beradi.

Qiymat: 99

Umumiy turlardan tashqari .NET ramkasi ham umumiy usullarni yaratishni, shuningdek genericsni ham qo'llab-quvvatlaydi. Ushbu hodisaning o'ziga xos xususiyatlarini tushunish uchun avval umumiy turlar paydo bo'lishidan oldin paydo bo'lishi mumkin bo'lgan muammoni ko'rib chiqamiz. Biz bank hisob raqamini ko'rsatish uchun sinfni aniqladik. Masalan, shunday bo'lishi mumkin:

using System;

 namespace Umumlashtirish

{

class Account



{

public int Id { get; set; }

public int Sum { get; set; }

}

class Program



{

static void Main(string[] args)

{

Console.WriteLine("Hello World!");



}

}

}



Hisob qaydnomasi klassi ikkita xususiyatni belgilaydi: Id - identifikator va Sum - hisobdagi summa.

Bu erda identifikator raqamli qiymat sifatida o'rnatiladi, ya'ni bank hisobvaraqlari 1, 2, 3, 4 va boshqalarga ega bo'ladi. Ikkala raqamli va satrli qiymatlarning ijobiy va salbiy tomonlari bor. Sinfni yozish paytida biz identifikatorni saqlash uchun nimani tanlashni yaxshiroq bilmasligimiz mumkin - satr yoki raqam. Birinchi qarashda, ushbu vaziyatdan chiqish uchun Id xususiyatini tip ob'ektining xususiyati sifatida aniqlashimiz mumkin. Ob'ekt turi universal tur bo'lib, undan barcha turlar meros bo'lib olinadi, biz ikkala satrni va raqamlarni ushbu turdagi xususiyatlarda saqlashimiz mumkin:

using System;

 

namespace Umumlashtirish



{

class Account

{

public object Id { get; set; }



public int Sum { get; set; }

}

class Program



{

static void Main(string[] args)

{

Console.WriteLine("Hello World!");



}

}

}



 

Keyinchalik ushbu sinf dasturda bank hisobvaraqlarini yaratish uchun ishlatilishi mumkin:

using System;

namespace Umumlashtirish

{

class Account



{

public object Id {get; set;}

public int Sum {get; set;}

}

class Program



{

static void Main(string[] args)

{

Account account1 = new Account { Sum = 5000 };



Account account2 = new Account { Sum = 4000 };

account1.Id = 2;

account2.Id = "4356";

int id1 = (int)account1.Id;

string id2 = (string)account2.Id;

Console.WriteLine(id1);

Console.WriteLine(id2);

}

}



}

Hammasi juda yaxshi ishlaydi, ammo bu echim juda maqbul emas. Gap shundaki, bu holda biz boxing va unboxsing kabi hodisalarga duch kelamiz.

Shunday qilib, Id xususiyatiga int tipidagi qiymatni berishda ushbu qiymat Object turiga o’rnatiladi:

account1.Id = 2; // Object tipiga int qiymatni o’zlashtirish

Ma 'lumotlarni int turidagi o'zgaruvchiga qaytarish uchun quyidagilarni ochishingiz kerak:

int id1 = (int)account1.Id; // int tipi ga qaytarish

Boxing qiymat turidagi ob'ektni (int kabi) ob'ekt turiga o'zgartirishni o'z ichiga oladi. Paketda umumiy tilni ishlatish vaqti (CLR) qiymatni System.Object tipidagi ob'ektga bog’lanadi.

Bundan tashqari, yana bir muammo bor - turlarning xavfsizligi muammosi. Shunday qilib, agar biz shunday yozsak, ish vaqtida xatolikka yo'l qo'yamiz:

Account account2 = new Account { Sum = 4000 };

account2.Id = "4356";

int id2 = (int)account2.Id;     // Istisno InvalidCastException

Biz aniq qaysi ob'ekt identifikatorni anglatishini bilmasligimiz mumkin va bu holda raqamni olishga harakat qilsak, InvalidCastException bilan duch kelamiz.

Ushbu muammolar umumiy turlarni yo'q qilishga qaratilgan edi (ko'pincha ularni umumiy turlar deb ham atashadi). Umumiy turlar sizga ma'lum bir foydalaniladigan turni belgilashga imkon beradi. Shuning uchun, Hisob sinfini umumiy deb belgilaylik:

class Account

{

public T Id { get; set; }



public int Sum { get; set; }

}

hisob qaydnomasi tavsifidagi burchakli qavslar sinfning umumiy ekanligini bildiradi va burchakli qavs ichiga olingan T tipi shu sinf tomonidan qo'llaniladi. T harfini ishlatish shart emas, u boshqa har qanday harf yoki belgilar to'plami bo'lishi mumkin. Endi biz uning qaysi turi bo'lishini bilmaymiz, har qanday tur bo'lishi mumkin. Shuning uchun burchakli qavsdagi T parametri umumiy parametr deb ham ataladi, chunki uning o'rniga har qanday turni almashtirish mumkin.

 Masalan, T parametri o'rniga int ob'ektidan, ya'ni hisob raqamini ifodalaydigan raqamdan foydalanishingiz mumkin.

using System;

namespace Umumlashtirish

{

class Account



{

public T Id { get; set; }

public int Sum { get; set; }

}

class Program



{

static void Main(string[] args)

{

Account account1 = new Account { Sum = 5000 };



Account account2 = new Account { Sum = 4000 };

account1.Id = 2; // упаковка не нужна

account2.Id = "4356";

int id1 = account1.Id; // распаковка не нужна

string id2 = account2.Id;

Console.WriteLine(id1);

Console.WriteLine(id2);

}

}



}

Hisob klassi umumiy bo'lganligi sababli, burchak nomidagi qavsdagi tur nomidan keyin o'zgaruvchini belgilashda siz universal T parametr o'rniga ishlatiladigan turni belgilashingiz kerak. Bunday holda, hisob ob'ektlari int va string turlari bilan yoziladi:

Account account1 = new Account { Sum = 5000 };

Account account2 = new Account { Sum = 4000 };

Shuning uchun birinchi account1 ob'ekti int tipidagi Id xususiyatiga ega, va account2 ob'ekti string turiga ega.

Id xususiyatining qiymatini boshqa turdagi o'zgaruvchiga berishga harakat qilsak, biz kompilyatsiya xatosiga duch kelamiz:

Account account2 = new Account { Sum = 4000 };

account2.Id = "4356";

int id1 = account2.Id;  // ошибка компиляции

Bu turdagi xavfsizlik muammolarini oldini oladi. Shunday qilib, sinfning umumiy versiyasidan foydalanib, biz bajarilish vaqtini va mumkin bo'lgan xatolarni kamaytiramiz.




Download 33,58 Kb.

Do'stlaringiz bilan baham:
  1   2   3   4   5




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish