Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

TEKNIIKAN JA TALOUDEN YLIOPISTO Symbian ohjelmointi 2. Luento Juha Turunen

Samankaltaiset esitykset


Esitys aiheesta: "TEKNIIKAN JA TALOUDEN YLIOPISTO Symbian ohjelmointi 2. Luento Juha Turunen"— Esityksen transkriptio:

1 TEKNIIKAN JA TALOUDEN YLIOPISTO www.lut.fi

2 Symbian ohjelmointi 2. Luento Juha Turunen (juha.turunen@lut.fi)

3 Sisältö Deskriptorit Dynaamiset tietorakenteet DLL Tiedostojärjestelmä

4 Deskriptorit Deskriptorit ovat perusluokkia Symbian OS:ssa Deskriptorit kapseloivat tavan säilyttää ja käsitellä teksti- tai binäärimuotoista dataa –Java: String –C: str*() ilman null terminationia –STL: string Deskriptorien käyttö suojaa tahattomilta muistialueen ylityksiltä ja muilta virhetilanteilta –Tietoturva Deskriptoriluokkia on useita erilaisia, mutta ne kaikki periytyvät yhteisestä kantaluokasta

5 ASCII & UNICODE ASCII vs. UNICODE Kaikista deskriptoriluokista on 8- ja 16-bittiset variantit Variantti valitaan käännösaikaisesti (e32def.h) Merkkijonoja varten käytetään käännösaikaisesti valittua varianttia (TDesC, TDes, TPtr, jne...) Binääridataa varten käytetään luonnollisesti 8-bittistä varianttia (TDesC8, TDes8, jne...) typedef TPtrC16 TPtrC #if defined (_UNICODE) else... typedef TPtrC8 TPtrC

6 Deskriptorien terminologia Length –Kuinka monta tietoalkiota deskriptori sisältää Size –Kuinka monta tavua validia dataa deskriptori sisältää –ASCII vs. UNICODE Maximum length –Kuinka monta tietoalkiota maksimissaan kyseinen deskriptori voi sisältää Buffer –Pala muistia, jossa deskriptorin sisältämä data säilytetään –Stackissa tai heapissa riippuen deskriptorin tyypistä

7 Esimerkkideskriptori Length = 4 Maximum length = 8 Size = 4 tai 8 (ASCII vs. UNICODE) BLAH

8 Puskuriylivuoto ongelma Kaikki deskriptorit sisältävät pituudesta ja maksimipituudesta => –Mahdotonta alustaa deskriptori datalla jonka pituus ylittää maksimipituuden –Mahdotonta kopioida deskriptoriin dataa jonka pituus ylittää maksimipituuden –Mahdotonta muokata deskriptoria siten että datan pituus ylittää maksimipituuden Virhetilanteet aiheuttavat panicin

9 _LIT makro _LIT makrolla luodaan literaaleja, jotka sisältävät muuttumatonta dataa –TLit8 TLit16 TLit luokille on määritelty muunnosoperaattori deskriptoriksi (TDesC&), joten niitä voidaan käyttää deskriptorien asemasta _LIT( KSymbianProgramming, ”aaargh” ); Literaalia ei voi muokata! _LIT( KSomeText, ”puuroa!” ); void SomeMethodL( const TDesC& aString ); SomeMethodL( KSomeText ); // This is OK

10 Deskriptorien luokkahierarkia TDesC iLength Ptr() Length() TBufCBase TDes iMaxLength MaxLength() TPtrC iPtr TBufC iBuf : TText[n] HBufC TPtr iPtr TBuf iBuf : TText[n]

11 Deskriptorikantaluokat TDesC –Kaikkien deskriptorien kantaluokka –Kaikille deskriptoreille yhteiset metodit –C = constant –Ei voi muokata TDes –Laajentaa TDesC:n määrittelemää toiminnallisuutta lisäämällä datan muokkaukseen tarvittavat metodit –MaxLength Molemmat kantaluokat ovat abstrakteja => niistä ei voi luoda instansseja

12 Konkreetit deskriptoriluokat TBufC –Buffer deskriptori –Ei muokattava TBuf –Buffer deskriptori –Muokattava TPtrC –Pointer deskriptori –Ei muokattava TPtr –Pointer deskriptori –Muokattava HBufC –Heap deskriptori –Ei suoraan muokattava –Ei stackiin!

13 Buffer-deskriptori Luokka itsessään sisältää bufferin eli muistin johon data sijoitetaan class NonSymbianSomething { private: char [10] buffer; };

14 TBufC Bufferi deskriptori > luokka itsessään sisältää bufferin Templaattiluokka jonka templaattiparametri määrittää bufferin koon. –esim. TBufC myDescriptor; Sisältö voidaan asettaa ainoastaan joko konstruktorissa tai sijoitusoperaattorilla –Jos deskriptori on liian pieni => panic _LIT( KHello, ”Hi!” ); _LIT( KMoi, ”Moro” ); TBufC greeting( KHello ); // constr. init greeting = KMoi; // Assignment operator iLength buffer

15 TBuf Bufferi deskriptori => luokka itsessään sisältää bufferin Templaattiparametri määrittää maksimikoon Deskriptori voi olla enintään iMaxLength pituinen Sisältöä voi muokata Toteuttaa TDes –luokan määrittelemät metodit iLength iMaxLength buffer

16 Pointer-deskriptori Pointer-deskriptori ei omista eikä sisällä itse dataa vaan osoittaa jonkun muun omistamaa dataa Jos dataa muokataan pointer-deskriptorin kautta, muuttuu luonnollisesti myös datan omistavan deskriptorin sisältö class NonSymbianOwningSomething { private: char* buffer; };

17 TPtrC Pointer-deskriptori Osoittaa ulkopuolista dataa Ei mahdollisuutta muokata (C) Set() Huom! Jos osoitettu data lakkaa olemasta validia, ei deskriptoria voi enää käyttää _LIT( KJep, ”Juu” ); TBuf myDesc; myDesc.Copy( KJep ); TPtrC pointer( myDesc ); iLength iPtr buffer

18 TPtr Pointer-deskriptori Osoittaa ulkopuolista dataa Datan muokkaaminen mahdollista Huom! Jos osoitettu lakkaa olemasta validia, lakkaa myös TPtr olio olemasta validi _LIT( KJep, ”Juu” ); _LIT( KJoo, ”joo” ); TBuf myDesc; myDesc.Copy( KJep ); TPtr pointer( myDesc ); pointer.Append( KJoo ); iLength iMaxLength iPtr buffer

19 HBufC Heap-deskriptori Sisältää oman bufferinsa Varataan ainoastaan heapista! Käytetään isoille määrille dataa Muokkaus onnistuu hankkimalla pointer-deskriptori dataan ja muokkaamalla dataa sen avulla –Des() HBufC* myBuf = HBufC::NewL( 50 ); TPtr ptr( myBuf->Des() ); ptr->Copy( KJep ); ptr->Append( KZap );... iLength buffer

20 Ohjeita deskriptorin valintaan TBuf/TBufC –Pieni määrä dataa Myös suuri määrä OK heapista varatun olion jäsenmuuttujana –Maksimikoko tiedossa jo käännösaikaisesti –Yleensä stackista väliaikaiseen käyttöön TPtr/TPtrC –Jo olemassa olevaan dataan viittaaminen tai käsittely –Säästää muistia koska turhia kopioita ei synny –Kätevä esim. parsimisessa –TPtr HBufC:n sisällön muokkaamiseen HBufC –Suuri koko –Maksimikoko ei tiedossa käännösaikaisesti

21 Yhteenveto deskriptoreista Tarjoavat turvallisen tavan käsitellä ja osoittaa teksti- ja binäärimuotoista dataa ASCII vs. UNICODE TBuf, TBufC, TPtr, TPtrC voidaan varata stackista tai käyttää jäsenmuuttujina by value HBufC – suuret määrät dataa, varataan heapista TDesC metodit käytettävissä kaikilla deskriptoreilla Käytä metodien argumentteina TDesC tai TDes luokkien viittauksia

22 Dynaamiset taulukot Symbian OS tarjoaa turvallisen tavan käsitellä taulukko/lista muotoista dataa Valmiita taulukkoluokkia käyttämällä vältyt vahingoilta Templaattiluokkia -> voidaan soveltaa minkä tahansa luokan kanssa

23 Flat vs. Segment Flat –Muisti varataan kerralla ja kaikki alkiot sijaitsevat samassa varatussa muistisolussa –Jos koko kasvaa yli kapasiteetin, varataan enemmän muistia ja kopioidaan data sinne Segmented –Muistia varataan tarvittaessa lisää segmentti kerrallaan –Segmentit ovat linkitetty yhteen Valintaan vaikuttavat tekijät –Kuinka usein tarvitsee lisätä tai tuhota alkioita taulukon keskelle –Onko alkioihin viittaaminen aikakriittistä? –Kuinka usein taulukon koko muuttuu?

24 Taulukkoalkiot Taulukon sisältämä alkio määritellään taulukkoluokan templaattiparametrilla –Esim: CArrayPtrSeg Yleensä alkiot osoittimia olioihin, mutta taulukko voi myös sisältää oliot Fixed vs. variable alkiot –Fixed: taulukon oma bufferi pitää sisällään alkiot (vrt. TBuf) –Variable: taulukon jokainen alkio sijaitsee erikseen sille varatussa muistisolussa ja taulukko sisältää osoittimet olioihin

25 Taulukkojen terminologiaa Kapasiteetti (capacity) –Tämän hetkinen taulukon koko alkioissa mitattuna Granulariteett (granularity) –Jos kapasiteetti ylitetään, kuinka monelle uudelle alkiolle varataan tilaa kerrallaan

26 Konkreetit taulukkoluokat Alkiot omassa bufferissa –CArrayFixFlat –CArrayFixSeg –CArrayPakFlat Alkiot omissa heap soluisssa ( taulukko sisältää pointterit ) –CArrayVarFlat –CArrayVarSeg Fix = fixed length, Var = variable length, Pak = packed –Kts edelliset kalvot. Flat = flat, Seg = segmented –Kts edelliset kalvot.

27 CArrayFixFlat

28 CArrayFixSeg element_nelement_n + 1 element_n + 3 segmentit linkitetty toisiinsa muodostaen jatkuvan listan element_n+4element_n + 5

29 CArrayVarFlat

30 CArrayVarSeg segmentit linkitetty toisiinsa muodostaen jatkuvan listan element_nelement_n+1element_n+3 element_n+4element_n+5

31 Mikä on DLL? Dynamic Link Library Ladataan dynaamisesti muistiin –ROM:lla sijaitsevia DLL:ja voidaan ajaa suoraan ROM:lta –Kuitenkin vain mikäli on käytetty NOR flashia Exportointi DLL: n rakenne –Constant static data –Exportoidut funktiot –Export table Järjestysnumero->osoite mapping E32Dll( )

32 DLL:t

33 DLL Static interface DLL –Yksi tai useampi exportoitu funktio –.h tiedosto määrittää rajapinnan (compile-time) –.lib tiedosto metodi->ordinaali mapping (link-time) –.dll tiedosto sisältää ajettavan koodin (run-time) Polymorphic interface DLL –Sisältää yhden tai useamman määritellyn exportin –DLL: n käyttäjä saa export in kautta instanssin luokkaan, jonka kautta komponenttia käytetään –Pluginit Symbian GUI applikaatiot (.app) ovat polymorfisia DLL:ja

34 Static interface DLL

35 DLL käytännössä Funktioden kutsuminen DLL: sta –#include –MMP- filessä: LIBRARY MyDll.lib DLL: n luominen –MMP- filessä TARGET MyDll.dll TARGETTYPE DLL UID 0x1000008d KMyDllUid –Kääntäjä luo.lib-tiedoston

36 Dll käytännössä Funktio, jota halutaan kutsua DLL:n ulkopuolelta pitää exportoida –Makrot: EXPORT_C ja IMPORT_C –Headerissa (.h) class MyClass { public: IMPORT_C void DoSomething(); private: void SomethingElse(); }; –Koodissa (.cpp) EXPORT_C void MyClass::DoSomething() { // blah blah }

37 DLL:sta saatavat hyödyt Tehokas muistin käyttö –DLL tarvitsee ladata vain kerran vaikka käyttäjiä olisi useampi Koodin uudelleenkäyttö –Työn säästö –Tilan säästö Kapselointi Polymorfisilla DLL:lla plugin-arkkitehtuurit

38 Tiedostojärjestelmä F32 Hoitaa ohjelmien lataamisen Kernelille Server Tarjoaa –Tiedostot ja hakemistot –Drivet –Tiedostonimien parsinta –Streamit User Library User Library File Server File Server Kernel Device Drivers Device Drivers

39 Tiedostojärjestelmä VFAT –Tiedostonimet –DOS/Windows tyyliset tiedostonimet –”c:\nokia\images\pic.jpg” –. ja.. eivät tuettuja Tukee erillaisia mediatyyppejä –ROM –FLASH RAM –MMC –CF

40 File server session RFs luokka kapseloi session Yhteys clientilta file serverille Yhdellä threadilla voi olla useita yhtäaikaisia sessioita auki Päätoiminnot –Tiedonsiirto –Tiedostojen ja hakemistojen hallinta RFs Session File Server File Server App


Lataa ppt "TEKNIIKAN JA TALOUDEN YLIOPISTO Symbian ohjelmointi 2. Luento Juha Turunen"

Samankaltaiset esitykset


Iklan oleh Google