SOLID qisqartmasi quyidagi tamoyillarni anglatadi:
1. S - Single Responsibility Principle (Yagona Mas’uliyat Tamoyili):
Har bir klass yoki modul faqat bitta mas’uliyatga ega bo'lishi kerak.
Ma'no: Klass faqat bitta vazifani bajarishi kerak, ya'ni klassning o'zgarishiga faqat bitta sabab bo'lishi kerak.
Misol: Agar klass bir vaqtning o'zida ma'lumotlarni saqlash va ekranga chiqarish uchun javob bersa, bu tamoyil buziladi. Bu funksiyalarni alohida klasslarga ajratish kerak.
2. O - Open/Closed Principle (Ochiq/Yopiq Tamoyili):
Klasslar yoki funksiyalar yangi xatti-harakatlarni qo'shish uchun ochiq, lekin mavjud kodni o'zgartirishga yopiq bo'lishi kerak.
Ma'no: Yangi imkoniyatlar qo'shish uchun mavjud kodni o'zgartirmasdan kengaytirish mumkin bo'lishi kerak.
Misol: Agar siz yangi hisoblash usuli qo'shmoqchi bo'lsangiz, mavjud klasslarni tahrir qilmasdan yangi klass yoki interfeys orqali kengaytirishingiz kerak.
3. L - Liskov Substitution Principle (Liskovning Almashuv Tamoyili):
Baza klassdan meros olgan klasslar o'zlarini asosiy klass sifatida ishlatilgandek tutishi kerak.
Ma'no: Farzand klasslar ota klasslar o‘rnida qo‘llanilganda dastur xatosiz ishlashi kerak.
Misol: Agar Bird klassidan Penguin klassi meros olsa, lekin Penguin uchishni qo'llab-quvvatlamasa, bu tamoyil buziladi.
4. I - Interface Segregation Principle (Interfeysni Ajratish Tamoyili):
Dasturda keng interfeyslardan foydalanmaslik kerak, ya’ni mijozlar ular foydalanmaydigan funksiyalarga majbur bo‘lmasligi kerak.
Ma'no: Har bir interfeys kichik va aniq maqsadga ega bo‘lishi kerak.
Misol: Agar interfeysda ortiqcha funksiyalar bo‘lsa, ulardan foydalanmaydigan klasslar bu interfeysni implement qilmasligi kerak.
5. D - Dependency Inversion Principle (Bog‘liqlikni Inversiya Tamoyili):
Yuqori darajadagi modullar past darajadagi modullarga bog'liq bo'lmasligi kerak; ikkisi ham abstraktsiyaga bog'liq bo'lishi kerak.
Ma'no: Dastur modullari o‘zaro bevosita emas, balki interfeyslar orqali bog‘lanishi kerak.
Misol: Klass ichida boshqa klassni bevosita chaqirish o‘rniga, interfeys yoki abstraktsiyadan foydalaning.
1. S - Single Responsibility Principle (Yagona Mas’uliyat Tamoyili):
Har bir klass yoki modul faqat bitta mas’uliyatga ega bo'lishi kerak.
Ma'no: Klass faqat bitta vazifani bajarishi kerak, ya'ni klassning o'zgarishiga faqat bitta sabab bo'lishi kerak.
Misol: Agar klass bir vaqtning o'zida ma'lumotlarni saqlash va ekranga chiqarish uchun javob bersa, bu tamoyil buziladi. Bu funksiyalarni alohida klasslarga ajratish kerak.
2. O - Open/Closed Principle (Ochiq/Yopiq Tamoyili):
Klasslar yoki funksiyalar yangi xatti-harakatlarni qo'shish uchun ochiq, lekin mavjud kodni o'zgartirishga yopiq bo'lishi kerak.
Ma'no: Yangi imkoniyatlar qo'shish uchun mavjud kodni o'zgartirmasdan kengaytirish mumkin bo'lishi kerak.
Misol: Agar siz yangi hisoblash usuli qo'shmoqchi bo'lsangiz, mavjud klasslarni tahrir qilmasdan yangi klass yoki interfeys orqali kengaytirishingiz kerak.
3. L - Liskov Substitution Principle (Liskovning Almashuv Tamoyili):
Baza klassdan meros olgan klasslar o'zlarini asosiy klass sifatida ishlatilgandek tutishi kerak.
Ma'no: Farzand klasslar ota klasslar o‘rnida qo‘llanilganda dastur xatosiz ishlashi kerak.
Misol: Agar Bird klassidan Penguin klassi meros olsa, lekin Penguin uchishni qo'llab-quvvatlamasa, bu tamoyil buziladi.
4. I - Interface Segregation Principle (Interfeysni Ajratish Tamoyili):
Dasturda keng interfeyslardan foydalanmaslik kerak, ya’ni mijozlar ular foydalanmaydigan funksiyalarga majbur bo‘lmasligi kerak.
Ma'no: Har bir interfeys kichik va aniq maqsadga ega bo‘lishi kerak.
Misol: Agar interfeysda ortiqcha funksiyalar bo‘lsa, ulardan foydalanmaydigan klasslar bu interfeysni implement qilmasligi kerak.
5. D - Dependency Inversion Principle (Bog‘liqlikni Inversiya Tamoyili):
Yuqori darajadagi modullar past darajadagi modullarga bog'liq bo'lmasligi kerak; ikkisi ham abstraktsiyaga bog'liq bo'lishi kerak.
Ma'no: Dastur modullari o‘zaro bevosita emas, balki interfeyslar orqali bog‘lanishi kerak.
Misol: Klass ichida boshqa klassni bevosita chaqirish o‘rniga, interfeys yoki abstraktsiyadan foydalaning.