ELTE PSZT – 2008. november. Symbian operációs rendszer SIBO – Psion Computers (1980) EPOC - irodai kisszámítógép (1980-1998) Symbian OS – (alapítva 1998.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

C++ programozási nyelv Gyakorlat hét
Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Szabó Tamás Károly G6HT12 A Ruby programozási nyelv.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Dinamikus tömbök.
Bevezetés a Java programozásba
6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Fájlkezelés, IO Kivételkezelés Belső osztályok
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Vizuális modellezés Uml és osztálydiagram UML eszközök
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 8. Gyakorlat Operator overloading II.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Parancssori argumentumok Primitív típusok Operátorok Vezérlési szerkezetek Tömbök Ürmös Beáta, 2011.
Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Mutatók, tömbök, függvények
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 5. rész – Osztályok III.
C# tagfüggvények.
C# osztályok Krizsán Zoltán 1.0.
C# tagfüggvények.
Önálló laboratórium december 19.1 Fejlesztő rendszer kialakítása SYMBIAN operációs rendszerű GSM terminálokhoz Hegedűs Iván Mihály Pázmány Péter.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Kivételkezelés.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
1 Operációs rendszerek Az NT folyamatok kezelése.
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Bevezetés Amiről ma szó lesz… Miért D? Mert a fejlesztők úgy látták, hogy a C++-on van még mit javítani. Mert a programozók a nyelvnek általában elszigetelt.
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Objektumvezérelt rendszerek tervezése
Programozás III KOLLEKCIÓK.
Programozás III KIVÉTEL.
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Típuskonverzió a C++ nyelvben
Opencms modul fejlesztés Krizsán Zoltán. Modulok fajtái Nincs előírás, csak tipikus tennivalók: –Content type: új típus(oka)t vezet be. –Template: új.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Strukturális tervezési minták
A C++ programozási nyelv
String osztály létrehozása
Konverziós operátorok
Előadás másolata:

ELTE PSZT – november

Symbian operációs rendszer SIBO – Psion Computers (1980) EPOC - irodai kisszámítógép ( ) Symbian OS – (alapítva 1998 : Nokia, Motorola, Psion, Ericsson, 2002: Sony-Ericssson, Siemens) Mérföldkő: 2000-ben megjelent 6.0-ás verzió

Segédanyagok SDK online dokumentáció: C:\S60\devices\S60_3rd_FP2_SDK_v1.1\docs\eclipse.exe

Online dokumentáció

Okos telefonok erős processzor nagyméretű kijelző viszonylag nagy memória információ kezelő programok egyéni alkalmazások egyszerű kezelhetőség megbízhatóság erőforrásaival nem pazarló (memória, szolgáltatások, energia fogyasztás) gyors reakcióidő folyamatos üzemmód

Elvárosok megbízható nincs adatvesztés nem dobja el a vonalat optimális a memória felhasználás nincs memória szivárgás minden hibát „értelmesen” kezel nyitott a külső fejlesztések irányába

Symbian OS felépítése Java Alkalmazás szintű szolgáltatások Operációs rendszer szolgáltatásai Alap- szolgáltatások Kernel és hardware integráció MIDP CLDC JVM Felhasználói interfész szinkronizáció UI alkalmazás keretrendszer UI eszköz- készlet PIMÜzenet- kezelés BöngészésAdat- szinkron Általános szolgáltatások Kommunikációs szolgáltatások Grafikai szolgáltatások PC-s kapcsolat szolgáltatásai Alacsonyszintű szolgáltatások Fájlszerver Kernel szolgáltatások Eszközmeghajtók

A fejlesztés alapelemei Symbian C++ sajátosságok Elnevezési konvenciók Kivétel- és memóriakezelés Alaptípusok, sztringek, tömbök ThinTemplate minta Hibakezelés módja Aszinkron kezelés (ActiveObject)

Symbian C++ sajátosságok Nincs kivétel. Helyette: TRAP és User::Leave Nincs RTTI (dinamikus castolás nem megengedett) Kódolási minták a memóriaszivárgás kiszűrésére: kétfázisú konstrukció, CleanUpStack Saját elnevezési konvenciók: nem a változó típusa, hanem szerepe szerint történik az elnevezés (T,C,R,M) memóriakezelés segítése függvénynevekkel: prefixek, postfixek

Symbian C++ sajátosságok Nincs STL, helyette saját generikus adatszerkezeteket használ String helyett deszkriptorok Többszálúság kezelése: ActiveObject, Thread Template-ek használata: ThinTemplate

Elnevezési konvenciók Általános szabályok Osztályok (T,C,M,R) Egyéb típusok Változók Metódusok Osztálydeklarációk elhelyezkedése

Általános szabályok Típusok, változók, metódusok Angol név, amerikai angol írásmód (Color, Colour) Szavakat egybe írjuk, minden szót nagybetűvel kezdünk Osztálynevek: főnevek; metódusnevek: igék Név végén konvenció szerinti záróbetű (L, LC, LD)

T osztályok (Type) Egyszerű típusok Nem tárolnak heapen objektumokat Nincs szükségük destruktorra (az alapértelmezett jó) Másoló konstruktort és értékadó operátort is ritkán használ Legtöbbször a stack-en foglal helyet Nem igényelnek destruktort, ezért nem probléma, ha nem kerül végrehajtásra (leavelés).

T osztályok - példa

C osztályok (Class) Bonyolultabb funkcionalitású osztályok Ősosztálya a CBase Virtuális destruktorral KELL rendelkeznie (memória felszabadítás) Tagváltozók automatikusan kinullázódnak Birtokolnak heapen tárolt objektumokat (memóriakezelés!) Függvényhívásnál referenciaként, vagy pointerként adjuk át (nem igényelmásoló konstruktort vagy értékadó operátort) A destruktor hívását minden esetben biztosítani kell.

R osztályok (Resource) Valamilyen szerves szerű program által biztosított erőforrásra tartalmaznak azonosítót. (Pl. az RFile osztály az RFS osztály erőforrását használja ) „Azonosító” miatt helyet foglalhatnak a stack-en is A felszabadítás az erőforrást birtokló objektum (szerver) dolga Szál befejeződésekor automatikusan felszabadul Foglalás: Open, Create, Allocate Elengedés: Close, Destroy, Free

R osztályok - példa

M osztályok (Mixin) Interfész, absztrakt protokoll C++: absztrakt osztályok Csak virtuális metódusuk van, legtöbbször implementáció nélkül Szigorú többszörös öröklődés: egy C osztály csak egy másik C osztályból és több M osztályból örökölhet (ugyanabból az M osztályból csak egyszer)

Osztálytípusok - összefoglalás T: egyszerű típus; nincs destruktora; csak T-ből, vagy M-ből öröklődhet; értékként átadható; stack-en tárolható C: csak a heapen foglalható; van destruktora; pontosan egy C és tetszőleges M osztályból származhat; nem adható át értékként M: interfész; csak virtuális metódusok; nincsenek tagváltozók; nem példányosítható R: erőforrás, melyet meg kell nyitni és be kell zárni

Kivételek, egyéb típusok S: tagfüggvény nélküli struktúrák Statikus osztályok: User, Math, Mem H: HBufC D: Kernel oldali osztályok E: felorolások(enum) K: Konstansok i: tagváltozók (pl. iNum) a: argumentumok ( pl.: void SetNumber (TInt aNumber); )

Metódusok Lekérdező és beállító metódusok iNum tagváltozóhoz Num() lekérdező SetNum() beállító metódus Bonyolultabb lekérdezéshez GetNum(); „Kilépő” metódusok („Leavelő”) Azok a metódusok, amelyek közvetlenül vagy közvetve User::Leave hívást eredményezhetnek Lehetséges végződések: L, LC, LD

Osztálydeklarációk - egyezmények public, protected, private: mindig ki kell írni Sorrend: tagfüggvények, tagváltozók Metódusok argumentumait a deklarációban is ki kell írni Az ősosztály virtuális metódusait külön csoportosítjuk, megjelölve, honnan öröklődtek Ha sok inline függvény van, külön fájlba kell helyezni

Dinamikus objektumok - heap Minden szál rendelkezik saját heap területtel Symbian OS alatt a CBase osztályok példányait a heap- en helyezzük el Az osztály adattagjai létrejöttükkor kinullázódnak A virtuális destruktor biztosítja, hogy a felszabadítás helyesen megtörténjen

Kivételkezelés, memóriakezelés Kivételkezelési konvenciók Cleanup Stack Kétfázisú konstruktor

Kivételkezelés A Symbian elődjének fejlesztésekor a C++ fordítók nem ismerték a kivételkezelést A C++ kivételek többlet memóriát és több számítást igényelnek Symbian: egy-két konvenció  kisebb erőforrás igény

Objektum automatikus létrehozása a stack-en

Objektum létrehozása a heapen – példa Hiba esetén abbahagyja a végrehajtást.

Trap Harrness és Leave

Kivételkezelési konvenciók C++ Symbian Throw Catch Függvénydeklaráció: Throw new operátor: 0-t ad vissza User::Leave TRAP, TRAPD záró L new (ELeave): kivételt dob, ha nincs memória

Kivételkezelés C++-ban Ha kivételkezelés történik A program stack visszafejtésre kerül a catch szintjéig Az objektumok destruktorai meghívódnak A mutatók „elvesznek” (esetleg smart pointert lehet használni) int e float d Object c Object *b int *a SomeThing ex

Kivételkezelés C++-ban Ha kivételkezelés történik A program stack visszafejtésre kerül a catch szintjéig Az objektumok destruktorai meghívódnak A mutatók „elvesznek” (esetleg smart pointert lehet használni) int e float d Object c Object *b int *a SomeThing ex

Kivételkezelés C++-ban Ha kivételkezelés történik A program stack visszafejtésre kerül a catch szintjéig Az objektumok destruktorai meghívódnak A mutatók „elvesznek” (esetleg smart pointert lehet használni) float d Object c Object *b int *a SomeThing ex

Kivételkezelés C++-ban Ha kivételkezelés történik A program stack visszafejtésre kerül a catch szintjéig Az objektumok destruktorai meghívódnak A mutatók „elvesznek” (esetleg smart pointert lehet használni) Object c : ~Object Object *b int *a SomeThing ex

Kivételkezelés C++-ban Ha kivételkezelés történik A program stack visszafejtésre kerül a catch szintjéig Az objektumok destruktorai meghívódnak A mutatók „elvesznek” (esetleg smart pointert lehet használni) Object *b (Elveszett: sizeof(Object) leak) int *a SomeThing ex

Kivételkezelés C++-ban Ha kivételkezelés történik A program stack visszafejtésre kerül a catch szintjéig Az objektumok destruktorai meghívódnak A mutatók „elvesznek” (esetleg smart pointert lehet használni) Object *b (Elveszett) int *a (Elveszett) SomeThing ex sizeof(Object) + sizeof(int) méretű memóriaszivárgás.

Symbian C++ hibakezelés Nincs C++ kivétel Nincs veremvisszafejtés Destruktorokat nem hívja meg Egész számot lehet eldobni és elkapni stackCleanupStack int e float d Object c Object *bObject cc.Finalize() int *aObject *bdelete b int ecodint *afree(a)

Hibakezelés - Leave A Symbianban a hiba kezelésére a User könyvtár Leave metódusa szolgál. Az olyan függvényeket, amelyek a User::Leave metódust hívják leave- elő függvényeknek nevezzük. Minden leave-elő függvény neve L betűre végződik. Mikor leave-elhet egy függvény? Ha közvetlenül meghívja a User::Leave() függvényt Heapen foglal helyet new (ELeave) metódussal Más leave-elő függvényt hív.

Hibakezelés + Leave Leave kezelése TRAP segítségével. Több függvényhívás esetén mindegyiket bele kellene tenni egy TRAP konstrukcióba. A CleanupStack használata „egyszerűsíti” ezeket a függvényhívásokat.

CleanupStack A UseL() függvény memóriát foglal és leave-elhet. Az x automatikus változó a heap-re mutat. Ha UseL() leave-el, akkor a delete nem hajtódik végre, a CX által lefoglalt terület „árván” marad. A CX helyfoglalása után a rá mutató pointert elhelyezzük a Cleannup Stack-en Ha UseL() nem leave-el, akkor MI szedjük le a címet a stackről. Ha UseL() leave-el, akkor a Laeve kezelő eljárás.

CleanupStack alkalmazása Egyszerre több elemet is leemelhetünk a stackről. Pointert tartalmazó adattagot ne tegyünk a CleanupStack-re. Az általa mutatott terület felszabadítása az adattagot tartalmazó osztály feladata, nem a Leave-elő mechanizmusé. Tilos!! A PushL() nem leave-el (előrefoglalás miatt)

Kétfázisú konstrukció Probléma: A CY példányosításakor a CY konstruktora leave-el!

Kétfázisú konstrukció

A konstruktort két részre bontjuk: 1. rész: Biztonságos, nem leave-elő  a példányra mutató pointer biztosan felkerül a CleanupStack-re 2. rész: A „veszélyesebb” leave-elő rész. De ekkor már jó helyen van a pointer.

Kétfázisú konstrukció A „két fázist” a NewL, NewLC függvényekbe „becsomagolják”.

Kétfázisú konstrukció - összefoglalás Az osztály standard konstruktorában nem hívunk leave-elő kódot A leave-elő hívásokat egy külön „második fázisú konstruktorba” tesszük. (ConstructL) Az osztály példányosításakor: Meghívjuk a standard konstruktort (new) A „félig létrejött” objektumot feltesszük a CleanupStack-re Meghívjuk a második fázisú konstruktort (ConstructL) (Levesszük a CleanupStack-ről) A „két fázist” a NewL, NewLC függvényekbe „becsomagolják”.

Tagváltozók Amikor egy osztály tagváltozót hozunk létre a heapen, akkor azt nem szabad feltenni a CleanupStack-re!! Leave esetén meghívódik a gazda osztály destruktora és az törli a tagváltozót Ha emellett a CleanupStack-en is fenn lenne a tagváltozó, akkor kétszer próbálná törölni, ami HIBA.

Kódhatékonyság. ThinTemplate

Hibák elleni védekezés _ASSERT_ALWAYS _ASSERT_DEBUG User::Panic _TEST_INVARIANT _UHEAP_MARK, _UHEAP_MARKEND

Aszinkron szolgáltatások, ActiveObject Aszinkron események: billentyű lenyomás, i/o művelet befejeződése, időzítők jelzései, … Lépések: Igény bejelentése  várakozás az eseményre  reagálás az eseményre ActiveSheduler  ActiveObject  Prioritás OfferKeyEventL

Kliens-szerver keretrendszer fájlszerver ablakkezelő szerver kommunikácó kezelés adatbázis-kezelés határidőnapló A CServer osztályból származnak.

Cleanup-safe HelloWorld Konzolos alkalmazásnál a CleanupStack-et nekünk kell létrehozni.

Fájlkezelés – console alkalmazás