Reja. Kross-platformali dasturlash tili haqida umumiy ma`lumot


Interfeyslarni amalga oshirish



Download 0,98 Mb.
bet22/39
Sana07.03.2022
Hajmi0,98 Mb.
#485533
1   ...   18   19   20   21   22   23   24   25   ...   39
Bog'liq
j7WNgrIuzYyWbItD7qqrNdYOmEd13B0L

Interfeyslarni amalga oshirish

Dart merosi muhim cheklovga ega: biz bir vaqtning o'zida bir nechta sinflardan sinfni meros qilib olmaymiz, masalan, quyidagicha:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

class Person{
String name = "";
void display(){
print("Name: $name");
}
}
class Worker{
String company = "";
void work(){
print("Work in $company");
}
}
class Employee extends Person, Worker{ // Ошибка, множественное наследование не допускается
}

Ushbu muammoni hal qilish uchun Dart interfeyslarni amalga oshiradi. Ba'zi dasturlash tillarida bo'lgani kabi interfeys alohida ob'ekt emas (masalan, C# yoki Java-dagi interfeys turi), balki bir xil sinf ekanligini tushunish muhimdir. Ya'ni Dartdagi sinf bir vaqtning o'zida interfeys vazifasini bajaradi va boshqa sinf bu interfeysni amalga oshirishi mumkin.


Interfeys bu interfeysni amalga oshiradigan sinflar amal qilishi kerak bo'lgan sintaktik shartnomani ifodalaydi. Ya'ni, agar interfeys klassi biron-bir maydon va usullarni aniqlasa, u holda ushbu interfeysni amalga oshiruvchi sinf ushbu maydon va usullarni ham belgilashi kerak.


Interfeyslarni amalga oshirish uchun instruments operatori ishlatiladi:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

void main (){
Person bob = Employee();
bob.name = "Bob";
bob.display(); // Employee name: Bob
}
class Person{
String name;
Person(this.name);
void display(){
print("Name: $name");
}
}
class Employee implements Person{
String name = ""; // реализация поля name
// реализация метода display
void display(){
print("Employee name: $name");
}
}

Bunday holda, Employee klassi Person sinfining interfeysidan foydalanadi (Xodim Personni amalga oshiradi). Person sinfining interfeysidan foydalanish Employee klassi Person sinfida belgilangan barcha maydonlar va usullarni amalga oshirishi kerakligini anglatadi. Shuning uchun, Employee klassi nom maydonini va ko'rsatish usulini belgilashi kerak. Aslida, interfeys - bu sinfda ma'lum funksiyalarni o'z ichiga olishi kerak bo'lgan shartnoma (bu holda, nom maydoni va ko'rsatish usuli). Agar Employee klassi Person sinfidagi barcha maydonlar va usullarni aniqlamagan bo'lsa, biz xatoga yo'l qo'yamiz.

Biroq, yuqoridagi misollardan ko'rish mumkinki, konstruktorni amalga oshirish uchun Employee klassi talab qilinmaydi va umuman konstruktorni aniqlamasligi mumkin.

Xuddi shunday, biz bir vaqtning o'zida bir nechta interfeyslarni amalga oshirishimiz mumkin:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

void main (){
Employee bob = Employee("Bob", "Google");
bob.display(); // Employee name: Bob
bob.work(); // Employee works in Google
}
class Person{
String name;
Person(this.name);
void display(){
print("Name: $name");
}
}
class Worker{
String company = "";
void work(){
print("Work in $company");
}
}
class Employee implements Person, Worker{
String name; // реализация поля name из Person
String company; // реализация поля company из Worker
// реализация метода display Person
void display(){
print("Employee name: $name");
}
// реализация метода work из Worker
void work(){
print("Employee works in $company");
}
Employee(this.name, this.company);
}

Bunday holda, Employee klassi Person va Worker sinflarining interfeysini amalga oshiradi.


Sinf merosi va interfeysni amalga oshirish


Meros olishda olingan sinfdan asosiy sinfdagi bir xil maydonlar va usullarni belgilash talab qilinmaydi (mavhum usullardan tashqari). Agar asosiy sinf konstruktorni aniqlasa, hosila sinf o'zining konstruktorini belgilashi kerak, bu esa asosiy sinf konstruktorini chaqiradi. Olingan sinfda biz super kalit so'z yordamida asosiy sinfni amalga oshirishga murojaat qilishimiz mumkin. Bir nechta meros qo'llab-quvvatlanmaydi.

Interfeysni amalga oshirishda olingan sinf interfeys sinfida belgilangan barcha maydonlar va usullarni belgilashi kerak. Agar asosiy sinfda konstruktor bo'lsa, hosila sinf o'z konstruktorini belgilashi shart EMAS. Olingan sinfda biz super kalit so'z yordamida amalga oshirilgan interfeysning usullariga kira olmaymiz. Bir nechta interfeys ilovalari qo'llab-quvvatlanadi.

isEmpty: Xarita bo'sh bo'lsa, true qiymatini qaytaradi

Xaritadagi har bir element aslida MapEntry ob'ektini ifodalaydi, bu erda K - tugmalar turi va V - qiymatlar turi. Bu tip ikkita xususiyatga ega: kalit (elementning kaliti) va qiymat (element qiymatini saqlaydi). Ushbu xususiyatlardan foydalanib, biz Xaritadagi elementlarning mazmunini olishimiz mumkin. Masalan, Xaritaning barcha elementlari va barcha kalitlari va qiymatlarini alohida-alohida takrorlaymiz:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

void main (){
var map = { 5 : "Tom"};
map[1] = "Alice";
map[44] = "Bob";
map[6] = "Sam";
// перебор всех элементов
print("All items");
for(var item in map.entries){
// item представляет MapEntry
print("${item.key} - ${item.value}");
}
// перебор ключей
print("Keys");
for(var key in map.keys){
print(key);
}
// перебор значений
print("Values");
for(var value in map.values){
print(value);
}
}

Konsol chiqishi:

All items
5 - Tom
1 - Alice
44 - Bob
6 - Sam

Keys
5


1
44
6

Values
Tom


Alice
Bob
Sam

Asosiy xarita usullari:


addAll (Map other): Xaritaga boshqa Map ob'ektini qo'shadi


addEntries (Iterable > newEntries): Xaritaga takrorlanadigan > toʻplamini qoʻshadi


tozalash (): Xaritadan barcha elementlarni olib tashlaydi


containKey (Ob'ekt kaliti): agar Xaritada kalit kaliti bo'lsa, true qiymatini qaytaradi


containValue (Ob'ekt qiymati): Xaritada qiymat mavjud bo'lsa, true qiymatini qaytaradi


olib tashlash (Ob'ekt kaliti): Xaritadan kalit tugmasi bo'lgan elementni olib tashlaydi


Usullarni qo'llash:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

void main (){
var map = { "Germany" : "Berlin"};
map.addAll({"France" : "Paris", "Spain": "Madrid"}); // добавляем Map
print(map.containsKey("Poland")); // false
print(map.containsKey("France")); // true
print(map.containsValue("Madrid")); // true
// удаляем элемент с ключом "Spain"
map.remove("Spain");
print(map.containsKey("Spain")); // false
print(map.containsValue("Madrid")); // false
}



Download 0,98 Mb.

Do'stlaringiz bilan baham:
1   ...   18   19   20   21   22   23   24   25   ...   39




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish