Programavimas

Pažangesnė „Java“ plėtra

Greita ir paprasta schema, skirta paspartinti didelio masto „Java“ programų kūrimą, apima sąsajų naudojimą. „Java“ sąsajos yra susietame objekte esančių funkcijų planas.

Įtraukdami sąsajas į kitą projektą, pastebėsite naudą per visą savo kūrimo ciklą. Sąsajų, o ne objektų kodavimo technika pagerins kūrėjų komandos efektyvumą:

  • Leisti kūrimo komandai greitai nustatyti sąveiką tarp reikalingų objektų, neverčiant anksti apibrėžti palaikančių objektų
  • Leisti kūrėjams sutelkti dėmesį į savo kūrimo užduotis žinant, kad į integraciją jau buvo atsižvelgta
  • Užtikrinamas lankstumas, kad naujus sąsajų diegimus būtų galima įtraukti į esamą sistemą be didelių modifikacijų
  • Vykdyti sutartis, dėl kurių susitarė kūrimo komandos nariai, kad visi objektai sąveikautų taip, kaip suprojektuota

Apžvalga

Kadangi į objektą orientuotos plėtros pastangos apima objektų sąveiką, būtina sukurti ir vykdyti tvirtas sutartis tarp tų objektų. Sąsajų kodavimo technika apima sąsajų, o ne objektų, naudojimą kaip pagrindinį bendravimo metodą.

Šiame straipsnyje pateikiamas paprasto pavyzdžio vartotojas su sąsajų kodavimo samprata. Toliau bus pateiktas išsamus pavyzdys, padedantis parodyti šios schemos vertę didesnėje sistemoje, kuriai reikalingi keli kūrėjai. Vis dėlto prieš eidami prie kodo pavyzdžio, pažvelkime į sąsajų kodavimo pranašumus.

Kodėl koduojamas sąsajos?

„Java“ sąsaja yra kūrimo sutartis. Tai užtikrina, kad konkretus objektas atitinka nurodytą metodų rinkinį. Sąsajos naudojamos visoje „Java“ API nurodant būtiną funkciją objekto sąveikai. Sąsajos naudojimo pavyzdžiai yra atgalinio ryšio mechanizmai (Renginių klausytojai), modeliai (Stebėtojas) ir specifikacijos (Bėgama, Serijinis).

Kodavimas į sąsajas yra technika, kuria naudodamiesi kūrėjai gali atskleisti tam tikrus objekto metodus kitiems sistemos objektams. Kūrėjai, gaunantys šių sąsajų diegimą, turi galimybę koduoti sąsają vietoj kodavimo pačiame objekte. Kitaip tariant, kūrėjai rašys kodą, kuris tiesiogiai nesusietų su objektu, o būtent su to objekto sąsajos įgyvendinimu.

Kita priežastis koduoti sąsajas, o ne objektus yra ta, kad ji suteikia didesnį efektyvumą įvairiuose sistemos gyvavimo ciklo etapuose:

  • Dizainas: objekto metodus galima greitai nurodyti ir paskelbti visiems paveiktiems kūrėjams
  • Plėtra: „Java“ kompiliatorius garantuoja, kad visi sąsajos metodai įgyvendinami teisingu parašu ir kad visi sąsajos pakeitimai yra iškart matomi kitiems kūrėjams
  • Integracija: yra galimybė greitai sujungti klases ar posistemes dėl jų gerai sukurtų sąsajų
  • Testavimas: sąsajos padeda išskirti klaidas, nes jos apriboja galimos logikos klaidos apimtį tam tikru metodų rinkiniu

Dėl reikalingos kodo infrastruktūros yra keletas papildomų išlaidų, susijusių su šia kūrimo technika. Ši infrastruktūra apima abi sąsajas, skirtas sąveikai tarp objektų, ir iškvietimo kodą, kad būtų sukurtos sąsajos. Ši pridėtinė vertė yra nereikšminga, palyginti su paprastu ir naudingu sąsajų naudojimu, kaip aprašyta.

Pagrindinis pavyzdys

Norėdamas toliau paaiškinti sąsajų kodavimo sampratą, sukūriau paprastą pavyzdį. Nors šis pavyzdys yra akivaizdžiai trivialus, jis parodo kai kuriuos aukščiau paminėtus privalumus.

Apsvarstykite paprastą klasės pavyzdį Automobilis kad įgyvendina sąsają Transporto priemonė. Sąsaja Transporto priemonė turi vieną metodą, vadinamą pradžia (). Klasė Automobilis įdiegs sąsają pateikdamas pradžia () metodas. Kitas funkcionalumas Automobilis klasė aiškumo sumetimais buvo palikta.

sąsaja Transporto priemonė {// Visose transporto priemonės versijose turi būti įdiegtas pradžios metodas public void start (); } klasės automobilio padargai Transporto priemonė {// Reikalinga norint įgyvendinti transporto priemonės viešąjį negaliojančią pradžią () {...}} 

Padėjęs pamatus Automobilis objektą, galime sukurti dar vieną objektą, vadinamą Valet. Tai yra Valetdarbas pradėti Automobilis ir atneškite jį restorano globėjui. Valet objektą galima rašyti be sąsajų taip:

klasės „Valet“ {viešasis automobilis „getCar“ (automobilis c) {...}} 

Valet objektas turi vadinamąjį metodą „getCar“ kuris grąžina a Automobilis objektas. Šis kodo pavyzdys tenkina sistemos funkcinius reikalavimus, tačiau jis visam laikui susieja Valet objektas su Automobilis. Šioje situacijoje sakoma, kad yra du objektai sandariai sujungtas. Valet objektui reikalingos žinios apie Automobilis objektą ir turi prieigą prie visų viešųjų metodų ir kintamųjų, esančių tame objekte. Geriausia vengti tokio griežto kodo sujungimo, nes tai padidina priklausomybę ir sumažina lankstumą.

Norėdami koduoti Valet naudojant sąsajas, gali būti naudojamas toks įgyvendinimas:

klasės „Valet“ {viešųjų transporto priemonių „getVehicle“ (transporto priemonė c) {...}} 

Nors kodo pakeitimai yra gana nedideli - nuorodos keičiamos iš Automobilis į Transporto priemonė - poveikis vystymosi ciklui yra didelis. Naudodamas antrąjį diegimą, Valet turi žinių tik apie programoje apibrėžtus metodus ir kintamuosius Transporto priemonė sąsaja. Bet kokie kiti viešieji metodai ir duomenys, esantys konkrečiame programos įgyvendinime Transporto priemonė sąsaja yra paslėpta nuo Transporto priemonė objektas.

Šis paprastas kodo pakeitimas užtikrino tinkamą informacijos slėpimą ir įgyvendinimą iš kitų objektų, todėl pašalino galimybę, kad kūrėjai naudos nepageidaujamus metodus.

Sąsajos objekto kūrimas

Paskutinis klausimas, kurį reikia aptarti atsižvelgiant į šią kūrimo techniką, yra sąsajos objektų kūrimas. Nors galima sukurti naują klasės egzempliorių naudojant naujas operatoriaus, negalima tiesiogiai sukurti sąsajos egzemplioriaus. Norėdami sukurti sąsajos diegimą, turite iš karto sukurti objektą ir perduoti jį į norimą sąsają. Todėl kūrėjas, kuriam priklauso objekto kodas, gali būti atsakingas tiek už objekto egzemplioriaus sukūrimą, tiek už liejimą.

Šį kūrimo procesą galima pasiekti naudojant a Gamykla šablonas, kuriame išorinis objektas vadina statinį sukurtiXYZ () metodas a Gamykla ir grąžina sąsają. Tai taip pat galima pasiekti, jei kūrėjas iškviečia metodą kitame objekte ir perduoda jam sąsają, o ne tikrąją klasę. Tai būtų analogiška praėjimui Surašymas sąsaja vietoj a Vektorius arba „Hashtable“.

Išsamus pavyzdys

Siekdamas parodyti šios schemos naudojimą didesniame projekte, sukūriau susitikimų planavimo priemonės pavyzdį. Šį planuoklį sudaro trys pagrindiniai komponentai: ištekliai (konferencijų salė ir posėdžio dalyvis), įvykis (pats susitikimas) ir planavimo priemonė (tas, kuris prižiūri išteklių kalendorių).

Tarkime, kad šiuos tris komponentus turėjo sukurti trys skirtingi kūrėjai. Kiekvieno kūrėjo tikslas turėtų būti nustatyti jo komponento naudojimą ir paskelbti jį kitiems projekto kūrėjams.

Apsvarstykite a pavyzdį Asmuo. A Asmuo gali įgyvendinti daugybę metodų, tačiau įgyvendins Ištekliai šios programos sąsaja. Aš sukūriau Ištekliai sąsaja su visais reikalingais visų šiame pavyzdyje naudojamų išteklių prieigos metodais (parodyta žemiau):

viešoji sąsaja Ištekliai {public String getID (); viešoji eilutė getName (); public void addOccurrence (įvykis o); } 

Šiuo metu kūrėjas Asmuo funkcionalumas paskelbė sąsają, kuria naudodamiesi visi vartotojai gali pasiekti Asmuo objektas. Kodavimas į sąsają padeda užtikrinti, kad jokie kūrėjai nenaudoja Asmuo objektas neteisingai. Kūrėjas Tvarkaraštis objektas dabar gali naudoti metodus, esančius Ištekliai sąsaja prieigai prie informacijos ir funkcijų, kurių reikia norint sukurti ir palaikyti Asmuo objektas.

Pasitaikymas sąsajoje yra metodai, būtini planuoti Pasitaikymas. Tai gali būti konferencija, kelionės planas ar bet koks kitas planavimo renginys. Pasitaikymas sąsaja rodoma žemiau:

viešoji sąsaja „Occurrence“ {public void setEndDatetime (data d); public Date getEndDatetime (); public void setStartDatetime (data d); public Data getStartDatetime (); public void setDescription (eilutės aprašymas); public String getDescription (); public void addResource (šaltinis r); viešasis šaltinis [] getResources (); viešoji loginė reikšmė įvyksta On (Data d); } 

Tvarkaraštis kodas naudoja Ištekliai sąsaja ir Pasitaikymas sąsaja išlaikyti išteklių tvarkaraštį. Atkreipkite dėmesį, kad Tvarkaraštis neturi žinių apie subjektą, kurio tvarkaraštį taiko:

public class Tvarkaraštis įgyvendina Tvarkaraštį {Vektoriaus tvarkaraštis = null; public Scheduler () {tvarkaraštis = naujas vektorius (); } public void addOccurrence (įvykis o) {tvarkaraštis.addElement (o); } public void removeOccurrence (įvykis o) {tvarkaraštis.removeElement (o); } public Occurrence getOccurrence (data d) {Surašymo tvarkaraštisElementai = tvarkaraštis.elementai (); Pasitaikymas o = nulis; while (scheduleElements.hasMoreElements ()) {o = (Occurrence) tvarkaraščio.nextElement (); // Šiame paprastame pavyzdyje įvykis sutampa, jei // data laikas yra susitikimo pradžios laikas. Ši logika // gali būti sudėtingesnė, jei reikia. if (o.getStartDatetime () == d) {pertrauka; }} return o; }} 

Šis pavyzdys rodo sąsajų galią sistemos kūrimo etapuose. Kiekvienas iš posistemių žino tik apie sąsają, per kurią turi bendrauti - žinių apie įgyvendinimą nereikia. Jei kiekvieną iš aukščiau pateikto pavyzdžio sudedamųjų dalių toliau plėtotų kūrėjų komandos, jų pastangos būtų supaprastintos dėl šių sąsajos sutarčių vykdymo.

Paskutinės mintys apie sąsajas

Šis straipsnis parodė kai kuriuos sąsajų kodavimo pranašumus. Ši technika leidžia didesnį efektyvumą kiekviename kūrimo gyvavimo ciklo etape.

Projekto projektavimo metu sąsajos leidžia greitai nustatyti norimą objektų sąveiką. Su tam tikra sąsaja susieti įgyvendinimo objektai gali būti apibrėžti nurodžius tos sąsajos metodus ir reikalavimus. Kuo greičiau nustatoma sąveika, tuo greičiau projektavimo etapas gali pereiti į plėtrą.

Sąsajos suteikia kūrėjams galimybę atskleisti ir apriboti tam tikrus metodus ir informaciją savo objektų vartotojams, nekeičiant paties objekto teisių ir vidinės struktūros. Sąsajų naudojimas gali padėti pašalinti nemalonias klaidas, kurios atsiranda integravus kelių kūrėjų komandų sukurtą kodą.

Sutarčių vykdymą užtikrina sąsaja. Kadangi sąsaja paprastai sutariama projekto projektavimo etape, kūrėjai turi galimybę sutelkti dėmesį į savo atskirus modulius, nesijaudindami dėl savo kolegų modulių. Šių posistemių integravimą efektyvina tai, kad sutartys jau buvo vykdomos per visą kūrimo etapą.

Testavimo tikslais galima sukurti paprastą tvarkyklės objektą, kad būtų įdiegtos sutartos sąsajos. Naudodamiesi šiuo objektu, kūrėjai gali tęsti savo darbą žinodami, kad naudoja tinkamus prieigos prie objekto metodus. Kai objektai yra išdėstyti bandymo aplinkoje, tvarkyklių klasės pakeičiamos tikrosiomis klasėmis, todėl objektą galima patikrinti be kodo ar ypatybių pakeitimų.

Ši schema suteikia galimybę lengvai išplėsti šią sistemą; savo pavyzdyje galėtume išplėsti kodą, įtraukdami daugiau išteklių rūšių, tokių kaip posėdžių salės ir garso / vaizdo įranga. Bet koks papildomas programos įgyvendinimas Ištekliai sąsaja bus pritaikyta nustatytam mechanizmui nekeičiant esamo kodo. Didelio masto projektai, naudojantys šią schemą, galėtų būti suprojektuoti ir įgyvendinti taip, kad būtų galima pridėti papildomų funkcijų be didelių infrastruktūros pakeitimų. Pavyzdžiui, Konferencijų salė objektas buvo sukurtas. Šis objektas įgyvendina Ištekliai sąsają ir gali sąveikauti su Tvarkaraštis ir Pasitaikymas įgyvendintojai nekeičiant infrastruktūros.

Kitas privalumas yra centralizuota kodo vieta. Jei prie programos reikia pridėti naujų metodų Ištekliai sąsaja, bus nustatyta, kad visus šios sąsajos diegimus reikia keisti. Tai sumažins tyrimą, kurio reikia norint nustatyti galimą sąsajos pakeitimų poveikį.

Be kūrimo naudos, šiame straipsnyje pateikta technika užtikrina projekto valdymą užtikrindama, kad tarpobjektiniai ar tarpsisteminiai komunikacijos modeliai buvo sukurti ir įgyvendinti per visą kūrimo ciklą. Tai sumažina gedimų riziką integruojant ir išbandant projektą.

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