public
class
Department {
3.
private
string departname;.......
4.
// Accessor.
5.
public
string GetDepartname() {
6.
return
departname;
7.
}
8.
// Mutator.
9.
public
void
SetDepartname(string a) {
10.
departname = a;
11.
}
12.
}
Yuqoridagi usul singari biz ham shaxsiy ma'lumotlarni tashqi dunyodan himoya
qila olamiz. Bu erda kerakli ma'lumotlarni tayinlash va olish uchun ikkita alohida
usuldan foydalanamiz.
1.
public
static
int
Main(string[] args) {
2.
Department d =
new
Department();
3.
d.SetDepartname(
"ELECTRONICS"
);
4.
Console.WriteLine(
"The Department is :"
+ d.GetDepartname()
);
5.
return
0;
6.
}
Yuqoridagi misolda biz ob'ekt nomidan shaxsiy ma'lumotlarning nomiga kira
olmaymiz. Ma'lumotlarni faqat shu ikkita usul yordamida boshqaramiz.
XUSUSIYATDAN FOYDALANIShNI QO'LLASH
Xususiyatlar bu C # bilan kiritilgan yangi til xususiyati. Ushbu xususiyatni faqat
bir nechta til qo'llab-quvvatlaydi. C # dagi xususiyatlar sinfdagi maydonni o'qish va
yozish orqali uni himoya qilishga yordam beradi. Birinchi usulning o'zi yaxshi,
ammo kapsulani xususiyatlariga ko'ra ancha yumshoq bajarish mumkin.
Endi bir misolni ko'rib chiqamiz.
1.
using system;
2.
public
class
Department {
3.
private
string departname;
4.
public
string Departname {
5.
get {
6.
return
departname;
7.
}
8.
set {
9.
departname = value;
10.
}
11.
}
12.
}
13.
public
class
Departmentmain {
14.
public
static
int
Main(string[] args) {
15.
Department d =
new
Department();
16.
d.departname =
"Communication"
;
17.
Console.WriteLine(
"The Department is :{0}"
, d.Departname)
;
18.
return
0;
19.
}
20.
}
Yuqoridagi misoldan Encapsulation-ning xususiyatlaridan foydalangan holda
foydalanilishini ko'rib chiqamiz. Mulkda ikkita kirish va sozlash mavjud. Get
accessor ba'zi xususiyatlar maydonining qiymatini qaytaradi. O'rnatilgan ruxsat
beruvchi ba'zi bir xususiyat maydonining qiymatini "qiymat" tarkibiga kiritadi.
Xususiyatlar faqat o'qish uchun tayyorlanishi mumkin. Bu mulkni amalga oshirishda
faqat get accessorga ega bo'lish orqali amalga oshiriladi.
(FAQAT MULKNI O'QING)
1.
using system;
2.
public
class
ReadDepartment {
3.
private
string departname;
4.
public
ReadDepartment(string avalue) {
5.
departname = avalue;
6.
}
7.
public
string Departname {
8.
get {
9.
return
departname;
10.
}
11.
}
12.
}
13.
public
class
ReadDepartmain {
14.
public
static
int
Main(string[] args) {
15.
ReadDepartment d =
new
ReadDepartment(
"
COMPUTERSCIENCE
"
);
16.
Console.WriteLine(
"The Department is: {0}"
, d.Departname);
17.
return
0;
18.
}
}
Yuqoridagi misolda biz faqat o'qish uchun xususiyatni qanday amalga oshirishni
ko'rib chiqamiz. ReadDepartment sinfida faqat get accessorini amalga oshiradigan
Departname xususiyati mavjud. U o'rnatilgan aksessuarni qoldiradi. Ushbu maxsus
sinf konstruktorga ega, u string parametrini qabul qiladi. ReadDepartmain sinfining
Asosiy usuli d nomli yangi ob'ekt yaratadi. D ob'ektining instansiyasida mag'lubiyat
parametrini qabul qiladigan ReadDepartment konstruktoridan foydalaniladi.
Yuqoridagi dastur faqat o'qish uchun mo'ljallanganligi sababli, biz maydon nomini
qiymatini o'rnatolmaymiz va biz faqat maydondan ma'lumotlarni o'qiymiz yoki
qiymatini olamiz. Xususiyatlar faqat yozish uchun ham yaratilishi mumkin. Bunga
mulkni amalga oshirishda faqat o'rnatilgan ruxsat beruvchi ega bo'lish orqali
erishiladi.(FAQAT MULKNI YOZING)
1.
using system;
2.
public
class
WriteDepartment {
3.
private
string departname;
4.
public
string Departname {
5.
set {
6.
departname = value;
7.
Console.WriteLine(
"The Department is :{0}"
, departname)
;
8.
}
9.
}
10.
}
11.
public
class
WriteDepartmain {
12.
public
static
int
Main(string[] args) {
13.
WriteDepartment d =
new
WriteDepartment();
14.
d.departname =
"COMPUTERSCIENCE"
;
15.
return
0;
16.
}
17.
}
Yuqoridagi misolda biz faqat "Faqat yozish" xususiyatini qanday amalga
oshirishni ko'rib chiqamiz. Hozir WriteDepartment sinfida faqat o'rnatilgan kiruvchi
vositani amalga oshiradigan Departname xususiyati mavjud. Get accessorini
qoldiradi. Belgilangan Accessor usuli biroz o'zgarib turadi, chunki u tayinlanganidan
keyin nom nomining qiymatini nashr etadi.
Meros olish:
Merosxo'rlik OOPning asosiy xususiyatlaridan biri bo'lib, eskilariga asoslangan
yangi ma'lumotlar tuzilmalarini yaratish uchun ishlatiladi. Keling, oddiy misolni
ko'rib chiqaylik: Tasavvur qiling, biz hayvonot bog'ida hayvonlarni kuzatib boradigan
ma'lumotlar bazasini yaratish uchun yollandik :) Bizning tizimda
foydalanuvchilarning ikki turi bo'ladi: foydalanuvchilar va ma'murlar.
Foydalanuvchilar hayvonlar haqida ma'lumotni tahrirlashga qodir bo'lgan oddiy
hayvonot bog'i xodimlari bo'ladi, masalan. ularning vazni yoki qanotlari. Ma'mur
hayvonlarga oid ma'lumotlarni o'zgartirishi va ma'lumotlar bazasidan hayvonlarni
qo'shishi yoki o'chirishi mumkin. Ma'murlarda qo'shimcha maydon, telefon raqami
bo'ladi, shuning uchun ular tizim ishlamay qolganda ular bilan bog'lanishlari
mumkin. Ikkala sinfni ham to'liq belgilash ma'nosiz va chalkash bo'lar edi, chunki
ularning umumiy sohalari va usullari ko'p. Ham foydalanuvchi, ham ma'mur ismlari,
yoshi va kirish va chiqish imkoniyatiga ega bo'ladi. Bugun asosan tushunchalarni
o'rganish haqida bo'lamiz, keyingi darsda to'liq ishlaydigan misolni dasturlashtiramiz
(quyidagi kod shunchaki qoralama):
class
User
{
private
string
name;
private
string
password;
private
int
age;
public
bool
LogIn(
string
password)
{
// ...
}
public
bool
LogOut()
{
// ...
}
public
void
SetWeight(Animal animal)
{
// ...
}
// ...
}
Hozirgina biz sinfning umumiy sxemasini tuzdik, ammo ishonchim komilki, siz
u haqida tushuncha berasiz. Meros nima ekanligini bilmasdan, biz Admin sinfimizni
quyidagicha belgilab olamiz:
class
Admin
{
private
string
name;
private
string
password;
private
int
age;
private
string
telNumber;
public
bool
LogIn(
string
password)
{
// ...
}
public
bool
LogOut()
{
// ...
}
public
void
SetWeight(Animal animal)
{
// ...
}
public
void
AddAnimal(Animal animal)
{
}
public
void
RemoveAnimal(Animal animal)
{
}
// ...
}
Ushbu sinfda bizning kodimiz juda keraksiz ekanligini ko'rishimiz mumkin.
Boshqa barcha o'zgarishlar ikkala sinfda ham o'z o'rnini egallashi kerak edi, bu kodni
saqlashni juda qiyinlashtiradi. Endi biz meros yordamida administrator sinfini e'lon
qilamiz. Biz Admin sinfini User sinfidan meros qilib olishga ruxsat beramiz. Biz
maydonlarni va usullarni qayta e'lon qilishimiz shart emas, C # ularni avtomatik
ravishda qo'shib qo'yadi:
class
Admin: User
{
private
string
telNumber;
public
void
AddAnimal(Animal animal)
{
}
public
void
RemoveAnimal(Animal animal)
{
}
// ...
}
Biz meros uchun ":" operatoridan foydalanganligimizni ko'ramiz.
Yuqoridagi misolda, shaxsiy maydonlar naslga kira olmaydi. Faqat ommaviy
o'zgartiruvchiga ega bo'lgan maydonlar va usullar bo'ladi. Shaxsiy maydonlar va
usullar ma'lum bir sinfga tegishli bo'lgan maxsus mantiq sifatida tushuniladi. Buning
ma'nosi shundaki, ular avlodlardan yashiringan - hatto avlod ham ushbu mantiqdan
foydalanmoqda, uni o'zgartira olmaydi. Istalgan natijaga erishish uchun biz xuddi
shaxsiy kabi ishlaydigan, ammo ushbu maydonlarni meros qilib olishga imkon
beradigan yangi kirish modifikatoridan foydalanamiz.
Foydalanuvchi sinfining boshlanishi quyidagicha ko'rinadi:
class
User
{
protected
string
name;
protected
string
password;
protected
int
age;
// ...
Endi biz foydalanuvchi va administrator misollarini yaratgan bo'lsak, ularning
ikkalasida ham nom maydonlari va LogIn () usullari mavjud edi. C # foydalanuvchi
sinfini egallaydi va barcha maydonlarini avtomatik ravishda qayta e'lon qiladi.
Merosdan foydalanishning afzalliklari aniq. Biz bir xil maydonlarni ikkita sinfga
nusxalashimiz shart emas. Biz qilishimiz kerak bo'lgan narsa - yangilarini e'lon qilish.
Qolganlari meros qilib olinadi. Foyda juda katta, biz mavjud bo'lgan yangi
usullarning tarkibiy qismlarini kengaytirib, ularni qayta ishlatishimiz mumkin. Biz
juda ko'p ortiqcha kod yozishimiz shart emas, eng muhimi - ota-ona sinfidagi bitta
maydonni o'zgartirganda, bu o'zgarish hamma joyda avtomatik ravishda meros qilib
olinadi. 20 ta darsda xatolarni keltirib chiqarishi mumkin bo'lgan narsani qo'lda
o'zgartirishimiz shart emas. Biz odamlarmiz va har doim ham xatolarga yo'l
qo'yamiz, iloji boricha kamroq xato qilish uchun to'g'ri dasturlash usullarini
tanlashimiz kerak.
Ota-onalar sinfini ba'zan ota-bobo, bizning foydalanuvchi sinfimiz va undan
meros qolgan sinf, avlod, Admin sinfimiz deb atashadi. Avlodlar yangi usullarni
qo'shishi yoki ota-ona sinfining mavjud usullarini bekor qilishi mumkin (quyida
keltirilgan misolga qarang). Ba'zan, asosan bir xil narsani anglatadigan superklass va
subklass atamalariga duch kelishingiz mumkin.
Ob'ekt modelini loyihalashtirishning yana bir usuli - yagona maqsadi meros
bo'lib qoladigan User ota-sinfini yaratishdir. Keyinchalik foydalanuvchi Attendant va
Admin sinflari tomonidan meros bo'lib olinadi. Agar bizda juda
ko'p foydalanuvchi turlari bo'lsa, ushbu uslub foydali bo'ladi.
Bunday holda, biz ushbu sinf kursi haqida gaplashamiz, bu haqda
biz ushbu onlayn-kursda davom ettiramiz. Bizning misolimiz
oddiy edi, shuning uchun ikkita dars etarli edi. Umumiy
vaziyatlarda ishlatiladigan ob'ekt modellari o'rnatilgan va
tasdiqlangan dizayn naqshlari ham mavjud. Bularning barchasi
ilg'or va qiziqarli, va'da beraman, keyinroq ularga ham etib
boramiz. Ob'ektlarni modellashtirishda biz merosni ota-sinfga
yo'naltirilgan bo'sh o'q sifatida chizamiz. Bizning holatlarimizda
grafik yozuv quyidagicha ko'rinadi:
Polimorfizm
Ushbu texnikaning noma'lum nomidan qo'rqmang, aslida bu juda oddiy.
Polimorfizm bizga har xil turdagi ob'ektlar bilan ishlash uchun birlashtirilgan
interfeysdan foydalanishga imkon beradi. Tasavvur qiling, bizda, masalan, geometrik
shakllarni aks ettiruvchi ko'plab ob'ektlar (doiralar, kvadratlar, uchburchaklar va
boshqalar). Agar ular boshqacha bo'lsa-da, ular bilan birlashtirilgan tarzda muloqot
qilishimiz foydalidir. Rang maydoni va render () usulini o'z ichiga olgan
GeometricShape sinfini yaratishimiz mumkin. Keyinchalik barcha geometrik shakllar
ushbu sinfdan interfeysni meros qilib oladi. Endi siz shunday deb o'ylashingiz
mumkin: "Ammo aylana va kvadrat buyum boshqacha ko'rinishda bo'ladi!".
Polimorfizm har bir kichik sinfda render () usulini bekor qilishga imkon beradi,
shunda u biz xohlagan narsani qiladi. Interfeys birlashtirilgan bo'ladi va biz turli xil
ob'ektlarni ko'rsatish uchun qanday usulni chaqirish kerakligini o'ylamaymiz.
Polimorfizm ko'pincha hayvonlar yordamida tushuntiriladi. Ularning barchasi
interfeysida Speak () usuliga ega, ammo har bir hayvon uni turlicha bajaradi.
Xulosa:
Enkapsulatsiya - bu ob'ektga yo'naltirilgan dasturlash bo'yicha birinchi qadam.
Ushbu maqola sizga Enkapsülasyon haqida bir oz ma'lumot beradi. Aksessuar va
mutator usullaridan foydalangan holda biz inkapsulyatsiya qilishimiz mumkin.
Boshqa usullardan biri nomlangan xususiyatdan foydalanishdir. Xususiyatlarning
foydasi shundaki, sizning ob'ektlaringiz foydalanuvchilari bitta nomlangan element
yordamida ichki ma'lumotlar nuqtasini boshqarishi mumkin ekan.
Do'stlaringiz bilan baham: |