13. Luento: Esimerkki: Symbianympäristö Tommi Mikkonen, tommi.mikkonen@tut.fi
Agenda Johdanto Ydin Resurssien hallinta Aktiiviset oliot Dynaaminen muisti Sovellusmalli Laajennokset Yhteenveto
Symbian OS johtava älypuhelinten käyttöjärjestelmä. Takana loistava tulevaisuus Joidenkin mielestä kuuluisa siitä, että Symbian-ympäristössä on kelju ohjelmoida Joidenkin mielestä hieno siksi, että monet sulautetun ohjelmoinnin erikoistarpeet on huomioitu elegantisti Joidenkin mielestä edellä olevat seikat ovat sama asia ;-)
(Mikro-)Ydin Sovellus 1 Sovellus 2 DLL DLL DLL Resource Access API Käyttöjärjestelmän ydin (välittää viestejä) Resurssi 1 Resurssi 3 Resurssi 2
Resurssi ~ Palvelin Sopii sekä ohjelmisto- että laitteistoresursseille Joskus pohjalla laitteisto ja päällä kerroksittain ohjelmistoa Erilaiset palvelimet mahdollisia Käynnistetään bootissa, ei ajeta alas koskaan Käynnistetään kun sovellus käynnistyy, ei ajeta alas koskaan Käynnistetään kun sovellus käynnistyy, ajetaan alas kun sovellus lopettaa Yleensä eri prosesseissa, joskus optimoidaan kuitenkin usea palvelin samaan prosessiin Toteutettu kuitenkin omina säikeinään
Joitakin palvelimia File Server... Tiedostojärjestelmä Windows Server... GUI Database Server... Globaali data Comms Server... Sarjaportin käyttö Socket Server... Sokettiyhteys Telephony Server... Puhelinominaisuudet Messaging Server... SMS, MMS, EMail Camera Server... Kamera CONE Server... GUI:n ohjaus Media Server... Audio ja multimedia Font and Bitmap Server... Fontit ja bittikartat ja monia muita
Palvelimien toteutuksesta Palvelimien toteuttamiseksi tarvitaan kätevä tapa käsitellä viestejä (ja muita tapahtumia) Samalla ei saisi haaskata resursseja Symbian-ympäristössä toteutus perustuu aktiivisiin olioihin jotka sarjallistavat tapahtumien käsittelyn yhdellä säikeellä tehtäväksi
Tapahtumankäsittelystä Tapahtumat Tapahtumat Aktiivinen Vuorontaja (1 per säie) Säieperustaisia tapahtumankäsittelijöitä Tapahtumankäsittelijät (aktiivisia olioita)
Miten se toimii? Application Create and Install Active Scheduler 1 2 Create AO, issue request, add to Scheduler 4 Start Scheduler Active scheduler Wait for any req Call AO RunL Active object Activate request function set iactive true 6 3 Service provider Set istatus to Pending Service complete 5 Req completed, reset istatus Cleanup, terminate 7 RunL (redo/quit)
Nimeämisestä Class names start with C Kernel class names start with D Type names start with T Mixin class names start with M Enumerated class names start with E Resource names start with R Method names start with a capital letter Names of methods that can throw an exception end with L (or LC) Simple getters and setters reflect the name of the variable Instance variable names begin with i Argument names begin with a Constant names begin with K Automatic variable names begin with lower-case letters
Poikkeukset: Kotikutoinen toteutus TRAPD(error, BehaveL()); // try if (error!= KErrNone) // Exception handler { // catch if (error == KErrNotSupported) {...} if (error == KErrUnknown) {...} } User::Leave(KOutOfMemory); // throw
Poikkeukset ja muistinvaraus Ylimääritelty new: c = new (ELeave) CMyClass(); Toteutus: c = new CMyClass(); if (!c) User::Leave(KOutOfMemory); return c;
Entäpä pinosta varatut muuttujat? Before an exception Memory garbaging after an exception Stack Heap Stack Heap
Cleanup Stack Kirjanpitomekanismi Stack Heap Cleanup Stack
Cleanup Stackin käytöstä Kokonaan ohjelmoijan niskoilla Vain automaattisille (aliohjelmassa/metodissa luoduille) muuttujille CMyClass * c = new CMyClass(); CleanupStack::PushL(c)... c is used CleanupStack::Pop(); // c delete c; c = 0;
Kaksivaiherakentaminen Cleanup stack ei auta kun luodaan uusia muuttujia Idea: Suunnitellaan siten että varsinainen rakentaja saadaan aina suoritettua jos muistia riittää Muut ongelmalliset asiat tehdään vasta kun rakentaja on saatu ajettua ja Cleanup Stack täytettyä CData * id = new (ELeave) CData(256); CleanupStack::PushL(id); id->constructl();
Symbian-sovellusarkkitehtuuri UI Control Framework CApaDocument AppArch CApaApplication CCoeEnv CCoeControl CCoeAppUi CEikonEnv CEikAppUI CEikDocument CEikApplication Eikon/Uikon Application CExAppView CExAppUI CExDocument CExApplication
Java MIDP Sisäänrakennettu varmaankin kaikkiin Symbian-puhelimiin Ehkäpä maailman levinnein laajennettava ohjelmisto Sovelluksen vaatimukset: Peri midlet -luokka Toteuta metodit Rakentaja startapp destroyapp pauseapp Ensimmäinen sovellus laitteessa alle 30min, ja tämä sisältää ympäristön asennusajan
Python Ladattava laitteeseen itse Mahdollistaa Python-skriptien ajon puhelimessa Normaalit Python-kielen ominaisuudet Laitteiston/käyttöjärjestelmän ohjelmiston käyttö mahdollista Kamera Kontaktit Kalenteri Audio Bluetooth Näppärä keino lähteä liikkeelle omien sovellusten näppäilyssä
Web Runtime Lähinnä web-ohjelmien toteuttamiseen tarkoitettu ympäristö Toteutustekniikkana xhtml, CSS, JavaScript, Ajax, Sovellukset asennetaan, ei ladata lennosta webistä Samat rajoitukset kuin websovelluksissa yleensäkin, paitsi että toisin kuin selaimessa virtuaalikone voi käyttää joitakin laitteen tarjoamia palveluita Mashup-kehitys?
OPL, Organizer programmer language Psionin oma, jonkin verran Basicia muistuttava ohjelmointikieli Konsolisovellukset ja graafiset käyttöliittymät mahdollisia käyttökohteita Käytännössä ilmeisesti kuitenkin kuollut?
Yhteenveto Monet vähän erikoisemmalta kuulostavat Symbianin ominaisuudet muuttuvat tarkoituksenmukaisiksi kun ottaa huomioon sulautetun ohjelmoinnin erityispiirteet Toisaalta osasta erityispiirteistä aika on ajanut ohi Taustan ymmärtäminen yksinkertaistaa rajoitteiden huomiointia suunnittelutyössä Toisaalta hyvien ideoiden mukailu voi helpottaa jonkun muun ympäristön käyttöä vastaavalla tavalla Toiset tykkää, toiset ei