- GKO, luennot 27.-28.8.
- Java
- Kielestä ja kirjastoista
- Java vs. C++
- Java == "C++ done right"? - version 1.5 myötä java muistuttaa yhä enemmän C++:aa (Templatet)
- Java vs. Delphi
- Javassa Delphiä monipuolisempi (oliopohjainen) tapahtumakäsittelymalli
- JavaBean-komponentit
- Java kielenä
- C++ -tyylinen syntaksi
- Roskienkeruu
- Serialisointi (tuki minkä tahansa olion lataamiselle ja tallennukselle)
- Synkronointi (kriittisiä lohkoja koodin sisällä, helpottaa monisäikeisten sovellusten tekemistä)
- Java kirjasto- ja komponenttikokoelmana
- Säiliöt
- Käyttöliittymäkirjastot
- Tietokantaohjelmointi (JDBC)
- Verkko-ohjelmointi (Socketit, RPC, RMI, CORBA, EJB...)
- XML:n käsittely (DOM- ja SAX-rajapinnat)
- ... (ks. javan dokumentaatio)
- AWT: Javan alkuperäinen käyttöliittymäkirjasto
- Abstrakti luokkakokoelma, jolla oli tarkoitus kuvata eri käyttöjärjestelmien käyttöliittymäkomponentit
- Käytännössä eri järjestelmät eroavat toisistaan niin paljon, etteivät AWT-käyttöliittymät toimi aina kunnolla järjestelmien välillä
- Seuraus: Swing
- Komponentit ovat käyttöjärjestelmän omia, Java "kaappaa" niiden tapahtumat ja hallinnan
- Oliopohjainen tapahtumakäsittelymalli AWT:n peruja
- JFC: Javan "standardi" käyttöliittymäkirjasto
- Muitakin on (esim Eclipse-ympäristön SWT)
- Perustuu Swing-käyttöliittymäkirjastoon (myös jonkin verran AWT-luokkia käytössä)
- MVC (Model-View-Controller ) -ajattelutapa
- Esim. listakontrollin data on omassa ListModel-rajapinnan toteuttavassa rakenteessaan, joka on erillään käyttöliittymästä
- Käyttöliittymäkomponentit ovat kuvia (vrt. käyttöjärjestelmän kontrolleja), joiden hallinnasta vastaa Javan virtuaalikone
- Mahdollistaa "lennossa" vaihdettavan komponenttien ulkoasun ja "tuntuman" (look & feel)
- Huonona puolena on, että komponentit poikkeavat hieman käyttöjärjestelmän omista kontrolleista eivätkä aina ole yhtä sulavia käyttää (tottumuskysymys, Java 1.4:stä alkaen Swing-käyttöliittymät ovat jo käytettävyydessä hyvin lähellä natiivikontrolleja)
- Oliopohjainen tapahtumakäsittelymalli
- Tapahtumat ovat olioita, jotka on peritty Event-luokasta
- Tapahtumakäsittelijät ovat olioita, jotka toteuttavat EventListener -tyyppisen rajapinnan
- Usein (mutta ei mitenkään välttämättä) toteutetaan kirjoittamalla lomakeluokan sisään nimetön sisäluokka, jossa tapahtumankäsittelijä on
- Raskasta, monimutkaista ja monipuolista verrattuna funktio-osoitinpohjaiseen malliin
- Moni eri tapahtumankäsittelijä voi rekisteröityä "kuuntelemaan" tiettyä komponenttia (vrt Delphin Message-tyyppiset metodit)
- Sama olio voi kuunnella montaa eri tapahtumaa riippuen siitä, mitä rajapintoja se toteuttaa (jopa niin, että sama olio on sekä tapahtuman lähettäjä ja kuuntelija)
- JavaBeans-komponenttimalli
- Vastaa suurinpiirtein Borlandin Delphi/BCB-komponentteja ja Microsoftin ActiveX-komponentteja
- JavaBeaneja voi kehittää 'visuaalisesti'
- Java-työkalut
- Komentorivi! java, javac, javadoc, jar
- Borland JBuilder
- NetBeans
- Eclipse
- Esimerkkiohjelmat
- Virtaesimerkki
- Autolaskuri
- LaskuriBean
- Socket-ohjelmointia
- Hajautetut komponenttiarkkitehtuurit
- Materiaalia:
- Hajautetut komponenttiarkkitehtuurit mahdollistavat "N-kerroksiset"-sovellukset, jotka kootaan hajautetusti verkossa sijaitsevista palveluista
- Käytännössä yleisin arkkitehtuuri lienee kuitenkin 3-kerroksinen:
- Käyttöliittymä asiakassovelluksessa, vaihtoehtoina esim.
- Perinteinen työpöytäsovellus
- Java-sovelma tai ActiveX-kontrolli
- Web-käyttöliittymä (web-palvelimesta riippuen esim. JSP- tai ASP- sivuja)
- Sovelluslogiikka sovelluspalvelimella (middleware)
- (Enterprise) JavaBeanseja, COM-komponentteja tai CORBA-objekteja sovelluspalvelimesta riippuen
- Tietokanta tietokantapalvelimella
- Tietokantapalvelimesta riippuen palvelimella saattaa olla herättimiä (triggers, tietokannan "tapahtumakuuntelijoita") tai tallennettuja proseduureja, jotka sisältävät tietokantaan liittyvää koodia
- CORBA (Common Object Request Broker Architecture)
- [ http://www.google.com/url?sa=U&start=1&q=http://www.corba.org/&e=7317 ]
- OMG:n (Object Management Group) määrittelemä yleinen määritys hajautettujen olioiden käyttöön
- Järjestelmä- ja kieliriippumaton
- Runsaasti kaupallisia ja ei-kaupallisia CORBA-palvelintoteutuksia saatavilla
- Esimerkki: Delphi/Corba-autolaskuri
- Corba-projektin luonti Delphillä/BCB Builderilla:
- Visibroker Smart Agentin on oltava päällä
- New->Other->Corba/Multitier->Corba client/server
- Jos idl-tiedostot ovat valmiina, ne voi lisätä wizardissa
- Tallenna generoidut tiedostot
- BCB:ssä asiakassovelluksessa Corba-objektin saa käyttöön valitsemalla edit-valikosta use corba object...
- COM / DCOM / MTS / COM+ (Component Object Model)
- [ COM/DCOM/COM+ (Microsoft) <http://www.microsoft.com/com/> ]
- Microsoftin komponenttimalli
- Kieliriippumaton, periaatteessa myös käyttöjärjestelmäriippumaton
- Käytössä lähinnä Windows-puolella
- Win95:sta alkaen käyttöjärjestelmä nojaa vahvasti COM-komponentteihin
- Kaupallisia toteutuksia saatavissa myös muille järjestelmille (kehitysvälineet? esim. kylix ei tue)
- EJB (Enterprise JavaBeans)
- [ Enterprise JavaBeans <http://java.sun.com/products/ejb/index.jsp> ]
- Javan komponenttimalli hajautettuihin yrityssovelluksiin
- Järjestelmäriippumaton (Java)
- Kaupallisia sovelluspalvelimia saatavilla runsaasti, ei-kaupallisista ainakin JBoss
- Kertaus: makrokieli (edellinen luento...)
- Monikielistäminen
- Yleisperiaate
- Erotetaan ohjelmassa olevat tekstit koodista
- Esim. jos ohjelman tekstit saadaan resurssitiedostoihin, tehdään monta resurssitiedostoa
- Hankalasti ylläpidettävää, jos tehdään käsin
- Muuttujat tekstissä?
- VL:n käännösmakrot (C)
- Periaate: pidetään erillisessä taulukkotiedostossa käännöksiä
- Käännöstiedostoa voi täydentää erillään ohjelmasta (erityisesti: koodajan ei tarvitse tehdä itse käännöksiä!)
- Ohjelmassa tarvitaan jokaisen merkkijonokutsun yhteydessä erillinen T-funktion/makron kutsu, joka hakee taulukosta mahdollisen käännöksen
- Muuttujat voidaan esittäää printf-syntaksin mukaisesti formatoituina
- Hankalahko laajoille tekstikappaleille (koko tekstikappale toimii hakuavaimena)
- Ongelma: saman tekstin esiintyminen eri asiayhteyksissä, jolloin vaatisi erilaisia käännöksiä...
- Esimerkki: vaihtaja (ks. MDI -esimerkit: multiwin/vaihtajasw/ ja ali/)
- Ks. erityisesti ali/language.c ja ali/transdlg.c
- Vastaava käännösmekanismi käytössä myös Korppi-järjestelmässä!
- ResurssiDLL-tiedostot
- Materiaalia: Delphi help, Programming with Delphi, resource DLLs, creating
- Esimerkki: multilaskurin monikielistäminen (ks. ohjeet lähdekoodissa)
- Translation repository on tietovarasto automaattisesti tehtäviä käännöksiä varten
- Innoview Multilizer
- Avustukset
- Materiaalia
- WinHelp-avustukset
- Käytössä jo Win3:sta alkaen, Win95:ssä hieman lisäominaisuuksia
- Kehitysväline: Help Workshop, kääntää RTF-tiedostoja avustustiedostoiksi
- Huom. WinMonisteessa mainittu HC ei ole enää käytössä 32-bittisessä Windowsissa. Korvaavat sovellukset HCW tai HCRTF, löytyvät Delphin alihakemistosta Help\Tools\
- Teknisesti vanhentunut (Html Help korvannut, lisäksi .NET-ympäristössä on taas uusi avustusjärjestelmänsä), mutta monet sovellukset käyttävät edelleen
- Borlandin kehittimet tukevat kontekstiriippuvaisia WinHelp-avustuksia ohjelmissa
- MaseHelp
- [ http://matti.erkama.net/masehelp/ ]
- Helppokäyttöinen ja ilmainen sovellus WinHelp-avustuksien tekoon
- Ongelmana on, että avustusta ei saa ohjelmasta ulos RTF-muodossa (?)
- Word + VL:n makrot
- Käsitellään pääteohjauksissa...
- Helppejä ja erityisesti hyperlinkkejä tehdessä muotoilumerkit kannattaa pitää näkyvissä (show hidden text)
- Esimerkki WinHelp-projektista: mfc/vaihtaja
- Käyttö Delphistä: Delphi Help: Help files for components
- Jokaisella Delphi-komponentilla on ominaisuudet HelpKeyword ja HelpContext, johon voi liittää sopivan avainsanan tai koodin
- Avustuksen saa suoraan esille kutsumalla Applicationin metodeja HelpJump tai HelpContext
- Applicationin HelpFile-propertyn täytyy olla asetettuna (esim. projektin optioista)
- HtmlHelp-avustukset
- Windows 98:sta eteenpäin standardi avustusformaatti
- HtmlHelpin käyttö perustuu samannimiseen WinAPI-kutsuun
- Käytännössä yhteen pakattu joukko Html-tiedostoja (CHM, Compressed Html), näyttimen pohjana Internet Explorer
- Aiheet (topics) ovat yksittäisiä HTML-tiedostoja, joihin viitataan nimellä ja suhteellisella polulla
- Kehitysväline: Html Help Workshop
- Delphissä ei ole sisäänrakennettua tukea HtmlHelpiin, mutta API-headerit ja käyttöesimerkkejä löytyy verkosta
- Testaus ja debuggaus
- DUnit
- [ http://dunit.sourceforge.net/ ]
- Työkalu yksikkötestaukseen
- Versioita saatavilla eri kielille, tunnetuin ja alkuperäinen Javan JUnit
- Idea: jokaista luokkaa varten kirjoitetaan TestCase-luokasta peritty testiluokka, joka sisältää edelleen testimetodeja, joilla voidaan testata kohdeluokan metodien toimivuus
- Projektia varten kirjoitetut testitapaukset voidaan ajaa kerralla, jolloin virheistä voidaan raportoida automaattisesti
- Muistivuotojen tarkastajat
- VÄLTTÄMÄTÖN, jos sovellus aiotaan tehdä tuotantokäyttöön
- C++ Builder: CodeGuard
- Visual C++ ja muut yleisimmät sovelluskehittimet: BoundsChecker (kaupallinen)
- Delphin muistityökaluja