A Dart kutubxona mumkin bo'l tuzilgan ning a yolg'iz fayl yoki bir nechta fayllar. In the eng umumiy va tavsiya etilgan usul, fayl yaratishda siz kichik kutubxona yaratasiz. Ammo, agar xohlasangiz, kutubxona ta'rifini bir nechta fayllarga bo'lishingiz mumkin. Kamroq tarqalgan bo'lsa-da, u kontekstga qarab foydali bo'lishi mumkin, ayniqsa, masalan, bir-biriga juda bog'liq bo'lgan sinflar bilan ishlashda.
Bo'lish to'g'risidagi qaror nafaqat inkapsulyatsiya, balki kutubxona mijozlari ularni qanday import qilishlari va foydalanishlari uchun ham muhimdir. Aytaylik, bizda bir-biriga chambarchas bog'langan ikkita sinf bor, ular ishlashlari uchun birga yashashlari kerak. Ularni turli kutubxonalarga bo'lish bo'ladi kuch xaridorlar uchun Import ikkalasi ham kutubxonalar. Bu hisoblanadi emas the eng amaliy yo'l, shuning uchun ochiq kodli kutubxonalarni yaratishda kutubxonaning bo'linishidan ehtiyot bo'lish juda muhimdir.
Oldin biz olish ichiga muqobil yo'llari ning aniqlash a kutubxona, biz kerak uchun olish a qarang da kutubxona maxfiyligi; bu inkapsulyatsiyaga yordam beradi va nima uchun kutubxonani bir nechta fayllarga to'g'ri ajratishimiz kerakligini tushunishni osonlashtiradi .
Kutubxona a'zosi maxfiylik
The eng umumiy yo'l uchun boshqaruv maxfiylik (kod kapsülleme ), ichida eng tillar, da sodir bo'ladi sinf darajasi. Bu tomonidan ba'zi bir aniq qo'shish ni aniqlaydigan kalit so'z a'zolik darajasi kirish, shunday kabi himoyalangan va xususiy ichida the Java til, uchun misol; ko'rib chiqing quyidagi diagramma:
Dart-da har bir identifikatorga, sukut bo'yicha, kutubxonaning ichida va tashqarisida istalgan joydan kirish mumkin, agar u _ prefiksi bilan qo'yilmagan bo'lsa, bundan mustasno (pastki chiziq) belgisi. Bu shaxsiy bo'lishini anglatadi uchun the e'lon qilish kutubxonalar, oldini olish bu dan bo'lish foydalanish mumkin dan the tashqarida. Keyingi misolni ko'rib chiqing, bu erda biz _ dan foydalanganmiz. prefiks.
Bundan tashqari, Eslatma bu bu qismi ning Dart hisoblanadi juda ehtimol uchun o'zgartirish ichida kelajak versiyalari, kabi Dart hamjamiyatining bir qismiga Java va boshqa ob'ektga yo'naltirilgan tillar ta'sir ko'rsatdi, bu erda maxfiylik nazorati sinf darajasida amalga oshiriladi.
Kutubxona ta'rifi
Dartda kutubxonani belgilash uchun kalit so'z bor - kutubxona , siz kutganingizdek. Ixtiyoriy bo'lsa-da, bu kalit so'z hisoblanadi juda foydali qachon yaratish bir nechta fayl kutubxonalar yoki uchun yaratmoq API sifatida nashr qilishdan oldin kutubxonalar uchun hujjatlar.
Keling olish a qarang da Qanday uchun aniqlash a kutubxona foydalanish bu kalit so'z, va the bir nechta to'g'ri inkapsulyatsiya qilish va kutubxonadan foydalanishni yanada ixcham qilish uchun kutubxonalarni yaratishda qo'llanilishi mumkin bo'lgan yondashuvlar .
A bitta faylli kutubxona
The eng soddalashtirilgan yo'l uchun aniqlash a kutubxona hisoblanadi tomonidan qo'shish hammasi the o'zaro bog'liq kod, bu sinflar, yuqori darajadagi funktsiyalar va o'zgaruvchilar bitta faylga. Masalan, bizning oldingi shaxs kutubxonasi quyidagicha:
sinf Shaxs { String ism; String familiya; Shaxs turi _turi;
Shaxs({tush.firstName, this.lastName});
String toString() => "($_turi): $firstName $lastName";
}
enum Shaxs turi { talaba, xodim }
sinf Talaba uzaytiradi Shaxs { Talaba ({ismi, familiya})
: super(ismi: ism, familiya: familiya) {
_turi = PersonType.student;
}
}
sinf Dasturchi uzaytiradi Shaxs { Dasturchi({ismi, familiya})
: super(ismi: ism, familiya: familiya) {
_turi = PersonType.employee;
}
}
U yerda hisoblanadi hech narsa yangi uchun Eslatma Bu yerga ichida the fayl ta'rifi, shunchaki the quyidagi ikkita kuzatish:
Fayl o'z-o'zidan kutubxona, shuning uchun biz hech narsani aniq e'lon qilishimiz shart emas. The _turi maydon hisoblanadi xususiy uchun the kutubxona, bu bu, bu faqat foydalanish mumkin tomonidan kod xuddi shu kutubxonadan.
Keling demoq bu biz harakat qilib ko'ring uchun foydalanish bular sinflar dan boshqa kutubxona, quyidagicha :
asosiy() {
Dasturchi dasturchi = Dasturchi (ismi: "Dekan", familiya: "Pugh");
// biz mumkin emas kirish the _turi mulk kabi bu hisoblanadi xususiy uchun the
// yagona_fayl kutubxona dasturchi._turi = PersonType.employee;
chop etish (dasturchi);
}
Sifatida siz mumkin qarang, biz bor kirish uchun hammasi ning the ommaviy identifikatorlar dan the avval belgilangan kutubxona. Biz _turiga kira olmaymiz qiymatni belgilash xususiyati, garchi, ichida
the toString() usuli ning the Shaxs sinf, uning qiymat hisoblanadi fosh qilingan.
Barcha tegishli kodlarni faqat bitta faylda aniqlash jozibali bo'lsa-da, bu qiyinlashishi mumkin uchun saqlash, kabi the kod va uning murakkablik o'sadi ustida vaqt. Buning o'rniga, foydalanish bu vaqt o'tishi bilan o'zgarishi mumkin bo'lmagan ta'riflarning oddiy turlari uchun .
Bo'linish kutubxonalar ichiga bir nechta fayllar
Kutubxonani aniqlashning yagona faylli yondashuvini ko'rdik, endi keling, kutubxonani qanday ajratishni ko'rib chiqamiz kutubxona ta'rifi ichiga bir nechta fayllar uchun ruxsat berish Biz uchun tashkil qilish the loyiha ichida kichik, qayta foydalanish mumkin bo'lgan qismlar (bu kutubxonalardan foydalanishning haqiqiy maqsadi).
Kimga aniqlash a bir nechta fayl kutubxona, biz mumkin foydalanish the birlashtirilgan qismi , qismi ning , va kutubxonasi bayonotlar:
qismi : Bu imkon beradi kutubxona uchun shuni aniqlang bu dan iborat kichik kutubxona qismlari.
qismi dan : The kichik kutubxona qismi belgilaydi qaysi kutubxona bu yordam beradi uchun tuzmoq. kutubxona : Bu oldingi qismdan foydalanish uchun bayonotlar, chunki biz bir qismini bog'lashimiz kerak asosiy bilan fayllar kutubxonaning bir qismi.
Keling Imtihon nima the Oldingi misol ko'rinadi kabi tomonidan foydalanish the qismi bayonotlar:
// the "asosiy" qismi ning the kutubxona, person_library.dart
// belgilangan foydalanish the kutubxona kalit so'z va ro'yxatga olish qismlar quyida kutubxona shaxs;
qismi 'person_types.dart'; qismi 'student.dart';
qismi 'programmer.dart';
sinf Shaxs { String ism; String familiya; Shaxs turi _turi;
Shaxs({tush.firstName, this.lastName});
String toString() => "($_turi): $firstName $lastName";
}
Keling qilish biroz kuzatishlar haqida the Oldingi kod, kabi quyidagicha:
Kutubxona _ kalit so'zdan keyin kutubxona identifikatori, shaxs keladi hol. Bu yaxshi amaliyot uchun nomi the identifikator tomonidan foydalanish faqat kichik harf belgilar va pastki chiziq belgisi ajratuvchi sifatida. Bizning misolimizni person_lib kabi har qanday narsa deb atash mumkin yoki person_library .
The kutubxona qismlar bor sanab o'tilgan shunchaki quyida the kutubxona ta'rifi. Kodning o'zi hech narsani o'zgartirmaydi.
The qismi sintaksis hisoblanadi belgilangan quyidagicha :
The Shaxs turi qismi hisoblanadi belgilangan ichida the person_types.dart fayl:
qismi ning shaxs;
enum Shaxs turi { talaba, xodim }
The Talaba qismi hisoblanadi belgilangan ichida the talaba.dart fayl:
qismi ning shaxs;
sinf Talaba uzaytiradi Shaxs { Talaba ({ismi, familiya})
: super(ismi: ism, familiya: familiya) {
_turi = PersonType.student;
}
}
The Dasturchi qismi hisoblanadi belgilangan ichida the programmer.dart fayl:
qismi ning shaxs;
sinf Dasturchi uzaytiradi Shaxs { Dasturchi({ismi, familiya})
: super(ismi: ism, familiya: familiya) {
_turi = PersonType.employee;
}
}
Bundan tashqari, kabi siz mumkin qarang, the _turi mulk hisoblanadi shuningdek foydalanish mumkin ichida the qismi fayllar, kabi bu shaxs uchun shaxsiydir kutubxona va barcha fayllar bitta kutubxonada.
Keling olish a qarang da the quyidagi kod, qaysi foydalanadi the odam kutubxona:
Import 'person_lib/person_library.dart';
asosiy() {
// kirish the Dasturchi sinf hisoblanadi ruxsat berilgan, qismi ning the shaxs_kutubxonasi Dasturchi dasturchi = Dasturchi (ismi: "Dekan", familiya: "Pugh");
// mumkin emas kirish the _turi mulk, bu hisoblanadi xususiy uchun odam kutubxona
// dasturchi._turi = PersonType.employee;
chop etish (dasturchi);
}
Oling a qarang da the Oldingi kod; the odam kutubxona mijoz qiladi emas kerak uchun har qanday narsani o'zgartiring, chunki biz kiritilgan o'zgartirishlar kutubxonaning ichki tuzilishida.
A ko'p faylli kutubxona - the eksport bayonot
Yuqoridagi yondashuv, yuqorida aytib o'tilganidek, Dart kutubxonasini bo'lishning ideal usuli emas. Buning sababi, qismning sintaksisi bayonot keyingi versiyalarda o'zgarishi mumkin. Bundan tashqari, siz mumkin bor topildi bu a biroz ortiqcha va qiyin uchun foydalanish agar siz faqat kutubxona a'zolarining ko'rinishini nazorat qilishni xohlaysiz.
Biz mumkin tanlang uchun oddiygina emas yaratmoq the kutubxona qismlar va shunchaki Split the kutubxona ichiga kichik shaxsiy kutubxonalar. Oldingi misollar uchun bu amalga oshirish jarayonida ba'zi muhim o'zgarishlarga olib keladi.
Biz bor the oldingi qismlar kabi uch individual kutubxonalar: shaxs_kutubxonasi , dasturchi va talaba . Bir-biriga bog'liq bo'lsa-da, ular o'zlarini alohida kutubxonalardek tutishadi va bir-birlarining jamoat a'zolaridan boshqa hech narsani bilishmaydi:
// odam kutubxona belgilangan ichida person_library.dart sinf Shaxs {
String ism;
String familiya;
final Shaxs turi turi;
Shaxs({tush.firstName, this.lastName, this.type});
String toString() => "($ turi): $firstName $lastName";
}
enum Shaxs turi { talaba, xodim }
The odam kutubxona qiladi emas kerak the kutubxona identifikator ichida bu hol.
The dasturchi kutubxona import the odam kutubxona uchun kirish uning Shaxs sinf:
// dasturchi kutubxona belgilangan ichida programmer.dart Import 'person_library.dart';
sinf Dasturchi uzaytiradi Shaxs { Dasturchi({ismi, familiya})
: super(ismi: ism, familiya: familiya, turi: PersonType.employee);
}
In the bir xil yo'l, the talaba kutubxona import the odam kutubxona:
// talaba kutubxona belgilangan ichida talaba.dart Import 'person_library.dart';
sinf Talaba uzaytiradi Shaxs { Talaba ({ismi, familiya})
: super(
ism: ism, familiya: familiya,
turi: PersonType.student,
);
}
Siz mumkin qarang the quyidagi dan the oldingi kod:
The dasturchi va talaba kutubxonalar kerak uchun Import the odam kutubxona uni uzaytirish uchun.
Bundan tashqari, turi shaxsdan olingan mulk _ ni olib tashlash orqali sinf ochiq bo'ldi prefiks. Bu shuni anglatadiki bo'lishi mumkin tomonidan kirish the boshqa kutubxonalar. Sifatida the turi mulk, ichida bu hol, hisoblanadi emas mo'ljallangan uchun o'zgartirish va bu hisoblanadi konstruktorda ishga tushirilgan, biz uni yakuniy qildik shuningdek.
Keling olish bir qarash da kutubxona mijozi, quyidagicha :
Import 'person_lib/programmer.dart'; Import 'person_lib/student.dart';
asosiy() {
// biz mumkin kirish the Dasturchi sinf kabi bu hisoblanadi qismi ning the shaxs_kutubxonasi Dasturchi dasturchi = Dasturchi (ismi: "Dekan", familiya: "Pugh"); Talaba talaba = Talaba (ismi: "Dilo", familiya: "Pugh");
chop etish (dasturchi); chop etish (talaba);
}
The odam kutubxona mijoz bo'ladi bor a kichik o'zgartirish, kabi hozir the kutubxona hisoblanadi Split bir nechta qismlarga bo'linadi, shuning uchun biz foydalanmoqchi bo'lgan har bir kutubxonani alohida import qilishimiz kerak.
Bu hisoblanadi emas a katta bitim qachon gapirish haqida kichik kutubxonalar, lekin harakat qilib ko'ring uchun o'ylab ko'ring haqida yana murakkab kutubxona tuzilishi, qayerda import qilish hammasi ning the o'zaro bog'liq kutubxonalar alohida-alohida undan foydalanishni qiyinlashtiradi.
Bu erda eksport bayonot keladi. Mana, ni tanlashimiz mumkin asosiy kutubxona fayli va u yerdan eksport qiling u bilan bog'liq barcha kichik kutubxonalar. Shu tarzda, mijozga faqat kerak uchun Import a yolg'iz kutubxona va hammasi ning the kichikroq kutubxonalar bo'ladi bo'l mavjud yonida bu.
In bizning misol, the eng yaxshi tanlash uchun foydalanish bu mumkin bo'l the odam kutubxona:
eksport 'programmer.dart'; eksport 'student.dart';
sinf Shaxs { ... } enum Shaxs turi { ... }
In bu yo'l, kutubxona mijoz bo'lardi bo'l quyidagicha :
Import 'person_lib/person_library.dart';
asosiy() {
// biz mumkin kirish the Dasturchi va Talaba sinf kabi ular bor eksport qilingan
// dan the shaxs_kutubxonasi
Dasturchi dasturchi = Dasturchi (ismi: "Dekan", familiya: "Pugh"); Talaba talaba = Talaba (ismi: "Dilo", familiya: "Pugh");
chop etish (dasturchi); chop etish (talaba);
}
Eslatma bu faqat the Import bayonot o'zgarishlar. Biz mumkin foydalanish the sinflar dan the kichik kutubxonalar odatda person_library dan eksport qilinadi .
Keyin qozonish a tushunish ning the Dart kutubxona tushuncha, biz mumkin hozir Imtihon Qanday ushbu kod qismlarini umumiy va qayta foydalanish mumkin bo'lgan narsaga birlashtirish uchun : Dart paketi.
Do'stlaringiz bilan baham: |