Programovanie

Pokiaľ ide o dobrý OO dizajn, je to jednoduché

Bývalý môj študent raz zahmlil absurdné vyhlásenie: „Nemôžem urobiť objektovo orientovaný (OO) dizajn; nemám peniaze!“ Pri ďalšom zisťovaní sa ukázalo, že podľa jeho názoru OO design vyžadoval produkt s názvom Rational Rose, ktorý v tom čase stál asi 500,00 na sedadlo. V jeho mysli nebol návrh bez Rational Rose možný. Bohužiaľ, tento druh balderdash je veľmi rozšírený; príliš veľa ľudí si myslí, že OO je high-tech proces vyžadujúci high-tech nástroje. V praxi sedia nástroje za neprimerane vysoké ceny nepoužité na poličke (alebo sú veľmi nedostatočne využívané).

S ohľadom na to v tomto článku rozoberám rôzne OO designové nástroje, ako fungujú a prečo si myslím, že nie sú užitočné. Vysvetľujem tiež, ako pracujem a čo sa ukazuje ako užitočné (aspoň pre mňa; môžete s tým nesúhlasiť).

Procesom vás tieto nástroje nesprevádzajú

Každý úspešný návrh OO, ktorý som prišiel, prešiel zhruba rovnakým procesom:

  • Dozviete sa viac o problémová doména (účtovníctvo, plánovanie lekcie atď.)
  • Vyvinúť v úzkej spolupráci so živým používateľom a vyhlásenie o probléme ktorý vyčerpávajúco popisuje problém používateľa, ako aj všetky riešenia na úrovni domény. Tento dokument neopisuje počítačový program.
  • Vykonajte formálne analýza prípadov použitia, v ktorom určím úlohy potrebné na vyriešenie problému používateľa, opäť v úzkej spolupráci so skutočným koncovým používateľom. Spravidla vytváram UML (Unified Modeling Language) diagram činnosti pre každý netriviálny prípad použitia. (UML je symbolické znázornenie softvéru ako obrázka.)
  • Začnite stavať dynamický model zobrazovanie objektov v systéme a správy, ktoré si tieto objekty posielajú, zatiaľ čo prebieha konkrétny prípad použitia. Používam UML sekvenčný diagram pre tento účel.
  • Zároveň zachytávam užitočné informácie na serveri statický model diagram. Poznámka: Nikdy nerobím najskôr statický model (diagram triedy). Hneď ako som začal robiť dynamický model, vyhodil som príliš veľa statických modelov, ktoré sa ukázali ako zbytočné. Už nie som ochotný strácať čas potrebný na vykonanie statického modelu vo vákuu.
  • Vyššie uvedené kroky zvyčajne vedú k dvom alebo trom prípadom použitia, po ktorých začnem kódovať a podľa potreby model opraviť.
  • Nakoniec pracujem na ďalšom opísanom prípade použitia, ktorý podľa potreby upravil dizajn a kód, aby sa prispôsobil novému prípadu.

Týmto procesom vás nesprevádza žiadny z dnešných návrhových nástrojov. Väčšinou sú to predražené kresliace programy, ktoré zvlášť dobre nefungujú, dokonca ani ako kresliace nástroje. (Rational Rose, ktorú považujem za jednu z najmenej schopných z partie, ani nepodporuje celé UML.)

Spiatočné inžinierstvo je zásadne chybný proces

Nielenže tieto nástroje nefungujú dobre, ale trik, ktorý tieto nástroje vykonávajú, - generovanie kódu - je bezcenný. Takmer všetky návrhové nástroje OO sa riadia predstavou okružná jazda v ktorom začínate v nástroji na návrh zadaním svojho návrhu v UML. Vytvoríte dve základné sady diagramov: statický model zobrazujúci triedy v dizajne, ich vzájomné vzťahy a metódy, ktoré obsahujú; a dynamický model, čo je zoskupenie diagramov, ktoré zobrazujú objekty v systéme, ktoré za behu vykonávajú rôzne úlohy.

Po dokončení modelu stlačíte čarovné tlačidlo a nástroj vygeneruje kód. Kód vygenerovaný nástrojom však nie je zvlášť dobrý z dvoch dôvodov: Po prvé, v mnohých nástrojoch sa vytvárajú kostry pre definície tried, ale metódy sú jednoducho prázdne útržky - dynamický model sa ignoruje. Po druhé, žiadny nástroj plne nepodporuje UML, predovšetkým preto, že žiadny nemôže. UML je jazyk sám o sebe, ktorý podporuje improvizáciu. Väčšina skutočného obsahu dizajnu je vyjadrená v komentároch, ktoré nástroj na návrh zvyčajne ignoruje.

Vo výsledku hacknete vygenerovaný kód (väčšina obchodov ho skutočne hackne). Počas niekoľkých týždňov má kód zvyčajne málo alebo nemá nič spoločné s pôvodným dizajnom. V skutočnosti efektívne zahodíte svoj dizajn a opäť upadnete do syndrómu WHISKEY (Prečo niekto ešte „nekóduje“?). Roky a roky neúspešných programov mi dokazujú, že kódovanie bez návrhu predlžuje celkový čas vývoja minimálne trojnásobne a vedie k oveľa väčšiemu počtu kódov.

Teraz prichádza na rad spiatočný proces: Otvoríte nástroj, stlačte magické tlačidlo a importujete kód, ktorý teoreticky prebuduje dizajn tak, aby odrážal skutočný stav kódu. Takéto reverzné inžinierstvo však nefunguje. Nástroje zvyčajne vytvárajú nové diagramy tried, ale nikdy neaktualizujú dynamický model. Pretože dynamický model je pre proces ústredný, váš návrh je teraz bezcenný, pokiaľ sa nevrátite späť a neaktualizujete ho ručne, čo sa robí málokedy.

Vďaka riziku opakovania sa proces spiatočnej cesty nabáda programátorov, aby úplne ignorovali dizajn a iba kódovali, a potom každý krát kód spätne analyzujú do obrázkov. V tejto situácii však programátori nenavrhujú; hackujú kód a potom vytvárajú obrázky výsledného neporiadku. Hacking sa nerovná dizajnu.

Aj keď je dizajn skutočne iteratívnym procesom (dizajn sa pri vývoji kódu mení), mali by ste začať iteráciu najskôr úpravou dizajnu a následným preformátovaním kódu tak, aby odrážal nový dizajn. Aby ste to dosiahli, musíte byť schopní špecifikovať celý softvérový produkt v rámci nástroja (po stlačení magického tlačidla by sa zobrazil plne funkčný program) a postup by bol jednosmerný bez reverzného inžinierstva mechanizmus.

Nástroje CASE

Nástroje CASE (počítačom podporované softvérové ​​inžinierstvo), ako je Rational Rose, zvyčajne kladú jadro produktu na obojsmernú cestu. Pretože však obojsmerné inžinierstvo nerobí nič užitočné, mnoho vývojárov používa tieto nástroje ako drahé programy na kreslenie. Z dostupných nástrojov si myslím, že stoja za zváženie tri (hoci žiaden z nich nepoužívam):

  • Bezplatný nástroj ArgoUML s otvoreným zdrojovým kódom, napísaný v jazyku Java, zvláda diagramy UML pomerne dobre. Posledná verzia sa vás dokonca pokúša sprevádzať týmto procesom (zatiaľ s marginálnym úspechom, ale je to dobrý začiatok).
  • Embarcadero GDPro, predtým distribuované spoločnosťou Advanced Software, ponúka dobrú podporu pre skupinu pracujúcu na jednom softvérovom dizajne, ale má tiež nedostatky v tomto oddelení. Návrhár napríklad nemôže skontrolovať diagram dynamického modelu, keď automaticky uzamkne triedy spojené s objektmi na dynamickom modeli.
  • Spoločne ControlCenter spoločnosti TogetherSoft sa vyhýba problémom so spätným chodom tým, že ho neurobí. Kód a dizajn sa zobrazia na obrazovke súčasne a pri zmene jedného sa automaticky zmení aj druhý. Spoločne však ControlCenter nepodporuje skupiny programátorov dobre.
  • Krátko by som mal spomenúť aj Visio spoločnosti Microsoft. Visio je program na kreslenie, ktorý podporuje UML po móde, ale jeho podpora napodobňuje mizerné používateľské rozhranie Rational Rose. Rôzne šablóny na kreslenie pre tvary UML vo Visiu fungujú lepšie ako zabudovaná podpora UML, vrátane jednej zo sekcií „Goodies“ na mojej webovej stránke.

Takže, ak o týchto nástrojoch uvažujem tak zle, čo použijem? Zďaleka najproduktívnejšími nástrojmi OO-dizajnu sú tabuľa (ideálna je miestnosť s tabuľami od steny k stene od podlahy po strop) a podložky Post-it veľkosti flipchartu, ktorých listy môžete odlepiť nalepiť na stenu. Použil som ich na navrhnutie významných projektov s veľkým úspechom. Práca na tabuli navyše zaberie oveľa menej času ako zápasenie s nástrojom OO CASE.

Jedinou ťažkosťou pri prístupe k tabuli je zachytenie informácií na tabuli. Tabule, ktoré tlačia, síce existujú, ale sú drahé, nemotorné a príliš malé. Jeden elegantný hardvérový produkt, ktorý sleduje pohyb pera po tabuli a zachytáva údery pera v počítači. Ostatné tabule fungujú ako obrie tablety digitalizátora. Tieto riešenia sa však ukazujú ako príliš obmedzujúce; dizajn prebieha súčasne na tabuliach vo viacerých kanceláriách, na obrúskoch, na útržkoch papiera atď. Do miestnej kaviarne nemôžete nosiť tlačovú tabuľu s hmotnosťou 300 libier.

Čo teda funguje

Čo má teda matka robiť? Ako zachytíte tieto artefakty, aby ste ich archivovali v počítači, aby vytvorili primeranú dokumentáciu tak, ako sú, bez toho, aby ste ich museli prenášať do programu na kreslenie?

Riešenie:

  1. Digitálny fotoaparát
  2. Nádherný softvérový produkt s názvom Whiteboard Photo od spoločnosti Pixid

Digitálna fotografia, bohužiaľ, často produkuje obrázky, ktoré nie sú vyhovujúce pre dokumentáciu. Aplikácia Whiteboard Photo to kompenzuje a premení digitálne obrázky na užitočné. Fotografie tu majú naozaj hodnotu tisíc slov. Obrázok 1 zobrazuje typickú digitálnu fotografiu tabule.

Obrázok 2 zobrazuje ďalší príklad.

Obrázok 3 ukazuje, ako Tabuľková fotografia transformuje Obrázok 1.

A tu je príklad, ako Obrázok 2 vyzerá, že program Whiteboard Photo urobil svoje kúzlo.

Ako ukazujú obrázky, rozdiel je úžasný. Aby som pretransformoval pôvodný obrázok na vyčistenú verziu, jednoducho som narazil Ctrl-L. Softvér automaticky našiel hranice tabule, opravil skreslenie spôsobené snímaním obrázka z uhla (potrebné na zabránenie oslneniu bleskom), vybral čiary vzoru a nakreslil ich. Všetko, čo produkt potrebuje na dosiahnutie dokonalosti, je rozpoznávanie ručného písania, ale v súčasnej podobe som s ním šteklená ružovo. Teraz môžem vytvárať výkresy v dokumentačnej kvalite priamo z pôvodnej tabule, bez toho, aby som strácal hodiny zadávaním výkresu do nejakej chromej výhovorky pre nástroj CASE.

Nech je to jednoduché

Podľa mojich skúseností, pokiaľ ide o dizajn OO, low-tech nástroje fungujú najlepšie. Sú skutočne rýchlejšie, ľahšie sa používajú a v prostredí spolupráce spolupracujú. Doteraz som zistil, že kombinácia tabule, digitálneho fotoaparátu a Whiteboard Photo ponúka najlepší spôsob, ako dostať programové návrhy do stroja.

Allen Holub poskytuje konzultačné služby, školenie a mentoring v oblasti návrhu OO, procesu OO a programovania v jazyku Java. Pravidelne predstavuje intenzívny OO design workshop pre záujemcov o rýchly rozvoj ich OO zručností. (Viac informácií nájdete na //www.holub.com.) Allen pracoval v počítačovom priemysle od roku 1979, naposledy ako technologický riaditeľ spoločnosti NetReliance, Inc. Je široko publikovaný v časopisoch (Dr. Dobb's Journal, Programmers Journal, Byte a MSJ, okrem iných). Allen má na svojom konte osem kníh, z ktorých najnovšia - Skrotenie jávskych vlákien (APpress, 2000; ISBN: 1893115100) - pokrýva pasce a úskalia jávskeho vlákna. Vyučuje OO design a Java na University of California, Berkeley Extension (od roku 1982).

Získajte viac informácií o tejto téme

  • Bezplatný open source nástroj na návrh ArgoUML nájdete na

    //argouml.tigris.org/

  • Embarcadero GDPro nájdete na

    //www.embarcadero.com

  • Viac informácií nájdete na Spolu ControlCenter spoločnosti TogetherSoft na adrese

    //www.togethersoft.com

  • Domovská stránka Microsoft Visio

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

  • Ďalšie informácie o tomto zaujímavom nástroji nájdete na stránke produktu Pixid Whiteboard Photo

    //www.pixid.com/home.html

  • Web Allena Holuba obsahuje jeho stránku „Goodies“, kde nájdete tipy na dizajn OO, pravidlá programovania a poznámky z niektorých Allenových prednášok.

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

  • JavaWorldje Objektovo orientovaný dizajn a programovanie Register obsahuje početné články zaoberajúce sa dizajnom

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

  • Viac skvelých recenzií produktov nájdete v JavaWorldje Register recenzií výrobkov

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

  • Prečítajte si viac komentárov v JavaWorldje Register komentárov

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

  • Tipy a návody týkajúce sa návrhových vzorov, vývojových nástrojov, ladenia výkonu, zabezpečenia, testovania a ďalších tém získate po prihlásení sa k odberu našich Aplikovaná Java informačný bulletin

    //www.javaworld.com/subscribe

  • Hovorte v našom Teória a prax programovania diskusia

    //forums.idg.net/webx?50@@.ee6b806

  • Množstvo článkov týkajúcich sa IT z našich sesterských publikácií nájdete na .net

Tento príbeh, „Pokiaľ ide o dobrý OO dizajn, snažte sa o jednoduchosť“, bol pôvodne publikovaný spoločnosťou JavaWorld.

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