Programiranje

Pametnejši razvoj Java

Hitra in preprosta shema za pospeševanje razvoja obsežnih aplikacij Java vključuje uporabo vmesnikov. Vmesniki Java so načrt za funkcionalnost, ki jo vsebuje povezan objekt.

Z vključitvijo vmesnikov v naslednji projekt boste v celotnem življenjskem ciklu svojih razvojnih prizadevanj opazili koristi. Tehnika kodiranja vmesnikov namesto predmetov bo izboljšala učinkovitost razvojne skupine z:

  • Omogočanje razvojni skupini, da hitro vzpostavi interakcije med potrebnimi predmeti, ne da bi sililo v zgodnjo opredelitev podpornih objektov
  • Omogočanje razvijalcem, da se osredotočijo na svoje razvojne naloge z vedenjem, da je integracija že upoštevana
  • Zagotavlja prilagodljivost, tako da je mogoče nove izvedbe vmesnikov dodati v obstoječi sistem brez večjih sprememb kode
  • Izvrševanje pogodb, o katerih so se dogovorili člani razvojne skupine, da se zagotovi, da vsi predmeti medsebojno delujejo, kot je načrtovano

Pregled

Ker objektno usmerjena razvojna prizadevanja vključujejo interakcije predmetov, je bistveno razviti in uveljaviti močne pogodbe med temi predmeti. Tehnika kodiranja vmesnikov vključuje uporabo vmesnikov namesto predmetov kot primarne metode komunikacije.

Ta članek bo uporabnika s preprostim primerom seznanil s konceptom kodiranja vmesnikov. Nasledil bo podroben primer, ki bo pomagal prikazati vrednost te sheme v večjem sistemu, ki zahteva več razvijalcev. Preden pa pridemo do vzorčne kode, si poglejmo prednosti kodiranja vmesnikov.

Zakaj kodirati vmesnike?

Vmesnik Java je razvojna pogodba. Zagotavlja, da določen predmet izpolnjuje dani nabor metod. Vmesniki se v celotnem API-ju Java uporabljajo za določanje potrebne funkcionalnosti za interakcijo objektov. Primeri uporabe vmesnika so mehanizmi povratnega klica (Poslušalci dogodkov), vzorci (Opazovalec) in specifikacije (Teče, Serializabilno).

Kodiranje v vmesnike je tehnika, s katero lahko razvijalci nekatere metode predmeta izpostavijo drugim objektom v sistemu. Razvijalci, ki prejmejo izvedbe teh vmesnikov, imajo možnost kodiranja vmesnika namesto kodiranja samega predmeta. Z drugimi besedami, razvijalci bi napisali kodo, ki ni neposredno vplivala na objekt kot tak, temveč z izvajanjem vmesnika tega predmeta.

Drug razlog za kodiranje vmesnikov in ne predmetov je ta, da zagotavlja večjo učinkovitost v različnih fazah življenjskega cikla sistema:

  • Oblikovanje: metode predmeta je mogoče hitro določiti in objaviti za vse prizadete razvijalce
  • Razvoj: prevajalnik Java zagotavlja, da so vse metode vmesnika izvedene s pravilnim podpisom in da so vse spremembe vmesnika takoj vidne drugim razvijalcem
  • Integracija: zaradi dobro uveljavljenih vmesnikov obstaja možnost hitrega povezovanja razredov ali podsistemov
  • Testiranje: vmesniki pomagajo izolirati napake, ker omejujejo obseg možne logične napake na dano množico metod

S to razvojno tehniko je zaradi zahtevane infrastrukture kode povezanih nekaj dodatnih stroškov. Ta infrastruktura vključuje vmesnike za interakcije med predmeti in klicno kodo za ustvarjanje izvedb vmesnikov. Ta režija je nepomembna v primerjavi z enostavnostjo in koristjo uporabe vmesnikov, kot je opisano.

Osnovni primer

Za nadaljnjo razlago koncepta kodiranja vmesnikov sem ustvaril preprost primer. Čeprav je ta primer očitno nepomemben, prikazuje nekatere zgoraj omenjene prednosti.

Poglejmo preprost primer predavanja Avto ki izvaja vmesnik Vozilo. Vmesnik Vozilo ima eno samo metodo, imenovano začetek (). Razred Avto bo vmesnik uvedel z zagotavljanjem a začetek () metoda. Druga funkcionalnost v Avto razred je zaradi jasnosti izpuščen.

vmesnik Vozilo {// Vse izvedbe vozil morajo izvajati metodo zagona public void start (); } class Car implements Vehicle {// Potrebno za izvedbo Vozila javni void start () {...}} 

Po postavitvi temeljev Avto objekt, lahko ustvarimo še en objekt z imenom Sluga. Je SlugaNaloga je začeti Avto in ga prinesite pokrovitelju restavracije. The Sluga objekt je mogoče zapisati brez vmesnikov, in sicer:

razred Valet {javni avto getCar (Car c) {...}} 

The Sluga objekt ima imenovano metodo getCar ki vrne a Avto predmet. Ta primer kode izpolnjuje funkcionalne zahteve sistema, vendar za vedno povezuje Sluga predmet s tem Avto. V tej situaciji naj bi bila ta dva predmeta tesno povezani. The Sluga predmet zahteva poznavanje Avto objekt in ima dostop do vseh javnih metod in spremenljivk, ki jih vsebuje ta objekt. Najbolje se je izogibati tako tesnemu povezovanju kode, ker povečuje odvisnosti in zmanjšuje prilagodljivost.

Za kodiranje Sluga objekt, ki uporablja vmesnike, se lahko uporabi naslednja izvedba:

razred Valet {javno vozilo getVehicle (vozilo c) {...}} 

Medtem ko so spremembe kode dokaj majhne - spreminjanje referenc iz Avto do Vozilo - učinki na razvojni cikel so precejšnji. Z uporabo druge izvedbe, Sluga pozna le metode in spremenljivke, opredeljene v Vozilo vmesnik. Vse druge javne metode in podatki, ki jih vsebuje posebna izvedba Vozilo vmesnik je skrit pred uporabnikom Vozilo predmet.

Ta preprosta sprememba kode je zagotovila pravilno prikrivanje informacij in izvajanje pred drugimi predmeti in zato odpravila možnost, da bodo razvijalci uporabili nezaželene metode.

Ustvarjanje vmesniškega predmeta

Zadnje vprašanje, o katerem bomo razpravljali v zvezi s to razvojno tehniko, je ustvarjanje vmesniških objektov. Čeprav je mogoče ustvariti nov primerek razreda z uporabo novo operaterja, ni mogoče neposredno ustvariti primerka vmesnika. Če želite ustvariti izvedbo vmesnika, morate primer ustvariti in ga oddati v želeni vmesnik. Zato je lahko razvijalec, ki je lastnik kode predmeta, odgovoren tako za ustvarjanje primerka predmeta kot za izvajanje ulitka.

Ta postopek ustvarjanja je mogoče doseči z uporabo Tovarna vzorec, v katerem zunanji objekt pokliče statiko createXYZ () metoda na a Tovarna in vrne vmesnik. To je mogoče doseči tudi, če razvijalec pokliče metodo na drug predmet in ji posreduje vmesnik namesto dejanskega razreda. To bi bilo analogno podajanju datoteke Naštevanje namesto a Vektor ali Hashtable.

Podroben primer

Da bi prikazal uporabo te sheme pri večjem projektu, sem ustvaril primer načrtovalca sestankov. Ta razporejevalnik ima tri glavne komponente: vire (konferenčna soba in udeleženec sestanka), pojav (sam sestanek) in razporejevalnik (tisti, ki vzdržuje koledar virov).

Predpostavimo, da bi te tri komponente morali razviti trije različni razvijalci. Cilj vsakega razvijalca mora biti ugotoviti uporabo njegove komponente in jo objaviti drugim razvijalcem v projektu.

Poglejmo primer a Oseba. A Oseba lahko izvaja številne metode, vendar bo izvedel Vir vmesnik za to aplikacijo. Ustvaril sem Vir vmesnik z vsemi potrebnimi metodami dostopa za vse vire, uporabljene v tem primeru (prikazano spodaj):

javni vmesnik Resource {public String getID (); javni String getName (); javna void addOccurrence (pojavitev o); } 

Na tej točki je razvijalec Oseba je objavil vmesnik, s pomočjo katerega lahko vsi uporabniki dostopajo do informacij, shranjenih v Oseba predmet. Kodiranje vmesnika pomaga zagotoviti, da noben razvijalec ne uporablja datoteke Oseba predmet na nepravilen način. Razvijalec Načrtovalec object zdaj lahko uporablja metode, vsebovane v Vir vmesnik za dostop do informacij in funkcionalnosti, potrebnih za ustvarjanje in vzdrževanje urnika Oseba predmet.

The Pojav vmesnik vsebuje metode, potrebne za razporejanje Pojav. To je lahko konferenca, načrt potovanja ali kateri koli drug dogodek o načrtovanju. The Pojav vmesnik je prikazan spodaj:

javni vmesnik Pojav {javna praznina setEndDatetime (Datum d); javni Datum getEndDatetime (); javna void setStartDatetime (Datum d); javni datum getStartDatetime (); public void setDescription (opis niza); javni String getDescription (); public void addResource (Vir r); javni vir [] getResources (); javno logično logično nastupaOn (Datum d); } 

The Načrtovalec koda uporablja Vir vmesnik in Pojav vmesnik za vzdrževanje urnika vira. Upoštevajte, da Načrtovalec nima nobenega znanja o subjektu, za katerega vzdržuje urnik:

javni razred Scheduler izvaja Schedule {Vector schedule = null; javni načrtovalec () {urnik = nov vektor (); } javna void addOccurrence (pojavitev o) {schedule.addElement (o); } javna praznina removeOccurrence (pojavitev o) {schedule.removeElement (o); } public Occurrence getOccurrence (Datum d) {Enumeration scheduleElements = schedule.elements (); Pojav o = nič; while (scheduleElements.hasMoreElements ()) {o = (Pojav) scheduleElements.nextElement (); // Za ta preprost primer se pojav ujema, če // datum in čas je čas začetka sestanka. To logiko // lahko po potrebi naredimo bolj zapleteno. if (o.getStartDatetime () == d) {odmor; }} vrni o; }} 

Ta primer prikazuje moč vmesnikov v razvojnih fazah sistema. Vsak od podsistemov pozna samo vmesnik, prek katerega mora komunicirati - poznavanje izvedbe ni potrebno. Če bi ekipe razvijalcev nadalje razvijale vsak gradnik v zgornjem primeru, bi bila njihova prizadevanja poenostavljena zaradi izvrševanja teh vmesniških pogodb.

Zadnje misli o vmesnikih

Ta članek je pokazal nekatere prednosti kodiranja vmesnikov. Ta tehnika omogoča večjo učinkovitost v vsaki fazi razvojnega življenjskega cikla.

V fazi načrtovanja projekta vmesniki omogočajo hitro vzpostavitev želenih interakcij med predmeti. Objekte izvedbe, povezane z določenim vmesnikom, je mogoče definirati po tem, ko so določene metode in zahteve za ta vmesnik. Hitreje kot se vzpostavi interakcija, hitreje lahko faza načrtovanja napreduje v razvoj.

Vmesniki omogočajo razvijalcem, da razkrijejo in omejijo določene metode in informacije uporabnikom svojih predmetov, ne da bi spremenili dovoljenja in notranjo strukturo samega predmeta. Uporaba vmesnikov lahko pomaga odpraviti nadležne napake, ki se pojavijo, ko je integrirana koda, ki jo je razvilo več razvojnih skupin.

Izvršitev pogodbe zagotavlja vmesnik. Ker se vmesnik v fazi načrtovanja projekta običajno dogovori, se lahko razvijalci osredotočijo na svoje posamezne module, ne da bi morali skrbeti za module svojih kolegov. Vključitev teh podsistemov je učinkovitejša zaradi dejstva, da so bile pogodbe že izvršene v celotni razvojni fazi.

Za namene preskušanja lahko za izvajanje dogovorjenih vmesnikov ustvarite preprost gonilniški objekt. Z uporabo tega predmeta lahko razvijalci nadaljujejo svoje delo z vedenjem, da uporabljajo ustrezne metode za dostop do predmeta. Ko so objekti razmeščeni v testnem okolju, se razredi gonilnikov nadomestijo z resničnimi razredi, kar omogoča preizkus predmeta brez sprememb kode ali lastnosti.

Ta shema omogoča enostavno razširitev tega sistema; v našem primeru bi lahko šifro razširili na več oblik virov, kot so sejne sobe in avdio / video oprema. Vsako dodatno izvajanje Vir vmesnik se bo prilegal ustaljenemu mehanizmu brez spreminjanja obstoječe kode. Obsežne projekte, ki uporabljajo to shemo, bi lahko zasnovali in izvedli tako, da bi lahko dodali dodatne funkcije brez večjih sprememb infrastrukture. Kot primer je Konferenčna soba predmet je bil ustvarjen. Ta predmet izvaja Vir vmesnik in lahko komunicira z Razpored in Pojav izvajalec brez spreminjanja infrastrukture.

Druga prednost je centralizirana lokacija kode. Če je treba nove metode dodati v Vir vmesnika, bodo vse izvedbe tega vmesnika opredeljene kot zahtevajo spremembe. To bo zmanjšalo preiskavo, potrebno za ugotavljanje možnega vpliva sprememb vmesnika.

Poleg razvojnih koristi tehnika, predstavljena v tem članku, zagotavlja vodenju projektov zagotovilo, da so bili medobjektni ali medsistemski komunikacijski vzorci vzpostavljeni in uveljavljeni skozi razvojni cikel. To zmanjšuje tveganje za okvare v fazah integracije in preizkušanja projekta.

$config[zx-auto] not found$config[zx-overlay] not found