Grafinės sąsajos kūrimas Spausdinti
( 0 Votes )
Parašė Aurimas Šimkus   

Grafinė vartotojo sąsaja reikalinga norint vaizdžiai perteikti įvestį ir išvestį. Pagal ISO Prolog standarte darbas su grafine sąsaja nėra numatytas. Taip yra padaryta dėl to, kad Prolog būtų galima nesudėtingai integruoti į kitas programavimo kalbas.

Iš viso yra bent 3 būdai Prolog kurti GVS:

  • Naudojant specialiai GVS programų kūrimui pritaikytas Prolog versijas, pvz., Visual Prolog arba Prolog versijas pritaikytas dirbti su GVS programavimą palaikančiais karkasais (JVM, .Net Framework), pvz., Prolog.Net, tuProlog.
  • Naudojant išorinių kalbų, palaikančių GVS programavimą, sąsajas. Pvz., SWI-Prolog turi C/C++ bei Java (JPL) sąsajas.
  • Naudojant grafikos kūrimo karkasus (XPCE/Prolog), pritaikytus Prolog. SWI-Prolog rekomenduojamas variantas (yra iškart integruotas šitame interpretatoriuje).

Mes šitoje pamokoje apžvelgsime GVS kūrimą naudojant trečiąjį variantą - XPCE/Prolog.

 

XPCE/Prolog

XPCE yra grafikos kūrimo įrankis, karkasas, skirtas grafikos programavimo galimybių integravimui į interpretuojamas programavimo kalbas (pvz., Prolog). Vienas didžiausių jo privalumų - suderinamumas su visomis operacinėmis sistemomis. Kitas didelis privalumas mums - XPCE/Prolog yra integruotas į SWI-Prolog, taigi nereikės papildomų darbų, norint pradėti dirbti. Šis įrankis yra labai gerai suderintas su Prolog duomenų struktūromis, programavimas vyksta praktiškai įprasta Prolog kalba. Tiesa, XPCE - objektiškai orientuotas produktas, taigi reikės šiek tiek objektinio programavimo žinių.

Šitoje pamokoje mes tik labai trumpai aptarsime XPCE/Prolog programavimą. Norint sugebėti kurti GVS, rekomenduojame pastudijuoti čia.

Pagrindiniai 4 XPCE predikatai, reikalingi manipuliuoti grafiniai objektais:

  • new/2 - grafinio objekto sukūrimui, 
  • send/2 - objekto (parametrų ir pan.) modifikavimui ir patikrinimui, 
  • get/3 - objekto apklausai (parametrų gavimui ir pan.),
  • free/1 - objekto sunaikinimui.

 Pateikiame šių predikatų panaudojimo pavyzdį:

?- new(Obj, picture('Mano pirmoji GUI programa'). 
 Obj = @42310001/picture.
?- send(@42310001, open(point(550,450))).
 true.
?- get(@42310001, size, size(Plotis,Aukstis)).
 Plotis = 377,
 Aukstis = 177.
?- free(@42310001).
 true.

Pirmojoje eilutėje susikuriame naują klasės picture objektą Obj. @42310001 yra unikalus XPCE sugeneruotas šio objekto adresas. Antrojoje eilutėje pasiekiame sukurtą objektą ir jį atvaizduojame ekrano taške (550,450) - nuo kairiojo viršutinio ekrano kampo.

XPCE/Prolog pirmoji programa

Trečiojoje eilutėje kreipiamės į sukurtą objektą ir pasiteiraujame lango dydžio. Ketvirtojoje eilutėje sunaikiname objektą.

PS jei bandysities šitą kodą Prolog konsolėje, atkraipkite dėmesį, kad sukurto objekto langa atidaryti galite tik vieną kartą. Jei noritė atidaryti iš naujo, iš pradžių sunaikinkite seną objektą ir susikurkite naują, arba tiesiog susikurkite naują objektą ir jį atsidarykite.