A BADA programozási nyelv

Kifejezések

Kifejezések

Osztályok és interfészek

A legtöbb osztály a badában az Object osztályból származik. Kivételek azok az osztályok, amelyek csupán statikus metódusokkal rendelkeznek.

Badában az Interfészek (osztályok, amelyek "I" prefixummal kezdődnek) olyan 'absztrakt törzs osztályok', ahol minden metódus tisztán virtuális. Például: IList, IMap, IEvent.

Többszörös öröklődés

Annak érdekében, hogy elkerüljük az általános buktatóit a többszörös öröklődésnek, az osztályok nem származhatnak egyszerre több alaposztályból. A többszörös interfész öröklõdés megengedett. Amikor bada alaposztályból vagy interfészbõl származtatunk, csak akkor használjuk a "virtual" kulcsszót, ha valóban nyomós okunk van rá.

AjánlottNem ajánlott
public class MyForm
:public Osp::Ui::Controls::Form,
public Osp::Ui::IActionEventListener
{
InheritedClass(void);
~ InheritedClass(void);



};
public class MyForm
:public Osp::Ui::Controls::Form,
virtual public
Osp::Ui::IActionEventListener
{
InheritedClass(void);
~ InheritedClass(void);



};

Kétfázisú konstrukció

Motiváció

C++ esetében, amikor egy objektum elkészítése közben hiba lép fel az erőforrás kiosztásnál, az objektum már részben elkészült, ám a destruktora nem hívódik meg, és ez sok esetben memóriaszivárgáshoz vezethet.
Kétfázisú konstrukció

A Construct metódus

Hogy elkerüljük a memóriaszivárgást, az erőforrás lefoglalás rész ki lett emelve a konstruktorból, és a Construct() metódusban kapott helyet.
A Construct() metódus

Metódusok

A badában az objektumoknak nincsenek "tulajdonságaik". Minden metódus. Ez a teljes beágyazás. Ez azt jelenti, hogy nincsen direkt hozzáférés az adatokhoz. Mivel nem lehet direkten elérni õket, ezért nem lehet elrontani az adatokat, vagy összeomlást okozni a megsérült adatok által. Ez nagyfokú biztonságot jelent a fejlesztők számára, mert nem kell számolniuk a sérült adatokkal. Ez szintén nagyfokú biztonságot jelent a mobil készülék felhasználóinak is. Ezek az adathozzáférésbeli korlátozások meggátolják, hogy rossz szándékú szoftverek kihasználjanak bizonyos biztonsági réseket, mint például a buffer túlterhelés.

Kivételkezelés

A Samsung bada C++ kivételkezelés helyett hiba-eredményeket használ. A C++ kivételkezelés túl sok futásidőt igényelne az erőforrásokban szegény készülékektől, és túl sok bonyodalommal járna.

Minden kivételt a result típuson keresztül kaphatunk el:

3 eredmény visszaadási típus áll a rendelkezésünkre:

  1. result SomeClass::DoSomething() - A visszatérési érték tartalmazza az eljárásfutás eredményét.
  2. SomeClass* SomeClass::DoSomething() - Ez a módszer visszaad egy mutatót az adott osztályra, ha sikeresen futott le a metódus, vagy egy null értéket ha hiba történt. Ajánlatos ezután a GetLastResult() metódust meghívni.
  3. Típus vagy void SomeClass::DoSomething() - nincs kivétel dobás.

Három formája a hibakezelésnek:

Kivétel kezelés

A következő négy esetben példákat láthatunk hiba propagálásra és kivételek konverziójára:

Kivétel propagálás és konverzió

A log bejegyzések vesszőkkel tagoltak. Egy kivétel bejegyzése a logban:

Log

Komplex objektumok megjelenítése:

Komplex objektum

Tulajdonosi politika

A tulajdonos köteles törölni a dinamikusan lefoglalt memória tartalmát, ha arra már nincsen szükség a memória szivárgás elkerülése érdekében. Tehát: Bármi a tulajdonosa egy objektumnak, KÖTELESSÉGE törölni azt, ha már nincs rá szükség. Például:

Object* pObj= newObject();
...
delete pObj; //Must be deleted to avoid a memory leak.

A kizárólagos birtoklás azt jelenti, hogy a birtokolt objektumnak nem lehet több birtokosa. Két szabály van a birtoklásra:

  1. A new operátor birtokba veszi a kijelölt memória területet.
  2. A birtokviszonyt át lehet ruházni, de nem lehet megosztani.

Birtoklás

Ha egy metódus 'N' postfixummal végződik, a hívónak KÖTELESSÉGE törölni a visszaadott példányt, miután befejezte a használatát, különben memóriaszivárgás lép fel.

class A
{
public:
IList* SearchN(const String& criteria) const;
...
};

IList* A::SearchN(const String& criteria)
{
// Search with criteria and return the results by storing them in the list.
ArrayList* pList= new ArrayList();

// Add the search results to the list.
...

return pList;
}

void MyClass::SomeMethod(void)
{
A a;
IList* pList= a.SearchN(L"Mostpopular");
...
delete pList;
}