Inheritance and Exceptions Har qanday oop tilida siz sinflar ierarxiyasini



Download 284,5 Kb.
Sana14.07.2022
Hajmi284,5 Kb.
#794818
Bog'liq
Inheritance and Exceptions

  • Inheritance and Exceptions
  • Har qanday OOP tilida siz sinflar ierarxiyasini yaratishingiz mumkin va Dart ham bundan mustasno emas.
  • Example :
  • class A {}
  • class B extends A {}
  • Ko’rganingizdek, A super klass yoki “parent” deb ataladi, B esa subClass (yoki "child").
  • Metodlar child classlarda qaytadan override qilib moslashtirilib ishlatilishi mumkin.
  • @override izohi ixtiyoriy, lekin har doim yaxshisi buni ishlatgan ma’qul.
  • class A {
  • double test(double a) => a * 0.5;
  • }
  • class B extends A {
  • @override double test(double a) => a * 1.5;
  • }
  • Starting from Dart 2.9 onwards, implicit downcasts are not allowed:
  • Siz merosxo’rlikni bloklay olmaysiz, chunki har bir sinfda extends modifikator bo'lishi mumkin.
  • Masalan, Java-da siz final class A {} yozishingiz mumkin, bu degani "Siz meros qilib olmaysiz mendan" deyishdi. Lekin Dartda bunday narsa yo'q.
  • Oddiy metodalrdan tashqari siz setters (set) va getters (get) ni ham override qilishingiz mumkin. Dart C++ kabi bir nechta merosni qo'llab-quvvatlamaydi, ya'ni extends faqat bitta class bilan ishlaydi.
  • // Ok class A {}
  • class B extends A {
  • }
  • // Doesn't work
  • super and constructors .
  • Dartdagi har bir subsinf avtomatik ravishda superklassning standart konstruktorini chaqirishga harakat qiladi.
  • Biroq, class oddiy yani constructor yo’q bo'lsa, super constructor kerak emas;
  • class
  • A
  • {}
  • class
  • B
  • {}
  • class
  • C
  • extends A, B {}
  • Abstract classes.
  • abstract kalit so'zi to'g'ridan-to'g'ri yaratib(ishlatib) bo'lmaydigan classni belgilaydi, faqat undan meros olingan classlarga mumkin. abstract class odatdagidek bir (yoki bir nechta) konstruktorni bo’lishi mumkin.
  • Odatda abstract class funksiya tanasiz, tananing o'rniga, nuqta-vergul (;) qo'yish
  • bilan aniqlanishi mumkin bo'lgan abstract funksiyalarni o'z ichiga oladi. Oddiy
  • classlarda abstract funsiyalarni aniqlay olmaysiz.
  • getters va setters ham abstract bo'lishi mumkin
  • abstract class Example { final int _a;
  • const Example(this._a);
  • // Abstract getter int get calculate;
  • // Abstract method int doSomething(); }
  • Interfaces
  • Boshqa dasturlash tillaridan farqli o'laroq, Dartda interface kalit so'zi yo'q va
  • interfeyslarni yaratish uchun classlardan foydalanishingiz kerak. Sizning sinfingiz bir nechta interfacelarni amalga oshirishi mumkin.
  • implements bu yerda kalit so’z. Oddiy classlardan farqli o'laroq, bu erda siz
  • sinf/interfeys tomonidan belgilangan har bir methodni override qilishingiz kerak.
  • abstract class A{ void read();
  • }
  • abstract class B{ void write();
  • }
  • class C implements A, B{
  • @override read(){}
  • @override write(){}}
  • extends vs implements
  • Biz extends child classlar uchun ekanligini ko’rdik, implements esa interface classlar uchun edi. Endi ikkisining texnik farqlarini korib chiqaylik:
  • Class B extends A {} dan foydalanganda siz A classniing har bir methodni override qilishga majbur EMASsiz. Meros sodir bo'ladi va siz xohlagancha ko'p usullarni bekor qilishingiz mumkin.
  • Implements da esa aksincha.
  • Dart da bir nechta merosga yani multiple inheritance ga ruxsat berilmagan bo'lsa- da, siz class ni kengaytirishingiz va undan ko'proq narsani amalga oshirishingiz mumkin Masalan, Java va C# ham shunday yo'l tutadi.
  • // Error
  • class A extends B, C, D {}
  • // Valid
  • class A extends B implements C, D {}
  • The Object class
  • Kodda aniq yozilmagan bo'lsa ham, har qanday Dart klassi Object {} sinfidan turlatilgan bo’ladi. Bu ba'zi mashhur tillar bilan bir xil tuzilishdir Java, C# va Delphi kabi. Har bir class Object classida e'lon qilingan metodlarni bekor qilishi mumkin va kerak bo’lganda override qilib ishlatishi memkin bo’ladi.
  • String toString().
  • final f = Fraction(1, 2);
  • final s = "My fraction is $f";
  • bu yerda String interpolatsiyasi avtomatik ravishda toString() ni chaqiradi, bu kodni qisqartiradi va ko'proq o'qishli qiladi.
  • Ikkita ob'ektni solishtirmoqchi bo'lganingizda == operatoridan foydalaniladi. Lekin bu doim siz kutgandek ishlamaydi agar ikkita o'zgaruvchi bir xil ob'ektga ishora qilmasa.
  • Mantiqan biz ularni teng deb o'ylardik, lekin kompilyator bizga boshqa voqeani aytib beradi. ex1 va ex2
  • mantiqan teng, lekin amalda farq qiladigan ikki xil ob'ektni ko'rsating, chunki har bir o'zgaruvchi boshqa havolaga ega.
  • Istalgan xatti-harakatlarni olish uchun tenglik operatorini override qilishingiz kerak

Download 284,5 Kb.

Do'stlaringiz bilan baham:




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