Januári beszámoló – Limit megvalósítás

Zolnai Tamás, 2013. február 5.

     Ebben a hónapban az előzetes tervek alapján sikerült többé-kevésbé megvalósítani a limit érték beállítására használható eszköztári elemet. Az implementálás során felszínre kerültek a rendszer egyes előnyei és hátrányai, melyek nagyban meghatározták a megvalósítás konkrét lehetőségeit. Mindenesetre elmondható, hogy a tervezettől így sem kellett nagy mértékben eltérni.
     Az első dolog az előző beszámolóban említett központi vezérlő osztály használatához kapcsolódik. Ez az osztály központilag tartalmazza az egyes, ezen osztály alá rendelt objektumok, többek között eszköztári elemek állapotait. Az állapotok lekérdezésének és beállításának a módja, konkrétan az azt megvalósító metódusok előre adottak. Ez egyrészről jó, mivel rávezeti a programozót a megoldásra, másrészről azonban speciálisabb problémák esetén leszűkíti a lehetőségeket. Esetünkben szerencsére elég egyszerű funkció bevezetéséről van szó, így ezek a korlátok csak érintőlegesen jelentkeztek. Nagy előnye azonban ennek a megoldásnak, hogy az általa támasztott szabályok betartásával a lekérdezés elmentése és betöltése nem igényel további kódolást, hiszen az említett lekérdező/beállító metódusok segítségével a rendszer automatikusan végzi azt el.
    A következő megemlítendő dolog a limit megadására alkalmas kombinált listát kezelő osztály, amit az egyértelműség kedvéért nevezzünk helyi vezérlőnek. A LibreOffice-ban elég általános, ha nem az egyetlen, az a megoldási mód, amit én is alkalmaztam. Ennek egyik jellemzője, hogy maga a létrehozott osztály teljesen különálló egységet alkot, tehát nem szükséges manuálisan összekapcsolni más osztályokkal, melyek kapcsolatba szeretnének lépni vele. Egyszerűen egy azonosítóval kell ellátni az osztályt, regisztrálni a megfelelő helyen és az így lefoglalt azonosító alapján lehet kommunikálni vele. Tehát a kommunikáló felek nem egymás metódusait hívják meg és az alapján adják át az információt, hanem tényleges címmel ellátott üzeneteket váltanak egymással, melyet a rendszer kézbesít.
       Ilyen csatorna köti össze a két vezérlő osztályt is és éppen itt derült ki a programozás során, hogy ez a csatorna csak részben két irányú. Ugyanis a helyi vezérlő bármikor küldhet információt a központinak, de az ellenkező irányban csak az állapotok inicializálása során történik átvitel. Esetünkben az ellenkező irányú üzenetküldésre olyan esetekben van szükség, amikor feltehető, hogy a központi vezérlő nem ismeri a legfrissebb limit értéket, pedig a következő művelethez erre szüksége van. Ekkor kell lekérdeznie azt a helyi vezérlőtől. Ezt végül a közösen használt eszköztáron, mint közvetlen csatornán keresztül oldottuk meg.
   Tehát egészében véve elmondhatjuk, hogy a rendszert jól megalapozták fejleszthetőség szempontjából, ami a LibreOffice esetében létfontosságú. Azonban az adatbázis-kezelő komponens, amelyet sikerült egy kicsit jobban felmérni, tartalmaz néhány kevésbé dinamikus területet. Előző beszámolómban előre vetítettem az adatbázis-kezelő SQL elemzőjének módosítását, mivel például a „TOP” kulcsszót nem ismeri fel. Egy kicsit jobban belemélyedve az elemző használatába kiderült, hogy az általa visszaadott elemzőfa (amit előzőleg egyszerűbb struktúrának neveztem) csúcspontjai statikusan épülnek fel, ami annyit tesz, hogy az adott csúcsok bármely SQL parancs esetén mindig ugyanazt az elemet (pl. a „SELECT” kulcsszót) jelölik, tehát az elemzőfa szerkezete valójában mindig ugyanolyan, annyi különbséggel, hogy az adott csúcs milyen adatot tartalmaz, illetve hogy egyáltalán tartalmaz-e adatot. Ez még nem jelent problémát, de ez a megoldás lehetővé tette, hogy egy elemet a csúcs sorszámával lehessen azonosítani és ez a gyakorlatban is így terjedt el. Ez azonban már nagyban megnehezíti a bővíthetőséget, hiszen egy újabb kulcsszó bevezetése egy újabb csúcsot jelent a fában, ami pedig – attól függően, hogy a sorban pontosan hova kerül – felborítja az összes eddigi sorszám szerinti hivatkozást.
       Azonban ez két dolog miatt sem jelent olyan nagy problémát. Egyrészről egyes módosítások elvégezhetőek az elemző közvetlen megváltoztatása nélkül is. Másrészről az elemzőt használó forráskód elég jól körülhatárolható, éppen ezért a jövőben egy vállalkozókedvű programozó viszonylag rövid idő alatt képes dinamikusabb formába átírni az elemzőfa használatát. Mindenesetre amíg ez nem történik meg addig a „TOP” kulcsszó bevezetését későbbre halasztjuk, hiszen ennek használatára egyébként sincs számottevő igény. Egyetlen esetről tudok, amikor szükség lehet rá, ha MS Access adatbázisfájlt szeretnénk kezelni LibreOffice-ban.
     A LibreOffice adatbázis-kezelőjének egyik legnagyobb előnye, hogy mindenféle adatbázis-motorhoz képes csatlakozni. Ez a fajta multifunkcionalitás azonban leszűkíti az adatbázis-kezelő lehetőségeit és funkcióját. Alapvetően egyfajta univerzális felhasználói felületként szolgál és így a tényleges végrehajtás, illetve az azzal járó ellenőrzések nagy mértékben a háttérben futó adatbázis-motorra tolódnak át. Éppen ezért a programozás során az egységes információlekérdezés, illetve az egységes metódusok használatának lehetőségei szűkösebbek és így a fejleszthetőség ismét csorbát szenved.
     Esetünkben például a „LIMIT” kulcsszó használatakor, ugyan az elemző felismeri azt, de az aktuális adatbázis-motor még dobhat rá hibát. Éppen ezért felmerült az igény, hogy differenciáljuk az új eszköztári elem használatát, és csak olyan esetben legyen elérhető, amikor az ténylegesen funkciónál is. Azonban az említett információlekérdezési hiányosságok miatt első körben ezt nem sikerült megoldani kielégítő módon, így az új funkció minden esetben elérhető.
  Összefoglalva részben sikerült leprogramozni a limit megadására alkalmas beviteli mezőt. Azok a felhasználók, akik az alap adatbázis-kezelőt vagy olyan adatbázis-motort használnak, mely ismeri a „LIMIT” kulcsszót, azok minden további nélkül használhatják ezt a funkciót. Az általános megoldás megalkotása mellett felmerült az igény arra is, hogy ne csak az eszköztáron keresztül lehessen elérni ezt a funkciót, hanem a menüben is kapjon helyet, melynek megvalósítása egy új menüből megnyitható felugró ablak formájában már folyamatban van.
     Ezúttal linkelem a megvalósítás kódját is, hogy lehessen látni a tényleges eredményt. Ugyan még nem fogadták el a beküldött módosításokat, de némi bővítés után ez is meg fog történni. Tehát a link: https://gerrit.libreoffice.org/#/c/1994/

Címkék: , , ,

Itt lehet hozzászólni !