Microsoft Visual J++ ohjelmointiympäristö Ohjelmistotuotantovälineet seminaarin alustus Raine Lehto Helsingin yliopisto Tietojenkäsittelytieteen laitos 08.11.2000 Helsinki
Sisällys 1 Johdanto...2 2 Sovelluskehys ja sovelluskehitin...2 2.1 Kehyksen periaate...2 2.2 Kehyksen käyttö...3 2.3 Sovelluskehitin...3 3 WFC...3 3.1 WFC ja dynaamiset linkkikirjastot...4 3.2 J/Direct...4 3.3 WFC pakkaukset...5 4 Kehitysympäristö...6 4.1 Yleistä...6 4.1.1 Koodin täydennys...6 4.1.2 JavaDoc opasteet...6 4.2 Muita RAD-piirteitä...6 5 Puutteita...7 6 Yhteenveto...7 1
1 Johdanto Microsoft Visual J++ on Windowsissa käytettävä Java-kielinen ohjelmointiympäristö. Java-virtuaalikoneissa toimivien sovellusten lisäksi sillä voi tehdä Windowsissa ajettavia ohjelmia (ns. EXE-tiedostoja). Windows-sovellukset toteutetaan käyttämällä WFC (Windows Foundation Classes for Java) -sovelluskehystä, joka on Win32 API:a hyödyntävä joukko Java-pakkauksia. Visual J++ kuuluu Microsoftin Visual Studio-tuotteiden sarjaan. Visual Studio sisältää sovelluskehittimiä, joilla ohjelman käyttöliittymän voi rakennella WYSIWYGperiaattella asettelemalla käyttöliittymäkomponentteja lomakkeille. Alustuksessa esitellään sovelluskehyksen ja sovelluskehittimen periaate, WFCsovelluskehyksen sisältöä sekä Visual J++:n ominaisuuksia. 2 Sovelluskehys ja sovelluskehitin 2.1 Kehyksen periaate Sovelluskehys on joukko luokkia, jotka on suunniteltu toimimaan yhdessä ja toteuttamaan tietyn sovellusalueen perusarkkitehtuurin. Luokkakirjastojen luokista poiketen sovelluskehyksen luokilla on suorituksenaikaisia keskinäisiä riippuvuuksia, jotka määrittelevät kehystä käyttävien sovellusten yleisrakenteen. Kehittäjän vastuulla on kehyksen sovittaminen sovelluksen tarpeisiin. Luokkakirjastoista sovelluskehys erottuu myös vuorovaikutuksen ohjauksessa. Kehyksissä ohjelman kontrollia ohjaavat vuoroin kehys ja vuoroin sovelluskohtaiset täydennykset. Luokkakirjastoa käytettäessä ohjelmoija on itse vastuussa sovelluksen toimintojen ohjaamisesta. Kehyssovelluksen kutsuissa on ns. käänteinen kutsurakenne; kehys kutsuu täydentävien luokkien metodeja (Hollywood-periaate don t call us, we call you). 2
2.2 Kehyksen käyttö Sovelluskehyksessä on yleensä kaksi rajapintaa, käyttäjän rajapinta (Client API) ja kehysrajapinta (Framework API). Käyttäjän rajapinta tarjoaa kehyksen palvelut ohjelman kehystä käyttäville osille. Kehysrajapinta määrittää ne liittymät, joihin ohjelmoija liittää omat laajennuksensa. Kehysrajapintaan liitetyt oliot ovat se osa, joilla kehys saadaan muutettua ohjelmoijan tarpeisiin. Kehyksen käyttö jakaantuu kahteen vaiheeseen: alustukseen ja suoritukseen. Ensimmäisessä vaiheessa sovellusohjelmoija luo ilmentymät tarvitsemistaan kehyksen luokista, alustaa sovelluksen rakenteet ja antaa sitten suorituksen hallinnan kehykselle. Toisessa vaiheessa sovelluskehys odottaa syötettä käyttäjältä ja reagoi siihen. Toiminta on kuten tapahtumapohjaisessa ohjelmoinnissa; kun kehyksen käsiteltäväksi tulee tapahtuma, johon ohjelmoija on määritellyt haluavansa reagoida, kehys antaa vuoron ohjelmoijan syöttämälle koodille. 2.3 Sovelluskehitin Sovelluskehitin on ohjelmointiympäristö, joka tarjoaa käyttöliittymän sovelluskehykselle. Visual J++:n käyttöliittymäeditorilla sovelluksen rakentelu on valmiin WFC- sovelluskehyksen parametrointia, jossa kirjoitetaan koodia reagoimaan kehyksen tarjoamiin tapahtumiin. Esimerkissä 1. on J++:n generoimaa koodia... // J++ lisää tapahtumakuuntelijan ( ts. tämä on WFC:n alustusta) button1.addonclick(new EventHandler(this.button1_click));... // J++ generoi metodin rungon (jota WFC-kutsuu suorituksen aikana) private void button1_click(object source, Event e){ // ohjelmoija kirjoittaa toiminnallisuuden this.button1.settext("minua klikattiin"); } Esimerkki1. J++:n generoimaa koodia. 3 WFC Windows Foundation Classes for Java on oliopohjainen sovelluskehys, joka mahdollistaa Windowsin palveluiden (Win32 API) käytön Javalla kirjoitetuista ohjelmista. Käytännössä WFC- on joukko Microsoftin Javalla kirjoitettuja Windowsin käyttöliittymäkomponentteja, tapahtumia ja käyttöjärjestelmän palveluita. 3
3.1 WFC ja dynaamiset linkkikirjastot Dynaamiset linkkikirjastot (DLL) muodostavat WFC- rakenteen ytimen. Linkkikirjastot saadaan Java-luokkien käyttöön kahdella tavalla: JActiveX työkalulla ja J/Directrajapinnan kautta. Jos DLL-esittää COM [MS00a] tai ActiveX komponettia, JActivexluo välittäjä(wrapper) luokan joka saa komponentin näyttämään Java-oliolta. Jos DLL ei ole COM-pohjainen, J/Direct-rajapintaa käytetään kutsumaan DLL:ää suoraan ja muuttamaan tietotyypit Javan ja natiivikielen välillä (esim. C tai C++). Useat WFC-pakkaukset sisältävät pelkästään COM-välittäjäluokkia tai J/Direct rajapintaa-käyttäviä luokkia. Osa näiden luokkien metodeista käyttää suoraan alla olevaa rajapintaa. Näitä metodeja ei ole kuitenkaan dokumentoitu WFC-pakkauksen dokumentaatiossa, koska niitä ei yleensä kutsuta muualta [MS98a]. 3.2 J/Direct J/Direct on matalan tason rajapinta, jonka kautta Java-sovellukset ja turvalliseksi todetut (trusted) appletit voivat tehdä funktiokutsuja Windowsin dynaamisille linkkikirjastoille (DLL:lle). J/Direct kutsuu muokkaamattomia DLL:iä suoraan ilman mitään välittäjäluokkia( wrappereita ). J/Direct-rajapinta tarjoaa myös automaattisen konversion monelle yleisimmin käytetyille tietotyypeille, eliminoiden suurimman osan käsin ohjelmoitavista tyyppimuunnoksista. J/Direct-rajapinnalle on käyttöä myös Win32 API:n ulkopuolella, koska sillä saadaan myös muiden valmistajien DLL:t Java -ohjemien ulottuviin. Esimerkeissä 2. ja 3. on J/Direct-rajapintaa käyttävää Java-lähdekoodia, jonka kääntäminen onnistuu vain Microsoftin Java Compiler:illa (jvc). HelloWindows.class tavukoodin voi ajaa vain Microsoftin virtuaalikoneessa. public class HelloWindows { /** @dll.import("winmm") */ static native boolean sndplaysound(string lpszsound, int fusound); public static void main (String args[]) { boolean returncode; int flags = 0; String soundfile = System.getProperty("com.ms.windir") + "\\MEDIA\\The Microsoft Sound.wav"; System.out.println("Playing '" + soundfile + "'..."); returncode= sndplaysound(soundfile,flags); } } Esimerkki 2. J/Direct-rajapintaa käyttävää Java-lähdekoodia. /** @dll.import("winmm") */ static native boolean sndplaysound (String lpszsound, int fusound); // TAI /** @dll.import("winmm", entrypoint="sndplaysound") */ static native boolean playwav (String lpszsound, int fusound); Esimerkki 3. J/Direct lähdekoodin vaihtoehtoinen (selkeämpi) kirjoitustapa. 4
J/Direct-rajapinta toimitetaan Microsoftin Java-virtuaalikoneen mukana Internet Explorer versiosta 4.0 alkaen [MS98b]. 3.3 WFC pakkaukset Edellisessä kappaleessa kuvattiin, kuinka WFC-pakkauksen luokat on konstruoitu. Visual J++:n käyttö ei kuitenkaan vaadi J/Direct rajapinnan tuntemusta, vaan riittää, että osaa import-lauseella ottaa mukaan oikeat WFC-pakkaukset. (Jos ohjelmoi käyttäen käyttöliittymäeditoria tai velhoja, import-lauseet tulevat mukaan automaattisesti) Package com.ms.wfc.app com.ms.wfc.core com.ms.wfc.data com.ms.wfc.html com.ms.wfc.io com.ms.wfc.ui com.ms.wfc.util Description Base classes that encapsulate Windows application operations. The Visual J++ form component template uses the services of this class. In addition to the basic Windows message handling structure, there is support for Windows features such as the Clipboard, the registry, threads, window handles, system information, and so on. Base classes for the component model. This package includes support for containers, events, exceptions, properties, and the infrastructure for interoperating with features in Visual J++ such as the Forms Designer. Active Data Objects (ADO) Java classes that enable data access and data binding. This package also includes com.ms.wfc.data.u, the package that provides the base classes for the data-bound controls in WFC. Classes used to implement Dynamic HTML in Java. These classes provide both client- and server-side support. Classes used to access data streams, implementing a complete package for reading and writing serial streams, for file access, and for mapping between differing types of data streams. Core classes for the controls that ship with WFC. These classes also provide access to the Windows Graphics API. Utility classes for various forms of sorting, implementing hash tables, and so on. [MS98a] The following are the core native API support classes in WFC. Package com.ms.wfc.ax com.ms.wfc.html.om com.ms.wfc.ole32 com.ms.wfc.win32 [MS98a] Description Provides Java wrapper classes for the ActiveX interfaces. Provides Java wrapper classes for the Dynamic HTML object model. Provides Java wrapper classes for OLE services. Provides Java wrapper classes for Win32 API. 5
4 Kehitysympäristö 4.1 Yleistä Visual J++:n kehitysympäristö, Integrated Development Environment (IDE) muistuttaa hyvin paljon muiden Visual Studio -tuotteiden kehitysympäristöjä. Se sisältää paljon toimintoja, jotka nopeuttavat sekä koodin kirjoittamista että generointia. Ohjelmakoodin muokkaukseen käytettävä editori sisältää lukuisia tuottavuutta parantavia toimintoja, joista hyödyllisimpiä ovat koodin täydentäminen ja automaattiset opasteet. 4.1.1 Koodin täydennys Ohjelmoijan ei tarvitse muistaa (saati kirjoittaa) metodin tarkkaa nimeä, vaan täydennystoiminto osaa listata eri luokkien sisältämät metodit ja attribuutit. Täydennystoiminto käynnistyy automaattisesti (.merkin jälkeen) tai näppäimistöyhdistelmällä tarjoten aakkostetun listan käytössä olevista vaihtoehdoista. Haluttu metodi tai attribuutti valitaan tabulaattorilla, jonka jälkeen metodi kirjoittuu koodiin. 4.1.2 JavaDoc opasteet Automaattiset opasteet nopeuttavat ohjelmointia esittämällä metodien tarvitsemat parametrit sitä mukaa, kun niitä tarvitaan. Jos auki oleva projekti on konfiguroitu oikein, J++ tarjoaa parametrin tietotyypin lisäksi nähtäväksi JavaDoc kommentit. 4.2 Muita RAD-piirteitä Hyvä debuggeri Lukuisa joukko velhoja (Wizards) Levitystyökalu (Deployment tool) Versionhallinta 6
5 Puutteita J++:n visuaalinen käyttöliittymäeditori (Forms Designer) ja velhot (Wizards) ovat niin kiinteästi integroitu WFC- sovelluskehykseen, ettei niillä voi suoraan käyttää esimerkiksi Javan awt- tai swing- pakkauksia. Esimerkiksi Borlandin JBuilderin käyttöliittymäeditorilla voi halutessaan käyttää pelkästään Javan tarjoamia pakkauksia. Javan LayoutManager-luokkia ei voi käyttää visuaalisesti J++:n käyttöliittymäeditorissa. Windows järjestelmän ulkopuolla ajettavien Java-sovellusten ulkoasu pitää säätää käsin. Visual J++ ei tue Javan servlettejä. WFC-sovellukset toimivat vain Windowsissa. 6 Yhteenveto Puutteistaan huolimatta Visual J++ on varsin mainio Java-koodaajan apuväline. Ohjelmakoodin muokkaukseen käytettävä editori on niin hyvä, että se riittää nostamaan J++:n Java-työkalujen kärkeen. Tosielämän sovellukset pyörivät yleensä vain yhdellä alustalla. Nykyään alusta on Windows. Jos haluat ohjelmoida Javalla Windows-sovelluksia, käy hakemassa Microsoftin sivuilta Visual J++:n ilmainen 30 päivän kokeiluversio [MS00b]. Lähteet MS00a MS98a MS98b MS00b Microsoft COM Technologies, http://www.microsoft.com/com/default.asp, [29.10.2000] Microsoft WFC Programming Concepts, http://www.msdn.microsoft.com/visualj/technical/articles/wfcprogram/default.asp, [1.9.1998] Microsoft Base WFC Run-Time Dependencies, http://www.msdn.microsoft.com/library/default.asp?url=/library/techart/msdn_wfcdepen.htm,[4/1998] Visual J++ 6.0 Professional Edition Trial http://www.msdn.microsoft.com/visualj/headlines/downloadvj6.asp, [31.3.1999] Kirjallisuutta Microsoft Visual J++ Home Page http://www.msdn.microsoft.com/visualj/default.asp 7