1.1 Shablonlar bilan tanishuv
Oldin aytilgani singari, dasturchi dastur ustida ishlashni uning modelini loyihalashdan boshlaydi: dastur qanday ob'ektlar bilan ishlashini aniqlaydi. Dastur qancha ko'p ob'ektlarga ega bo'lsa, shuncha murakkabroq bo'ladi.
Shuning uchun, dastur murakkabligini pasaytirish uchun, ob'ektlar o'rtasidagi aloqalarni standartlashtirishga harakat qilinadi. Bu yerda dasturchiga loyiha shablonlari yoki pattenlar katta yordam beradi. Ingliz tilidan design pattern.
Muammo yo'q! Rus tilida dizayn odatda grafik dizaynni anglatadi, ingliz tilida esa bu unchalik emas. Inglizcha design so'zi ma'nosi jihatdan "loyihalash" yoki "tuzilish" so'zlariga yaqinroq. Masalan, motor dizayni uning tashqi ko'rinishi emas, balki uning ichki tuzilishi.
Shuning uchun design pattern – aynan loyihalash patteni/shabloni. Kelajak Software Engineer uchun dizayn loyihalash demakdir, shuning uchun dizayn so'zini "tashqi ko'rinish" ma'nosida ishlatishni to'xtatishingizni tavsiya qilaman.
Shunday qilib, design pattern nima? Birinchi navbatda, loyihalash shabloni – bu standart muammoning standart yechimi. Yaxshi, samarali va vaqt sinovidan o'tgan yechim.
Masalan, sizdan velosipedni loyihalash so'ralgani bo'lsin, siz unga ikki g'ildirak, uch yoki hatto beshta ham qo'shishingiz mumkin. Loyihalash boshlanishida shunday bo'lgan. Lekin vaqt o'tishi bilan eng ma'lum usul bu ikki g'ildirak. Hozirgi kunda ko'rinadigan usulga og'riq va xatolar orqali erishilgan:
Odatda shablon to'liq yechim emas, kodga bevosita o'giriladigan emas, bu vazifani yaxshi bajarishning ko'rsatmasi, turli holatlarda foydalanish mumkin bo'lgan.
Ob'ektga yo'naltirilgan shablonlar klasslar yoki ob'ektlar o'rtasidagi munosabatlar va aloqalarni ko'rsatadi, qanday oxirgi klasslar yoki ob'ektlar qo'llanilishini aniqlamay.
1.2 Loyiha Shablonlarining Tarixi
70-yillarda dasturchilar katta dasturlar ishlab chiqish ehtiyojiga duch kelishdi, ularda butun jamoa ishlashi kerak bo'lgan. Ishni tashkil etishning har xil usullari sinovdan o‘tdi, lekin qurilish sohasi eng katta ta’sirni ko‘rsatdi.
Katta guruh odamlarning ishini tashkil qilishda qurilish sohasidan amaliyot va yondashuvlar foydalanilgan. Aytgancha, o‘sha yerdan dasturlash sohasiga build (qurilish), Software Developer (quruvchi) kabi tushunchalar va arxitektura tushunchasi kirib kelgan.
Va siz allaqachon taxmin qilganingizdek, design pattern g‘oyasini ham qurilish sohasidan olishgan. "Pattern Language. Towns. Buildings. Construction" kitobida pattern tushunchasini birinchi marta Christopher Alexander tasvirlagan. Ushbu kitobda shaharlarda loyihalashtirish jarayonlarini tasvirlash uchun maxsus til – patternlar ishlatilgan.
Qurilishda patternlar vaqt sinovidan o'tgan tipik yechimlarni ta'riflaydi: derazalar nechog'li balandlikda bo'lishi, binoda nechta qavat bo'lishi, mikrorayonda daraxtlar va gazonga qancha maydon ajratilishi.
Shuning uchun, 1994-yilda "Object-Oriented Design Patterns" nomli kitobda, 23 loyihalash shablonlari kiritilgan bo'lib, objektga yo'naltirilgan dizaynning turli muammolarini hal qiladi.
Kitobni 4 muallif: Erich Gamma, Richard Helm, Ralph Johnson va John Vlissides yozgan. Kitobning nomi juda uzun bo'lgani uchun hech kim uni eslab qololmadi. Shuning uchun tez orada uni “book by the gang of four”, ya'ni “to'rtlikning kitobi”, keyinchalik esa “GoF book” deb atay boshlashdi.
Va shu vaqtdan beri boshqa loyihalash shablonlari ham kashf etildi. “Pattern” yondashuvi dasturlashning barcha sohalarida ommabop bo‘lib, hozirda object-oriented design’ning tashqarisida ham patternlar uchrashi mumkin.
Muammo yo'q! Patternlar - bu qandaydir super-original yechimlar emas, aksincha, ko'pincha uchraydigan, bir xil muammoning tipik yechimlari. Yaxshi qilib sinovdan o'tgan yechimlar.
1.3 Shablonlar ro'yxati
Ko'p dasturchilar butun hayotida birorta ham shablonni o'rganmagan, bu esa ularga uni qo'llashda to'sqinlik qilmagan. Oldin aytganimizdek, patternlar - bu sinovdan o'tgan yaxshi yechimlar va agar dasturchi ahmoq bo'lmasa, tajriba bilan o'zi ham bunday yechimlarni topadi.
Lekin nega o'zingizni ko'p marotaba sinov va xatolar orqali optimallashtirilgan yechimlarga olib kelish kerak, agar bu yo'lni bosib o'tgan va hayot tajribasi va donoligini o'z ichiga olgan kitoblar moyillari bo'lsa?
Gaykani kalit bilan urishingiz mumkin, lekin nima uchun? Hatto kuch bilan boring, matkap bilan ham urishingiz mumkin. Lekin yaxshi va ongli asbobdan foydalanish professionalni havaskordan ajratib turadi. Va professional biladi, matkapning asosiy jihati umuman bu emas. Xo‘sh, shablonlarni bilishning nima foydasi bor?
- Sinovdan o'tgan yechimlar. Tayyor yechimlarni ishlatib, yangi velosiped ixtiro qilishga o'rniga vaqtni tejaysiz. Ba'zi yechimlarga o'zingiz ham kelardingiz, lekin ko'plar siz uchun yangilik bo'lishi mumkin.
- Kodni standartlashtirish. Turli xil standart yechimlarni qo'llab, loyihalashda kamroq hisob-kitoblar qilasiz, chunki barcha yashirin muammolar uzoq vaqt oldin topilgan.
- Umumiy dasturchilik lug'ati. Bir soatda boshqa dasturchilarga qanday ajoyib dizayn yaratganingizni va buning uchun qanday klasslar kerakligini tushuntirish o'rniga, pattern nomini aytasiz.
Qanday patternlar bor?
Patternlar loyihalash tizimining murakkabligi, tafsilotlari va qamrovi bo'yicha farqlanadi. Qurilishga o'xshashtirib, xavfsizlikni svetofor qo'yish orqali yaxshilash mumkin, yoki butun transport chorrahasini yer osti yo'llar bilan almashtirish mumkin.
Eng past darajadagi va eng oddiy patternlar - idiomalar. Ular universal emas, chunki faqat bitta dasturlash tilida qo'llanilishi mumkin.
Eng universal - arxitektura patternlari, ular deyarli har qanday tilda amalga oshirilishi mumkin. Ular dastur butunligini, alohida elementlarini emas, loyihalash uchun kerak.
Lekin eng asosiysi - patternlar maqsadi bilan farqlanadi. Biz tanishamiz deb o'ylayotgan patternlarni uchta asosiy guruhga bo'lish mumkin:
- Yaratish patternlari ortiqcha bog'lanmasdan ob'ektlar yaratish bilan shug'ullanadi.
- Struktural patternlar ob'ektlar o'rtasidagi bog'lanishlarni turli usullarni ko'rsatadi.
- Hulq-atvor patternlari ob'ektlar o'rtasidagi samarali muloqotni ta'minlaydi.
1.4 UML bilan tanishuv
To'rtlikning kitobida tavsiflangan 23 patternlarni ko'rib chiqishdan boshlaymiz. Patternlar va ularning nomlari dasturchilar uchun tanish narsalar. Sizni ular bilan tanishtiraman, lekin o'sha mashhur patternlar kitobini o'qishni qat'iy tavsiya etaman.
Loyiha patternlari ma'lum dasturlash tiliga bog'liq emas, shuning uchun ularni ta'riflash uchun odatda UML tili ishlatiladi. Bu 20 yil avval juda mashhur bo'lgan, lekin bugungi kunda ham vaqti-vaqti bilan qo'llaniladi. Aytgancha, patternlarni ta'riflash – bu UML'dan foydalangan holda standart bo'lgan joy.
UML yordamida siz turli ob'ektlar o'rtasidagi munosabatlarni ta'riflashingiz mumkin. Bizning holatimizda – bu ob'ektlar va klasslar.
Klasslar o'rtasidagi munosabatlar to'rt xil o'qlar turi bilan ko'rsatilgan:
![]() |
kompozitsiya (composition) — agregatsiyaning bir turi, unda “qismlar” “butun”dan alohida mavjud bo‘lolmaydi. |
![]() |
agregatsiya (aggregation) — “qism”-“butun” aloqa turini ifodalaydi, buning “qismi” “butun”dan alohida mavjud bo'lishi mumkin. Romb "butun" tomonidan ko'rsatiladi. |
![]() |
bog'liqlik (dependency) — bitta ob'ektning o'zgarishi (mustaqil) boshqa ob'ektning holatiga yoki hulq-atvoriga ta'sir qiladi (bog'liq). O'q tomonidan mustaqil ob'ekt ko'rsatilgan. |
![]() |
umumlashtirish (generalization) — meros olish yoki interfeysni amalga oshirish munosabati. O'q tomonidan superklass yoki interfeys joylashgan. |
Aslida, bu juda oddiy. Oxirgi o'q asosan boshqa klassdan meros olishni bildiradi. Birinchi va ikkinchi o'qlar esa, bir ob'ektning boshqa ob'ektga ssilkasini saqlashini bildiradi. Va bu tamom.
Agar ssilka rombi oq bo'lsa, ssilka kuchsiz: ob'ektlar bir-birlaridan mustaqil mavjud bo'lishi mumkin. Agar rombi qora bo'lsa, ob'ektlar kuchli bog'langan, masalan, HttpRequest klassi va uning farzand klassi HttpRequest.Builder.
1.5 Shablonlar ro'yxati
Patternlar turini turli ranglar va harflar bilan belgilaymiz:
B — hulq-atvor (behavioral);
C — yaratuvchi (creational);
S — struktural (structural).
Va nihoyat, 23 loyihalash shablonlarining ro'yxati:
C — Abstrakt fabrika S — Adapter S — Ko'prik C — Quruvchi B — Majburiyatlar zanjiri B — Buyruq S — Kompozitor S — Bezatuvchi |
S — Fasad C — Fabrika usuli S — Moslashtiruvchi B — Interpretator B — Iteratator B — Vositachi B — Saqlovchi C — Prototip |
S — Proksi B — Kuzatuvchi C — Singlton B — Holat B — Strategiya B — Shablon usuli B — Mehmon |




GO TO FULL VERSION