Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 1. harjoitus Juha Turunen

Samankaltaiset esitykset


Esitys aiheesta: "Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 1. harjoitus Juha Turunen"— Esityksen transkriptio:

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)


Lataa ppt "Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 1. harjoitus Juha Turunen"

Samankaltaiset esitykset


Iklan oleh Google