Programiranje

Uvod v "Tehnike oblikovanja"

Na lanski konferenci JavaOne sem se udeležil seje, na kateri je govornik govoril o Sunovem načrtu za navidezni stroj Java (JVM). V tem govoru je govornik izjavil, da je Sun med drugim načrtoval odpraviti trenutna ozka grla v svojem virtualnem stroju, kot so počasnost sinhroniziranih metod in stroški učinkovitosti odvoza smeti. Govornik je navedel Sunov cilj: z izboljšavami JVM programerjem ne bi bilo treba razmišljati o izogibanju ozkim grlom navideznih strojev, ko bi oblikovali svoje programe; razmišljali bi le o tem, da bi ustvarili "dobre objektno naravnane zasnove, varne pred nitmi."

Govornik pa ni podrobneje opisal, kaj dejansko predstavlja dobro objektno usmerjeno zasnovo, varno pred nitmi. To je cilj te nove rubrike. Skozi članke Tehnike oblikovanja upam, da bom odgovoril na vprašanje: Kaj je dobra zasnova programa Java in kako ga ustvarite?

Fokus kolumne

V tem stolpcu se bom osredotočil na praktične tehnike oblikovanja, ki jih boste lahko uporabili pri vsakodnevnih programskih nalogah. Predvidevam, da poznate jezik Java in API-je. Nameravam razpravljati o tehnikah, idejah in smernicah, ki vam bodo pomagale uporabljati jezik in API-je v vaših resničnih programih.

Tukaj je seznam vrst tem, o katerih nameravam pisati, da dobite idejo o tem, kaj lahko pričakujete v tem stolpcu:

  • Načini za izboljšanje oblikovanja vaših predmetov
  • Gradnja hierarhij razredov
  • Za kaj so vmesniki?
  • V čem je smisel polimorfizma?
  • Izbira med sestavo in dedovanjem
  • Oblikovanje za varnost navojev
  • Oblikovanje za nitno sodelovanje
  • Arhitektura model / krmilnik / pogled, ki jo uporabljajo razredi JFC
  • Oblikovalni vzorci

Velik del že napisanega gradiva o oblikovanju programske opreme je mogoče uporabiti za Javo. Obstajajo številne popolne metodologije oblikovanja in debeli učbeniki, ki jih opisujejo. V tem stolpcu ne bom promoviral ene metodologije nad drugo. Prav tako ne bom promoviral nove metodologije lastnega izuma. Namesto tega bom izkoristil in združil vpoglede, ki sem jih pridobil iz več obstoječih metodologij in se mi je zdel koristen v moji lastni programski praksi.

Pristop k oblikovanju, ki ga bom priporočil v teh člankih, izhaja iz mojih izkušenj v preteklih letih v kabini: oblikovanje nove programske opreme, izboljšanje stare programske opreme, vzdrževanje programske opreme, ki so jo napisali drugi, vzdrževanje programske opreme, napisane sam, delo z različnimi jeziki, orodji, računalniki in drugi programljivi stroji. Moja oblikovalska filozofija bo zelo "usmerjena v kabine": temeljila bo na resničnem komercialnem programiranju in bo usmerjena k njemu.

Ta mesec: opisan postopek, opredeljen "načrt"

V tem začetnem članku Tehnike oblikovanja V stolpcu bom predstavil podroben opis koncepta oblikovanja programske opreme na podlagi lastnih izkušenj kot razvijalec. V nadaljevanju tega članka bom razpravljal o procesu razvoja programske opreme in razložil, kaj mislim z izrazom "oblikovanje".

Proces razvoja programske opreme

Po mojih izkušnjah je postopek razvoja programske opreme ponavadi precej kaotičen. Člani ekipe prihajajo in odhajajo, zahteve se spreminjajo, urniki se spreminjajo, celotni projekti odpovedujejo, celotna podjetja prenehajo poslovati itd. Naloga programerja je uspešno prehoditi ta kaos in na koncu "pravočasno" izdelati "kvaliteten" izdelek.

Postopek razvoja programske opreme je poleg tega kaotičen tudi precej ponavljajoč se. Z razvojem programskega izdelka se nenehno razvija na podlagi povratnih informacij mnogih strani. Ta ponavljajoči se postopek deluje od izdaje do izdaje (vsaka izdaja je ena ponovitev) in znotraj razvojnega cikla posamezne izdaje. Od izdaje do izdaje, na primer povratne informacije strank s trenutno različico kažejo, katere popravke napak in izboljšave so najpomembnejše v naslednji različici. Znotraj razvojnega cikla ene same izdaje sile znotraj podjetja nenehno prilagajajo vizijo končnega cilja.

Kljub kaosu in ponavljanju pa sem ugotovil, da večina razvojnih skupin skuša uveljaviti neko strukturo svojih razvojnih prizadevanj. Za namene tega stolpca bom postopek razvoja programske opreme posameznega cikla izdaje ohlapno razdelil na te štiri faze:

  1. Specifikacija
  2. Oblikovanje
  3. Izvajanje
  4. Integracija in preizkus

S temi štirimi fazami nameravam zajeti strukturo, ki sem jo opazil v večini projektov za razvoj programske opreme. Ker je vsako podjetje drugačno, vsaka ekipa drugačna in vsak projekt drugačen, te štiri faze tvorijo le okvirne orise tipičnega razvojnega cikla. V praksi se lahko nekatere faze preskočijo ali pa se zgodijo v drugačnem vrstnem redu. In ker se ponavljajoča se narava razvoja programske opreme nagiba skozi katero koli vsiljeno strukturo, se lahko te faze do neke mere prekrivajo ali prelivajo ena v drugo.

Ko govorim o oblikovanju v Tehnike oblikovanja kolumne, govorim o dejavnostih, ki potekajo v drugem koraku zgornjega seznama. Da boste lažje razumeli, kaj mislim s posamezno fazo, v naslednjih štirih poglavjih opišem vsakega posebej.

Faza 1: Navedba domene težave

The faza specifikacije projekta programske opreme vključuje združevanje vseh vpletenih strani, da razpravljajo in opredelijo končni izdelek procesa razvoja programske opreme. Med specifikacijo določite "vizijo" - cilj, na katerega boste ciljali do konca projekta. Rezultat, ki naj bi prišel iz faze specifikacije, je pisni dokument, ki opredeljuje zahteve programskega sistema.

Specifikacija zahtev je podobna pogodbi. Gre za pogodbo med vsemi vpletenimi stranmi, kar pa je najpomembneje z vidika razvijalca, gre za pogodbo med razvijalcem in ne glede na to, katera stranka želi končni izdelek: morda stranka, stranka, uprava ali tržni oddelek . Kadar je specifikacija dogovorjena z govorjenimi besedami, vendar ni zapisana, gre v bistvu za ustno pogodbo. Čeprav je ustna pogodba pravno zavezujoča, je v mnogih primerih, če ni kaj zapisano, recept za težave. Različni ljudje se ponavadi različno spominjajo ustnih dogovorov, zlasti ko gre za podrobnosti. Nesoglasje o podrobnostih je še bolj verjetno, če o podrobnostih sploh ni nikoli razpravljalo kot del ustnega dogovora, kar je skupna značilnost ustnih pogodb.

Ko se vse vpletene strani sestanejo in poskušajo zapisati zahteve programskega projekta, to zahteva raziskovanje domeno problema. Problemska domena je končni izdelek, opisan v človeškem (ne računalniškem) jeziku. Isti končni izdelek, izražen v računalniškem jeziku, je domena rešitve. Med raziskovanjem problematične domene je mogoče ugotoviti in razpravljati o številnih dvoumnih podrobnostih, nesoglasja pa je mogoče rešiti že na začetku.

Dobra specifikacija vam daje natančno določen cilj, ki si ga želite prizadevati, ko se razvijate. Vendar ne zagotavlja, da se tarča ne bo premaknila. Nekatere prilagoditve vizije končnega izdelka so med fazami načrtovanja in izvedbe skoraj neizogibne; vendar lahko dobra specifikacija pomaga zmanjšati obseg takšnih prilagoditev. Če preskočite fazo specifikacije ali če ne pokrijete dovolj podrobnosti, lahko pride do enakega nesporazuma med strankami, ki se lahko zgodi z ustno pogodbo. Tako je z dobrimi specifikacijami najprej mogoče napredovati v naslednjih fazah načrtovanja in izvedbe do uspešnega zaključka.

2. faza: Oblikovanje domene rešitve

Ko imate pisno specifikacijo, s katero se vsi vpleteni strinjajo, ste pripravljeni na to, čemur pravim faza oblikovanja - postopek načrtovanja in na nek način dokumentiranja arhitekture domene vaše rešitve. Sem vključil številne dejavnosti pod imenom "design", vključno z:

Določitev sistema:

  1. Razdelitev sistema na posamezne programe (in dokumentiranje)
  2. Opredelitev in dokumentiranje vmesnikov med posameznimi programi
  3. Odločanje in dokumentiranje knjižnic drugih proizvajalcev (paketi Java), ki jih bodo uporabljali vaši programi Java
  4. Z odločitvijo in dokumentiranjem novih knjižnic (paketi Java) boste zgradili več skupnih komponent vašega sistema

Izdelava prototipov uporabniškega vmesnika:

  1. Izdelava prototipov uporabniškega vmesnika za tiste sistemske komponente, ki imajo kateri koli uporabniški vmesnik

Izdelava objektno usmerjenega oblikovanja:

  1. Oblikovanje in dokumentiranje hierarhij razredov
  2. Oblikovanje in dokumentiranje posameznih razredov in vmesnikov

Opredelitev sistema

Kot prvi korak v fazi načrtovanja morate sistem razdeliti na sestavne dele. Na primer, morda boste potrebovali več procesov na različnih mestih v omrežju. Morda imate nekaj programčkov in nekaj aplikacij. Nekaterim komponentam sistema je morda namenjeno pisanje v Javi, drugim pa ne. Če želite uporabljati JDBC, boste morda morali izbrati neodvisno knjižnico JDBC, ki vam bo omogočila dostop do baze podatkov po vaši izbiri. Vse te odločitve je treba sprejeti, preden lahko začnete z objektno usmerjenimi načrti posameznih programov v sistemu.

Ko definirate sistem, boste verjetno želeli svoje delo dokumentirati v eno ali več tehničnih specifikacij. Dokumentacija vam omogoča, da načrt sporočite drugim zainteresiranim v organizaciji in pridobite njihove povratne informacije. Lahko predate specifikacijo, pokličete sestanek za pregled zasnove in nato predstavite zasnovo sistema na sestanku. Skupina se lahko pogovori o vaši zasnovi in ​​upa, da bo našla kakršne koli težave in podala predloge. Pridobivanje povratnih informacij - in prilagoditev zasnove sistema kot rezultat povratnih informacij - je primer ponovitve v procesu razvoja programske opreme.

Izdelava prototipov uporabniškega vmesnika

Izdelava prototipa uporabniškega vmesnika je v fazi načrtovanja pogosto dragocena dejavnost. Ko je prototip uporabniškega vmesnika končan, se lahko stranke, ki so se strinjale s specifikacijo, ponovno zberejo in pregledajo predogledno različico. Imeti prototip daje strankam še eno priložnost, da vizualizirajo in razpravljajo o končnem cilju. Z zahtevo, da vsi, ki so se strinjali s specifikacijo, pregledajo in odjavijo prototip uporabniškega vmesnika, pomagate zagotoviti, da imajo vse strani združljiva pričakovanja glede končnega izdelka. Z danes na voljo vizualnimi orodji za razvoj uporabniških vmesnikov, ki temeljijo na Javi, je razvoj prototipa uporabniškega vmesnika lahko zelo hiter, končni rezultat pa je okvir kode Java, ki ga lahko nato v fazi implementacije obdarite s funkcionalnostjo.

Upoštevajte, da je postopek predstavitve prototipa uporabniškega vmesnika odličen primer iterativne narave razvojnega procesa. Ko zainteresirane strani (ki so se vse dogovorile o pisni specifikaciji) dejansko vidijo prototipe uporabniškega vmesnika, imajo pogosto nove ideje ali boljše razumevanje ali podrobnejše razumevanje - z drugimi besedami, jasnejšo vizijo - konca izdelka. Med predstavitvijo se lahko nekatere prilagoditve specifikacije izvedejo. V tem času pa upamo, da bodo prilagoditve manjše.

Izdelava objektno usmerjenega oblikovanja

Ko načrtujete program Java, morate razmišljati v smislu vseh programskih tehnologij, ki jih ponuja jezik Java, vključno z večnitnostjo, zbiranjem smeti, strukturiranim ravnanjem z napakami in usmerjenostjo objektov. Ker pa je prevladujoča arhitekturna značilnost programskega jezika Java objektna usmerjenost, je faza programskega načrtovanja Java v osnovi proces objektno usmerjenega oblikovanja.

Izdelava objektno usmerjenega načrtovanja vključuje ustvarjanje hierarhij dedovanja in oblikovanje polj in metod posameznih razredov in vmesnikov. Tri osnovne kategorije razredov, ki jih boste zasnovali pri oblikovanju, so:

  1. Razredi uporabniškega vmesnika
  2. Razredi problematične domene
  3. Razredi upravljanja podatkov

Razredi uporabniškega vmesnika so tisti, ki sestavljajo uporabniški vmesnik programa, na primer razredi, ki predstavljajo okna in pogovorna okna. Razredi problematične domene so tisti, ki predstavljajo predmete, ki ste jih prepoznali v domeni težave. Če na primer vaša težavna domena vključuje dvigala, imate morda Dvigalo razred v domeni rešitve. Razredi upravljanja podatkov so tisti, ki jih ustvarite za upravljanje predmetov ali podatkov. Niti razredi uporabniškega vmesnika niti razredi za upravljanje podatkov nimajo ustreznih predmetov v domeni težave.

Faza 3: Izvajanje

Izvajanje je kodiranje. Pisanje za zanke, če stavke, stavke catch, spremenljivke in komentarje; sestavljanje; enotno testiranje; odpravljanje napak - to je izvedba: močno programiranje.

Faza 4: Integracija in preizkus

Med fazo integracije in preizkusa se člani projektne skupine, katerih naloga je zgraditi določen del celote, sestanejo in poskušajo vse dele programskega sistema združiti. V tej fazi člani ekipe ugotovijo, kako dobro so bili definirani vmesniki med posameznimi komponentami sistema in so bili sporočeni med fazo delitve sistema. Kodiranje, ki poteka v tej fazi, bi moralo biti predvsem odpravljanje napak.

Dokumentacija programov

Obstaja veliko pristopov k oblikovanju programske opreme. Formalne metodologije vas poskušajo voditi skozi postopek pretvorbe problemske domene v domeno rešitve. Pri oblikovanju programov Java lahko izberete formalno metodologijo, kombinirate več formalnih metodologij ali se odrečete formalni metodologiji in oblikovanju na sedežu hlač. Toda ne glede na to, kako napadete fazo načrtovanja vašega programskega projekta, morate svoj načrt na nek način dokumentirati.

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