ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I.
Bevezetés Készítette: Gregorics Tibor
Feltételek Előfeltétel:
OAF (EAF2) Kötelező házi feladatok: • 4 darab feladat max. 5-5 pontért • 2 hét késés: legfeljebb 3 pont, 4 hét késés 1 pont • mindet a szorgalmi időszakban legalább 1 pontosra Géptermi zárthelyi: • 2 darab 0-5-ig értékelt • mindkettő legalább 2-es,1 javító zh Gyakorlati jegy: • géptermi zárthelyik duplán és házi feladatok átlaga http://people.inf.elte.hu /gt/eva1 •
Cél
Eseményvezérelt
grafikus felületű alkalmazások
készítése •
Windows/ .NET Visual Studio / C#
•
Linux/ Qt (C++)
Több rétegű,
fejlesztés
komponens alapú alkalmazás
Eseményvezérelt alkalmazás
A felhasználó párbeszéd üzemmódban kommunikál a programmal.
A rendelkezésére álló perifériákkal (billentyűzet, egér, érintő képernyő stb.) avatkozik be a program futásába
A program várakozik a felhasználó jelzéseire, és azokra reagál.
Nemcsak a felhasználó válthat ki eseményt.
4
tevékenység
kezelő objektum
esemény-kapcsolat a forrás objektum és a kezelő objektum között
forrás objektum akció kiváltó/okozó
Grafikus felület vezérlői
Jellegzetes alakú és funkciójú objektumok, amelyeken meghatározott események válthatók ki.
A gyakran előforduló komponensek előre definiáltak (újrafelhasználható kód), használatuk konvencionális. •
ablak (űrlap, form, keret)
•
nyomógomb, jelölő négyzet, rádiógomb, címke,
•
szövegdoboz, listadoboz, kombináltdoboz, szám beállító, folyamat jelző,
•
űrlap (form, ablak, keret), szabványos dialógus ablak (üzenet ablak, megerősítés, fájl betöltés, fájl mentés, szín kiválasztás, stb.), kartonozó, panel.
•
csúszka, görgető sáv, térköz
•
menü (menübár, almenü, helyzet-érzékeny felnyíló menü)
•
időzítő
7
Egy EVA felülete
9
Egy űrlap osztálydiagramja Form SajátŰrlap
TextBox
2
GroupBox
Button
ListBox
RadioButton
2
2
10
Űrlap osztálydefiníciója public class SajátŰrlap : public Form { vezérlők deklarálása Button nyomógomb; TextBox doboz1, doboz2; GroupBox csoport; RadioButton rádióGomb1, rádióGomb2; ListBox lista; public void SajátŰrlap(void) { nyomógomb = new Button(); doboz1 = new TextBox(); csoport = new GroupBox(); rádióGomb1 = new RadioButton(); ... this.Add(nyomógomb); this.Add(doboz1); this.Add(csoport); csoport.Add(rádióGomb1); ...
vezérlők létrehozása
vezérlők felvétele az űrlap felületére
11
Űrlap osztálydefiníciója esemény-tevékenység kapcsolat ... CONNECT(nyomógomb.Click, this.call); nyomógomb.Click += new EventHandler(this.call); connect(nyomógomb,SIGNAL(clicked()),this,SLOT(call())); nyomógomb.addActionListener(this); }
eseménykezelő függvény void call(){ doboz1.Text = "megnyomtak"; } void call(object
sender, EventArgs e)
void call() public void actionPerformed(ActionEventArgs e) }
12
Űrlapot megjelenítő alkalmazás kódja public class SajátŰrlap : public Form { Button nyomógomb; ... public void SajátŰrlap(void) { nyomógomb = new Button(); ... this.Add(nyomógomb); CONNECT(nyomógomb.Click, this.call); }
Generálható kód
void call(){ doboz1.Text = "megnyomtak"; } } public class Main { static void Main() { run( new SajátŰrlap() ) } }
14
Felület-tervező (Designer)
Vizuális felület-tervező (szerkesztő, designer) funkciói: vezérlő elemek "drag&drop" elrendezése egy form-on
vezérlők kezdeti tulajdonságainak beállítása eseményekhez esemény-kezelők rendelése
A tervezés eredménye egy magas szintű programozási nyelvű kód, amely beépül az alkalmazásunkba.
Kérdések:
mit kódoljunk a tervezővel, és mit közvetlenül? módosíthatunk-e a tervező által generált kódon?
15
Generált kód beépülésének technikája Button nyomógomb; ... private void Init(void) { nyomógomb = new Button(); ... this.Add(nyomógomb); CONNECT(nyomógomb.Click, this.call); }
Generált kód
public class SajátŰrlap : public Form { ? public void SajátŰrlap(void) { Init(); } void call(){ doboz1.Text = "megnyomtak"; } } public class Main { static void Main() { run( new SajátŰrlap() ); } }
16
Qt Designer
NetBeans
MyForm.java form.ui MyForm
XML
uic
InitComponents() MyForm()
UI_Form
ui_form.h public static void main()
SetupUI()
.NET Visual Studio
myform.h MyForm MyForm()
myform.cpp main.cpp
MyForm InitializeComponent() MyForm()
myform.Designer.cs
myform.cs program.cs
17
Logikai réteg Szolgáltatásokat nyújtó, önálló megjelenést nem biztosító osztályok
felületi logika
Felületi réteg
Űrlap-objektumok osztályai
Két rétegű szoftver architektúra
18
Felhasználói felület működési logikája
Egymástól független eseménykezelések (primitív eset)
Egymástól függő eseménykezelés (állapotdiagram) Korábbi események eredményeként előálló állapottól függ egy újabb esemény kezelése az aktuális állapotot jelezheti a forrás objektumok együttes tulajdonsága vagy egy speciális állapotjelző objektum Megvalósítás • •
az egyes eseménykezelők lekérdezik az aktuális állapotot egy központi eseménykezelő metódusban (control()) implementáljuk az állapot-átmeneteket (többágú elágazás) 19
Tervezés
Felületi réteg
Megjelenési terv Vezérlők specifikálása: funkciójuk leírása, fajtájuk kiválasztása, tulajdonságaik felsorolása Vezérlők típusának hierarchiája (osztálydiagramja) adott, nem kell explicit módon megadni Állapotdiagram: állapotok és állapot-átmenetek (esemény-tevékenység párok) definiálása Logikai réteg
A EVA esemény-kezelését kiszolgáló részfeladatok feltárása (használati esetek) Osztályokba szervezett (objektumokhoz rendelt) tevékenységeket, számításokat végző eljárások, amelyeket a felületi réteg eseménykezelői hívnak meg. 20