Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
293
{
intensity = 10;
}
driverIntensity = intensity;
}
public
Motorcycle(
int
intensity,
string
name)
{
if
(intensity > 10)
{
intensity = 10;
}
driverIntensity = intensity;
driverName = name;
}
...
}
Bu yerda har bir konstruktorda tekshiruv ishlab chiqariladi, unda quvvat darajasi 10-dan
oshmaydi buni hammasi to‘g‘ri va yaxshi bo‘lishiga qaramasdan ikkita konstruktorda ortiqcha kod
paydo bo‘ladi. Bu idealdan ancha yiroq, chunki kodni bir nechta joyda o‘zgartirish kerak, qoidalarni
o‘zgartirish hamda yuzaga kelgan holatni to‘g‘irlash usullaridan biri
Motorcycle sinfdagi usulni
aniqlashdan tashkil topgan, u kiruvchi argumentlarni tekshiruvini bajaradi. Agar har bir konstruktor
bu usulni maydonlarga qiymatlarini o‘zlashtirishidan oldin chaqirilsa. Biroq bunday yondashuv
kodni muzlatishga ruxsat beradi bunda biznes qoidalarini o‘zgartirishda yangilashga to‘g‘ri keladi,
endi boshqa ortiqchalik paydo bo‘ladi.
class
Motorcycle
{
public
int
driverIntensity;
public
string
driverName;
// Constructors.
public
Motorcycle() { }
public
Motorcycle(
int
intensity)
{
SetIntensity(intensity);
}
public
Motorcycle(
int
intensity,
string
name)
{
SetIntensity(intensity);
driverName = name;
}
public
void
SetIntensity(
int
intensity)
{
if
(intensity > 10)
{
intensity = 10;
}
driverIntensity = intensity;
}
...
}
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
294
Yana tushunarli yondashuv konstruktorni belgilashni nazarda tutadi.
U argumentlarni
maksimal qiymatini qabul qiladi “master constructor” sifatida qolgan konstruktorlar this kalit
so‘zini ishlatishlari mumkin uni asosiy konstruktorga kiruvchi argumentlarini
uzatish uchun va
zaruratta xohlaganda ham qo‘shimcha parametrlarni yetkazib berish uchun ishlatiladi. Natijada
faqatgina butun sinf uchun konstruktorni yagonaligini quvvab-quvatlash
haqida xavotir olishga
to‘g‘ri keladi, o‘sha vaqtta qolgan konstruktorlardek asosdan bo‘shligicha qoladi.
Quyida Motorcycle sinfini yakuniy amalga oshirilishi keltirilgan. Konstruktorlarni zanjirga
bog‘lashda e’tibor bering this kalit so‘zi jismdan tashqarida joylashgan.
class
Motorcycle
{
public
int
driverIntensity;
public
string
driverName;
// Constructor chaining.
public
Motorcycle() {}
public
Motorcycle(
int
intensity)
:
this
(intensity,
""
) {}
public
Motorcycle(
string
name)
:
this
(0, name) {}
// This is the 'master' constructor that does all the real work.
public
Motorcycle(
int
intensity,
string
name)
{
if
(intensity > 10)
{
intensity = 10;
}
driverIntensity = intensity;
driverName = name;
}
...
}
This kalit so‘zini – konstruktorlar chaqiruvlarini zanjirga bog‘lashda ishlatish unchalik shart emas.
Biruq bunday metodni qo‘llash bizga yanada qisqa kodni aniqlash imkonini beradi.
Bunday texnika yordamida masalalarni
yechimini qisqartirish mumkin, chunki real ish yagona
konstruktorga delegatsiyalanadi, o‘sha vaqtta qolganlaridek unga oddiygina javobgarlikni beradi.