S.O.L.I.D tamoyillari rasmlarda

S.O.L.I.D tamoyillari rasmlarda

S.O.L.I.D tamoyillari rasmlarda

Agar siz Object-Oriented Programming(OOP)dan habaringiz bo’lsa, ehtimol siz SOLID tamoyillari haqida ham eshitgan bo’lishingiz kerak.

Bu besh tamoyillar Robert C. Martin tomonidan ommaga tanitiladi va ular dasturni ishlab chiqishda qo’llanilishi kerak bo’lgan ko’rsatmalarni o’z ichiga olib, bu orqali dasturni kengaytirish va uning kodlarini saqlash ancha osonlashadi.

Internetda SOLID haqida juda ko’p ajoyib maqolalar bor, lekin men rasmli misollarni juda ham kam ko’rdim. Bu kabi mavzular menga o’xshagan vizual o’rganuvchilarga o’rganish jarayonini biroz qiyinlashtiradi.

Maqolaning asosiy maqsadi — bu printsiplarni illyustratsiyalar yordamida yaxshiroq tushuntirish va har bir tamoyilning asl vazifasini to’liqligicha o’rganish.

O’zingiz ko’rib turganingizdek, bu printsiplarning ba’zilari o’xshash bo’lishi mumkin, lekin ular bir maqsadga mo’ljallanmagan. Bir tamoyildan boshqasini buzgan holda foydalanish mumkin, garchi ular o’xshash bo’lsada.

Bu qo’llanmani yanada osonroq tushuntirish uchun maqola davomida «Klass» so’zini ko’proq ishlataman, lekin shuni esda tutingki, uning o’rniga xuddi shu vazifani Funksiya, Metod yoki Module ham bajara olishi mumkin.

Qani endi boshladik!

SOLID Tamoyili

S — Single Responsibility

Klass faqat bitta mas’uliyatga ega bo’lishi kerak.

s o l i d tamoyillari rasmlarda 65e4b2ae8556f

Agar klassning bittadan ko’p mas’uliyati bo’lsa, bu xatolik uchrashining ehtimolini oshiradi, chunki uning vazifalaridan biriga o’zgartirish kiritish, boshqalarning ishlashiga ta’sir etishi mumkin.

Maqsad

Bu tamoyil vazifalarni qismlarga ajratishga qaratilgan bo’lib agar biror bir xatolik sizning dastur kodingizga kiritgan o’zgartirishingiz oqibatida uchrasa, u boshqa ajratilgan vazifalarga ta’sir etmaydi.

O — Open-Closed

Klasslar qo’shimchalar qo’shish uchun ochiq, lekin o’zgartirish kiritish uchun yopiq bo’lishi kerak.

s o l i d tamoyillari rasmlarda 65e4b2b030a21Klass vazifalarini o’zgartirish klassdan foydalanadigan barcha tizimlarga ta’sir etadi.

Agar siz Klassni ko’proq funksiyalarni bajarishini xohlasangiz, unda bunga ideal yondashuv — mavjud funksiyalarni o’zgartirish emas, aksincha yangilarini avvalgilari yoniga qo’shishingiz kerak.

Maqsad

Bu tamoyilning maqsadi Klassning imkoniyatlariga o’zgartirish kiritmagan holda kengaytirish. Bu printsip klass qayerda ishlatilishidan qat’iy nazar xatoliklarni oldini olish uchun ishlab chiqilgan.

L — Liskov Substitution

Agar S — T ning tipi bo’lsa, u holda dasturning T tipidagi obyektlarini, xuddi shu dasturning kerakli xususiyatlarini o’zgartirmagan holda S tipidagi obyektlar bilan o’rin almashtirib qo’yilishi mumkin.

s o l i d tamoyillari rasmlarda 65e4b2b161747

Agar bola klass ota klass kabi bir xil harakatlarni bajara olmasa, bu ba’zibir xatoliklarni keltirib chiqarishi mumkin.

Deylik siz biror bir klass orqali boshqa bir klassni yaratsangiz bunda avvalgi klass ota, undan yaralgani esa bola klass bo’ladi. Bola klass ota qila oladigan barcha narsani qila olishi kerak. Bu jarayon Inheritance deyiladi.

Bola klassi bir xil so’rovlarni bajarishi va ota klassi bilan bir xil natijani berishi kerak.

Rasmda ota klassi qahva yetkazib berilishi ko’rsatilgan (har qanday qahva bo’lishi mumkin). Shu ko’rinishda bola ham Cappucino yetkazib berishi normal holat, chunki u o’ziga xos qahva turidir, lekin suv yetkazib berishi umuman notog’ri.

Agar bola klassi yuqoridagi talablarga javob bermasa, demak, klass butunlay o’zgartirilgan bo’ladi va bu L(Liskov Substitution) ****tamoyiliga zid keladi.

Maqsad

Bu printsip izchillikni ta’minlashga qaratilgan bo’lib ota klass yoki uning bolasi hech qanday muommolarsiz bir yo’lda ishlatilishi ta’minlanadi.

I — Interface Segregation

Klientlar o’zlari ishlatmaydigan metodlarga muhtoj bo’lmasliklari kerak.

s o l i d tamoyillari rasmlarda 65e4b2b24253f

Agar klass foydali bo’lmagan vazifalarni bajarishi kerak bo’lsa, u behudaga ishlatiladi va agar klassda bu harakatlarni bajarish imkoniyati umuman bo’lmasa unda kutilmagan xatoliklar paydo bo’lishi mumkin.

Klass o’z rolini bajarishi uchun zarur bo’lgan harakatlarni bajarishi kerak. Agar klass funksiyasi keyinchalik boshqa bir klass tomonidan bajariladigan bo’lsa unda bu funksiyani mavjud klassdan umuman talab qilmaslik kerak.

Maqsad

Bu tamoyil bir qator harakatlar majmuini kichikroq bo’laklarga bo’lishni maqsad qiladi, shunda klass faqat kerakli harakatlarnigina bajaradi.

D — Dependency Inversion

— Yuqori darajali modullar quyi darajali modullarga bog’liq bo’lmasliklari kerak. Ikkalasi ham asbtraction ga bog’liq bo’lishi lozim.
— Abstraction detallarga bog’liq bo’lmasligi kerak. Detallar abstraction ga bog’liq bo’lishi lozim.

s o l i d tamoyillari rasmlarda 65e4b2b3516d5

Birinchi navbatta keling yuqoridagi atamalarni o’rganib chiqamiz.

Yuqori Darajali Modul(yoki Klass): biror bir harakatni vosita orqali bajaruvchi klass.

Quyi Darajali Modul(yoki Klass): harakatni bajaruvchi vosita.

Abstraction: ikki klassni bir biriga bog’lovchi interface.

Detallar: vositani qay tarzda ishlashi.

Bu printsipga ko’ra, klass harakatni bajarish uchun ishlatadigan vosita bilan birlashib bir obyekt ko’rinishiga kelmasligi kerak. Aksincha, u vosita klassga bog’lanish imkonini beradigan interfeysga ulangan bo’lishi lozim.

Bundan tashqari, klass ham, interfeys ham vositaning qanday ishlashini bilmasligi kerakligi aytiladi. Biroq, vosita interfeys spetsifikatsiyasiga javob berishi kerak.

Maqsad

Bu tamoyil interfeys yaratish orqali yuqori darajadagi klassning quyi darajadagi klassga bog’liqligini kamaytirishga qaratilgan.

Xulosa

Hozircha biz ushbu beshta tamoyilni boshlang’ich darajada ko’rdik va ularning maqsadlarini o’rganib chiqdik. Ular sizning kodingizni o’zgartirish, kengaytirish va testdan o’tkazish jarayonlari yengillashtirishda yordam beradi.

Agar sizda biron bir savol yoki taklif bo’lsa, quyida comment qoldirishingiz mumkin.

Manba:

Algoritm
S.O.L.I.D tamoyillari rasmlarda