Što se tiče dobrog OO dizajna, neka bude jednostavan

Jedan moj bivši student jednom je izbacio besmislenu izjavu: "Ne mogu se baviti objektno orijentiranim (OO) dizajnom; nemam novca!" Istražujući dalje, ispostavilo se da je, po njegovom mišljenju, za OO dizajn potreban proizvod nazvan Rational Rose, koji je u to vrijeme koštao oko 500,00 po mjestu. U njegovom umu, bez Rational Rose-a, dizajn nije bio moguć. Nažalost, ova vrsta balderdash-a je široko rasprostranjena; previše ljudi misli da je OO visokotehnološki postupak koji zahtijeva visokotehnološke alate. U praksi alati s pretjeranom cijenom sjede neiskorišteni na polici (ili su u velikoj mjeri nedovoljno korišteni).

Imajući to na umu, u ovom članku raspravljam o raznim alatima za dizajn OO, kako rade i zašto mislim da nisu korisni. Također objašnjavam kako radim i što se pokazalo korisnim (barem meni; slobodno se ne slažete).

Alati vas ne vode kroz postupak

Svaki uspješni OO dizajn koji sam smislio slijedio je otprilike isti postupak:

  • Saznajte o problematičnoj domeni (računovodstvo, planiranje nastave itd.)
  • Izradite, u bliskom savjetovanju s aktivnim korisnikom, izjavu o problemu koja iscrpno opisuje korisnički problem, kao i sva rješenja na razini domene. Ovaj dokument ne opisuje računalni program.
  • Izvršite formalnu analizu slučaja upotrebe, u kojoj utvrđujem zadatke potrebne za rješavanje problema korisnika, ponovno usko surađujući sa stvarnim krajnjim korisnikom. Tipično izrađujem UML (Unified Modeling Language) dijagram aktivnosti za svaki netrivijalni slučaj upotrebe. (UML je simbolički prikaz softvera u obliku slike.)
  • Počnite graditi dinamički model koji prikazuje objekte u sustavu i poruke koje ti objekti šalju jedni drugima, dok se izvodi određeni slučaj upotrebe. U tu svrhu koristim UML dijagram sekvence .
  • Istovremeno hvatam korisne informacije na dijagramu statičkog modela . Napomena: Nikad prvo ne radim statički model (dijagram klase). Bacio sam previše statičnih modela koji su se pokazali beskorisnima kad sam počeo raditi dinamički model. Više nisam spreman gubiti vrijeme potrebno za izradu statičkog modela u vakuumu.
  • Spomenuti koraci obično daju dva ili tri slučaja korištenja, nakon čega započinjem s kodiranjem, po potrebi popravljajući model.
  • I na kraju, radim na drugom slučaju upotrebe, kako je opisano, refaktorirajući dizajn i kôd po potrebi kako bi se prilagodio novom slučaju.

Kroz ovaj postupak ne vodi vas niti jedan od današnjih alata za dizajn. Uglavnom su to preskupi programi za crtanje koji ne rade posebno dobro, čak ni kao alati za crtanje. (Racionalna ruža, koju smatram jednom od najsposobnijih za cijelu grupu, čak i ne podržava cijeli UML.)

Povratni inženjering u osnovi je pogrešan proces

Ovi alati ne samo da ne rade dobro, nego je trik koji ovi alati izvode - generiranje koda - bezvrijedan. Gotovo svi alati za dizajn OO slijede pojam inženjeringa u kojem započinjete u alatu za dizajn specificiranjem dizajna u UML-u. Stvorite dva bitna skupa dijagrama: statički model koji prikazuje klase u dizajnu, njihove međusobne odnose i metode koje sadrže; i dinamički model, što je niz dijagrama koji prikazuju objekte u sustavu koji izvode razne zadatke u vrijeme izvođenja.

Nakon što dovršite model, pritisnite čarobni gumb i alat generira kôd. Međutim, kôd generiran alatom nije posebno dobar iz dva razloga: Prvo, u mnogim se alatima kreiraju kosturi za definicije klasa, ali metode su jednostavno prazne klice - dinamički model se zanemaruje. Drugo, nijedan alat u potpunosti ne podržava UML, prvenstveno zato što nijedan ne može. UML je jezik za sebe, koji potiče improvizaciju, a velik dio stvarnog sadržaja dizajna izražava se u komentarima koje alat za dizajn obično zanemaruje.

Kao rezultat toga, hakirate generirani kôd (većina trgovina to stvarno hakira). U roku od nekoliko tjedana kod obično ima malo ili nimalo veze s izvornim dizajnom. Zapravo, učinkovito bacate svoj dizajn i ponovno padate u WHISKEY sindrom (Zašto netko još uvijek "ne kodira"?). Godine i godine neuspjelih programa dokazuju mi ​​da kodiranje bez dizajna povećava ukupno vrijeme razvoja barem za faktor tri i rezultira mnogo buggier kodom.

Sada slijedi postupak povratnog putovanja: otvorite svoj alat, pritisnite čarobni gumb i uvezite kôd, teoretski obnavljajući dizajn tako da odražava stvarno stanje koda. Takav obrnuti inženjering ipak ne funkcionira. Alati obično stvaraju nove dijagrame klasa, ali nikad ne ažuriraju dinamički model. Budući da je dinamički model najvažniji za postupak, vaš dizajn sada je bezvrijedan ako se ne vratite i ne ažurirate ga ručno, što se rijetko radi.

Rizikujući da se ponovim, postupak povratnog putovanja potiče programere da ignoriraju dizajn u potpunosti i samo kodiraju, a zatim svako toliko obrnuto inženjeriraju kôd u slike. U ovoj situaciji, međutim, programeri ne dizajniraju; oni hakiraju kod, a zatim stvaraju slike nastalog nereda. Hakiranje nije jednako dizajnu.

Iako je dizajn doista iterativni postupak (dizajn se mijenja s razvojem koda), trebali biste započeti iteraciju tako što ćete prvo izmijeniti dizajn, a zatim refaktorirati kôd kako bi odražavao novi dizajn. Da biste to učinili, morali biste moći navesti cjelokupni softverski proizvod unutar alata (kada pritisnete čarobni gumb, izlazit će potpuno funkcionalan program), a postupak će biti jednosmjeran bez obrnutog inženjeringa mehanizam.

CASE alati

Alati CASE (računalno potpomognuto softversko inženjerstvo) kao što je Rational Rose obično stavljaju inženjerstvo povratnih informacija u srž proizvoda. Međutim, s obzirom da inženjering za kružno putovanje ne čini ništa korisno, mnogi programeri koriste alate kao skupe programe crtanja. Od dostupnih alata mislim da vrijedi razmotriti tri (iako ne koristim nijedan od njih):

  • Besplatni alat ArgoUML otvorenog koda, napisan na Javi, prilično dobro radi UML dijagramiranje. Najnovija verzija čak vas pokušava voditi kroz postupak (s marginalnim uspjehom do sada, ali to je dobar početak).
  • Embarcaderov GDPro, koji je ranije distribuirao Advanced Software, nudi dobru podršku grupi koja radi na jedinstvenom softverskom dizajnu, ali ima i nedostataka u ovom odjelu. Na primjer, dizajner ne može provjeriti dijagram dinamičkog modela dok automatski zaključava klase povezane s objektima na dinamičkom modelu.
  • TogetherSoftov program Together ControlCenter zaobilazi problem povratnog kretanja ne čineći ga. Kôd i dizajn istovremeno se pojavljuju na zaslonu, a kad promijenite jedan, drugi se automatski mijenja. Ipak, ControlCenter ne podržava dobro grupe programera.
  • Također bih ukratko trebao spomenuti Microsoftov Visio. Visio je program za crtanje koji podržava UML nakon mode, ali njegova podrška oponaša jadno korisničko sučelje Rational Rose. Razni predlošci crtanja za UML oblike u Visiou rade bolje od ugrađene UML podrške, uključujući jedan u odjeljku "Dobrote" moje web stranice.

Dakle, ako tako loše razmišljam o tim alatima, što da koristim? Daleko najproduktivniji alati za OO-dizajn su bijela ploča (idealna je soba s bijelim pločama od zida do zida, od poda do stropa) i post-it ulošci veličine flip-chart, listovi kojih se možete odlijepiti i držati se na zidu. Pomoću njih dizajnirao sam značajne projekte s velikim uspjehom. Štoviše, rad na bijeloj ploči troši znatno manje vremena od hrvanja s alatom OO CASE.

Jedina poteškoća s pristupom bijeloj ploči je hvatanje podataka na ploči. Ploče za ispis postoje, ali su skupe, nepristojne i premale. Jedan uredan hardverski proizvod koji prati kretanje olovke preko bijele ploče i bilježi poteze olovke u računalu. Ostale table rade poput divovskih tableta za digitalizaciju. Međutim, ta se rješenja pokazuju previše ograničavajućima; dizajn se odvija istovremeno na bijelim pločama u nekoliko ureda, na salvetama, na komadićima papira i tako dalje. U lokalni kafić ne možete ponijeti tiskarsku ploču od 300 kilograma.

Pa što djeluje

Pa što majka treba raditi? Kako hvatate ove artefakte da biste ih arhivirali u računalu, tako da će oni napraviti razumnu dokumentaciju onako kako stoje, a da ih ne moraju prenijeti u program za crtanje?

Rješenje:

  1. Digitalni fotoaparat
  2. Prekrasan softverski proizvod nazvan Whiteboard Photo tvrtke Pixid

Digitalna fotografija, nažalost, često daje slike koje nisu zadovoljavajuće za dokumentaciju. Kao kompenzaciju, Whiteboard Photo pretvara digitalne slike u nešto korisno. Ovdje slike stvarno vrijede tisuću riječi. Slika 1 prikazuje tipičnu digitalnu fotografiju bijele ploče.

Slika 2 ilustrira još jedan primjer.

Slika 3 prikazuje kako se Whiteboard Photo transformira Slika 1.

I evo kako slika 2 izgleda nakon što je Whiteboard Photo učinio svoju čaroliju.

Kao što slike pokazuju, razlika je nevjerojatna. Da bih transformirao izvornu sliku u očišćenu verziju, jednostavno sam pogodio Ctrl-L. Softver je automatski pronašao granice bijele ploče, ispravio iskrivljenje uzrokovano snimanjem slike iz kuta (nužno kako bi se izbjeglo odsjaj bljeskalice), odabrao linije dizajna i nacrtao ih. Sve što je proizvodu potrebno za postizanje savršenstva je prepoznavanje rukopisa, ali škakljam ga ružičasto dok stoji. Sada mogu izrađivati ​​crteže u kvaliteti dokumentacije izravno s izvorne ploče, bez gubljenja sati, ulazeći u crtež u neki hrom izgovor za alat CASE.

Neka bude jednostavno

Prema mom iskustvu, što se tiče OO dizajna, niskotehnološki alati najbolje rade. Zapravo su brži, lakši za upotrebu i imaju dobru izvedbu u suradničkim okruženjima. Do sada sam otkrio da kombinacija bijele ploče, digitalnog fotoaparata i Whiteboard Photo nudi najbolju metodu za unošenje dizajna programa u stroj.

Allen Holub pruža konzultantske usluge, obuku i mentorstvo u OO dizajnu, OO procesu i Java programiranju. Redovito predstavlja intenzivnu radionicu OO dizajna za one koje zanima brz razvoj njihovih vještina OO. (Više informacija potražite na //www.holub.com.) Allen radi u računalnoj industriji od 1979. godine, nedavno kao glavni tehnološki direktor u tvrtki NetReliance, Inc. Široko objavljuje u časopisima (Dr. Dobb's Journal, Programmers Journal, Byte i MSJ, između ostalih). Allen ima osam knjiga, od kojih najnovija - Ukroćenje Java niti (APpress, 2000; ISBN: 1893115100) - pokriva zamke i zamke Java navoja. Predaje OO dizajn i Javu na Kalifornijskom sveučilištu, Berkeley Extension (od 1982).

Saznajte više o ovoj temi

  • Za besplatni alat za dizajn ArgoUML otvorenog koda idite na

    //argouml.tigris.org/

  • Embarcaderov GDPro možete pronaći na

    //www.embarcadero.com

  • Više informacija o zajedničkom nadzornom centru TogetherSoft pronaći ćete na

    //www.togethersoft.com

  • Početna stranica Microsoft Visio

    //www.microsoft.com/office/visio/default.htm

  • Idite na stranicu proizvoda Pixed Whiteboard Photo za više informacija o ovom zanimljivom alatu

    //www.pixid.com/home.html

  • Web stranica Allena Holuba sadrži njegovu stranicu "Goodies", gdje ćete pronaći savjete za dizajn OO-a, osnovna pravila programiranja i bilješke iz nekih Allenovih razgovora

    //www.holub.com/goodies/goodies.html

  • JavaWorld „s Objektno-orijentirani dizajn i programiranje Index ima brojne članke adresiranje dizajn

    //www.javaworld.com/channel_content/jw-oop-index.shtml

  • Naći ćete više velike recenzije proizvoda u JavaWorld je recenzija proizvoda Index

    //www.javaworld.com/news-reviews/jw-nr-product-reviews.shtml

  • Pročitajte više komentara u JavaWorld 's Commentary Index

    //www.javaworld.com/news-reviews/jw-nr-commentary.shtml

  • Za savjete i vodiče koji pokrivaju obrasce dizajna, razvojne alate, podešavanje performansi, sigurnost, testiranje i još mnogo toga, prijavite se za naš Primijenjeni Java bilten

    //www.javaworld.com/subscribe

  • Govorite u našoj raspravi o teoriji i praksi programiranja

    //forums.idg.net/[email protected]@.ee6b806

  • Mnoštvo članaka vezanih uz IT iz naših sestrinskih publikacija pronaći ćete na .net

Ovu priču, "Što se tiče dobrog OO dizajna, neka bude jednostavan" izvorno je objavio JavaWorld.