1. Bir kompaniyaning tarixi
Sizlarga bir hikoya aytib bermoqchiman, bu hikoya, katta tizimlarning murakkabligini oldini olishda ООП qanday yordam berishini ko'rsatadi. Bu sizga ООПning maqsadini tushunishga yordam beradi.
Bir kichik kompaniya bor edi, u kosmosda mahsulot yetkazib berish bilan shug'ullanardi...
Biz uni Galaxy Rush deb ataymiz. Va unda 5 kishi ishlardi. Biri moliya bilan shug'ullanardi, ikkinchisi omborda, uchinchisi yetkazib berishda, to'rtinchisi reklamani boshqarishda va beshinchisi bularning hammasini boshqarishda ishlardi.
Ular juda mehnatsevar edilar va hammasi ularga yaxshi chiqardi. Kompaniya yaxshi obro'ga ega edi va ko'p pul topardi. Lekin yil sayin buyurtmalar ko'payib borardi, shuning uchun direktor qo'shimcha xodimlarni yollashga majbur bo'ldi. Bir nechta ombor uchun, bir nechta yetkazib berish uchun, yana bir kassir va reklama bozorini kengaytirish uchun yollandi.
Va muammolar boshlandi. Odamlar ko'payib ketdi va ular bir-birlariga halaqit bera boshladi.
Marketing xodimi barcha pullarni yangi reklama kampaniyasiga sarflaydi, va kassada tovarlarni zudlik bilan sotib olish uchun pul yo'q.
Omborda 10 ta yangi giper-dvigatel bor, ularni oyda bir marta yetkazib berishadi. Kuryer bitta giper-dvigateldan birini olib ketdi, va boshqa mijoz uchun 10 ta giper-dvigatelga buyurtma yana bir oy kutishga majbur. Birinchi kuryer, ikkinchi kuryer bajarayotgan boshqa buyurtmadan xabardor emas edi.
Yangi direktor yordamchisi tovar sotib olish uchun kuryerni kosmik kemaga yuboradi, va qolganlar esa kema bo'sh bo'lishini kutadi. Ko'p shoshilinch yetkazib berishlar mavjud, lekin bu yordamchi faqat xarid qilishni boshqaradi va o'z ishini yaxshi bajarishga harakat qiladi. Kishi o'z vazifasini qanchalik yaxshi bajargan bo'lsa, shuncha ko'p boshqalarga halaqit berardi.
Vaziyatni tahlil qilishga uringan direktor, kema, naqd pul, va tovar kabi muhim resurslar optimal emas, balki "kim birinchi kelsa, o'sha oladi" tamoyili bo'yicha sarflanishini tushundi. Har qanday kishi o'z ishini amalga oshirish uchun kerakli resursni olib, qolgan xodimlar va butun kompaniyani havf ostiga qo'yishi mumkin edi.
Biroz bir narsa qilish kerak edi, va direktor monolit kompaniyani bir necha bo'limlarga ajratishga qaror qildi. Yetkazib berish bo'limi, marketing bo'limi, xarid bo'limi, moliya bo'limi va ombor bo'limi paydo bo'ldi. Endi hech kim shunchaki kemani olib qo'yolmas edi. Yetkazib berish bo'limi boshlig'i barcha yetkazib berish ma'lumotlarini olardi va kompaniyaga foydali bo'lgan kuryerga kemadan berardi. Ombor har bir kuryerga istalgan tovarni olishga ruxsat bermas edi, balki bu jarayonni nazorat qilardi. Moliya bo'limi marketingga pul bermas edi, agar yaqinda xarid bo'lishini bilsa. Har bir bo'limning bitta jamoat vakili (rahbari) bor edi. Har bir bo'limning ichki tuzilishi uning o'zining ichki ishi edi. Agar kuryer tovar olishni istasa, u ombor boshlig'iga borardi, omborga emas. Agar yangi buyurtma paydo bo'lsa, uni yetkazib berish bo'limi boshlig'i (public person), kuryer (private person) emas, qabul qilardi.
Boshqa so'zlar bilan aytganda, direktor resurlar va ularning ustidagi harakatlarni guruhlarga (bo'limlarga) birlashtirdi, va boshqa odamlar bu bo'limlarning ichki tuzilishiga aralashishni taqiqladi. Faqat ma'lum bir shaxs bilan bog'lanish mumkin edi.
ООП nuqtai nazaridan, bu dasturiyatni ob'ektlarga bo'lishdan boshqa narsa emas. Funksiya va o'zgaruvchilarni o'z ichiga olgan monolit dasturiyat, ob'ektlarni o'z ichiga olgan dasturiyatga aylanadi. Ob'ektlar o'z ichida o'zgaruvchilar va funksiyalarni saqlaydilar.
Muammo shunda ediki, har qanday xodim har qanday resursdan nazoratsiz foydalanishi va har qanday odamga buyruq berishi mumkin edi. Biz kichik cheklovlarni kiritdik, lekin ko'proq tartibga ega bo'ldik. Shuningdek, hammasini yaxshiroq nazorat qilish imkoniyatiga ega bo'ldik.
Bo'lin va hukmronlik qil - sof ko'rinishda.
2. Dastur yaratish jarayoni
Men ООПning yana bir afzalligini ochib beruvchi muhim nuqtani muhokama qilmoqchiman. Ko'rasizmi, dasturlar asosan qurg'oqchilikdan ko'ra tiriklikka o'xshaydi. Ular qurilmaydi, ular o'sadi. Dasturlash — doimiy o'zgarishlar. Qurilishda sizda yaxshi reja bo'lishi va unga aniq rioya qilish mumkin. Dastur yaratishda bu unday emas.
Ko'pincha dasturlashda siz hohlagan ishingizni amalga oshira olmaysiz va ko'p narsani qayta ishlashga to'g'ri keladi. Buyurtmachi talablarini yanada tez-tez o'zgartiradi.
Agar loyiha buyurtmachisi juda aniq tafsilotlar bergan bo'lsa, nima bo'ladi? Unda hammasi yanada yomonroq bo'ladi. Vaqt o'tishi bilan mahsulot holatiga qarang.
Mahsulotning muvaffaqiyati shunchaki, buyurtmachi uning yangi versiyasini chiqarmoqchi bo'lganda keladi, va keyin yana va yana. Albatta, mavjud mahsulotga "kichik o'zgarishlar" qo'shish kerak bo'ladi. Shuning uchun mahsulot rivoji — bu doimiy o'zgarishlar ketma-ketligi. Faqat vaqt miqyosi boshqacha. Har bir yangi versiya haftada, oyda yoki yarim yil ichida chiqishi mumkin.
Va bularning hammasidan qanday xulosa chiqarish mumkin? Mahsulotning ichki tuzilishini shunday holatda saqlash kerak, shunda unga katta (va uncha katta bo'lmagan) o'zgarishlarni eng kam qayta ishlash bilan kiritish mumkin bo'ladi.
Ob'ektlar aloqasi
Lekin buni qilish oson emas. Biz allaqachon aytganmizki, dastur ob'ektlardan iborat, ular o'zaro aloqada bo'ladi. Keling, dasturimizdagi barcha ob'ektlarni doskaga joylashtiramiz va ularni qalin nuqtalar bilan belgilaymiz. Har bir ob'ektdan (nuqtadan) ular bilan aloqa qiladigan barcha ob'ektlarga (nuqtalarga) o'q chizamiz.
Endi biz nuqtalarni guruhlarga birlashtiramiz. Agar ular orasidagi aloqalar boshqa nuqtalarga nisbatan juda kuchli bo'lsa, nuqtalar guruhga birlashtirilishi kerak. Agar nuqtaning ko'p o'qlari uning guruhidagi boshqa nuqtalarga yo'naltirilgan bo'lsa, demak guruhlarga bo'linish to'g'ri amalga oshirilgan. Bir guruh ichidagi nuqtalarni kuchli bog'langan, turli guruhlardagi nuqtalarni esa zaif bog'langan deb ataymiz.
Zaif bog'lanish tamoyili
Bu "zaif bog'lanish tamoyili" deb ataladi. Dastur bir nechta qismga, ko'pincha qatlamlarga bo'linadi, ularning mantiqi ichki tuzilishiga juda bog'liq va boshqa qatlamlar/qismlarga juda zaif. Odatda qatlamlarning o'zaro aloqasi juda tartiblangan. Bir qatlam ikkinchisiga murojaat qilishi va uning faqatgina kichik bir qismini ishlatishi mumkin. Aynan shu "bo'limga bo'lish" tamoyili, lekin kattaroq miqyosda.
Bu shuni anglatadiki, biz bo'limni qayta tashkil qilib, uning samaradorligini oshirishimiz, unga yana ko'proq odamlarni yollashimiz mumkin, lekin agar biz boshqa bo'limlar bilan o'zaro aloqaning protokolini o'zgartirmasak, amalga oshirilgan barcha o'zgarishlar lokal bo'lib qoladi. Hech kimga qayta o'qitish kerak bo'lmaydi. Barcha tizimni qayta ishlash kerak bo'lmaydi. Har bir bo'lim, agar umumiy o'zaro aloqa mexanizmlari muvaffaqiyatli tanlangan bo'lsa, bunday ichki optimallashtirish bilan shug'ullanishi mumkin.
Muvaffaqiyatli tanlangan. Agar ular muvaffaqiyatsiz tanlansa nima bo'ladi? "O'zgarishlar zaxirasi" tezda tugaydi va butun tizimni qayta ishlashga to'g'ri keladi. Buni vaqti-vaqti bilan amalga oshirish kerak bo'ladi. Kelajakda nima bo'lishini oldindan bilib bo'lmaydi, lekin qayta ishlash sonini minimal darajaga tushirish mumkin.
Abstraksiya tamoyili
Bo'limlar tuzilishini va ular qanday o'zaro aloqada bo'lishini tanlash — bu "Abstraksiya tamoyili". Dasturlashda bu dasturiy ta'minotni qanday qismlarga bo'lish va bu qismlar qanday o'zaro aloqada bo'lishi kerakligini aniqlash uchun qo'llaniladi. Ushbu tamoyilni qo'llash qilingan qismlarni bo'lishda ham qo'llash mumkin, dasturiy ta'minotni alohida sinflarga bo'linmaguncha.
Ushbu qismlarning ichki tuzilishini yashirish va boshqa qismlar bilan o'zaro aloqani qat'iy cheklash — bu Inkapulyatsiya. Inkapulyatsiya + Abstraksiya — bu ООПning asosiy toshlaridir. Yaxshi dasturiy ta'minot bu ikki tamoyilga rioya qilishi shart. Kelajakda biz boshqa tamoyillarni ko'rib chiqamiz va ular qanday afzalliklar berishini tushunamiz.
GO TO FULL VERSION