Kasutaja:Programmi ülesehituse muster

Allikas: Vikipeedia

Programmi ülesehituse muster on tarkvaraarenduses seaduspärasus, mida kasutatakse programmeerimis probleemide lahendamiseks. Ülesehituse muster ei põhine mitte probleemi laadist, vaid sellest, kuidas probleemi lahendada, sest ühte probleemi võib lahendada mitmel viisil. Mustrit ei ole võimalik otse koodi kopeerida ja kasutada, vaid muster on pigem selgitus mingisugusest lahenduskäigust, mille peab programmeerija ise realiseerima.[1]

Ülesehituse mustrid kirjeldavad peamiselt objektorienteeritud programmeerimises suhteid klasside ja objektide vahel.[2]

Ülesehituse mustrite keele alustalaks programmeerimises võib lugeda raamatu Design Patterns: Elements of Reusable Object-Oriented Software ilmumist 1994 aastal.

Ajalugu[muuda | muuda lähteteksti]

Ülesehituse mustri formuleeris Christopher Alexander ja tema sõnul seletab iga ülesehituse muster probleemi, millega oleme sageli silmitsi ning see sama muster annab ka probleemile lahenduse, kuid mitte kunagi täpselt samasuguse lahenduse.[3] Kuigi Christopher Alexander rääkis mustritest hoonetes ja linnades, leidis mustrite põhimõte kasutust ka Informaatikas, eriti objektorienteeritud programmeerimises.

Ülesehitus mustrid olid juba varem kasutuses tarkvaraarenduses, kuid puudus universaalne sõnavara nende arutlemiseks.[2]

Ülesehituse mustrite liigid[muuda | muuda lähteteksti]

Gang of Four kirjeldavad mustrite liigitamiseks viisi, kus eraldada mustrid mitme kriteeriumi järgi.[2]

  1. Eesmärk:
    1. Loomise eesmärgiga mustrid tegelevad objektide loomisega.
    2. Struktuurse eesmärgiga mustrid kasutavad pärimist, et tegeleda klasside ja objektide kompositsiooniga.
    3. Käitumise eesmärgiga mustrid kirjeldavad viise kuidas klassid ja objektid suhtlevad.
  2. Skoop:
    1. Klassi mustrid tegelevad klasside ja nende alamklasside suhetega, mis on staatilised.
    2. Objekti mustrid tegelevad objektide suhetega, mis on dünaamilisemad kui klassi suhted.

Ülesehituse mustri dokumenteerimine[muuda | muuda lähteteksti]

Ülesehituse mustri dokumentatsioon kirjeldab mis kontekstis, kuidas ja miks mingit mustrit kasutada. Järjepideva dokumenteerimise stiili mõte on, et tarkvara arendajad saaksid sõnavara mida kasutada mustrite jagamisel ja arutamisel.[2] Järgnev dokumentatsiooni stiil on raamatust Design Patterns.

  • Mustri nimi ja klassifikatsioon: nimi annab lühidalt edasi mustri mõtte. Nt. Singleton muster.
  • Kavatsus: lühike kirjeldus sellest, mida muster teeb, miks ta seda teeb ja mis probleemi see lahendab. Nt. Singleton mustri puhul, tahame kindel olla, et mingil klassil oleks ainult üks instants ja see instants oleks kättesaadav globaalses skoobis.
  • Tuntud ka kui: teisi tuntuid nimesid mustrile kui neid leidub.
  • Motivatsioon: näide mis kirjeldab hästi disaini probleemi ning kuidas klassi- ja objekti struktuurid mustris lahendavad selle probleemi. Nt. kuidas teha kindlaks, et on ainult üks faili süsteem.
  • Rakendatavus: mis olukordades saab ülesehitus mustrit rakendada ja kuidas neid olukordi ära tunda. Nt. Kui peab olema ainult üks instants klassist ja see instants peab olema kättesaadav.
  • Struktuur: graaf representatsioon klassidest mis on kasutuses mustris. Kasutatakse ühtset modelleerimiskeelt (UML).
  • Osalejad: klassid ja objektid mis osalevad ülesehitus mustris. Nt. Singleton hoolitseb ise selle eest, et teda oleks ainult üks.
  • Koostöö: kuidas osalejad teevad omavahel koostööd. Nt. kliendid saavad Singletonile juurde pääseda läbi Singletoni Instantsi operatsiooni.
  • Tagajärjed: kuidas toetab muster oma eesmärkide ja mis on mustri head ja halvad küljed.
  • Rakendamine: mida silmas pidada mustri implementeerimisel.
  • Näidiskood: kooditükkid näitamaks kuidas võiks mustrit implementeerida mingis keeles. Nt. C++ Singleton implementatsioon.
class Singleton {
public:
    static Singleton* Instance();
protected:
    Singleton();
private:
    static Singleton* _instance;
};
  • Kasutusjuhud: näited päris kasutusjuhtudest.
  • Sarnased mustrid: mis mustrid on tihedalt seotud praeguse mustriga. Teisi mustreid nagu nt. Abstract Factory ja Builder saab implementeerida Singleton mustriga.

Kriitika[muuda | muuda lähteteksti]

Kuigi ülesehitus mustrid on väga levinud metoodika, siis Cheng Zhang ja David Budgeni sõnul on see metoodika enamasti levinud tänu kogenud programmeerijate heakskiidule, mis tuleneb nende enda kogemuste- ja mitte empiiriliste uurimistööde tulemuste põhjal.[3]

Zhang ja Budgeni uurimistulemuste põhjal ei olnud piisavalt tõestust, et väita, et ülesehituse mustrid aitavad algajatel programmeerijatel kiiremini õppida. Samas aga selgus, et mustrid võivad kasulikud olla tarkvara hoolduse vaatevinklist.[3]

Viited[muuda | muuda lähteteksti]

  1. M. Poolak ja juhendaja J. Kippar, Programmi Ülesehituse Mustrid. Tallinna Ülikooli seminaritöö. 2006
  2. 2,0 2,1 2,2 2,3 E. Gamma, R. Helm, R. Johnson ja J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. USA: Addison-Wesley. 1994.
  3. 3,0 3,1 3,2 C. Zhang ja D. Budgen, “What Do We Know about the Effectiveness of Software Design Patterns?”, IEEE Computer Society, 2012, p. 1215 - 1229.