Flutterda RichText() va Text.rich() farqlari.
Text.rich()
Text vidjetning bu konstruktori matn uchun qulay bo'lib, bu yordamida bir nechta uslublar (styles) bilan matn vidjetini yaratish imkonini beradi. Argument sifatida u "TextSpan" qabul qiladi, unda har biri o'z uslubiga ega bo'lgan bir nechta kichik TextSpan obyektlarini o'z ichiga olishi mumkin va foydalanish uchun qulay.
RichText()
Bu vidjet murakkab matn layout-larni yaratishga imkon beruvchi vidjet. Matn va uning uslublarini belgilash uchun u TextSpan obyektlari daraxti (object tree)-dan foydalanadi. Har bir TextSpan o'z uslubiga ega bo'lishi va ularni murakkab matn dizaynlarini yaratish uchun joylashtirish mumkin.
Bu ikki vidjet ishlashidagi bazi farqlari haqida ham bilib qo'yish lozim.
Qo'shimcha manbalar:
1. Article : Link
2. Medium : Link
3. Medium : Link
#Flutter
Text.rich()
Text vidjetning bu konstruktori matn uchun qulay bo'lib, bu yordamida bir nechta uslublar (styles) bilan matn vidjetini yaratish imkonini beradi. Argument sifatida u "TextSpan" qabul qiladi, unda har biri o'z uslubiga ega bo'lgan bir nechta kichik TextSpan obyektlarini o'z ichiga olishi mumkin va foydalanish uchun qulay.
RichText()
Bu vidjet murakkab matn layout-larni yaratishga imkon beruvchi vidjet. Matn va uning uslublarini belgilash uchun u TextSpan obyektlari daraxti (object tree)-dan foydalanadi. Har bir TextSpan o'z uslubiga ega bo'lishi va ularni murakkab matn dizaynlarini yaratish uchun joylashtirish mumkin.
Bu ikki vidjet ishlashidagi bazi farqlari haqida ham bilib qo'yish lozim.
Qo'shimcha manbalar:
1. Article : Link
2. Medium : Link
3. Medium : Link
#Flutter
👍2
Forwarded from Flutter For Dev - новости, статьи, дизайн.
Flutter 2025 roadmap update: Команда Flutter подготовила обновленный roadmap по Flutter за 2025 год.
https://medium.com/flutter/flutter-2025-roadmap-f127882b117f
https://medium.com/flutter/flutter-2025-roadmap-f127882b117f
👍1
Flutterda Overlay va OverlayEntry vidjetlari.
Overlay.
Bu vidjet mustaqil ravishda boshqarilishi mumkin bo'lgan kiruvchilar (entries) to'plami. Overlay mustaqil bola vidjetlariga vizual elementlarni, boshqa vidjetlar ustiga qo‘yish orqali ularga suzish (float) imkonini beradi. Overlay ushbu vidjetlarning har biriga OverlayEntry obyektlari yordamida overlay-dagi ishtirokini boshqarish imkonini beradi.
Overlay vidjeti maxsus (custom) Stack-dan foydalanadi. Overlay-dan foydalanishning asosiy holati navigatsiya va ilovadagi sahifalarning yuqori qismiga vidjetlarni qo'shish imkoniyati bilan bog'liq.
OverlayEntry.
bu vidjet, vidjetni o'z ichiga olishi mumkin bo'lgan Overlay-dagi joy. Overlay kiruvchilari OverlayState.insert yoki OverlayState.insertAll funksiyalari yordamida Overlay-ga kiritiladi.
Overlay kiruvchisi bir vaqtning o'zida ko'pi bilan bitta overlay-da bo'lishi mumkin. Overlay Stack-dan foydalanganligi sababli, overlay kiruvchilar o'zlarini overlay ichida joylashtirish uchun Positioned va AnimatedPositioned-dan foydalanishi mumkin.
Qo'shimcha manbalar:
1. Article: Link
2. Medium: Link
#Flutter
Overlay.
Bu vidjet mustaqil ravishda boshqarilishi mumkin bo'lgan kiruvchilar (entries) to'plami. Overlay mustaqil bola vidjetlariga vizual elementlarni, boshqa vidjetlar ustiga qo‘yish orqali ularga suzish (float) imkonini beradi. Overlay ushbu vidjetlarning har biriga OverlayEntry obyektlari yordamida overlay-dagi ishtirokini boshqarish imkonini beradi.
Overlay vidjeti maxsus (custom) Stack-dan foydalanadi. Overlay-dan foydalanishning asosiy holati navigatsiya va ilovadagi sahifalarning yuqori qismiga vidjetlarni qo'shish imkoniyati bilan bog'liq.
OverlayEntry.
bu vidjet, vidjetni o'z ichiga olishi mumkin bo'lgan Overlay-dagi joy. Overlay kiruvchilari OverlayState.insert yoki OverlayState.insertAll funksiyalari yordamida Overlay-ga kiritiladi.
Overlay kiruvchisi bir vaqtning o'zida ko'pi bilan bitta overlay-da bo'lishi mumkin. Overlay Stack-dan foydalanganligi sababli, overlay kiruvchilar o'zlarini overlay ichida joylashtirish uchun Positioned va AnimatedPositioned-dan foydalanishi mumkin.
Qo'shimcha manbalar:
1. Article: Link
2. Medium: Link
#Flutter
👍1
HarmonyOS haqida.
HarmonyOS 4 ta asosiy qatlam (layer)-dan iborat murakkab qatlamli arxitekturadan foydalanadi:
Yadro qatlami (Kernel layer): jarayonlar (processes) va xotira kabi asosiy funksiyalarni boshqaradigan poydevorni tashkil qiladi.
Tizim xizmati qatlami (System service layer): Tarmoq va xavfsizlikni o'z ichiga olgan muhim xizmatlarni boshqaradi.
Framework Layer: Rivojlanish vositalari (development tools) va funksiyalarini taqdim etadi.
Ilova qatlami (App layer): foydalanuvchiga qaratilgan ilovalarni joylashtiradi.
Tizim mikro-kernel arxitekturasidan foydalanadi, u samaradorlik va barqarorlikni oshirish uchun minimal asosiy funksionallikni saqlaydi.
HarmonyOS bir nechta dasturlash tillarini qo'llab-quvvatlaydi:
ArkTS: HarmonyOS Next uchun asosiy til, TypeScript-ning maxsus versiyasi.
JavaScript: HarmonyOS-ga o'tayotgan veb dasturchilar uchun.
C/C++: Tizim darajasida dasturlash uchun.
Java: mavjud Java dasturchilarini qo'llab-quvvatlash uchun.
DevEco Studio: JetBrains platformasiga asoslangan HarmonyOSni ishlab chiqish uchun asosiy IDE.
Bir nechta dasturlash tillarini qo'llab-quvvatlaydigan keng qamrovli SDK, keng qamrovli hujjatlar (docs) va dasturchilar uchun qo'llanmalar, faol dasturchilar hamjamiyati va Huawei Developer Alliance orqali yordam mavjud.
HarmonyOS turli xil qurilmalar (Smartfon, Planshet, Smart TV, watch, PC, laptop, IoT etc) toifalarida sezilarli o'zlashtirishga erishdi. 2025 yil boshida HarmonyOS bilan ishlaydigan 1 milliarddan ortiq qurilmalar, 20 mingdan ortiq ilovalar mavjud.
HarmonyOS 4 ta asosiy qatlam (layer)-dan iborat murakkab qatlamli arxitekturadan foydalanadi:
Yadro qatlami (Kernel layer): jarayonlar (processes) va xotira kabi asosiy funksiyalarni boshqaradigan poydevorni tashkil qiladi.
Tizim xizmati qatlami (System service layer): Tarmoq va xavfsizlikni o'z ichiga olgan muhim xizmatlarni boshqaradi.
Framework Layer: Rivojlanish vositalari (development tools) va funksiyalarini taqdim etadi.
Ilova qatlami (App layer): foydalanuvchiga qaratilgan ilovalarni joylashtiradi.
Tizim mikro-kernel arxitekturasidan foydalanadi, u samaradorlik va barqarorlikni oshirish uchun minimal asosiy funksionallikni saqlaydi.
HarmonyOS bir nechta dasturlash tillarini qo'llab-quvvatlaydi:
ArkTS: HarmonyOS Next uchun asosiy til, TypeScript-ning maxsus versiyasi.
JavaScript: HarmonyOS-ga o'tayotgan veb dasturchilar uchun.
C/C++: Tizim darajasida dasturlash uchun.
Java: mavjud Java dasturchilarini qo'llab-quvvatlash uchun.
DevEco Studio: JetBrains platformasiga asoslangan HarmonyOSni ishlab chiqish uchun asosiy IDE.
Bir nechta dasturlash tillarini qo'llab-quvvatlaydigan keng qamrovli SDK, keng qamrovli hujjatlar (docs) va dasturchilar uchun qo'llanmalar, faol dasturchilar hamjamiyati va Huawei Developer Alliance orqali yordam mavjud.
HarmonyOS turli xil qurilmalar (Smartfon, Planshet, Smart TV, watch, PC, laptop, IoT etc) toifalarida sezilarli o'zlashtirishga erishdi. 2025 yil boshida HarmonyOS bilan ishlaydigan 1 milliarddan ortiq qurilmalar, 20 mingdan ortiq ilovalar mavjud.
Dartda generator funksiya kalit so'zlari.
async.
Bu kalit so'zi funksiyani asinxron deb belgilash uchun ishlatiladi va Future obyektini qaytaradi.
async*.
Bu kalit so'zi Stream-ni qaytaradigan asinxron generator funksiyasini yaratish uchun ishlatiladi. Bu bitta natija emas, balki vaqt o'tishi bilan asinxron natijalar ketma-ketligini yaratmoqchi bo'lganingizda foydalidir.
sync*.
Bu kalit so'zi Iterable qiymatlarini qaytaradigan sinxron generator funksiyasi uchun ishlatiladi.
yield.
Bu kalit so'zi, async* va sync* funksiyalarida, funksiyani chaqiruvchi (caller)-ga bitta qiymatni chiqarish (emit) uchun qo'llaniladi.
yield*.
Bu kalit so'zi qiymatlarni boshqa generatorga (async* yoki sync*) topshirish uchun ishlatiladi.
Qo'shimcha manbalar:
1. Medium : Link
2. Medium : Link
3. Medium : Link
4. GFG : Link
#Flutter
async.
Bu kalit so'zi funksiyani asinxron deb belgilash uchun ishlatiladi va Future obyektini qaytaradi.
async*.
Bu kalit so'zi Stream-ni qaytaradigan asinxron generator funksiyasini yaratish uchun ishlatiladi. Bu bitta natija emas, balki vaqt o'tishi bilan asinxron natijalar ketma-ketligini yaratmoqchi bo'lganingizda foydalidir.
sync*.
Bu kalit so'zi Iterable qiymatlarini qaytaradigan sinxron generator funksiyasi uchun ishlatiladi.
yield.
Bu kalit so'zi, async* va sync* funksiyalarida, funksiyani chaqiruvchi (caller)-ga bitta qiymatni chiqarish (emit) uchun qo'llaniladi.
yield*.
Bu kalit so'zi qiymatlarni boshqa generatorga (async* yoki sync*) topshirish uchun ishlatiladi.
Qo'shimcha manbalar:
1. Medium : Link
2. Medium : Link
3. Medium : Link
4. GFG : Link
#Flutter
Yuqoridagi ikki funksiyaning farqlari :
getData.
Qaytaruvchi qiymati sifatida void belgilangan bo'lsa ham, ichki holatda Future obyektini qaytaradi. Xatoliklar (errors)-ni ushlash qiyin va qiymat qaytishini kutib turish uchun await kalit so'zini ishlatib bo'lmaydi. Asosan event handler va UI callback uchun va operatsiya tugallanishini kutishni istamaganimizda ishlatamiz.
getData2.
Qaytaruvchi qiymati aniq belgilangan. Xatolik va qiymatni qabul qilish oson (catchError, then, whenComplete etc). Jiddiy operatsiyalar uchun yaxshi (Networking, file IO etc).
Manbalar:
1. Official doc : Link
2. Medium : Link
#Flutter
getData.
Qaytaruvchi qiymati sifatida void belgilangan bo'lsa ham, ichki holatda Future obyektini qaytaradi. Xatoliklar (errors)-ni ushlash qiyin va qiymat qaytishini kutib turish uchun await kalit so'zini ishlatib bo'lmaydi. Asosan event handler va UI callback uchun va operatsiya tugallanishini kutishni istamaganimizda ishlatamiz.
getData2.
Qaytaruvchi qiymati aniq belgilangan. Xatolik va qiymatni qabul qilish oson (catchError, then, whenComplete etc). Jiddiy operatsiyalar uchun yaxshi (Networking, file IO etc).
Manbalar:
1. Official doc : Link
2. Medium : Link
#Flutter
👍1
Dart FFI haqida.
FFI (Foreign Function Interface) - bu Dart kodi va C/C++ kutubxonalari o'rtasidagi ko'prik vazifasini bajaradi, yani Dartdan turib nativ C kodlariga murojaat qilish, mavjud kutubxonalarni integratsiya qilish va nativ xotira bilan ishlash imkonini beradi.
Asosiy funksionalliklari.
1. Nativ C/C++ funksiyalarini to'g'ridan-to'g'ri Dart kodidan chaqirish imkonini beradi.
2. Nativ ma'lumotlar tuzilmalari (structure) va turlari (types)-ga kirishni ta'minlaydi.
3. Nativ kutubxonalarning dinamik va statik ulanishini qo'llab-quvvatlaydi.
4. Android, iOS, Windows, macOS va Linux kabi bir nechta platformalar va IoT dasturlarida ishlaydi. Veb-ilovalar FFI o'rniga JavaScript interop-dan foydalanadi.
5. Nativ kod orqali yuqori unumli hisob-kitoblarni amalga oshiradi.
6. Codec, image processing va kriptografiya kabi operatsiyalar uchun ideal yechim.
7. Katta turdagi API-lar uchun avtomatik ulanishlarni ffigen paketi orqali amalga oshirish mumkin.
Qo'shimcha manbalar:
1. Article : Link
2. Codelab : Link
3. Video : Link
#Flutter
FFI (Foreign Function Interface) - bu Dart kodi va C/C++ kutubxonalari o'rtasidagi ko'prik vazifasini bajaradi, yani Dartdan turib nativ C kodlariga murojaat qilish, mavjud kutubxonalarni integratsiya qilish va nativ xotira bilan ishlash imkonini beradi.
Asosiy funksionalliklari.
1. Nativ C/C++ funksiyalarini to'g'ridan-to'g'ri Dart kodidan chaqirish imkonini beradi.
2. Nativ ma'lumotlar tuzilmalari (structure) va turlari (types)-ga kirishni ta'minlaydi.
3. Nativ kutubxonalarning dinamik va statik ulanishini qo'llab-quvvatlaydi.
4. Android, iOS, Windows, macOS va Linux kabi bir nechta platformalar va IoT dasturlarida ishlaydi. Veb-ilovalar FFI o'rniga JavaScript interop-dan foydalanadi.
5. Nativ kod orqali yuqori unumli hisob-kitoblarni amalga oshiradi.
6. Codec, image processing va kriptografiya kabi operatsiyalar uchun ideal yechim.
7. Katta turdagi API-lar uchun avtomatik ulanishlarni ffigen paketi orqali amalga oshirish mumkin.
Qo'shimcha manbalar:
1. Article : Link
2. Codelab : Link
3. Video : Link
#Flutter
Forwarded from Janob Panda
Musiqa tinglab kod yozish
Bugun sizlarga dasturchilar uchun tanish bo'lgan holat - musiqa tinglab ish qilish haqida aytib bermoqchiman.
E'tibordan chetda qolgan, ammo judayam muhim mavzu hisoblanadi. Chunki, bu jarayonni noto’g’ri yo’lga qo’yish ish samaradorligiga yaxshigina ta’sir qilishi mumkin. Ba'zilar shunchaki jim-jitlikda kod yozishni xohlaydi, ba'zilar esa musiqa sadosi ostida. Musiqa va dasturlashni yaqindan tushungan inson sifatida bu mavzuga chuqurroq kirib ko'rdim. Bu post esa aynan musiqa tinglab ish qiluvchilar uchun.
Maqsadingiz ishingizga fokus qilib, miyangizni bir joyga qo'yish, to'g'rimi? Demak, siz aqlingizni chalg'itadigan kuylardan, ovozlardan qochishingiz kerak. Ayniqsa, loyihaning mantiqiy qismlarida ishlayotganingizda.
1. Qo'shiq tinglamang. Sababi, qo'shiqda so'zlar, ma'no bo'ladi. So'z bo'lgan joyda miya ishlaydi, uni tushunishga harakat qiladi. Bu esa miyangizni bir qismi qo'shiqqa qaratilishini bildiradi.
2. Ma'no musiqada ham bo'lishi mumkin. Matni bo'lmasa ham ma'no bo'lishi mumkinmi degan savol tug'iladi. Ha, albatta. Shunday musiqalar borki, ularda ma'no to'la, huddi o'zining tilida nimalardir degandek bo'ladi. Bu turdagi musiqalardan domlalar o'z maruzalarida yoki mazmunli suhbatlar, she'rlar ostida foydalanishadi. Bu turdagi musiqalarni tinglaganingizda miyangiz ishlaydi, xotiralarni eslatishi mumkin.
Namuna:
- https://www.youtube.com/watch?v=9vIcR9BvS1U
- http://youtube.com/watch?v=k0VcX4BvOrc&t=65s
- https://www.youtube.com/watch?v=xFdm-IDvaDU
3. Ma'nosiz musiqalar siz uchun yaxshiroq. Bir xil tempda, tebranishda davom etadigan musiqalar sizga yordam bera oladi. Bu huddi, soatning chiqqillashiga o'xshaydi. Nafaqat musiqa, bir xil tebranishga ega bo'lgan istalgan jarayon miyaga yoqimli bo'ladi. Bolalarni uxlatishda beshikning tebranishi yordam bergani kabi.
Namuna:
- https://www.youtube.com/watch?v=M5QY2_8704o
- https://www.youtube.com/watch?v=mhNg55_IYiw
- https://www.youtube.com/watch?v=-sZqtdT-GVw
Ba'zida ma'nosiz narsalar ma’noli narsalarni tug’ilishiga hizmat qiladi.
@mukhammadkarim_tukhtaboev
Bugun sizlarga dasturchilar uchun tanish bo'lgan holat - musiqa tinglab ish qilish haqida aytib bermoqchiman.
E'tibordan chetda qolgan, ammo judayam muhim mavzu hisoblanadi. Chunki, bu jarayonni noto’g’ri yo’lga qo’yish ish samaradorligiga yaxshigina ta’sir qilishi mumkin. Ba'zilar shunchaki jim-jitlikda kod yozishni xohlaydi, ba'zilar esa musiqa sadosi ostida. Musiqa va dasturlashni yaqindan tushungan inson sifatida bu mavzuga chuqurroq kirib ko'rdim. Bu post esa aynan musiqa tinglab ish qiluvchilar uchun.
Maqsadingiz ishingizga fokus qilib, miyangizni bir joyga qo'yish, to'g'rimi? Demak, siz aqlingizni chalg'itadigan kuylardan, ovozlardan qochishingiz kerak. Ayniqsa, loyihaning mantiqiy qismlarida ishlayotganingizda.
1. Qo'shiq tinglamang. Sababi, qo'shiqda so'zlar, ma'no bo'ladi. So'z bo'lgan joyda miya ishlaydi, uni tushunishga harakat qiladi. Bu esa miyangizni bir qismi qo'shiqqa qaratilishini bildiradi.
2. Ma'no musiqada ham bo'lishi mumkin. Matni bo'lmasa ham ma'no bo'lishi mumkinmi degan savol tug'iladi. Ha, albatta. Shunday musiqalar borki, ularda ma'no to'la, huddi o'zining tilida nimalardir degandek bo'ladi. Bu turdagi musiqalardan domlalar o'z maruzalarida yoki mazmunli suhbatlar, she'rlar ostida foydalanishadi. Bu turdagi musiqalarni tinglaganingizda miyangiz ishlaydi, xotiralarni eslatishi mumkin.
Namuna:
- https://www.youtube.com/watch?v=9vIcR9BvS1U
- http://youtube.com/watch?v=k0VcX4BvOrc&t=65s
- https://www.youtube.com/watch?v=xFdm-IDvaDU
3. Ma'nosiz musiqalar siz uchun yaxshiroq. Bir xil tempda, tebranishda davom etadigan musiqalar sizga yordam bera oladi. Bu huddi, soatning chiqqillashiga o'xshaydi. Nafaqat musiqa, bir xil tebranishga ega bo'lgan istalgan jarayon miyaga yoqimli bo'ladi. Bolalarni uxlatishda beshikning tebranishi yordam bergani kabi.
Namuna:
- https://www.youtube.com/watch?v=M5QY2_8704o
- https://www.youtube.com/watch?v=mhNg55_IYiw
- https://www.youtube.com/watch?v=-sZqtdT-GVw
Ba'zida ma'nosiz narsalar ma’noli narsalarni tug’ilishiga hizmat qiladi.
@mukhammadkarim_tukhtaboev
🏆1
Dizayn naqshlari (Design patterns).
Dasturlashda dasturiy ta'minot dizayni naqshi (software design pattern) dasturiy ta'minotni loyihalashda ko'p kontekstlarda tez-tez uchraydigan muammoning umumiy, qayta ishlatilishi mumkin bo'lgan yechimidir.
Dizayn naqshlari to'g'ridan-to'g'ri manba kodiga ko'chiriladigan tuzilma emas. Aksincha, bu turli xil vaziyatlarda qo'llanilishi mumkin bo'lgan muayyan turdagi muammolarni hal qilish uchun tavsif yoki shablondir.
Kelib chiqishi va evolyutsiyasi.
Dizayn naqshlari kontseptsiyasi birinchi marta Kristofer Aleksandr tomonidan arxitektura kontekstida tasvirlangan va keyinchalik uni dasturlashda qo'llashga ilhom bergan.
To'rtlik to'dasi (Gang of Four): Dizayn naqshlari tarixidagi eng muhim bosqich 1994 yilda Erich Gamma, Richard Helm, Ralf Jonson va Jon Vlissides tomonidan "Design Patterns: Elements of Reusable Object-Oriented Software" kitobi bo'ldi.
Ushbu muhim ish:
23 ta klassik dizayn namunalarini taqdim etdi.
Naqshlar uchta asosiy turga bo'lindi (Creational, Structural, Behavioral).
Dasturlashda asosiy tamal toshiga aylandi.
Naqshlar dastlab C++ va Java kabi OOP tillari kontekstida ishlab chiqilgan va boshqa barcha OOP tillarda ishlatish mumkin.
Nega o'rganish kerak ?
Haqiqat shundaki, siz ko'p yillar davomida bitta naqsh haqida bilmasdan dasturchi sifatida ishlashingiz mumkin. Ko'p odamlar aynan shunday qilishadi. Bunday holatda ham, siz hatto bilmagan holda ba'zi naqshlarni ishlatayotgan bo'lishingiz mumkin. Xo'sh, nega ularni o'rganish kerak ?
Dizayn naqshlari dasturiy ta'minotni loyihalashda keng tarqalgan muammolarni hal qilish uchun sinab ko'rilgan va sinovdan o'tgan yechimlar to'plamidir. Agar siz hech qachon bunday muammolarga duch kelmagan bo'lsangiz ham, naqshlarni bilish hali ham foydalidir, chunki u obyektga yo'naltirilgan dizayn tamoyillaridan foydalangan holda barcha turdagi muammolarni qanday hal qilishni o'rgatadi.
Dizayn naqshlarining real hayotda ishlatilish bo'yicha bazi misollar.
Naqshlarni o'rganish bilan birga anti-pattern-ni ham bilib qo'yish zarar qilmaydi.
Dasturlashda dasturiy ta'minot dizayni naqshi (software design pattern) dasturiy ta'minotni loyihalashda ko'p kontekstlarda tez-tez uchraydigan muammoning umumiy, qayta ishlatilishi mumkin bo'lgan yechimidir.
Dizayn naqshlari to'g'ridan-to'g'ri manba kodiga ko'chiriladigan tuzilma emas. Aksincha, bu turli xil vaziyatlarda qo'llanilishi mumkin bo'lgan muayyan turdagi muammolarni hal qilish uchun tavsif yoki shablondir.
Kelib chiqishi va evolyutsiyasi.
Dizayn naqshlari kontseptsiyasi birinchi marta Kristofer Aleksandr tomonidan arxitektura kontekstida tasvirlangan va keyinchalik uni dasturlashda qo'llashga ilhom bergan.
To'rtlik to'dasi (Gang of Four): Dizayn naqshlari tarixidagi eng muhim bosqich 1994 yilda Erich Gamma, Richard Helm, Ralf Jonson va Jon Vlissides tomonidan "Design Patterns: Elements of Reusable Object-Oriented Software" kitobi bo'ldi.
Ushbu muhim ish:
23 ta klassik dizayn namunalarini taqdim etdi.
Naqshlar uchta asosiy turga bo'lindi (Creational, Structural, Behavioral).
Dasturlashda asosiy tamal toshiga aylandi.
Naqshlar dastlab C++ va Java kabi OOP tillari kontekstida ishlab chiqilgan va boshqa barcha OOP tillarda ishlatish mumkin.
Nega o'rganish kerak ?
Haqiqat shundaki, siz ko'p yillar davomida bitta naqsh haqida bilmasdan dasturchi sifatida ishlashingiz mumkin. Ko'p odamlar aynan shunday qilishadi. Bunday holatda ham, siz hatto bilmagan holda ba'zi naqshlarni ishlatayotgan bo'lishingiz mumkin. Xo'sh, nega ularni o'rganish kerak ?
Dizayn naqshlari dasturiy ta'minotni loyihalashda keng tarqalgan muammolarni hal qilish uchun sinab ko'rilgan va sinovdan o'tgan yechimlar to'plamidir. Agar siz hech qachon bunday muammolarga duch kelmagan bo'lsangiz ham, naqshlarni bilish hali ham foydalidir, chunki u obyektga yo'naltirilgan dizayn tamoyillaridan foydalangan holda barcha turdagi muammolarni qanday hal qilishni o'rgatadi.
Dizayn naqshlarining real hayotda ishlatilish bo'yicha bazi misollar.
Naqshlarni o'rganish bilan birga anti-pattern-ni ham bilib qo'yish zarar qilmaydi.
Singleton pattern.
Bu pattern - Sinfning faqat bitta obyekti (instance) bo'lishini va unga global kirish imkonini taqdim etadi. Ayrim sinflar uchun aynan bitta obyekt bo'lishi muhim. Sinfning faqat bitta obyekti borligini va obyektga osongina kirish mumkinligini qanday ta'minlaymiz?
Global o'zgaruvchi obyektga kirish imkoniyatini beradi, lekin u sizni bir nechta obyektlarni yaratishdan to'sib qololmaydi. Eng yaxshi yechim - sinfning o'zi uning yagona obyektini kuzatish uchun javobgar bo'lishidir.
Singleton pattern bir vaqtning o'zida 2 ta muammoni hal qilishi bilan birgalikda, yagona javobgarlik prinsipini (SRP) ham buzadi.
Singleton-ni qo'llashning 2ta bosqichi mavjud:
1. Boshqa obyektlarning yaratilishidan himoyalanish uchun (default) konstruktorni private qilib qo'yish.
2. Konstruktor vazifasini bajaradigan statik metod yaratish. Ichki holatda bu metod obyekt yaratish uchun private konstruktorni chaqiradi va uni statik maydonda saqlaydi.
Manbalar:
1. Book : Link
2. Article : Link
3. Medium : Link
Bu pattern - Sinfning faqat bitta obyekti (instance) bo'lishini va unga global kirish imkonini taqdim etadi. Ayrim sinflar uchun aynan bitta obyekt bo'lishi muhim. Sinfning faqat bitta obyekti borligini va obyektga osongina kirish mumkinligini qanday ta'minlaymiz?
Global o'zgaruvchi obyektga kirish imkoniyatini beradi, lekin u sizni bir nechta obyektlarni yaratishdan to'sib qololmaydi. Eng yaxshi yechim - sinfning o'zi uning yagona obyektini kuzatish uchun javobgar bo'lishidir.
Singleton pattern bir vaqtning o'zida 2 ta muammoni hal qilishi bilan birgalikda, yagona javobgarlik prinsipini (SRP) ham buzadi.
Singleton-ni qo'llashning 2ta bosqichi mavjud:
1. Boshqa obyektlarning yaratilishidan himoyalanish uchun (default) konstruktorni private qilib qo'yish.
2. Konstruktor vazifasini bajaradigan statik metod yaratish. Ichki holatda bu metod obyekt yaratish uchun private konstruktorni chaqiradi va uni statik maydonda saqlaydi.
Manbalar:
1. Book : Link
2. Article : Link
3. Medium : Link
Builder pattern.
Bu pattern - murakkab obyektlarni bosqichma-bosqich, bir xil koddan foydalangan holda obyektning turli xil turlari va ko'rinishlarini yaratishga imkon beradi.
Pizza class: Bu sinf yakuniy mahsulotni ifodalaydi. Uning maydonlariga qiymat berish uchun PizzaBuilder obyektini qabul qiladigan private konstruktor mavjud. Bu pizza faqat builder orqali yaratilishini ta'minlaydi.
PizzaBuilder class: Bu sinf Pizza obyektini qurish uchun javobgardir. Bu sinf o'zidagi maydonlarga qiymat berish uchun metodlar va Pizza obyektini yaratish uchun build() metodi mavjud.
Validation: build() metodi obyekt yaratilishidan oldingi tekshiruvlarni amalga oshiradi va kerakli ko'rinishdagi obyektni yaratadi.
Dartda Builder pattern ishini cascade operator qila oladi.
Manbalar:
1. Book : Link
2. Article : Link
3. Medium : Link
Bu pattern - murakkab obyektlarni bosqichma-bosqich, bir xil koddan foydalangan holda obyektning turli xil turlari va ko'rinishlarini yaratishga imkon beradi.
Pizza class: Bu sinf yakuniy mahsulotni ifodalaydi. Uning maydonlariga qiymat berish uchun PizzaBuilder obyektini qabul qiladigan private konstruktor mavjud. Bu pizza faqat builder orqali yaratilishini ta'minlaydi.
PizzaBuilder class: Bu sinf Pizza obyektini qurish uchun javobgardir. Bu sinf o'zidagi maydonlarga qiymat berish uchun metodlar va Pizza obyektini yaratish uchun build() metodi mavjud.
Validation: build() metodi obyekt yaratilishidan oldingi tekshiruvlarni amalga oshiradi va kerakli ko'rinishdagi obyektni yaratadi.
Dartda Builder pattern ishini cascade operator qila oladi.
Manbalar:
1. Book : Link
2. Article : Link
3. Medium : Link
Forwarded from Samandar Ahadjonov
Media is too big
VIEW IN TELEGRAM
#dartdosh #podcast
🤔 O'zbekistonda Rekruiterlarga oson emasmi?
Dartdosh podkastining bugungi sonida tajribali HR Muborak Babayeva bilan suhbat qurdik.
Suhbat davomida:
- Xodim qidirish va topishdagi qiyinchiliklar
- Dasturchilardagi rekruiterlarga nisbatan e'tirozlar
- Ishga topshirishdagi e'tibor qilinishi shart bo'lgan holatlar
- Rezyume va ijtimoiy profilllarni yuritish bo'yicha yo'riqlar
- Ish suhbatidan oson o'tish yo'llari
- Umumiy xatolar, kamchiliklar va yutuqlar
borasida tahliliy va tanqidiy ohangda dardlashdik.
🔗 Podkast uchun havola: https://youtu.be/bOkMgJsh2Ko?si=mmgG9DABRzhjRusn
P.s: Postni tarqatishni va videoga like bosib, izoh yozishni unutmang.
@ahadjonovss
🤔 O'zbekistonda Rekruiterlarga oson emasmi?
Dartdosh podkastining bugungi sonida tajribali HR Muborak Babayeva bilan suhbat qurdik.
Suhbat davomida:
- Xodim qidirish va topishdagi qiyinchiliklar
- Dasturchilardagi rekruiterlarga nisbatan e'tirozlar
- Ishga topshirishdagi e'tibor qilinishi shart bo'lgan holatlar
- Rezyume va ijtimoiy profilllarni yuritish bo'yicha yo'riqlar
- Ish suhbatidan oson o'tish yo'llari
- Umumiy xatolar, kamchiliklar va yutuqlar
borasida tahliliy va tanqidiy ohangda dardlashdik.
🔗 Podkast uchun havola: https://youtu.be/bOkMgJsh2Ko?si=mmgG9DABRzhjRusn
P.s: Postni tarqatishni va videoga like bosib, izoh yozishni unutmang.
@ahadjonovss
Prototype pattern.
Bu pattern - obyektning nusxasini yaratishga yordam beradi va nusxalash logikasini sinfga bog'liqlikdan ajratadi.
Muammo.
Sizda obyekt bor va uning aniq nusxasini yaratmoqchisiz. Buni qanday qilgan bo'lardingiz? Birinchidan, siz bir xil sinfning yangi obyektini yaratib keyin asl obyektning barcha maydonlari qiymatlarini yangi obyektga nusxalashingiz kerak.
Bu yerda bir muammo bor. Barcha obyektlarni shunday nusxalash mumkin emas, chunki obyektning ba'zi maydonlari private bo'lishi mumkin va obyektning o'zidan tashqarida ko'rinmaydi. Bundan tashqari nusxa yaratish uchun sinf nomini bilish kerak bo'ladi bu esa nusxalash sinfga bog'liqligini anglatadi.
Yechim.
Prototip pattern nusxalash jarayonini nusxalanayotgan obyektga topshiradigan interfeysni taqdim etadi va odatda bu interfeys yagona clone metodini o'z ichiga oladi. Nusxalashni qo'llab-quvvatlaydigan obyekt prototip deb ataladi.
Manbalar:
1. Book : Link
2. Article : Link
3. Medium : Link
Bu pattern - obyektning nusxasini yaratishga yordam beradi va nusxalash logikasini sinfga bog'liqlikdan ajratadi.
Muammo.
Sizda obyekt bor va uning aniq nusxasini yaratmoqchisiz. Buni qanday qilgan bo'lardingiz? Birinchidan, siz bir xil sinfning yangi obyektini yaratib keyin asl obyektning barcha maydonlari qiymatlarini yangi obyektga nusxalashingiz kerak.
Bu yerda bir muammo bor. Barcha obyektlarni shunday nusxalash mumkin emas, chunki obyektning ba'zi maydonlari private bo'lishi mumkin va obyektning o'zidan tashqarida ko'rinmaydi. Bundan tashqari nusxa yaratish uchun sinf nomini bilish kerak bo'ladi bu esa nusxalash sinfga bog'liqligini anglatadi.
Yechim.
Prototip pattern nusxalash jarayonini nusxalanayotgan obyektga topshiradigan interfeysni taqdim etadi va odatda bu interfeys yagona clone metodini o'z ichiga oladi. Nusxalashni qo'llab-quvvatlaydigan obyekt prototip deb ataladi.
Manbalar:
1. Book : Link
2. Article : Link
3. Medium : Link
👍1
Adapter pattern.
Bu pattern - mos kelmaydigan interfeyslarga ega obyektlarning birgalikda ishlashiga imkon beradi. U buni mijozga mos interfeysni taqdim etadigan obyekt (adapter) ichiga kerakli obyektni (adaptee) o'rash orqali erishadi. Bu pattern vositachi bo'lganligi sababli, Adapter-ni ba'zan "Wrapper" deb ham atashadi.
Qisqacha qilib aytganda Adapter bu ikki turli tilda gaplashadigan inson o'rtasidagi tarjimon deyish mumkin.
Adapter-ning 2 turi mavjud:
1. Sinf adapteri - vorislik (inheritance) orqali sinf irarxiyasidan foydalandi (subclassing) va asosan ko'p vorislilikni qo'llab quvvatlaydigan C++ kabi tillarda ishlatiladi.
2. Obyekt adapteri - kompozitsiya (composition) yani sinf obyektini o'z ichida saqlash orqali kerakli funksionallikni taqdim etadi.
Manbalar:
1. Book : Link
2. Article : Link
3. Article : Link
4. Medium : Link
Bu pattern - mos kelmaydigan interfeyslarga ega obyektlarning birgalikda ishlashiga imkon beradi. U buni mijozga mos interfeysni taqdim etadigan obyekt (adapter) ichiga kerakli obyektni (adaptee) o'rash orqali erishadi. Bu pattern vositachi bo'lganligi sababli, Adapter-ni ba'zan "Wrapper" deb ham atashadi.
Qisqacha qilib aytganda Adapter bu ikki turli tilda gaplashadigan inson o'rtasidagi tarjimon deyish mumkin.
Adapter-ning 2 turi mavjud:
1. Sinf adapteri - vorislik (inheritance) orqali sinf irarxiyasidan foydalandi (subclassing) va asosan ko'p vorislilikni qo'llab quvvatlaydigan C++ kabi tillarda ishlatiladi.
2. Obyekt adapteri - kompozitsiya (composition) yani sinf obyektini o'z ichida saqlash orqali kerakli funksionallikni taqdim etadi.
Manbalar:
1. Book : Link
2. Article : Link
3. Article : Link
4. Medium : Link
Forwarded from Qudrat Abdurahimov
Soft Skills = Human Skills = Odamiylik!
Soft Skills bu yumshoq ko'nikma emas!
O'zbekchada yumshoq ko'nikma degan narsaning o'zi yo'q.
Asl moxiyatni tushunmagan odamlar tarjima qilganida boshqalar ham shunga ergashyapti.
Soft Skills ning sinonimi Human Skills. O'zbekchasiga "Odamiylik ko'nikmalari" degani.
Misollar orqali tushuntiraman:
1) Vaqtga amal qilish — bu odamiylik
2) Gapni bo‘lmasdan tinglash — bu odamiylik
3) Jamoada mas’uliyat olish — bu odamiylik
4) Tanqidni qabul qilish va yetkazish — bu odamiylik
Xullas, yumshoq ko'nikma atamasini yo'qotib, "Odamiylik ko'nikmalari" atamasini joriy qilamiz. Bunga yillar ketishi mumkin. Lekin to'g'risi ham shu.
@QudratAbdurahimov - Soft Skills|Odamiylik ustozi
P.S. Xabar 21.05.2025 sanada yozildi. Ko'ramiz qachon maqsadga erishar ekamiz :)
Telegram | Instagram | Youtube
Soft Skills bu yumshoq ko'nikma emas!
O'zbekchada yumshoq ko'nikma degan narsaning o'zi yo'q.
Asl moxiyatni tushunmagan odamlar tarjima qilganida boshqalar ham shunga ergashyapti.
Soft Skills ning sinonimi Human Skills. O'zbekchasiga "Odamiylik ko'nikmalari" degani.
Misollar orqali tushuntiraman:
1) Vaqtga amal qilish — bu odamiylik
2) Gapni bo‘lmasdan tinglash — bu odamiylik
3) Jamoada mas’uliyat olish — bu odamiylik
4) Tanqidni qabul qilish va yetkazish — bu odamiylik
Xullas, yumshoq ko'nikma atamasini yo'qotib, "Odamiylik ko'nikmalari" atamasini joriy qilamiz. Bunga yillar ketishi mumkin. Lekin to'g'risi ham shu.
@QudratAbdurahimov - Soft Skills|Odamiylik ustozi
P.S. Xabar 21.05.2025 sanada yozildi. Ko'ramiz qachon maqsadga erishar ekamiz :)
Telegram | Instagram | Youtube
Telegram
Qudrat Abdurahimov
GITA asoschisi |
Dasturchi ustoz |
Soft skills murabbiy
Odamiylikni o'rganamiz!
youtube.com/@QudratAbdurahimov
@gitauz
📞 +998 90 808 37 38
Dasturchi ustoz |
Soft skills murabbiy
Odamiylikni o'rganamiz!
youtube.com/@QudratAbdurahimov
@gitauz
📞 +998 90 808 37 38