Dart tiliga kirish O'zgaruvchilar va konstantalar Primitiv ma'lumotlar turlari
-bob. Obyektga yo‘naltirilgan dasturlash
Download 374.15 Kb.
|
3-mustaqil ish
4-bob. Obyektga yo‘naltirilgan dasturlash
Sinflar va ob'ektlar Dart ob'ektga yo'naltirilgan tildir va biz Dart dasturida boshqaradigan har bir qiymat ob'ektdir. Ob'ekt ba'zi sinfning namunasini, sinf esa ob'ektning shablonini yoki tavsifini ifodalaydi. Quyidagi o'xshashlikni ham chizishingiz mumkin. Har birimiz inson haqida qandaydir tasavvurga egamiz - ikki qo'li, ikki oyog'i, boshi, tanasi va boshqalar. Ba'zi bir naqsh mavjud - bu naqshni sinf deb atash mumkin. Haqiqatan ham mavjud bo'lgan shaxs (aslida bu sinfning namunasi) bu sinfning ob'ektidir. Sinf class kalit so'zi yordamida aniqlanadi:
Bu erda Person klassi aniqlanadi. Sinf nomidan keyin jingalak qavslar mavjud bo'lib, ular orasiga sinf tanasi - ya'ni uning maydonlari va usullari joylashtiriladi. Har qanday ob'ekt ikkita asosiy xususiyatga ega bo'lishi mumkin: holat - ob'ekt saqlaydigan ba'zi ma'lumotlar va xatti-harakatlar - ob'ekt bajarishi mumkin bo'lgan harakatlar. Ob'ekt holatini sinfda saqlash uchun maydonlar yoki sinf o'zgaruvchilari ishlatiladi. Usullar sinfdagi ob'ektning harakatini aniqlash uchun ishlatiladi. Masalan, shaxsni ifodalovchi Person sinfi quyidagi ta'rifga ega bo'lishi mumkin:
Person klassi ikkita maydonni belgilaydi: ism shaxsning ismini, yoshi esa uning yoshini bildiradi. Va displey usuli ham aniqlangan, u hech narsa qaytarmaydi va faqat bu ma'lumotlarni konsolga chop etadi. Shuni yodda tutish kerakki, o'zgaruvchilar nomi va yoshi null bo'lmagan String va int turlarini ifodalaganligi sababli, biz ushbu o'zgaruvchilarni boshlang'ich qiymatlari bilan ta'minlashimiz kerak. Yoki null bo'ladigan turlardan foydalanishimiz mumkin, keyin boshlang'ich qiymatlarni kiritish shart emas:
Endi biz ushbu sinfdan foydalanamiz. Buning uchun biz quyidagi dasturni belgilaymiz:
Sinf yangi turni ifodalaydi, shuning uchun biz berilgan turni ifodalovchi o'zgaruvchilarni aniqlashimiz mumkin. Demak, bu yerda asosiy funksiyada Person sinfini ifodalovchi tom o‘zgaruvchisi aniqlanadi. Ammo hozircha bu o'zgaruvchi hech qanday ob'ektga ishora qilmaydi va u sukut bo'yicha null. Umuman olganda, biz uni hali ishlata olmaymiz, shuning uchun avval Person sinfining ob'ektini yaratishingiz kerak. Konstruktorlar
Agar sinfda konstruktor aniqlanmagan bo'lsa, bu sinf uchun avtomatik ravishda parametrsiz konstruktor yaratiladi. Yuqorida tavsiflangan Person sinfida konstruktorlar mavjud emas. Shuning uchun, u uchun avtomatik ravishda standart konstruktor yaratiladi, biz undan Person ob'ektini yaratishda foydalanishimiz mumkin. Xususan, bitta ob'ekt yarataylik:
Shaxs () ifodasi Shaxs ob'ektini yaratish uchun ishlatiladi. Dartning eski versiyalarida konstruktorni chaqirish uchun yangi operator ham ishlatilgan: Shaxs tom = new Person () ;. Ammo Dartning so'nggi versiyalarida yangi operatorni o'tkazib yuborish mumkin. Standart konstruktor hech qanday parametrlarni olmaydi. Natijada, ushbu ifoda bajarilgandan so'ng, xotirada Person ob'ektining barcha ma'lumotlari saqlanadigan bo'lim ajratiladi. Va tom o'zgaruvchisi yaratilgan ob'ektga havola oladi. Agar konstruktor ob'ekt o'zgaruvchilari qiymatlarini ishga tushirmasa, ular standart qiymatlarni, ya'ni null qiymatini oladi (ya'ni, aslida hech qanday qiymat yo'q). Ob'ektni yaratgandan so'ng, biz tom o'zgaruvchisi orqali Person ob'ektining o'zgaruvchilari va usullariga kirishimiz mumkin. Buning uchun nuqta (.) operatoridan foydalaning - ya'ni nuqta orqali maydon yoki usul nomini belgilang: tom.name. Masalan, siz maydon qiymatlarini belgilashingiz yoki olishingiz mumkin: tom.name = "Tom".
Natijada, biz konsolda ko'ramiz: Name: undefined Age: 0
Agar ob'ektni yaratishda ba'zi bir mantiq amalga oshirilishi kerak bo'lsa, masalan, sinfning maydonlari muayyan qiymatlarni olishi uchun, siz sinfda o'zingizning konstruktorlaringizni belgilashingiz mumkin. Masalan:
Endi sinfda ikkita parametrni qabul qiluvchi va ob'ekt maydonlarining qiymatlarini o'rnatish uchun foydalanadigan konstruktor mavjud. Dasturning konsol chiqishi: Name: Sam Age: 25 Shuni yodda tutish kerakki, agar biz yuqoridagi holatda bo'lgani kabi sinfda o'z konstruktorlarimizni aniqlasak, u holda biz standart konstruktordan foydalana olmaymiz. null va sinflar Barcha o'rnatilgan turlar singari, sinflar sukut bo'yicha null bo'lmagan turni ifodalaydi. Agar bizga sinf ob'ekti null qiymatni saqlashi kerak bo'lsa, biz null bo'ladigan sinfdan foydalanishimiz mumkin, ya'ni tur ta'rifiga? operatorini qo'shishimiz mumkin:
Null bo'lishi mumkin bo'lmagan boshqa turdagi o'zgaruvchilarda bo'lgani kabi, chop etish (tom) chaqiruvida, o'zgaruvchini ishlatishdan oldin ishga tushirish kerak. Shu bilan birga, null bo'lgan sinflardan foydalanganda biz quyidagi vaziyatga tushishimiz mumkin. Yuqorida aytib o'tilganidek, nuqta (.) operatori ob'ektning maydonlari va usullariga murojaat qilish uchun ishlatiladi, undan keyin maydon / usul nomi keladi. Biroq, biz bilganimizdek, null bo'ladigan sinflarning o'zgaruvchilariga qiymat berilmagan bo'lsa, ular sukut bo'yicha null bo'ladi. Buni hisobga olish kerak. Masalan, inisializatsiya qilinmagan o'zgaruvchi orqali ob'ektning maydonlariga murojaat qilaylik:
Sam.age = 23 qatori bajarilganda, dastur istisno qiladi va chiqadi. Chunki biz konstruktor yordamida Person sinfining obyektini yaratmadik. Shuning uchun, sam null, ya'ni aslida hech narsa yo'q, ob'ekt yo'q. Shunga ko'ra, biz mavjud bo'lmagan ob'ektning maydoniga murojaat qila olmaymiz. Xuddi shunday muammoga duch kelmaslik uchun biz boshqa operatordan foydalanishimiz mumkin -?. Maydonlarga murojaat qilish uchun.:
Operator?. o'zgaruvchining qiymatini tekshiring, agar o'zgaruvchi null bo'lmasa, u holda uning maydonlari va usullariga chaqiruv amalga oshiriladi. Agar u null bo'lsa, o'zgaruvchiga havola e'tiborga olinmaydi. Nomlangan konstruktorlar Odatiy bo'lib, biz faqat bitta umumiy konstruktorni belgilashimiz mumkin. Agar sinfda bir vaqtning o'zida bir nechta konstruktorlardan foydalanish kerak bo'lsa, bu holda biz nomli konstruktorlardan foydalanishimiz kerak. Masalan:
Bu holda ikkita qo'shimcha konstruktor aniqlanadi: Person.undefined hech qanday parametrsiz va Person.fromName bitta parametrli. Bunday konstruktorlarni chaqirishda siz ularning to'liq ismini ko'rsatishingiz kerak: Shaxs tom = Person.fromName ("Tom"); Dasturning konsol chiqishi: Name: undefined Age: 18 Name: Tom Age: 18 Name: Sam Age: 25 Bu kalit so'z this kalit so'zi sinfning joriy nusxasiga havolani ifodalaydi. Ushbu kalit so'z orqali biz ob'ektning o'zgaruvchilari, usullariga murojaat qilishimiz, shuningdek uning konstruktorlarini chaqirishimiz mumkin. Masalan:
Konstruktorda parametrlar sinf maydonlari bilan bir xil nomlanadi. Maydonlar va parametrlarni farqlash uchun this kalit so'zi ishlatiladi:
Shunday qilib, bu holda biz nom parametrining qiymati nom maydoniga tayinlanganligini ko'rsatamiz. Konstruktorning qisqartirilgan versiyasi Bundan tashqari, this kalit so'zidan foydalanib, biz konstruktor ta'rifini qisqartirishimiz mumkin:
Konstruktor chaqirilganda:
Keyin "Sam" qatori this.name, 25 raqami esa - this.age uzatiladi. Shuni ta'kidlash kerakki, konstruktorning ushbu ta'rifi bilan biz sinf maydonlari uchun boshlang'ich qiymatlarni o'rnatishimiz shart emas. Konstruktor zanjirini chaqirish
Bunday holda, birinchi va ikkinchi konstruktorlar uchinchisini chaqirishadi, unda nom va yosh maydonlari aslida o'rnatiladi. Initializers Initializers sinf maydonlarini ishga tushirish usulini taqdim etadi:
Initsializatsiya ro'yxati konstruktor parametrlaridan keyin ochiladigan jingalak qavs oldidan ikki nuqta bilan ajratilgan holda ko'rsatiladi:
Odatda, ishga tushirish ro'yxatlari maydon qiymatlarini o'rnatish uchun konstruktor parametrlaridan foydalanadi. Bunday holda, konstruktor boshqa ishlarni bajarishi mumkin. Shu bilan birga, maydonlarni ishga tushirishda siz qandaydir dinamik mantiqni o'rnatishingiz mumkin:
Shuni yodda tutish kerakki, initsializatorlardan foydalanilganda, initsializatsiya ro'yxatlaridagi maydonlar birinchi navbatda ishga tushiriladi va shundan keyingina konstruktordagi mantiq bajariladi:
Bunday holda, yosh maydonining qiymati 8 bo'ladi, chunki konstruktor initsializator tomonidan o'rnatilgan qiymatni qayta yozadi. Kaskadli yozuv Kaskadli yozuv - operatsiya .. bitta ob'ektda operatsiyalar ketma-ketligini bajarishga imkon beradi:
Bunday holda, asosiy funktsiyadagi kod quyidagiga o'xshash bo'ladi:
Xuddi shunday, siz murakkabroq ob'ektlarga kirishingiz mumkin:
Konsol chiqishi: Компания Huawei платит налоги
Имя: Tom Возраст: 36 работает в Huawei Agar konstruktorni chaqirishning hojati bo'lmasa, biz shunday yozishimiz mumkin edi:
Download 374.15 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling