Marko Lumivuori
Ohjelmistotekniikan seminaariesitelmä
5.12.1997
Tässä seminaarityössä luodaan yleiskatsaus IBM:n VisualAge Professional sovellus-kehittimen ominaisuuksiin ja käyttöön. Siitä on tehty versiot yleisimmille ohjelmointikielille (C++, Java, BASIC, COBOL, Smalltalk). Tässä esitelmässä käsitellään VisualAge for Smalltalk Professional versiota 4.0.
Tiivistelmä
*Sisältö
*1. Johdanto
*2. Mikä on VisualAge?
*2.1 Yleistä
*2.2. VisualAgen ominaisuudet
*2.3 VisualAge visuaalisena suunnittelutyökaluna
*2.4 Sovelluskehityksen roolit
*2.5 Oliopohjainen teknologia
*2.5.1. Oliopohjainen teknologia ja VisualAge
*2.5.2. Oliopohjainen teknologia ja iteratiivinen ohjelmistokehitys
*2.6. Tiimiohjelmointi
*2.7. Komponenteista rakentaminen (engl. construction-from-parts)
*2.8 Asiakas-palvelin -ohjelmointi
*3. VisualAge-työympäristö
*3.1 Visuaaliset työkalut (Visual tools)
*3.2. Komponentit eli osat
*3.3. Komponentin rajapinta
*3.2.2 Komponenttien väliset yhteydet
*3.2.4 Yhteyksien ja osien ominaisuuksista
*3.3 Smalltalk-skriptit
*4. Yhteenveto
*LÄHTEET
*
Nykyisiin tietojenkäsittely-ympäristöihin on tarjolla laaja valikoima laitteistoja ja ohjelmistoja. Niiden on kuitenkin toimittava yhteen, jotta yritykset saisivat kaiken hyödyn irti sijoituksistaan. Loppukäyttäjät odottavat käyttämiltään ohjelmistoilta intuitiivisyyttä, helppokäyttöisyyttä ja tehokkuutta. Tehtäväkriittisten (engl. mission-critical) sovellusten suunnittelu on haastavampaa kuin milloinkaan aikaisemmin. Kilpailun kärjessä pysyminen vaatii ohjelmistovalmistajilta jatkuvaa innovointia ja tuotekehittelyä sekä kykyä yhdistää uusi ja perinteinen teknologia.
Jotta näitä haastavia sovelluksia voitaisiin rakentaa nopeasti, tarvitaan visuaalinen ohjel-mointiympäristö, josta löytyvät työkalut niin testaukseen, virheenjäljitykseen kuin paketointiiinkin (engl. packaging). Sovelluksia täytyy voida kehittää ja ajaa useissa eri käyttöjärjestelmissä ja niiden tulee toimia myös asiakas/palvelin -ympäristöissä. VisualAge-sovelluskehittimessä on otettu huomioon kaikki nämä vaatimukset.
Ensimmäisessä luvussa kerrotaan VisualAgesta yleisesti keskittyen mm. sen toiminta-periaatteeseen ja ominaisuuksiin. Ohjelmiston peruskomponentit, käyttöliittymä ja termistö muodostavat toisen luvun. Kolmannessa luvussa tutustutaan esimerkkisovelluksen avulla VisualAgen ohjelmointitekniikkaan.
Tässä luvussa tutustutaan VisualAgen toimintaperiaatteisiin ja ominaisuuksiin. Lisäksi sitä tarkastellaan sekä visuaalisena että oliopohjaisena sovelluskehittimenä.
VisualAge on integroitu sovelluskehitysympäristö, joka on tarkoitettu vaativien tuotannollisten asiakas/palvelin -sovellusten (client/server) toteuttamiseen. Sovelluskehitystä voidaan tehdä useille eri ympäristöille (mm. IBM/OS ja AIX, HP/UX, SUN/Solaris, MS Windows 3.x, 95 & NT). VisualAge hyödyntää visuaalista ohjelmointitekniikkaa ja tukee sovellusten rakentamista komponenteista (engl. construction-from-parts -technology).
Koska VisualAgessa kaikki tehdään olio-ohjelmointina, voidaan tehtyä ohjelmakoodia joko kokonaan tai osittain hyödyntää muissa sovelluksissa.Visuaalinen ohjelmakehitys on samalla nopeaa. Se mahdollistaa iteratiivisen työskentelyn loppukäyttäjän ja suunnittelijan välillä, kun ollaan rakentamassa käyttöliittymää ja sen tarvitsemaa toimintalogiikkaa.
VisualAgen merkittävin piirre on se että sillä voi ryhtyä kehittämään toiminnoiltaan hyvinkin monimutkaisia sovelluksia tuntematta juurikaan olio-ohjelmointia. Ohjelmat tehdään käyttämällä hyväksi valmiita komponentteja ja toimintalogiikka määritellään visuaalisesti muodostamalla yhteyksiä käytettyjen osien välille. Useimmissa tapauksissa ei ole välttämätöntä kirjoittaa riviäkään ohjelmakoodia sovelluksen luomiseen.
Sovelluksen toimintoja voidaan kuitenkin täydentää käyttämällä taustalla olevaa ohjelmointikieltä. VisualAge for Smalltalk -versiossa käytetään IBM:n kehittämää, kokonaan oliopohjaista Smalltalkia.
VisualAge on luotu VisualAgella itsellään, joka varmistaa että suunnittelu ja koodaus ovat varmasti testattu ja optimoitu. Mahdollisuus jo olemassa olevan koodin hyödyntämiseen muissa sovelluksissa - uusiokäyttö - vähentää kehitykseen käytettyä aikaa. Koska monia komponentteja voidaan käyttää ilman muutoksia, vähenee myös ohjelmavirheiden mahdollisuus merkittävästi.
Visuaalinen ohjelmointitapa mahdollistaa sovellusten rakentamisen jopa kirjoittamatta riviäkään ohjelmakoodia, käyttäen hyväksi osistakokoamistekniikkaa. Luodut käyttöliittymät täyttävät kaikki IBM:n SAA-standardiin (System Application Architecture) sisältyvän Common User Access (CUA) –määrittelyn mukaiset vaatimukset. SAA-standardi esiteltiin vuonna 1987 ja se kattaa kaikki IBM:n laitteistot.
Ohjelmoinnissa tarvittavat osat on kootaan osakirjastoon, josta löytyvät valmiina mm. graafisen käyttöliittymän, tietokantakyselyjen sekä tapahtumankäsittelyn toteuttamiseen tarvittavat osat. Kirjastoon voi tallettaa IBM Smalltalkilla luotuja omia osia tai hankkia niitä muualta.
Relaatiotietokannoista tuettuna ovat niin paikallis- kuin etätietokannatkin. Lisäksi VisualAge sisältää joukon visuaalisia ohjelmointiosia, jotka mahdollistavat yleiskäyttöiset t. geneeriset kyselyt mihin tahansa tietokantaan.
Tietokannat, joita tuetaan suoraan:
Tietoliikennetuki on saatavilla seuraaville standardeille:
Tiimiohjelmointia tuetaan varsin kattavasti. Verkkoympäristössä voidaan samanaikaisesti käyttää luokkakirjastoa sekä versioinnin ja konfguroinnin hallintaa.
DLL-tuki mahdollistaa pääsyn muilla ohjelmointikielillä tehtyihin DLL-kirjastoihin. Multimediatuki sisältää valikoiman uudelleen käytettäviä ja laajennettavia osia, joilla voidaan lisätä sovelluksiin ääntä ja liikkuvaa kuvaa.Tiedon yhteiskäyttö mahdollistetaan System Object Model (SOM) ja Distributed System Object Model (DSOM) tuella, jolloin muilla ohjelmointikielillä luotujen, SOM-luokkina ja olioina paketoituja olioluokkia voidaan käyttää ja aliluokitella uudelleen.
Tuettuna on lisäksi DDE (Dynamic Data Exchange), joka sallii kahden samassa koneessa ajettavan sovelluksen vaihtaa tietoja keskenään dynaamisesti.
IBM Smalltalk tarjoaa täysin oliopohjaisen (OO) kehitysympäristön sisältäen monimuotoisen joukon luokkia (kuva 1). IBM Smalltalk -ohjelmointikieli noudattaa ANSI Smalltalk –standardia.
Kuva 1. VisualAgen ominaisuudet.
2.3 VisualAge visuaalisena suunnittelutyökaluna
VisualAgen käyttö pohjautuu suunnittelutekniikkaan, jossa sovellus kootaan komponenteista tai osista (engl. construction-from-parts). Nykyaikaiset käyttöliittymät sisältävät kehittyneitä osia, kuten kansioita, muistioita, työkalurivejä jne. Multimediaa ja grafiikkaa hyödyntävät sovellukset ovat muodostumassa standardiksi. Kaikki tämä on johtanut ohjelmistojen käyttöliittymien muuttumiseen yhä monimutkaisemmiksi. Ohjelmistovalmistajilta edellytetään kykyä omaksua uusia käsitteitä nopeasti ja kilpailu markkinoilla pakottaa tiukentamaan aikatauluja. Pysyäkseen mukana kilpailussa on yritysten panostettava jatkuvaan tuotekehittelyyn, kuten asiakas/palvelin -sovelluksiin, oliopohjaiseen teknologiaan, iteratiiviseen kehittämismalliin ja visuaaliseen ohjelmointiin.
Tuotekehityksen avuksi ovat tulleet visuaalinen ohjelmointi sekä suunnittelu komponenteista, joista jälkimmäinen pohjautuu pääosin tuotantoteollisuudessa hyviksi koettuihin tekniikoihin. Nämä kaksi lähestymistapaa antavat sovelluskehittäjille mahdollisuuden keskittyä olennaisimpaan, eli ohjelman varsinaiseen toiminnallisuuteen.
Yritysten toiminnan tehokkuuden ja tuottavuuden lisääminen on puolestaan johtanut siihen, että olemassaolevia sovelluksia on muutettava vastaamaan uusia tarpeita samalla, kun uusia kehitetään. Sovellukset toimivat tyypillisesti hajautetussa ja heterogeenisessä ympäristössä suorittaen rinnakkaisesti useita yksittäisiä tehtäviä. Tämä edellyttää erityistä joustavuutta ja tehokkuutta mm. tapahtumankäsittelyssä.
Visuaaliselta sovelluskehittimeltä edellytetään siis mahdollisuutta rakentaa kehittyneitä käyttöliittymiä ja samalla aiempaa matalampaa kynnystä sovellusten kokoamisen ja räätälöinnin vaatimuksissa.
Useat markkinoilla olevat visuaaliset ohjelmointityökalut tarjoavat olioihin perustuvan käyttöliittymän, mutta ne eivät kaikki perustu oliotekniikkaan, eivätkä näin ollen muodosta oliopohjaista sovelluskehitysympäristöä. VisualAgessa sen sijaan kaikki käsitetään olioina. Sovellukset rakennetaan visuaalisesti, ts. oliot esitetään graafisina kuvakkeina. Ohjelmat "kirjoitetaan" luomalla yhteyksiä niiden välille. Yhteydet kuvaavat olioiden välisiä suhteita.
Visuaalisen sovelluskehityksen tarjoamat työkalut ja teknologiat, kuten osista kokoaminen, muuttavat vähitellen perinteistä roolikäsitystä sovelluskehityksessä. Niiden on todettu soveltuvan yhtä hyvin niin ammattilaisille kuin heikommin ohjelmointikieliä osaaville.
Nykytilanteessa sovelluskehittäjien ja loppukäyttäjien ryhmä on selkeästi erotettu toisistaan (kuva 2). Viivan yläpuolelle jäävät sovelluskehityksen ammattilaiset, jotka osaavat ohjelmoida ja tietävät, miten ohjelmia suunnitellaan. Viivan alapuolelle jäävät sovelluksia käyttävä ryhmä. Nämä loppukäyttäjät todennäköisimmin tietäisivät, mitä sovelluksen "pitäisi" tehdä, mutta eivät osaa välttämättä ohjelmoida. Monille ohjelmointikielen hallinta jää tavanomaisen tomienkuvan ulkopuolelle, eikä sen opiskeluun myöskään jää aikaa.
Kuva 2. Ohjelmistokehittäjien ja loppukäyttäjien välistä suhdetta kuvaava kaavio.
Oliopohjaisen teknologian hyödyntäminen itsessään on todettu lisäävän sovellus-ohjelmoinnin tuottavuutta, mikä puolestaan merkitsee loppukäyttäjille parempia ja aikataulun mukaisia tuloksia. Tehokkaampi toimintatapa ei silti muuta perinteistä jakoa ohjelmoijien ja loppukäyttäjien välillä.
Kuvan 2 oikeassa kulmiossa on kaksi viivaa. Alempi kuvaa sitä, kuinka vähemmän ohjelmointitaitoja omaavat henkilötkin voivat rakentaa sovelluksia VisualAgella. Ylempi viiva puolestaan sitä, miten suunnittelijat, käyttöliittymäspesialistit ja sovelluksen loppukäyttäjien tukihenkilötkin voivat rakentaa prototyyppejä tai jopa monimutkaisiakin sovelluksia olemassaolevista osista. Ainoastaan osia valmistavilta vaaditaan laajoja ohjelmointitaitoja.
Tuloksena saadaan kolme erillistä mutta samalla toisiaan täydentävää roolia.
Olio-ohjelmointi on saanut keskeistä huomiota ohjelmistokehityksessä, sillä se yksin-kertaistaa näkemystä sovelluskehityksen ongelmista. Olio-ohjelmointi mahdollistaa liiketoiminnan rakenteiden mallintamisen olioiksi myös ohjelmistopuolella. Yhtenäiset ideat ja käsitteet voidaan siten käyttää läpi koko ohjelmiston kehityskaaren määrittelystä toteuttamisvaiheeseen ja ylläpitoon saakka.
Oliopohjaisuudella voidaan välttää "väkinäisesti" tehtyjen esitysmuotojen epäyhte-näisyyksiä tilanteissa, joihin perinteiset kehitysmallit usein saattavat johtaa. Niissä käsitemalli on muunnettava proseduraaliseksi toimintaa kuvaaviksi malleiksi. Oliopohjaisuuden on todettu mahdollistavan nopean sovellusten suunnittelun, riskittömämmän iteratiivisen kehittämisen sekä graafisten käyttöliittymien tehokkaan suunnittelun ja toteuttamisen.
Suurimpana ongelmana olioteknologiaan siirtymisessä on ollut tarvittavat taidot omaavien henkilöiden puuttuminen yrityksissä. Siirtyminen perinteisestä proseduraalisista ohjelmointikielistä - neljännen sukupolven ohjelmointikielet (engl. 4GL) mukaan lukien - oliopohjaisiin on siksi ollut hidasta. Sen sijaan, että opeteltaisiin uusia analysointitapoja ja ohjelmointikieliä, voidaan oliotekniikan eduista suurin osa hyödyntää yhdistelemällä sopivasti perinteistä ja uutta teknologiaa.
2.5.1. Oliopohjainen teknologia ja VisualAge
VisualAgessa toteutettu visuaalinen ohjelmointitapa ja komponenteista rakentaminen sopivat ohjelmointitaustoiltaan erityyppisille suunnittelijoille ja helpottaa siirtymistä perinteisestä ohjelmointitekniikasta oliopohjaiseen teknologiaan. VisualAgessa olio-pohjaisuus ikäänkuin "piilotetaan" helpomman, visuaalisen lähestymistavan alle, mikä mahdollistaa olio-ajattelun käyttöönoton vähitellen.
VisualAgella työskenneltäessä luodaan osista tai luokista aitoja oliopohjaisia sovelluksia, jotka mallintavat yritysmaailman toimintoja ja rakennetta sekä lisäävät myöhemmin sovelluksen joustavuutta ja uudelleenkäytettävyyttä. Räätälöity toimintalogiikka voidaan suunnitella ja toteuttaa IBM Smalltalk -ohjelmointikielellä. Sillä voidaan myös luoda omia uudelleenkäytettäviä osia, jotka on sitten mahdollista liittää VisualAgen osapalettiin.
Toimivuuden ja yhteensopivuuden varmistamiseksi VisualAge-sovelluskehitin on luotu kokonaisuudessaan VisualAgella ja Smalltalkilla. IBM Smalltalkin lisäksi voidaan toki hyödyntää muilla ohjelmointikielillä toteutettuja toimintoja. Käyttämällä VisualAgen external-funktioita ja verkkorajapintoja päästään käsiksi millä tahansa kielellä tehtyyn ohjelmakoodiin.
2.5.2. Oliopohjainen teknologia ja iteratiivinen ohjelmistokehitys
Iteratiivinen ohjelmistokehitys vähentää riskejä kehitysprosessissa. Tämä lähestymistapa ei ole suinkaan uusi, mutta sopii hyvin yhteen VisualAgen oliopohjaisuuden kanssa.
Tuotteiden toimittaminen aikataulun mukaisesti on tärkeää ohjelmistoyrityksille. Vielä tärkeämpää on, että myydyt ohjelmistot myös toimisivat oikein. Ohjelmistokehitys-prosessin on pystyttävä vastaamaan muutoksiin, eli sen on oltava joustava. Perinteinen "vesiputous"-malli jähmeyttää vaatimukset kehityskulun alkuvaiheissa johtaen usein tuotteisiin, jotka eivät vastaa loppukäyttäjän tarpeita.
VisualAge tukee iteratiivista mallia. Siinä sovelluskehityksessä edetään vaiheittain ottaen huomioon muuttuvien vaatimusten aiheuttamat toimenpiteet. Näin voidaan varmentaa sovelluksen käytettävys ja toiminnallisuus mahdollisimman aikaisessa vaiheessa. Kehitysprosessin tavoitteena on tietenkin loppukäyttäjien vaatimukset täyttävä ohjelmisto.
VisualAgella sovelluksesta voidaan kehittää nopeasti prototyyppejä jo määrittelyvaiheessa.
Niitä voidaan sitten analysoida yhdessä asiakkaan (loppukäyttäjän) kanssa ja selvittää mahdolliset puutteet ja suunnitella tarvittavat lisäykset. Koska VisualAgella voi luoda toiminnoiltaan täydellisiä prototyyppejä, voi suurinta osaa ohjelmarakenteesta hyödyntää lopullisessa sovelluksessa. Määrittelyvaiheessa tehty pohjatyö ei siis mene hukkaan, vaan se on käytettävissä myös suunnittelu- ja toteutusvaiheissa.
Kun sovellusta on kehittämässä monta ohjelmoijaa, on sen todettu vaikeuttavan tuottaa yhdenmukaisia ja muotovaatimukset täyttäviä ohjelmistoja. Vaikka tiimiohjelmointi onkin yhä tärkeämpää toteutettaessa nykyisiä monimutkaisia ohjelmistoja, on monet visuaaliset ohjelmointityökalut suunniteltu vain yhtä käyttäjää ajatellen.
VisualAge tarjoaa tiimiohjelmointiin seuraavat ominaisuudet:
2.7. Komponenteista rakentaminen (engl. construction-from-parts)
Komponenteista t. osista* rakentamisella (kuva 3) tarkoitetaan suunnittelutekniikkaa, jossa sovellukset kootaan valmiista, uudelleenkäytettävistä ohjelmistokomponenteista. Osa (a part) voi olla enemmän kuin vain peruskomponentti: se voi koostua useista, toistensa kanssa yhteydessä toimivista aliosista (subparts). VisualAgen mukana tulevien osien avulla voidaan luoda sellaisia uudelleenkäytettäviä yhdistelmäosia (composite parts), jotka vastaavat kussakin sovelluksessa tarvittavia toimintoja.
Kuva 3. Komponenteista rakentaminen (construction-from-parts)
Vaikka osien käyttö onkin melko uusi käsite ohjelmistokehityksessä, on se ollut perinteinen toimintatapa erityisesti teollisuuden tuotantoprosessissa. Niinpä sovelluksen kokoaminen osista muistuttaakin pitkälti tietokoneen kokoamisvaiheita.
Sovelluksen kokoamisessa osista voidaan erottaa seuraavat vaiheet:
VisualAgesta löytyy ko. vaiheisiin seuraavaa:
Käyttämällä VisualAgea voidaan
2.8 Asiakas-palvelin -ohjelmointi
Päätöksenteon apuna käytettävien ohjelmien on päästävä lukemaan yrityksen tietokantoja, jota on voitu pitää suurimpana syynä tietojen jakamistarpeelle (sharing). Asiakas-palvelin -ympäristön toiminta perustuu kahteen erilliseen toimintoon: asiakas- ja palvelinprosessiin. Asiakasprosessi käyttää hyväkseen yhden tai useamman palvelimen tarjoamia palveluita. Esimerkiksi nykyiset relaatiotietokannat toimivat tällä periaatteella., jolloin tietokanta-palvelin pystyy vastaamaan useisiin tietokantakyselyihin (asiakas-prosessi) yhtäaikaisesti. Asiakas on tyypillisesti jokin graafisen käyttöliittymän omaava ohjelma Windows tai UNIX-ympäristössä. Sen tehtävänä on huolehtia käyttäjän syöttämän tiedon käsittelystä ja lähettämisestä palvelimelle ja vastavuoroisesti palvelimelta tulevan tiedon esittämisestä käyttäjälle. Tyypillinen palvelin on jokin UNIX-pohjainen isokoneympäristö tai Windows NT.
Lisäksi tarvitaan väliohjelmisto (engl. middleware), jonka tehtävänä on huolehtia tieto-liikenteestä, autentikoinnista sekä erilaisten viestien välityksestä asiakas- ja palvelinosien välillä. Väliohjelmisto myös mahdollistaa asiakas-palvelin toiminnot, vaikka ne olisivatkin erityyppisillä käyttöjärjestelmäalustoilla (engl. platform).
VisualAge mahdollistaa rajapintojen luonnin asiakas-palvelin -sovelluksiin. Vanhempiin, yleensä merkki-pohjaisiin sovelluksiin on usein tarve luoda nykyaikainen visuaalinen käyttöliittymä, ilman että sovelluksia muuten tarvitsee lähteä muuttamaan.
VisualAge tarjoaa joustavat terminaaliemulointirajapinnat osana sen tietoliikenne-ominaisuuksia, ja niitä voi käyttää luotaessa visuaalista ohjelmaa. Asiakasosa käyttää terminaaliemulointiliityntää komentojen suorittamiseen, eikä sitä itsessään tarvitse muuttaa. Käyttäjälle tarjotaan visuaalinen käyttöliittymä alkuperäisen sovelluksen säilyessä muuttumattomana.
Tämä lähestymistapa myös mahdollistaa uusien sovellusten toimittamisen vaiheittain, jolloin uuden käyttöliittymän suunittelu tehdään tarvitulle sovellukselle vain osa kerrallaan.
Tässä luvussa esitellään VisualAge-työympäristön suunnittelutyökalut ja niiden ominaisuudet. Lisäksi perehdytään sovelluksen rakentamisen kannalta keskeisiin käsitteisiin: komponentteihin ja niiden välisiin yhteyksiin.
3.1 Visuaaliset työkalut (Visual tools)
VisualAge:ssa on käytettävissä kolme editoria (muokkainta).
VisualAge Organizerissa (kuva 4) määritellään sovellus ja sen osat (mm. yhteys tietokantaan) sekä hallitaan niitä luomisen jälkeen. Tässä ikkunassa voidaan avata aiemmin tallennettuja versioita sovelluksen osista, niin visuaalisista, kuin piilo-osistakin, sekä luoda lopullinen ajettava versio. Sovellusta voidaan suorittaa testitilassa (test mode) sekä asettaa tiettyjä henkilökohtaisia asetuksia. Smalltalk-ohjelmointikieleen päästään myös täältä käsiksi.
Kuva 4. VisualAge Organizer
Composition Editor (visuaalinen suunnittelutila) on VisualAgen suunnitteluympäristön
varsinainen työpöytä (kuva 5). Siinä asetellaan tulevan käyttöliittymän näkyvät osat ja piilo-osat sekä luodaan toimintalogiikka muodostamalla tarvittavat yhteydet toimintojen ja osien välille. Pääsääntöisesti sovellus voidaan suunnitella pelkästään luomalla yhteyksiä näkyvien ja piilo-osien välille.
Kuva 5. Composition Editor
Script Editor (skriptimuokkain) on tarkoitettu IBM Smalltalk-koodin luomiseen ja muokkaukseen (kuva 6). Smalltalk-skriptejä käytetään laajentamaan sovelluksen toimintalogiikkaa räätälöimällä skripti jotain erityistoimintoa varten. Voidaan esimerkiksi kirjoittaa skripti, joka suorittaa jonkin toiminnon aina kun listassa olevaa riviä kaksoisnapautetaan.
Kuva 6. Script Editor
Public Interface Editor on rajapintaeditori, jossa määritellään ne ominaisuudet, jotka liitetään osan rajapintaan (kuva 7). Siinä voidaan myös generoida oletusskriptit, joita tarvitaan itsemääriteltyjen ominaisuuksien tukemiseen. Tätä editoria ei tarvita, mikäli sovellus rakennetaan jo olemassaolevia osia hyödyntämällä.
Kuva 7. Public Interface Editor
Komponentit ovat ohjelmaobjekteja, joilla on selkeästi määrtitelty rajapinta mahdollistaen osan ominaisuuksien käytön. VisualAge:n kolme eri komponenttityyppiä ovat:
Näkyvä osa (Visual part) muodostaa sovelluksen käyttäjälle näkyvän osan. Näkyviin osiin kuuluvat mm. ikkunat, painikkeet ja tekstikentät.
Piilo-osat (Nonvisual parts) eivät näy käyttäjälle ajon aikana. Tyypillinen piilo-osa on jokin toiminto, tieto tai yhteyttä toiseen osaan tai Smalltalk-koodiin kuvaava viiva. Piilo-osat ovat näkyvissä suunnittelunäytössä (Composition Editor).
Smalltalk-luokkaan (Smalltalk class) liittyviä metodeja voidaan käyttää kuvaamaan käyttäytymistä tai tiedon esittämistä suoraan käyttämällä Smalltalk-kieltä. Näitä osia käsitellään skriptinäytössä (Script Editor).
Jonkin toisen osan sisälle kuuluvia osia kutsutaan aliosiksi (engl. subparts). Osaa, joka sisältää muita osia, kutsutaan yhdistelmäosaksi (engl. composite part).
Komponentin rajapinta (engl. public interface) määrittelee millä tavoin se voi olla vuorovaikutuksessa muiden osien kanssa. Rajapinnalla on seuraavat ominaisuudet.
Attribuutit (Attributes) ovat tietoja, joka näkyvät myös muille osille. Ne voivat esittää mitä tahansa osan loogista toimintoa, kuten esim. tilin saldoa, tilauksen markkamäärää tai painikkeen tekstiä.
Tapahtumat (Events) toimivat signaaleina, jotka ilmaisevat jotain tapahtuneen. Tapahtuma voi olla esimerkiksi ikkunan avaaminen tai attribuutin arvon muuttuminen.
Toiminnot (Actions) käsitetään niiksi operaatioiksi, joita osa voi suorittaa. Toiminnot voi käynnistää muista osista muodostamalla yhteyksiä osien välille.
3.2.2 Komponenttien väliset yhteydet
Komponenttien väliset yhteydet (engl. connections) määrittelevät sen, miten osat toimivat vuorovaikutuksessa toistensa kanssa. Yhteyksiä voidaan luoda osien, skriptien ja toisten yhteyksien välille. Yhteydellä on aina lähde ja kohde (engl. source, target). Toiminnon alkamispiste on lähde ja loppupiste kohde. Seuraavassa esitellään eri yhteystyypit ja annetaan kustakin esimerkki.
Esimerkkien kuvat on ryhmitelty siten, että vasemmalla puolella on näkymä suunnittelu-näytöltä (Composition Editor) ja oikealla taas ajonaikainen näkymä.
Attribuutti-attribuutti –yhteys (engl. Attribute-to-attribute) muodostetaan kahden tietoarvon välille (kuva 8). Mikäli toinen tiedoista muuttuu, muuttuu myös toinen. Ts. kaksi tietosisältöä linkitetään yhteen siten, että niiden arvot ovat yhtäpitävät. Yhteyttä kuvaava viiva on oletusarvoisesti väriltään sininen.
Esimerkki
: Asetetaan näytöllä olevan Window-osan sisälle yksi Teksti-kenttä. Yhdistetään teksti-osan object-attribuutti Window-osan title-attribuuttiin. Tämä saa aikaan ikkunan otsikon muuttumaan tekstikentän sisällön mukaiseksi.Kuva 8. Attribuutti-attribuutti –yhteys
Loppupisteistä kumpi tahansa voi toimia joko lähteenä tai kohteena. Vain silloin, kun attribuuteilla on eri lähtöarvot, on järjestys merkityksellinen. Ko. tapauksessa VisualAge vaihtaa automaattisesti yhteyden kohdepään vastaamaan lähtöpisteen arvoa. Mikäli lähde on arvoltaan nolla, vaihdetaan lähde vastaamaan kohdetta. Tarvittava kohdeosan yhteyden attribuutti määritetään lähteen yhteysominaisuuksista (engl. connect parameters).
Oletusarvoisesti
attribuutti-attribuutti -yhteysparin vastapään arvoa päivitetään, kun toisen attribuutin arvo muuttuu. Lähde- ja kohdepisteiden käyttäytymistä voidaan rajoittaa osan ominaisuuksista (Properties/Editable). Show current -valinta mm. näyttää tämän-hetkisen tilanteen. Voidaan myös määritellä, pitääkö yhteyden attribuutin lähde olla read only –tyyppiä. Tällöin kohteen attribuutin muuttuessa ei lähdeattribuutin arvoa päivitetä ja valittaisiin Read-only source. Lähde- ja kohde attribuuttien paikkaa voidaan vaihtaa valitsemalla Reverse.Tapahtuma-toiminta –yhteydessä (engl. Event-to-action) toiminto suoritetaan aina tietyn tapahtuman yhteydessä (kuva 9). Yhteyttä kuvaava viiva on oletusarvoisesti väriltään vihreä. Tässä yhteystyypissä tapahtuma on aina lähde ja toiminta kohde. Jos yritetään liittää toiminta vahingossa tapahtumaan, vaihtaa VisualAge suunnan automaattisesti.
Esimerkki:
Asetetaan työalueella olevan ikkuna-osan sisään painike. Luodaan yhteys painikkeen (Push Button) clicked-tapahtuman ja uuden ikkunan openWidget-toiminnan välille. Em. aiheuttaa uuden ikkunan näyttämisen, kun painiketta painetaan.
|
Kuva 9. Tapahtuma-toiminta –yhteys
Tapahtuma-skripti (engl. Event-to-script) suoritetaan aina, kun attribuutin on laskettava jokin arvo (kuva 10). Sovellusta voidaan räätälöidä luomalla skriptejä Smalltalk-kielellä, ja yhdistämällä sitten skripti osan johonkin tapahtumaan. Tämän yhteystyypin oletusväri on vihreä.
Tapahtuma-toiminta ja tapahtuma-skripti -yhteydet vaativat joskus yhteysparametreja eli argumentteja. Toiminnon parametrit ovat käytettävissä yhteydelle attribuutteina. Siispä parametrin määrittämiseksi tehdään yhteys Tapahtuma-toiminta -yhteyden parametri-attribuuttiin itseensä.
Esimerkki:
Lisätään työalueelle ikkuna, painike ja kaksi Label-kenttää, joiden sisällöksi kirjoitetaan tekstit: "Hätäpainike" ja "Luvaton käyttö kielletty". Painikkeen tekstiksi kirjoitetaan "Paina hätätilanteessa". Kirjoitetaan skriptieditorilla Smalltalk-skripti, nimeltä displayMessage. Ohjelman toiminnan tulisi olla seuraavanlainen: kun painiketta on napsautettu, skripti käynnistyy, ja avaa ilmoitusikkunan, jonka otsikkona on: "Huomio!" ja tekstisisältönä "Hätäpainiketta painettu". Tapahtuma-skripti -yhteyden rakentaminen aloitetaan avaamalla painikkeen valikko oikeanpuoleista hiiren painiketta napauttamalla. Valitaan Connect-alavalikosta clicked-tapahtuma. Hiiren kohdistin muuttuu tähtimerkiksi (*). Napautetaan hiiren vasenta painiketta minkä tahansa avoimen kohdan päällä työalueella ja valitaan Event-to-script -toiminta avautuneesta valikosta. Saadaan näkyviin ikkuna, jossa näkyy juuri luotu displayMessage –skripti. Valitaan skripti ja, napautetaan OK-painiketta. Tällöin lähdeosan ja työalueen (Composition Editor) ulkoreunan välille muodostuu väriltään vihreä yhdysviiva.
|
|
Kuva 10. Tapahtuma-skripti –yhteys
Tapauksessa, jossa yhteys tarvitsisi parametreja, joita ei vielä ole määritelty, näkyyisi se pisteviivana lähteen ja kohteen välillä. Tällä ilmoitetaan, ettei yhteys vielä ole valmis. Kun kaikki tarvittavat parametrit on määritelty, muuttuu yhteysviiva yhtenäiseksi. Parametreja tarvitsevat yhteydet ilmaistaan tyypillisesti kaksoispisteellä toiminnon nimessä. Esimerkiksi add: ottaa yhden parametrin ja add:alter: kaksi parametria.
Tapahtuma-attribuutti (Event-to-attribute) -tapahtumaa voidaan käyttää asettamaan attribuutin arvo (kuva 11).
Esimerkki:
Tapaus, jossa parametrin avulla on tarjottava yhteydelle attribuutin arvo. Asetetaan Label-osa ikkunan sisään ja vaihdetaan sen ominaisuuksista object-määre tekstiksi "Hello world !". Luodaan sitten yhteys ikkunan openedWidget-tapahtuman ja ikkunan title-attribuutin välille (tämä onnistuu saman osan sisällä). Parametrin välitys yhteydelle tehdään liittämällä Label-osan object-attribuutti yhteyden value-attribuuttiin. Ikkunan avautuessa sen otsikoksi tulee " Hello world !".
|
Kuva 11. Tapahtuma-attribuutti –yhteys
Attribuutti-toiminta -yhteydessä (Attribute-to-action) attribuutteja voidaan käyttää käynnistämään toiminta ja tapahtumia puolestaan vaihtamaan attribuutin arvoa (kuva 12). Tämä on mahdollista, sillä attribuutti tyypillisesti antaa merkin muuttuessaan
Esimerkki: Asetetaan tekstikenttä ja painike ikkunan sisään. Painikkeen ominaisuuksista asetetaan sen
enabled-arvoksi false, eli piilotetaan painike näkyvistä. Luodaan sitten yhteys tekstiosan object-attribuutin ja painikkeen enable-toiminnan välille. Tämä aiheuttaa painikkeen aktivoitumisen heti, kun kenttään syötetään tekstiä.
|
|
|
Kuva 12. Attribuuti-toiminta –yhteys
Attribuutti-skriptistä (Attribute-from-script) –yhteys muodostetaan osan attribuutin ja skriptin välille (kuva 13). Osan attribuutti saa siihen yhdistetetyn skriptin palautusarvon. Attribuutti-skriptistä yhteys voi suorittaa sillä laskutoimituksia, toisin kuin attribuutti-attribuutti –yhteydessä, jossa attribuutin arvo saadaan toiselta attribuutilta. Yhteys päivitetään aina, kun jokin yhteyden sidosarvo muuttuu. Uusi tulos sijoitetaan yhteyden attribuuttiin.
Esimerkki:
Sijoitetaan työalueella olevaan tyhjään ikkunaan kolme tekstikenttää ja vaihdetaan niiden ominaisuuksien (Properties-ikkuna) partName-arvot seuraaviksi: "Etunimi" (Text1), "Sukunimi" (Text2), "Kokonimi" (Text 3). Lisätään kolme Label-kenttää ja vaihdetaa niiden nimet vastaavasti: i "Etunimi" (Label1), "Sukunimi" (Label2) ja "Koko nimi" (Label3). Sijoitetaan ne tekstikenttien yläpuolelle (ks. Kuva ). Tallennetaan skriptieditorilla seuraava Smalltalk-skripti:
ConcatenateNames | firstName lastName | firstName := self subpartAttributeValue: #(#'' #string). LastName := self subpartAttributeValue: #(#'Last Name' #string). ^firstName, ' ', lastName. |
Seuraavaksi valitaan
Kokonimi-tekstikentän Connect-valikosta String-attribuutti. Napautetaan hiirellä tyhjää kohtaa työalueella ja valitaan avautuvasta listaikkunasta Attribute-to-script -vaihtoehto Yhteyttä osoittava nuoli muuttuu kaksikärkiseksi ja osoittaa työalueen ulkoreunaan. Kokonimi-tekstikentän attribuutti saa arvon skriptiltä, joka yhdistää Etunimi- ja Sukunimi-kenttien merkkijonot yhdeksi. Huomaa, että skripitin viimeisellä rivillä oleva sijoituslause ei näin ollen tarvitse erillistä muuttujaa tiedon säilyttämiseen.
|
Kuva 13. Attribuutti-skriptistä –yhteys
Viimeiset kolme yhteystyyppiä mahdollistavat parametrin tarjoamisen yhteydelle useista eri lähteistä.
Parametri-attribuutista (Parameter-from-attribute) -yhteydet käyttävät attribuutin arvoa yhteyden parametrina (kuva 14).
Esimerkki
: Sijoitetaan ikkunaan teksti-kenttä, label-kenttä ja painike. Yhdistetään painikkeen clicked-tapahtuma labelin object-attribuutin välille. Sitten luodaan niiden välille parametri-attribuutista -yhteys yhdistetämällä teksti-kentän object-attribuutti yhteyden value-määreeseen.Kuva 14. Parametri-attribuutista –yhteys
Parametri-skriptistä (Parameter-from-script) suoritetaan aina kun yhteyden parametria tarvitaan. Yhteys saa arvon palautteena skritptiltä attribuutin sijasta (kuva 15).
Esimerkki:
On luotu skripti nimeltä stringFromSkript, joka palauttaa tekstin "tämä on merkkijono". Toisin kuin muut yhteystyypit, parametri-skriptistä -yhteys aloitetaan yhteyden Connect-valikon parameter name -valinnalla. Asetetaan ikkunaan label-kenttä ja painike. Yhdistetään painikkeen clicked-tapahtuma label-osan object-attribuutin välille. Luodaan sitten parametri-skriptistä -yhteys liittämällä value-attrbuutti yhteyden Connect-valikosta skriptiin seuraavasti: Kun lähdeattribuutti on valittuna, hiiren osoitin muuttuu näyttämään tähtimerkkiä ( * ). Napsautetaan hiiren vasenta painiketta minkä tahansa tyhjän alueen päällä ja valitaan avautuneesta valikosta parameter-from-skript ja stringFromScript ja sitten Ok.
|
Kuva 15. Parametri-skriptistä –yhteys
Parametri-toiminnasta (Parameter-from-action) -yhteys käyttää toiminnon tulosta parametrina yhteydelle (kuva 16).
Esimerkki: Esitellään tässä yhteydessä uusi osa nimeltä
Object Factory. Se luo uusia olioita (objects) olemassa olevasta mallista (model) , jota kutsutaan luokaksi (a class). Asetetaan painike ja lista ikkunaan. Sitten lisätään Ordered Collection- ja Object Factory -komponentit avoimelle työalueelle. Kaksoisnapautetaan ObjectFactory -osaa, jolloin näkyviin tulee sen ominaisuusnäkymä. Asetetaan sieltä instanceClass -arvoksi OrderedCollection. Yhdistetään painikkeen clicked-tapahtuma OrderedCollectionin add-toimintoon. Luodaan lopuksi parametri-toiminnosta -yhteys yhdistämällä ObjectFactoryn Connect-valikosta new-toiminto yhteyden anObject attribuuttiin (yhteyden Connect-valikossa).Tämä tarjoaa tarvittavan yhteysparametrin ja aiheuttaa yhteysviivan muuttumisen väriltään yhtenäiseksi. Kytketään vielä OrderedCollectionin self-attribuutti listanitems-attribuuttiin. Tämän yhteyden avulla voidaan osoittaa uusien instanssien (instances) todellakin tulleen luoduiksi OrderedCollectioniin näyttämällä tulokset listalla.
|
|
Kuva 16. Parametri-toiminnasta –yhteys
3.2.4 Yhteyksien ja osien ominaisuuksista
Osan tietoja pääsee muuttamaan osan ominaisuusikkunasta (Properties window), joka avautuu napauttamalla hiiren vasenta painiketta kohteen päällä (kuva 17).
Kuva 17. Ominaisuusikkuna (Properties window) |
Mikäli haluttua osan toimintoa tai tapahtumaa ei löydy osan yhteyslistasta, voidaan valita Connect-All Features, saadaan täydellinen lista toiminnoista, attribuuteista ja tapahtumista ts. täydellinen rajapintakuvaus.
Osien tavoin myös yhteyksillä on ominaisuutensa. Yhteyden ominaisuudet -ikkuna avataan kaksoisnapsauttamalla yhteyttä hiirellä (kuva 18).
|
Kuva 18. Yhteyden ominaisuudet -ikkuna
IBM Smalltalk perustuu standardeihin POSIX ja MOTIF sekä yleiseen Smalltalk standardiin (ANSI). IBM Smalltalk itsessään sisältää yli 1100 luokkaa ja VisualAgen yhteydessä yli 2500 luokkaa.
Skriptillä tarkoitetaan joukkoa peräkkäisiä Smalltalk-lausekkeita, jotka ilmentävät osan toimintaa. Skriptejä luodaan käyttämällä skriptimuokkainta (Script Editor). Skriptit liittyvät siihen osaan, jossa ne oli luotu. VisualAgessa skriptit voi järjestää luokkiin.
IBM Smalltalkissa sovellus käsitetään kokoelmaksi luokkia, jotka mahdollistavat toiminnallisen uudelleenkäytettävän osan. IBM Smalltalkissa on joukko työkaluja sovellusten ja luokkien tutkimiseen ja muokkaamiseen.
Luokka (engl. class) määrittelee olion sisältäen tiedon ja käyttäytymisen. Metodit (engl. methods) käsitetään VisualAgessa skripteiksi., ja ovat suoritettavaa ohjelmakoodia, joka implementoi tietyn luokan käyttäytymistä tai logiikkaa. Osa voidaan yksinkertaisesti käsittää luokaksi, joka sisältää jotain ennaltamääriteltyä tietoa ja käyttäytymissääntöjä, jotka mahdollistavat sen editoinnin visuaalisesti
Tässä seminaarityössä on pyritty luomaan yleiskuva IBM VisualAge -sovelluskehittimeen. Visuaalisesta ohjelmoinnista ja Smalltalk-skriptien kirjoittamisesta on käsitelty lähinnä pääasiat. Peruslähtökohtana on ollut esitellä VisualAgen menetelmä oliopohjaisten sovellusten luontiin, ts. ohjelman toimintalogiikan muodostaminen visuaalisesti. Parhaimman käsityksen yhteyksien rakentamisesta osien välille saa tietenkin kokeilemalla annettuja esimerkkejä käytännössä. VisualAgen aikarajoitteisen kokeiluversion voi joko hakea tiedostona tai tilata CD-levynä IBM:n kotisivuilta. Sieltä löytää myös lisätietoa linkkejä Smalltalk-skriptikieleen liittyen. VisualAgen mukana tulee myös kattava ohjekirjasto - painetut käyttöoppaat sähköisessä muodossa.
[IBM, 1997] VisualAge for Smalltalk Professtional Documentation, "Getting Started", Fourth edition, International Business Machines Corporation
[IBM, 1997] VisualAge for Smalltalk Documentation, "IBM Smalltalk User's Guide", Second edition, International Business Machines Corporation
[IBM, 1997] VisualAge for Smalltalk Handbook Volume 1: Fundamentals,
http://www.redbooks.ibm.com/redbooks/
[Li, 1997] Bridging traditional and object technologies,
http:// www.almaden.ibm.com/journal/sj/361/lindsey.htm
[Phaidros Corp., 1997] VisualAge for Smalltalk Online Book, http://www.phaidros.com/DIGITALIS/englisch/age/age00001.htm
[Object-Ideas Corp., 1997] Client/Server Overview,
http://www.object-ideas.com/clntsrv/index.html