tässä viestissä menemme kattaa käyttötapauksia toteuttaa, laajentaa ja avainsanoilla. Toteuttaa v/s ulottuu v / s avainsanoilla Tikka.
Johdanto
Jos on kehitteillä Flutter-sovellus, olisi pitänyt nähdä paljon käyttötapauksia työkoneille, laajennuksille ja avainsanoille. Jollekin, joka ei ole koskaan työskennellyt Dart ennen, ero näiden avainsanojen ei ole ilmeinen.
tässä viestissä käymme perusteellisesti läpi näitä avainsanoja laajentaaksemme käsitystämme Flutterista ja Dartista.
Implements Is For Forcing Behavior Via Interface
In OOP, an interface is something that enforces the deriving class to implement a set list of public fields and methods.
, mutta toisin kuin muissa perinteisissä ohjelmointikielissä, kuten C#: ssa ja Javassa, Dartissa ei ole eksplisiittisiä käyttöliittymätyyppejä. Jokainen luokka määrittelee oletusarvoisesti Oman rajapintansa, joka koostuu julkisista kentistä ja menetelmistä. Niin, jokainen luokka voi toimia rajapintana Dart.
käytämme implements-avainsanaa käyttöliittymän toteuttamiseen. Myös luokka voi toteuttaa useita rajapintoja.
yllä olevassa esimerkissä luokka D toteuttaa luokat A, B ja C siksi sen on toteutettava julkisia menetelmiä ja kenttiä ne kurssit.
lisäksi, koska Dartissa ei ole eksplisiittisiä rajapintoja, käytämme rajapintana abstraktia luokkaa.
abstract class X { doX();} class Y implements X { @override doX() { // TODO: implement doX return null; }}
Extends Is for Sharing Behavior Via Inheritance
In OOP, periytyminen merkitsee käyttäytymisen jakamista luokkien välillä. Emme voi jakaa ominaisuuksia käyttöliittymän kanssa. Joten, kun toteutamme luokan, emme voi jakaa sen käyttäytymistä.
yllä olevasta esimerkistä näkee, että luokan B on tarjottava oma toteutuksensa doA () – menetelmästä, koska käyttäytymistä ei jaeta.
Jos haluat jakaa käyttäytymisen näiden kahden luokan kesken, käytä extends-avainsanaa.
class A { doA() { print('A'); }}class B extends A { }main() { var b = B(); b.doA();}
yllä olevassa esimerkissä, koska B ulottuu A: sta, voidaan doA () – menetelmää kutsua suoraan B: n oliosta.
toisin kuin toteuttaa useita rajapintoja, Dart tukee vain yhtä perintöä. Joten, et voi laajentaa useita luokkia.
class A { doA() { print('A'); }}class B { doB() { print('B'); }}// Not Allowed!class C extends A, B {}
is-Mixin kanssa
OOP: ssa mixini on luokka, joka sisältää muiden luokkien käyttämät menetelmät. Toisin kuin käyttöliittymä ja perintö lähestymistapa, mixin ei tarvitse olla vanhempi Luokka näiden muiden luokkien.
mixini ei siis aseta käyttörajoituksia eikä pakota tyyppirajoituksia.
mixinin sisään laitetaan yleensä yhteiset toiminnot. Vuonna Dart, hyödynnämme mixin käyttämällä avainsanalla.
kuten yllä olevasta esimerkistä käy ilmi, mixin kenttien toteutus voidaan tarvittaessa ohittaa. Lisäksi luokka voi käyttää useita mixins.
Mixin
käyttämällä luokkaa Mixinä
Dartissa luokkaa voidaan käyttää myös mixinä, jos luokka on konstruktoriton. Esimerkiksi alla oleva koodi on voimassa.
class D { doD() { print('d'); }}class E with D {}main() { var e = E(); e.doD();}
mutta tämä alla oleva on virheellinen, koska luokka D julistaa rakentajan.
class D { D() { } doD() { print('d'); }}class E with D {}
tiettyjen tyyppien Mixin valvomiseksi
mixin voi myös vaatia käytettäväksi tietyissä tyyppiluokissa vain käyttämällä on-hakusanaa mixin määrittelyssä.
mixin Z on D { doZ() { }}class D { doD() { print('d'); }}//Can't do this!class E with Z {}//Can do this!class F extends D with Z {}
johtopäätös
tässä viestissä tutustuimme työkoneiden, laajennusten ja avainsanojen käyttötapauksiin kehitettäessä Flutter / Dart-sovelluksia.
toteuttaa v/S: n laajennuksia v/S: n kanssa
käytön summaamiseksi:
- toteuttaa käyttäytymismallien toimeenpanoa.
- ulottuu yhden luokan yhteiskäyttäytymiseen.
- Mixins jakaa käyttäytymismalleja useista uudelleenkäytettävistä tyypeistä.
Learn More:
- Dartin kielen ominaisuudet
- Learn Flutter