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.
Do'stlaringiz bilan baham: |