Børre Stenseth
Moduler > Arkitektur

Programarkitektur

Programarkitektur kan bety så mangt. Hensikten med denne gruppa moduler er å se litt på hvordan "typiske" programmer har endret seg over tid og hvordan de "typiske" programmene støttes av utviklingsverktøy og API'er.

Under Windows er det rimelig å betrakte i hvert fall 3 tidsbolker, svært grovt:

  • Enkle programmer, med eller uten GUI, som er basert på den opprinnelige Windows API'en.
  • Dokumentorienterte programmer basert på MVC (Microsoft Foundation Classes) [1] .
  • Generelle programmer basert på BCL (Basic Class Libraries).

Jeg skal kommentere hver av dem litt nærmere.

Enkle programmer mot Windows API

Som navnet sier så er Microsoft Windows vindusorientert. Teknologien og navnet henger sammen med de rastergrafiske skjermene som kom på 80-tallet. Microsoft Windows fikk en API som gjorde det mulig å programmere mot de ressursene som understøtter vinduer, blandt mange andre ting som filsystem osv. Denne API-en er ganske enkel og krever at programmereren i detalj kontrollerer meldingstransport, generering av vinduer, administrasjon av programressurser som tekster, bilder osv. Utviklingsmiljøet hadde i starten ikke noen støtte for å editere slike ting som layout i dialogbokser osv.

Selve API'en tilbyr ikke noe objektbegrep. Programmeringsspråkene var C og etterhvert C++.

Det er vanskelig å sette navn på den typiske applikasjonen fra denne tidsbolken. Det var fullt mulig å lage de fleste typer desktop applikasjoner, med dokumenthandtering og dialoger, men utviklingsmiljøet la ikke spesielt til rette for noen "typiske" applikasjoner.

Modulen C/WinAPI viser et eksempel på et C-program som er skrevet på et tidlig tidspunkt Microsoft Windows historie.

MFC

Microsoft Foundation Classes er et objektorientert overbygg over den flate windows API'en. MFC ble introdusert i 1992. Etterhvert fikk Visual Studio en form som er gjennkjennelig i forhold til det vi finner idag, selv om verktøy kassa var vesentlig mindre. Blandt annet var selvsagt ikke noe som har med nettløsninger og strukturerte (XML) dokumenter med.

Objektorienteringen, både i tankesett og konkret i API'en, førte til flere interessant trekk i utviklingen.

Det ble mulig å lage "halvfabrikata"-løsninger. Den typiske applikasjonen var en dokumentorientert applikasjon bygget over MVC (Model View Controller) modellen. Både SDI (singel Document Interface) og MDI (Multiple Document Interface) var så og si standard applikasjoner i Visual Studio. MVC innebærer et forsøk på å skille Model som var selve dataene, typisk et dokument, fra View som var den framstillingen vi lagde av dataene. Controller-delen var logikken som bandt de to sammen. MVC har sitt opphav i SmallTalk-prosjektet og nordmannen Trygve Reenskaug er mannen som har fått æren for å introdusrere begrepet.

Alternativet til en slik dokumentorientert applikasjon var det som ble kalt en dialogbasert applikasjon. De siste var i utgangspunktet vesentlig enklere og minner arkitekonisk mer om de form-baserte applikasjonene vi nå lager i Visual Studio/.Net.

Objektorienteringen gjorde det også interessant å se hvordan objekter skulle kunne utveksles, hvordan objekter skulle kunne plantes i andre applikasjoner og hvordan ojekter skulle kunne kommunisere. Microsofts bidrag i denne sammenhengen er AciveX og etter hvert COM (Component Object Model) og DCOM (Distributed COM ) [2] .

Hvis du vil se hvordan en typisk MVC-applikasjon ser ut kan du starte Visual Studio, velge C++ som språk og velge applikasjonstype MVC. Da starter en wizard som ber deg spesifisere nærmere hva du vil ha, SDI eller MDI, database støtte osv. Du vil se ta det lages en rekke filer som har spesialisert oppgaver i henhold til en MVC-tankegang.

BCL

BCL er en fornying av det obejktbaserte grensesnittet vi som programmerere skal forholde oss til. BCL er en klar forbedring av MFC rent innholdsmessig, men det er først og fremst en forbedring når det gjelder typebegrep og muligeheter for å integrere flere språk. C# som et ektefødt barn, og forelder, til BCL har gjort programmering under MS Windows vesntlig enklere.

Det er interessant å se hvordan den "typiske" applikasjonen har endret seg og hvordan Visual Studio støtter nye typer programarkitekturer. Vi har fortsatt støtter når vi skal bygge dokumentorienterte applikasjon er og modulen MDI er et eksempel på det. Men standardapplikasjonen er generalisert og vi tar alltid utgangspunkt i en form. Skillet og koplingen mellom modell og view er ivaretatt med et generalisert bindings-begrep som gir oss stor frihet i design av et program. MVC-tankegangen er slik jeg ser det realisert på et slags mikronivå (kontrollernivå) i stedet for i hovedarkitekturen til programmet.

Verktøykassa i Visual Studio har vokst betraktelig og reflekterer både erfaring med det som har vært og de nye typer applikasjoner vi lager. Vi vil inkorporere objekter som handterer XML, Web Services osv.

Verktøykassa for nettaplikasjoner (nettsider) er interessant av flere grunner. For det første er koplingen mellom språket, min erfaring er C#, og kontrollerne et langt steg framover fra den tradisjonelle asp-modellen. For det andre er det verdt å merke seg den forskjellen, og implisitte konflikten, mellom det vi ønsker oss og som Visual Studio tilbyr, og det som faktisk lar seg realisere på en vevside som nettlesere flest skal kunne tolke. Oversettelsen fra sofistikerte komponenter til enkle HTML-strukturer er ikke ukomplisert og det er lett å se at ønsket om et utvidet repertoire på HTML-siden er tilstede. Dette legger indirekt et press på HTML-standarden og det er en utfordring til nettleserprodusenetene, og Microsoft er som kjent en av dem, å holde standarden.

C-kode mot den originale Windows API'en
MDI, XML, TreeView etc
Litt om ferdige og egne dialogbokser

Referanser

  1. Model View ControllerWikipedia2009Wikipediaen.wikipedia.org/wiki/Model-view-controller14-03-2010
  1. Component Object Modelwww.microsoft.com/com/default.mspx14-03-2010
(Velkommen) Moduler>Arkitektur (C/WinAPI)