Antipatternlar

All lectures for UZ purposes
Daraja, Dars
Mavjud

Antipatternlarga kirish

Antipatternlar — patternlarning teskari tomoni. Eslatib o'taylik, dizayn patternlari — bu yaxshi dasturlash amaliyotlari, ya'ni ma'lum muammolarni hal qilish uchun andozalar. Antipatternlar esa buni teskari, ya'ni muammolarni hal qilishda qilinadigan xatolar.

Yaxshi dasturlash amaliyotlarining bir qismi antipatternlardan qochishni o'z ichiga oladi. Bu shunchaki tushunarsiz nazariy bir narsa emas, balki deyarli har bir dasturchi duch kelgan aniq muammolar. Kim ogoh bo'lsa, qurol-yarog'li!

Keling, boshlovchilar orasida keng tarqalgan ba'zi antipatternlarni ko'rib chiqaylik:

  • Sehrli sonlar va qatorlar
  • Xudo sinfi
  • Erta optimizatsiya
  • Velosiped ixtiro qilish
  • Kvadrat g'ildirakli velosiped ixtiro qilish

Sehrli sonlar va qatorlar

Sehrli son — bu kodda biror narsa uchun ishlatiladigan konstanta (ko'pincha — ma'lumotlarni identifikatsiya qilish uchun), lekin o'zini sonning hech qanday ma'nosi yo'q. Sonlar umuman hech qanday semantika keltirmaydi.

Agar sizning loyiha kodingizda ma'nosi tushunarli bo'lmagan sonlar ko'rinib qolsa — bu juda yomon. Bunday kodning muallifi bo'lmagan dasturchi bu qanday ishlashini tushuntirishda qiynaladi. Vaqt o'tishi bilan, muallif ham bunday raqamlar bilan kodni tushuntira olmaydi.

Sonlar kodingizni tushunishni va uni refaktoring qilishni qiyinlashtiradi. Ushbu xatolarga asosiy sabablar — dasturlash amaliyotining yetishmasligi va rivojlanish jarayonida shoshilish. Bu antipatternlarni dasturlashdan oldin raqamli konstantlarni ishlatishdan qochish kerak.

Bunday muammolarni hal qilish uchun, o'sha sonli konstantaning maqsadini tushuntiradigan nom bilan o'zgaruvchini yaratish kerak va unga kerakli qiymatni berish kerak.

Xudo sinfi

Ilohiy ob'ekt – bu antipattern bo'lib, u juda ko'p funksiyalarni o'z zimmasiga oladi va/yoki deyarli barcha ma'lumotlarni o'zida saqlaydi. Natijada, bizda yanada murakkab kod paydo bo'ladi, unda esa tushunish qiyin.

Bunday kodni saqlash qiyin, chunki butun tizim asosan undan iborat. Xatolikning sabablari: dasturchining tajriba darajasidan katta hajmdagi ishni olishi va bu ish hajmi tajribasidan yuqori bo'lishi.

Bunday yondashuv bilan kurashish uchun, vazifalarni turli dasturchilar amalga oshira oladigan vazifalarga ajratish kerak.

Erta optimizatsiya

Erta optimizatsiya — bu dasturchi qayerda va qanday qilib amalga oshirish kerakligini bilishdan oldin optimizatsiyani qilish.

Amaliyotda qayerda tor joyni kuzatish qiyin. Natijalarni olishdan oldin optimizatsiya qilish urinishlari kodning murakkabligiga va xatolarga olib keladi, foyda keltirmaydi.

Qanday qochish mumkin? Avvaliga oddiy, o'qish mumkin, ishlaydigan kod yoz, ma'lum va sinovdan o'tgan algoritmlar va vositalardan foydalan. Kerak bo'lsa, profiling vositalaridan foydalanib tor joylarni aniqlang. O'lchamlarga tayaning, taxminlarga emas.

Misollar va belgilar

Profilishingdan oldin keshni yaratish. Matematik jihatdan to'g'ri algoritmlar o'rniga murakkab va sinovdan o'tmagan evristik qoidalar ishlatish. Yangi, sinovdan o'tmagan frameworklarni tanlash, ular yuk ostida yomon natija ko'rsatishi mumkin.

Qanday qiyinchilik bor?

Erta optimizatsiya qachon bo'lishini aniqlash qiyin. Oldindan o'sish uchun joy qoldirish muhim. Oson optimizatsiya qilish imkonini beradigan yechimlar va platformalarni tanlash kerak. Ba'zida esa yomon kodning bahonasiga aylanadi. Masalan, O(n2) algoritmni olish, chunki O(n) algoritmi murakkabroq bo'lar edi.

Velosiped ixtiro qilish

Bu antipatternning ma'nosi shundaki, dasturchi allaqachon echimlari mavjud bo'lgan va ko'pincha ancha muvaffaqiyatli bo'lgan muammo uchun o'z yechimini ishlab chiqadi.

Dasturchi o'zini aqlli deb hisoblaydi, shuning uchun har bir vazifa uchun o'z yechimini yaratishga intiladi, bu esa faqat vaqt yo'qotishiga va dasturchi ishining samarasiz bo'lishiga olib keladi. Axir yechim, biror maslahatga ega bo'lsa, odatda samarasizdir.

Albatta, o'z yechimini topish imkoniyatini butunlay rad etish mumkin emas, chunki bu kopipastingga to'g'ri yo'l. Dasturchi oldida turgan muammolarni to'g'ri baholashi kerak, shunda tayyor echimlardan foydalangan holda yoki o'zini yaratib ularni osonlikcha hal qiladi.

Ko'pincha bu antipattern sababini vaqt yetishmasligida ko'rish mumkin. Vaqt — bu pul.

Kvadrat g'ildirakli velosiped ixtiro qilish

Bu antipattern juda yahshi tanish, oddiy velosiped ixtiro qilish — bu muammoga yaxshi yechim mavjud bo'lsa-da, o'z yomon yechimini yaratish.

Bu antipattern ikki marta vaqtni oladi: dastlab o'z yechimini ixtiro qilish va amalga oshirish, ikkinchidan esa uning refaktori yoki almashtirilishi uchun.

Dasturchi ma'lum muammolar doirasi uchun turli xil echimlar borligini bilishi kerak, ularning afzalliklari va kamchiliklariga e'tibor berishi kerak.

Dasturchi sifatida duch keladigan barcha muammolarni ikki qismga bo'lish mumkin:

  • bu muammoni aqlli odamlar 30 yil oldin hal qilishgan
  • bu muammoni aqlli odamlar 50 yil oldin hal qilishgan

Dasturlashdagi ko'p muammolar siz tug'ilganingizdan oldin muvaffaqiyatli hal qilingan. Hech narsa ixtiro qilishga hojat yo'q — faqat boshqa odamlarning tajribasini o'rganish kerak (shu sababli kitoblar yoziladi).

2022-yilda biz bunday tug'ilgan kunlarni nishonlashimiz mumkin:

  • Dasturlash tillari
    • C dasturga 50 yil bo'ldi (1972)
    • Java dasturiga 27 yil bo'ldi (1995)
    • Python dasturga 31 yil bo'ldi (1991)
  • Aloqa
    • Internetga 39 yil bo'ldi (1983)
    • Mobil telefonga 49 yil bo'ldi (1973)
    • Birinchi SMS 30 yil oldin yuborilgan (1992)
  • Patternlar
    • MVC pattern 44 yil oldi (1978)
    • SQL ni 48 yil oldin o'ylashgan (1974)
    • Java Beans 26 yil oldin o'ylashgan (1996)
  • Kutubxonalar
    • Hibernate 21 yil oldin o'ylashgan (2001)
    • Spring 20 yil oldin o'ylashgan (2002)
    • Tomcat 23 yil oldin chiqarilgan (1999)
  • Operatsion tizimlar
    • Unix 51 yil oldin chiqarilgan (1971)
    • Windows 37 yil oldin ko'rsatildi (1985)
    • Mac OS 21 yil oldin chiqarilgan (2001)

Bu narsalar biror-bir sababsiz o'ylab topilmagan, ular o'sha vaqtda juda keng tarqalgan va dolzarb bo'lgan muammolarni hal qilish uchun ishlab chiqilgan.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION