1-Mavzu 1-Mavzu Reja: Klass a’zolariga ruxsatni boshqarish


Download 116.94 Kb.
bet90/100
Sana02.01.2022
Hajmi116.94 Kb.
#200801
1   ...   86   87   88   89   90   91   92   93   ...   100
Bog'liq
dasturiy injinering

// Strukturani nusxalash.

using System;

// Strukturani aniqlash.

struct MyStruct {

public int x;

}

// Strukturani tayinlash.

class StructAssignment {

static void Main() {

MyStruct a;

MyStruct b;

a.x = 10;

b.x = 20;

Console.WriteLine("a.x {0}, b.x {1}", a.x, b.x);

a = b;

b.x = 30;

Console.WriteLine("a.x {0}, b.x {1}", a.x, b.x);

}

}

Bu dastur bajarilganda quyidagi natijalarni beradi.

а.х 10, b.x 20

a.x 20, b.x 30

Yuqoridagi natijalar tayinlash amalga oshirilganidan keyin

а = b;

strukturalar o'zgaruvchilari a va b hali butunlay alohida bo'lib ya`ni a o`zgaruvchi b o`zgaruvchisiga ishora emas va u bilan bog'liq emas, bundan tashqari, b  o`zgaruvchisi qiymatining bir nusxasini o'z ichiga oladi. Agar a va b o'zgaruvchilar ma'lum bir sinfning ob'ektlariga ishora qiladigan havolalar tipida bo`lganda vaziyat butunlay boshqacha bo'lar edi. Misol sifatida, quyida oldingi dasturning sinf ob'ektlariga havolalar bilan o'zgaruvchilarni tayinlash versiyasi ko'rsatilgan.

// Muayyan sinf ob'ektlariga havolalardan foydalanish.

using System;

// Sinf yaratish.

class MyClass {

public int x;

}

// Ushbu sinfning turli ob'ektlarini tayinlashni ko'rsatish.

class ClassAssignment {

static void Main() {

MyClass a = new MyClass();

MyClass b = new MyClass();

a.x = 10;

b.x = 20;

Console.WriteLine("a.x {0}, b.x {1}", a.x, b.x);

a = b;

b.x = 30;

Console.WriteLine("а.х {0}, Ь.х {1}", а.х, Ь.х);

}

}

Ushbu dasturning bajarilganda quyidagi natijalar olinadi.

а.х 10, b.х 20

а.х 30, b.х 30

Ko'rib turganingizdek, b o'zgaruvchilari a o`zgaruvchilariga o`zlashtirilyapti, har ikki o'zgaruvchilar ham bir xil ob'ekt ishora qiladi ya`ni dastlabki b ob`ekti o'zgaruvchilariga ko'rsatilgan.

 

Strukturalarni tayinlash.


Yuqoridagilardan o`rinli savol tug'iladi: nima uchun C# tilida struktura sinfdan ko'ra kamroq imkoniyatlar mavjud bo'lsa ham qo`llaniladi? Bu savolga javob dasturlarning ishlash samaradorligini oshirishdir. Strukturalar qiymatlarning tiplariga ishora qiladi va shuning uchun ular bevosita emas, balki to'g'ridan-to'g'ri ishlashi mumkin. Natijada, struktura bilan ishlash uchun havola tipining o'zgaruvchisini talab qilinmaydi, bu esa ba'zi hollarda operativ xotiraning sezilarli darajada tejalishini anglatadi. Bundan tashqaristruktura bilan ishlash, sinf ob'ektiga murojaat qilish uchun xarakterli bo'lgan samaradorlikning yomonlashishiga olib kelmaydi. Strukturaga kirish to'g'ridan — to'g'ri amalga oshiriladi va ob'ektlarga havolalar ko`rinishida emas, chunki sinflar havolalar tipiga tegishli. Ob'ektlarga kirishning bevosita tabiati har bir kirishda hisoblash resurslarining qo'shimcha sarflanishiga olib keladi, strukturalarga murojaat qilish bunday sarf yuzaga kelmaydi. Umuman olganda, faqat bir-biriga bog'liq bo'lgan ma'lumotlar guruhini saqlab qo`yish kerak bo'lsa, unda ishlash samaradorligi hisobidan ular uchun strukturani tanlash yaxshi hisoblanadi.

Quyida strukturaning amalda qo'llanilishini ko'rsatadigan yana bir misol keltirilgan. Elektron tijorat sohasida taqlid qilingan tranzaksiya yozuvi misol sifatida keltirilgan. Har bir bunday bitim paketi o`z ichiga paket raqami va paket sarlavhasi uzunligini oladi. Sarlavhadan so'ng hisob raqami va bitim miqdori joylashadi. Paketning sarlavhasi mustaqil axborot birligi bo'lib, shuning uchun u alohida strukturaga ega bo'lib, u keyinchalik tranzaktsion yozuvni yoki boshqa turdagi axborot paketini yaratish uchun ishlatiladi.

// Strukturalar kichik hajmdagi ma'lumotlarni to'plash uchun qulay.

using System;

// Определить структуру пакета,

struct PacketHeader {

public uint PackNum; // номер пакета

public ushort PackLen; // длина пакета

}

// Elektron tijorat operatsiyalari yozuvlarini yaratish uchun

//PacketHeader strukturasidan foydalanish.

class Transaction {

static uint transacNum = 0;

PacketHeader ph; // Transaction sinfiga PacketHeader tuzilishini kiritish.

string accountNum;

double amount;

public Transaction(string ace, double val) {

// paket sarlavhasini yaratish

ph.PackNum = transacNum++;

ph.PackLen =512; // ishchi uzunlik

accountNum = ace;

amount = val;

}

// Bitim taqlid qilish.

public void sendTransaction() {

Console.WriteLine("Пакет #: " + ph.PackNum +

", Длина: " + ph.PackLen +

",\n Счет #: " + accountNum +

", Сумма: {0:C}\n", amount);

}

}

// Bitim paketi struktura tuzilishi foydalanish.

class PacketDemo {

static void Main() {

Transaction t = new Transaction("31243", -100.12);

Transaction t2 = new Transaction("AB4655", 345.25);

Transaction t3 = new Transaction("8475-09", 9800.00);

t.sendTransaction ();

t2.sendTransaction ();

t3.sendTransaction ();

}

}

Bu kodning bajarilganda quyidagi natijalar olinishi mumkin.

Пакет #: 0, Длина: 512,

Счет #: 31243, Сумма: ($100.12)

Пакет #: 1, Длина: 512,

Счет #: АВ4655, Сумма: $345.25

Пакет #: 2, Длина: 512,

Счет #: 8475-09, Сумма: $9,800.00

PacketHeader strukturasi bitim paketining sarlavhasini shakllantirish uchun juda mos keladi, chunki u juda oz miqdordagi ma'lumotlarni saqlaydi, merosdan foydalanmaydi va hatto metodlarni ham o'z ichiga olmaydi. Bundan tashqari, PacketHeader strukturasi bilan ishlash, sinfga xos bo'lgan ob`ektlarga havolalar bilan bog'liq qo'shimcha sarflarni keltirib chiqarmaydi. Binobarin, PacketHeader strukturasidan bu jarayonning samaradorligini kamaytirmagan holda har qanday bitimni yozib olish uchun foydalanish mumkin.

Qizig'i shundaki, C++ tilida ham strukturalar mavjud va struct kalit so'zi bilan ishlatiladi. Biroq, bu strukturalar C# tilidagidan farq qiladi. Shuningdek, C++ tilida struktura sinf tipi bilan bog`liq va bu tilda struktura va sinf deyarli teng va bir-biridan faqat ularning a'zolariga kirishdagi sinf uchun yopiq va struktura uchun ochiq standartlar bilan farq qiladi. C# tilida struktura qiymat tipida, sinf esa havola tipiga tegishlidir.

 


Download 116.94 Kb.

Do'stlaringiz bilan baham:
1   ...   86   87   88   89   90   91   92   93   ...   100




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