Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuJere Karvonen Muutettu yli 9 vuotta sitten
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
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.