Mobil ilovalar ishlab chiqish


Konstantalar va doimiy sinf konstruktorlari



Download 387,44 Kb.
bet18/34
Sana14.01.2022
Hajmi387,44 Kb.
#363624
1   ...   14   15   16   17   18   19   20   21   ...   34
Bog'liq
Dart tili mustaqil ish

Konstantalar va doimiy sinf konstruktorlari

Sinf konstantalari

Muntazam o'zgaruvchan maydonlarga qo'shimcha ravishda, sinflar doimiylarni belgilashi mumkin. Konstantalarni aniqlash uchun yakuniy kalit so'zdan foydalanishingiz mumkin:

1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

17

18



void main (){

     


    Person tom = Person("Tom", 23);

    print(tom.minAge);

}

 

class Person{



 

    String name = "";

    int age = 1;

    final minAge = 1;

     

    Person(n, a){



     

        this.name = n;

        this.age = a;

    }


}

Konstruktorni chaqirishdan oldin sinf doimiy qiymatlari o'rnatilishi kerak. Bu, yuqoridagi misolda bo'lgani kabi, konstantalarni aniqlashda sodir bo'lishi mumkin:

1

final minAge = 1;

Yana bir variant - konstruktor parametri orqali konstanta qiymatini o'rnatish:

1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

17

18



void main (){

     


    Person tom = Person(4, "Tom", 23);

    print(tom.minAge);  // 4

}

 

class Person{



 

    String name = "";

    int age = 1;

    final minAge;

     

    Person(this.minAge, n, a){



     

        this.name = n;

        this.age = a;

    }


}

Uchinchi variant - initsializator yordamida doimiy qiymatlarni o'rnatish:

1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

17

18



void main (){

     


    Person tom = Person(6, "Tom", 23);

    print(tom.minAge);   // 7

}

 

class Person{



 

    String name = "";

    int age = 1;

    final minAge;

     

    Person(mAge, name, age): minAge= mAge + 1{



     

        this.name = name;

        this.age = age;

    }


}

Bunday holda, konstanta minAge + 1 parametrining qiymatini oladi, ya'ni konstantalar qiymati dinamik hisoblangan qiymatlarni ifodalashi mumkin.
Doimiy konstruktorlar

Sinflar const konstruktorlarini o'z ichiga olishi mumkin. Bunday konstruktorlar o'zgarmas ob'ektlarni yaratish uchun mo'ljallangan. Const konstruktorlari const kalit so'zi bilan prefikslanadi. Bunday konstruktorni belgilaydigan sinf o'zgaruvchilarni o'z ichiga olmaydi, lekin konstantalarni aniqlay oladi. Bundan tashqari, const konstruktorlari tanasiga ega emas:



1

2

3



4

5

6



7

8

9



10

11

12



13

14


void main (){

     


    Person tom = const Person("Tom", 23);

    print(tom.name);     // Tom

}

 

class Person{



 

    final String name;

    final int age;

     


    // константный конструкор

    const Person(this.name, this.age);

}


Doimiy yasovchi chaqirilganda uning chaqiruvidan oldin const kalit so'zi qo'yiladi: Shaxs tom = const Shaxs ("Tom", 23);

Meros olish

Meros - ob'ektga yo'naltirilgan dasturlashning asosiy jihatlaridan biri bo'lib, bir sinfning funksionalligini boshqalarga o'tkazish imkonini beradi. Dart, kengaytirilgan kalit so'z yordamida merosni amalga oshiradi (Java'da bo'lgani kabi):



1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

17

18



void main (){

     


    Employee bob = Employee();

    bob.name = "Bob";

    bob.display();

}


 

class Person{

  

    String name = "";



      

    void display(){

        print("Name: $name");

    }


}

class Employee extends Person{

 

}


Xodimni ifodalovchi Employee klassi Person sinfining pastki sinfidir yoki undan meros bo‘lib qoladi. Va Person sinfi ota-ona yoki asosiy sinf deb ataladi. Meros olayotganda Employee klassi Person sinfining barcha funksiyalarini - uning barcha sohalari va usullarini o'z zimmasiga oladi va ulardan foydalanishi mumkin. Shuningdek, siz pastki sinfda Person sinfida bo'lmagan yangi maydonlar va usullarni belgilashingiz mumkin.
Natijada, biz Xodimlar ob'ektini yaratishimiz va uning nom maydoniga va ko'rsatish usuliga kirishimiz mumkin, garchi ular asosiy Person sinfida aniqlangan bo'lsa ham.

Konstruktorlar va super kalit so'z

Maydonlar va usullardan farqli o'laroq, asosiy sinf konstruktorlari meros qilib olinmaydi. Agar asosiy sinf konstruktorni aniq belgilagan bo'lsa (standart konstruktor hisobga olinmaydi), u holda konstruktorni aniqlashda uni hosila sinfida chaqirish kerak:

1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

17

18



19

void main (){

     


    Employee bob = Employee("Bob");

    bob.display();

}

 

class Person{



  

    String name = "";

    Person(this.name);

      


    void display(){

        print("Name: $name");

    }

}

class Employee extends Person{



 

    Employee(String name) : super(name);

}


Bu yerda asosiy Person klassi bitta parametrni qabul qiluvchi konstruktorni belgilaydi. Olingan sinf Employee, shuningdek, nom parametrining qiymatini o'tkazib, asosiy sinf konstruktorini chaqiradigan konstruktorni belgilaydi. Super kalit so'zi olingan sinfdan asosiy sinfning funksionalligiga kirish uchun ishlatiladi. Xususan, super (ism) ga qo'ng'iroq, aslida Person (ism) tayanch sinfining konstruktoriga qo'ng'iroqni ifodalaydi.
Agar hosila sinfdagi konstruktorni belgilashda asosiy sinf konstruktorini chaqirmasak, unda xatolikka yo'l qo'yamiz.
Xuddi shunday, siz asosiy sinfning nomlangan konstruktorlarini bekor qilishingiz va ularga murojaat qilishingiz mumkin:

1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

17

18



19

20

21



22

23


void main (){

      


    Employee bob = Employee.byAgeNameConstructor("Bob", 45);

    bob.display();

}

  

class Person{



   

    String name = "";

    int age = 0;

    Person(this.name){

        age = 18;

    }


    Person.byAgeNameConstructor(this.name, this.age);

    void display(){

        print("Name: $name  Age: $age");

    }


}

class Employee extends Person{

  

    Employee(String name) : super(name);



    Employee.byAgeNameConstructor(String name, int age) : super.byAgeNameConstructor(name, age);

}


O'chirish usullari

Hosil bo'lgan sinflar o'z sohalari va usullarini belgilashi mumkin, lekin ular asosiy sinf usullarining xatti-harakatlarini bekor qilishi, o'zgartirishi mumkin. Buning uchun @override izohi qo'llaniladi:



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



void main (){

     


    Employee bob = Employee("Bob", "Google");

    bob.display();

}

 

class Person{



  

    String name = "";

    Person(this.name);

      


    void display(){

        print("Name: $name");

    }

}

class Employee extends Person{



 

    String company = "";

     

    Employee(name, this.company) : super(name);



     

    @override

    void display(){

        print("Name: $name");

        print("Company: $company");

    }


}

Bu erda Xodimlar toifasiga yana bir maydon qo'shiladi - xodimning ish joyini saqlash uchun kompaniya. Ushbu ma'lumotni konsolga ko'rsatish uchun ko'rsatish usuli bekor qilinadi. Natijada, dasturni bajarishda biz quyidagi konsol natijasini olamiz:

Name: Bob

Company: Google

Biroq, biz ko'rishimiz mumkinki, "Xodim" dagi ko'rsatish usulining ba'zi kodlari Shaxsda ko'rsatish usuli uchun kodni takrorlaydi. O'zimizni takrorlamaslik uchun super kalit so'zdan foydalanib, biz oddiygina asosiy sinfdan displey usulini amalga oshirishni chaqirishimiz mumkin:



1

2

3



4

5


@override

void display(){

    super.display();    // Вызов реализации из класса Person

    print("Company: $company");

}



Download 387,44 Kb.

Do'stlaringiz bilan baham:
1   ...   14   15   16   17   18   19   20   21   ...   34




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