Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuHarri Jurkka Muutettu yli 8 vuotta sitten
1
Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 1. harjoitus Juha Turunen (juha.turunen@lut.fi)
2
Sisältö Symbian coding convention Cleanup stackin käyttö Kooditehtävä
3
Symbian coding convention Symbian koodaajat noudattava Symbian coding conventionia –Eri developereiden koodi saman näköistä –Helpottaa koodin lukemista ja ymmärtämistä Coding convention on myös muutakin kuin ulkoasusääntöjä –Ei konkreettien luokkien moniperintää –Ei non-const static dataa (EKA2 sallii) –jne...
4
Luokkien nimeämiskäytännöt Luokkien nimillä on etuliite –T, C, M, R (,D, S) Luokan etuliite kertoo mikä luokan rooli on Sanat erotetaan isoilla alkukirjaimilla Sovellusluokissa yleensä muutaman merkin prefiksi –Ehkäisee name collisioneja –Kertoo heti mihin moduliin luokka kuuluu Esim. CKASuperGuru –C-luokka, Killer Application moduuli, luokka toteuttaa Super Guru toiminnallisuuden
5
T-luokat Yksinkertaiset tietotyypit Structit ovat T-luokkia Eivät yleensä tarvitse eksplisiittistä destruktoria ”Types” class TCircle { float CalculateArea() const; TPoint iOrigo; TReal iRadius; }
6
C-luokat Peritty CBasesta tai jostakin muusta C-luokasta ”C is for compound” Omistaa yleensä jotain dynaamisesti luotua Instanssit heapissa (siis ei stackissa) CBase –Virtuaalinen destruktori Tukee cleanup mekanismia
7
M-luokat ”Mixin-class” Määrittelee abstraktin rajapinnan –Ei sisällä jäsenmuuttujia –Ei sisällä metodien toteutuksia (pl. tyhjä destruktori) Moniperintä M-luokista sallittu vrt. Javan interface Esim. observer patternin toteutus
8
R-luokat Kapseloivat jonkin resurssin käytön Käytetään yleensä proxyina olioihin, jotka ovat jossain muualla. Esim. RFile, RCommServ, RTimer C/S toteutuksissa R-luokat ovat client rajapintaluokkia Rajapinta yleensä –Open/Create –Close/Release
9
Muut nimeämiskäytännöt Metodien nimeäminen –Sanat erotetaan isoilla alkukirjaimilla –Esim. DoSomething(); Muttujien nimeäminen –Metodiparametrien nimet alkavat pienellä a-kirjaimella (a = argument) DoSomething( TInt aArgument ); –Jäsenmuuttujien nimet alkavat pienellä i-kirjaimella (i = internal) TInt iAge; –Lokaalit muuttujat alkavat pienellä alkukirjaimella TChar firstLetter; Enumeraatiot –Enumeraatiot alkavat isolla E-kirjaimella –enum TColors { EWhite, EBlack, ERed }; Vakiot –K-etuliite, esim. const TInt KAmountOfDoggies( 5 );
10
Muu ulkoasu Ei alaviivoja (underscore _ ) –Muuttujien nimissä sanat erotetaan toisistaan isoilla alkukirjaimilla Aaltosulut (braces) sisennetään myös –Tämän voi säätää Visual Studiosta automaattiseksi Tools/Options/Tabs/ ”Indent open/closing brace”
11
Perustietotyypit Miksi ei tavallisia ANSI-C tyyppejä? –Johdonmukainen muun nimeämiskäytännön kanssa –Multiplatform koodia e32std.h Kokonaisluvut (ANSI-C int) –Etumerkilliset TInt8, TInt16, TInt, TInt64 –Etumerkittömät TUint8, TUint16, TUint32 Liukuluvut –TReal, TDouble Totuusarvo –TBool –EFalse, ETrue void* > TAny*
12
Kertaus poikkeuskäsittelystä TRAP( error, SomethingL() ) makro asettaa trap harnessin –Mahdollinen virhekoodi sijoitetaan error muuttujaan –TRAPD muutoin kuin TRAP, mutta virhekoodimuuttujaa ei tarvitse esitellä erikseen Leave –User::Leave( aErrorCode ); –Suoritus hyppää edelliseen trap harnessiin Panic –User::Panic(); –Threadin suoritus pysähtyy –Mikäli just in time on päällä, voidaan käynnistää debuggeri –GUI sovelluksissa UI note
13
Esimerkkki TRAP:n käytöstä void CSomething::SimpleMethodL(TInt aCommand) { TRAPD(err, DoSimpleMethodL(aCommand)); if (err == KErrArgument ) { // väärä komento, käsitellään virhe… } else if (err != KErrNone) { // jokin muu virhe, välitetään edelleen User::Leave(err); }
14
Muistivuotojen havaitseminen __UHEAP_MARK & __UHEAP_MARKEND Täsmäämätön muistin määrä panicin –Panic notessa esiintyvä numero on ensimmäisen orvon muistisolun osoite, mutta tämän tiedon hyödyntäminen voi olla hankalaa
15
CleanupStack CleanupStack luokan metodit –CleanupStack::PushL( CBase* aPtr ); –CleanupStack::Pop(); –CleanupStack::Pop( TInt aCount ); –CleanupStack::PopAndDestroy(); –CleanupStack::PopAndDestroy( aCount );
16
Harjoitustehtävästä Pura harkka2.zip samalle asemalle kuin missä SDK on Varmista, että..\epoc32\data\epoc.ini tiedostossa JUSTINTIME asetuksen arvoksi on asetettu 1 Tehtävänanto –Kirjoita CCompound luokalle NewL ja NewLC metodit –Luo doExampleL() funktiossa kaksi CCompound luokan instanssia NewL ja NewLC metodeja käyttäen –Varmista, että koodi on leave safe aiheuttamalla leave mightLeaveL() funktiossa –Aja ohjelma debuggaus moodissa (F5) Jos ohjelmasta poistuttaessa debuggeri aktivoituu, tapahtui panic (__UHEAP_MARKEND)
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.