Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • vijesti
  • Izrada aplikacija s grafičkim sučeljem. Kreiranje grafičkog sučelja pomoću Qt C clr kreiranje grafičkog sučelja

Izrada aplikacija s grafičkim sučeljem. Kreiranje grafičkog sučelja pomoću Qt C clr kreiranje grafičkog sučelja

5

Napravio sam mnogo različitih odjeljaka Nintendo DS GUI sustava kao što su gumbi, tekstualni okviri i potvrdni okviri, ali trebam način da sakrijem ove klase u jednoj Gui klasi tako da mogu nacrtati sve na ekranu odjednom i provjeriti sve gumbe odjednom tako da provjerite jesu li pritisnute tipke. Moje pitanje je koji je najbolji način organiziranja svih klasa (poput gumba i tekstnih okvira) u jednu GUI klasu?

Evo jednog načina na koji sam razmišljao, ali se čini da nije u redu:

Uredi: Koristim C++.

Klasa Gui (javno: void update_all(); void draw_all() const; int add_button(Button *button); // Vraća id gumba void remove_button(int button_id); privatno: Button *buttons; int num_buttons; )

Ovaj kod ima nekoliko problema, ali samo sam vam htio dati ideju o tome što želim.

  • 5 odgovora
  • Sortiranje:

    Aktivnost

2

Ovo pitanje je vrlo slično onome koje sam namjeravao objaviti, samo što je moje za Sony PSP programiranje.

Nešto sam tražio neko vrijeme, konsultirao sam neke knjige i VTM-ove, i do sada je ovo gruba ideja o jednostavnim sustavima korisničkog interfejsa.

Klasa uiElement() ( ... virtualna void Update() = 0; virtualna void Draw() = 0; ... ) klasa uiButton() public: uiElement ( ... virtualna void Update(); virtualna void Draw() ; ... ) class uiTextbox() public: uiElement ( ... virtual void Update(); virtual void Draw(); ... ) ... // Drugi elementi korisničkog interfejsa klasa uiWindow() ( ... void Update (); void Draw(); void AddElement(uiElement *Element); void RemoveElement(uiElement *Element); std::list elementi; ... ) void uiWindow::Update() ( ... za (list ::iterator it = Elements.begin(); to != Elements.end(); it++) it->Ažuriraj(); ... ) void uiWindow::Draw() ( ... za (list ::iterator it = Elements.begin(); to != Elements.end(); it++) it->Nacrtaj(); ... )

Načelo je stvoriti prozor i priložiti mu elemente korisničkog sučelja, te pozvati metode crtanja i ažuriranja iz njihovih odgovarajućih glavnih funkcija.

Još mi ništa ne radi, jer imam problema s kodom za crtanje. Uz razne API-je na PC-u i PSP-u, gledam omotni kod za OpenGL i psp gu.

Nadam se da ovo pomaže.

0

Jedna korisna strategija koju treba imati na umu mogao bi biti složeni uzorak. Na niskoj razini, može vam omogućiti lakše rukovanje svim GUI objektima (i zbirkama objekata) nakon što su stvoreni. Ali ne znam što je povezano s GUI dizajnom, pa je jedno mjesto za pronalaženje opće inspiracije u izvornom kodu postojećeg projekta. WxWidgets je višeplatformski GUI s dostupnim izvornim kodom. Sretno s vašim projektom!

0

3

Za one zainteresirane, evo mog open source GUI alata za DS s BSD licencom:

Subject2k-ov odgovor je prilično dobar, ali bih ozbiljno preporučio da imate kod koji sadrži podređene elemente sučelja u osnovnoj klasi uiElement. Ovo je obrazac koji sam slijedio u Woopsieju.

Ako ti ne podržavajući to u osnovnoj klasi, naići ćete na ozbiljne probleme kada pokušavate implementirati nešto složenije od okvira za tekst i gumba. Na primjer:

  • Trake tablice mogu se modelirati kao više gumba grupiranih pod jednim nadređenim elementom korisničkog sučelja koji pruža međusobnu isključivost odabira;
  • Grupe radija (s vremenom);
  • Trake za pomicanje mogu se predstaviti kao klizač/element žlijeba i gumb gore/dolje;
  • Popisi za pomicanje mogu se predstaviti kao spremnik i nekoliko elemenata korisničkog sučelja.

Također, vrijedi zapamtiti da DS ima procesor od 66 MHz i 4 MB RAM-a, koji se koristi i za pohranu vašeg programa i za njegovo izvršavanje (DS diskovi se učitavaju u RAM prije pokretanja). Stvarno biste ga trebali smatrati ugrađenim sustavom, što znači da ne postoji STL. Uklonio sam STL iz Woopsija i uspio uštedjeti 0,5 MB. Nije mnogo prema standardima desktopa, ali to je 1/8 ukupne dostupne DS memorije koju troši STL smeće.

Na svom blogu detaljno opisujem cijeli proces pisanja korisničkog sučelja:

Uključuje opis dva algoritma koja sam smislio za ponovno crtanje zaslona, ​​što je lukav dio stvaranja GUI-a (jedan samo razbija pravokutnike i pamti vidljiva područja, a drugi koristi BSP stabla, što je puno učinkovitije i lakše za razumjeti), savjete za optimizaciju, itd. d.

Napomena: Proučavamo widgete - vizualne elemente koji čine grafičko korisničko sučelje, njihov izgled, politiku veličine, veze signal-utor, elemente grafičkog sučelja i njihovu upotrebu.

13.1 Widgeti

Widgeti su vizualni elementi koji čine grafičko korisničko sučelje.

Primjeri widgeta:

  • Gumb (klasa QPushButton);
  • Oznaka (klasa QLabel);
  • Polje za unos (klasa QLineEdit);
  • Polje brojčanog brojača (klasa QSpinBox);
  • Traka za pomicanje (klasa QScrollBar).

Qt ima oko 50 gotovih klasa grafičkih elemenata dostupnih za korištenje. Roditeljska klasa za sve widgete je klasa QWidget. Od njega su naslijeđena sva glavna svojstva vizualnih elemenata, što ćemo pažljivo razmotriti. Počnimo istraživati ​​načine za razvoj programa s grafičkim sučeljem s primjerom.

Kreirajmo praznu projektnu datoteku. Pokrenite čarobnjak za projekte i odaberite u odjeljku Projekti (Projekti) stavku Drugi projekt. Zatim odaberite vrstu projekta. Prazan Qt projekt. Dodajte sljedeći sadržaj u projektnu datoteku:

TEMPLATE = app #Qt moduli koristit ćemo QT += widgets #Add widgets modul za rad s widgetima (potrebno za Qt5). TARGET = widget#Naziv izvršnog SOURCES += \ main.cpp

Sada napravimo jednostavan program s prozorom u kojem ćemo prikazati natpis. Postavite veličinu prozora i tekst njegovog naslova, kao i font za naslov. Da bismo to učinili, napravimo datoteku main.cpp sa sljedećim sadržajem:

#uključiti #uključiti int main (int lArgc, char * lArgv ) ( // Stvaranje objekta QApplication koji inicijalizira i konfigurira program prozora, // kontrolira njegovo izvođenje pomoću petlje događaja QApplication lApplication (lArgc, lArgv); QLabel lLabel; // Kreirajte QLabel widget - oznaka lLabel.setText ("Ja sam widget!"); //Postavite tekst za oznaku lLabel.setGeometry(200, 200, 300, 150); //Postavite dimenzije - položaj (x, y) širinu i visinu . Postavite tekst poravnanja lLabel.setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); //Klasa QFont se koristi za postavljanje parametara fonta. //Odaberite obitelj fontova Arial Black i veličinu 12. QFont lBlackFont(" Arial Black " , 12); lLabel. setFont(lBlackFont); //Postavite font za oznaku lLabel.show(); //Pozovite metodu show() za prikaz oznake na ekranu vrati lApplication.exec(); //Pokreni program za izvršavanje exec() izvršava //rukovanje događajima petlje - Program čeka na radnje korisnika i obavlja njihovu obradu.)

Kao što možete vidjeti, elementi koji čine sučelja u Qt-u imaju svoj položaj i veličinu - takozvanu "geometriju" - i tako zauzimaju odgovarajuće pravokutno područje na ekranu (vidi sliku 13.1). Također, svaki od elemenata ima postavke koje određuju njegovo ponašanje i izgled.


Riža. 13.1.

Za stvaranje strukture, widgeti su organizirani u hijerarhiju prema principu "dio - cjelina". Svaki od widgeta može sadržavati druge widgete. Takav vizualni element postaje "roditelj" (roditeljski widget) elemenata koje sadrži. Imajte na umu da takve odnose ne treba miješati s nasljeđivanjem u C++, odnosima između klasa u programu. Odnosi između widgeta su odnosi između objekata. Ovaj odnos ima nekoliko implikacija:

  • roditeljski element bit će odgovoran za brisanje podređenog elementa: ako se roditeljski widget izbriše, automatski će izbrisati sve podređene elemente;
  • roditeljski widget postavlja podređene widgete unutar sebe, dijelovi podređenih widgeta koji izlaze izvan nadređenog bit će nevidljivi;
  • dio stanja roditeljskog widgeta prosljeđuje se podređenim - to se odnosi na neka svojstva (vidljivost, aktivnost) i stilove koji se primjenjuju na vizualni element.

Widgeti koji nemaju nadređeni (widgeti najviše razine) pojavljuju se kao zasebni prozori u programu. Razmotrimo primjer. Nazovimo novi projekt ParentExample. Datoteka projekta sadržavat će uobičajene postavke za GUI projekt:

TEMPLATE = app TARGET = ParentExample QT += widgeti

Za widget koji ćemo koristiti kao glavni prozor, kreirat ćemo novu klasu. Za ovu kategoriju Datoteke i klase (Datoteke i klase) odaberite odjeljak C++ i odaberite C++ klasu (vidi sliku 13.2).

Sljedeći korak je stvaranje nekih elemenata na prozoru. Da biste to učinili, otvorite datoteku parentwidget.cpp i promijenite kod konstruktora klase. Za prikaz elemenata dovoljno ih je kreirati u konstruktoru klase i postaviti ParentWidget kao njihovog oca. Parentwidget.cpp kod izgleda ovako:

#include "parentwidget.h" #include #uključiti #uključiti ParentWidget::ParentWidget (QWidget * roditelj) : QWidget (roditelj) ( //Kreirajte oznaku, navodeći roditeljski widget - ovo, to jest, instancu klase ParentWidget. QLabel * lLabel=novi QLabel (ovo); // Položaj u odnosu na gornji lijevi kut roditeljskog widgeta lLabel ->setGeometry(50, 0, 100, 30); lLabel ->setText("TextLabel"); //Tekst na naljepnici. //Napravi gumb, postavi roditelj , geometrija i tekst QPushButton * lPushButton = novi QPushButton (ovo); lPushButton->setGeometry (50, 50, 100, 30); lPushButton->setText (" PushButton "); // Postavite "pa polje za unos" , geometrija i tekst QLineEdit * lLineEdit = new QLineEdit (ovo); lLineEdit ->setGeometry(50, 100, 100, 30); lLineEdit ->setText("LineEdit"); lLineEdit ->selectAll(); //Odaberi tekst u polju za unos (samo na primjer) //Konačno promijenite veličinu roditeljskog widgeta setGeometry (x (), y (), 300, 150); //i postavite tekst naslova prozora setWindowTitle (" roditelj widgetExample "); )

Budući da je roditeljski element ParentWidget, oznaka (QLabel), gumb (QPushButton) i tekstualno polje (QLineEdit) su unutar njega. Položaj podređenih widgeta postavlja se u odnosu na gornji lijevi kut roditelja. To se lako može provjeriti promjenom veličine i položaja prozora našeg programa. Primijetite kako smo kreirali elemente korisničkog sučelja u memoriji hrpe pomoću novog operatora. Time se osigurava da se elementi ne uklanjaju nakon dovršetka konstruktora ParentWidget.

Odmah ću rezervirati da je C++ moj omiljeni jezik, pišem njime gotovo "od djetinjstva" i neću poreći njegovu važnost kao najboljeg jednog od najboljih jezika ​​​programe za bilo koju namjenu. Štoviše, ne vidim razloga za pokretanje još jednog holivara ili mjerenje "pokazivača". Ovaj članak je samo opis lošeg iskustva s jezikom, objašnjavajući neke njegove aspekte, čije će poznavanje pomoći drugim programerima u budućnosti.

Jednog dana naišao sam na biblioteku razreda GUI u razvoju. Sa stajališta C++-a, točnije njegovih klasa, instanci i hijerarhija, ovaj jezik se čini nevjerojatno blizak konceptu GUI kontrole, posebno elementima kao što su widgeti, prozori klasa i podprozori. OO modeli C++-a i prozorskog sustava su, međutim, različiti. C++ je trebao biti "statičan" jezik s opsegom tokena, statičkom provjerom tipa i hijerarhijama definiranim u vremenu prevođenja. Prozori i njihovi objekti su, s druge strane, dinamične prirode, obično žive izvan jedne procedure ili bloka kojim su stvoreni; Hijerarhije widgeta uvelike su definirane izgledom, vidljivošću i tokovima događaja. Osnove grafičkog korisničkog sučelja, kao što su dinamičke i geometrijske hijerarhije prozora i kontrola, te tijek događaja, nisu izravno podržane C++ sintaksom ili njenom semantikom. Stoga se ove funkcije moraju replicirati u C++ GUI kodu. To dovodi do dupliciranja grafičkog alata ili funkcionalnosti upravitelja prozora, kod postaje "napuhan", prisiljeni smo napustiti mnoge "jake" značajke C ++ (na primjer, provjeru tipa u vrijeme kompilacije). Članak daje neke jednostavne primjere C++/GUI "nepodudaranja".

Nemojte stvarati konstruktore (ili ih barem nemojte koristiti)

Kada izvedena klasa nadjača virtualnu metodu roditeljske klase, imajte na umu da nadjačavanje ne stupa na snagu dok se konstruktor osnovne klase izvršava. Ovo je posebno neugodno kada objekti traže widgete koji odgovaraju na GUI događaje. Pretpostavimo da je klasa Osnovni_Prozor bio je namijenjen za stvaranje vanile crno-bijelog prozora na ekranu:

ClassBasic_Window(
javnost:
Basic_Window(Rect rect) (gt_create_window(rect,visible, this); )
virtualna void handle_create_event() (set_background(WHITE); )
};

Ovdje gt_create_window() odgovoran je za poziv niske razine glavnog grafičkog alata (na primjer, xvt_win_create()). Ova funkcija dodjeljuje prostor za podatke instrumentacije, obavještava upravitelja prozora, registrira taj objekt kao slušatelja događaja i u gornjem primjeru inicijalizira grafički izlaz u prozor na ekranu.
Pretpostavimo da želimo instancirati Osnovni_Prozor, ali s crvenom pozadinom. Obično, da biste promijenili ponašanje klase, morate izdvojiti iz nje i nadjačati odgovarajuće virtualne metode. Pišemo:

Klasa RedWindow: javni Basic_Window(
virtualna void handle_create_event() (set_background(RED); )
javnost:
RedWindow(Rect rect) : Basic_Window(Rect rect) ()
};
redWindow crveni_prozor(default_rect);

Ali crveni_prozor pojavit će se bijelo, a ne crveno! Stvoriti Crveni prozor, prvo se mora kreirati nadređeni objekt. Nakon završetka Osnovni_Prozor::Osnovni_Prozor(), virtualne tablice Crveni prozor stupiti na snagu, metoda handle_create_event() postaje nevažeći, a konstruktor crveni prozor() izvedena. Konstruktor osnovni_prozor() registrira objekt grafičkog alata koji odmah počinje slati događaje objektu (npr. CREATE događaj). Konstruktor osnovni_prozor() još nije dovršeno (nije zajamčeno), tako da nadjačana virtualna metoda još nije na mjestu. Tako će se obrađivati ​​događaj CREATE Basic_Window::handle_create_event(). Virtualni stolovi Crveni prozor klase će se kreirati samo kada je osnovna klasa u potpunosti izgrađena, odnosno kada je prozor već na ekranu. Promjena boje prozora u ovoj fazi dovest će do neugodne pogreške.

Postoji jednostavno rješenje: spriječite svaki konstruktor da registrira objekt GUI alata. Rukovanje događajima bit će strukturirano tako da zadrži kraj inicijalizacije izvedenim klasama. Vrlo je primamljivo misliti o widgetima na zaslonu kao o "licu" GUI objekta aplikacije u memoriji. Kao što gornji primjer pokazuje, ovu vezu između ekrana i C++ objekta nije tako lako implementirati: oni se rađaju odvojeno.

Nema sintaktičkih sredstava za prebacivanje događaja

Pretpostavimo da biblioteka klasa uključuje GUI klase PictWindow koji prikazuje fotografiju u prozoru:

Class PictWindow(
slika slika;
javnost:
virtualna void repaint() (gt_draw_pict(slika);)
...
};

Željeli bismo prekriti mali pravokutnik u određenom području slike. U tu svrhu možemo pokušati podklasu PictWindow:


Rectect;
virtualna void repaint() (gt_draw_rect(rect); )
};

Nažalost, kada instanciramo OvWindow, vidjet ćemo samo pravokutnik u praznom prozoru, a ne sliku. Od trenutka kada se OvWindow::repaint() redefinira PictWindow::repaint(), posljednja funkcija neće biti pozvana kada će se prozor nacrtati. Morali smo implementirati OvWindow Tako:

Klasa OvWindow: javni PictWindow(
Rectect;
virtualna void repaint() ( PictWindow::repaint(); gt_draw_rect(rect); )
javnost:
OvWindow(void) : PictWindow()()
};

Konstruktor OvWindow nastojao naglasiti da je metoda OvWindow::repaint() mora biti odgođen na superklasu, kao što to čine konstruktori. Doista, konstruktor izvedenog objekta od početka poziva konstruktor odgovarajućeg objekta. repaint() treba odgoditi na njegovu roditeljsku: metodu u osnovnoj klasi koja je nadjača.

Zaključak: Loša kompatibilnost s C++ / GUI

C++ je dizajniran da bude "statičan" jezik:

  • s praćenjem tokena
  • statička provjera tipa
  • sa statičnim hijerarhijama klasa
  • nema odvoza smeća
  • sa sustavom poruka bez definiranih hijerarhija u vremenu prevođenja

GUI objekti:

  • karakteriziraju dinamični objekti, a često i jedini takve vrste
  • imaju tendenciju živjeti daleko izvan granica u kojima su stvorene
  • hijerarhije su u velikoj mjeri određene tijekom događaja i njihovom lokacijom, a ne nasljeđivanjem klasa
  • hijerarhije se izgrađuju i uništavaju tijekom izvođenja, često kao odgovor na nepredvidive radnje korisnika

C++ nije dizajniran da podržava dinamičku sigurnost za razmjenu poruka i prijenose (osim iznimaka). Sve to dovodi do dupliciranja grafičkih alata i funkcionalnosti upravitelja prozora, širenja koda, korištenja nesigurnih funkcija i napuštanja mnogih prednosti C++-a.

zaključke

Naravno, sve te „švrge“ nisu kobne. C++ je svestran i moćan jezik i stoga sposoban izraziti sve moguće algoritme izračuna. Stoga, ako aplikacija zahtijeva dinamičke značajke poput onih u tcl/tk, Shema/Tk, postscript i slično; koristeći C++, uvijek možete učiniti nešto poput njih. S druge strane, zašto ne koristiti jezik u kojem su prisutne sve ove značajke?

C++ je jedan od najmoćnijih i najtraženijih programskih jezika. Stotine aplikacija su napisane na njemu svaki dan, često koristeći GUI. Međutim, rad s grafikom nije uvijek prikladan za programera - u ovom slučaju koriste se gotove grafičke biblioteke. Oni će razvoj grafičkog dijela aplikacija učiniti što bržim i praktičnijim.

SFML

Qt

Knjižnica za više platformi Cocos2D-X dizajnirana je da pojednostavi razvoj mobilnih igara. Podržava sve iste platforme kao Qt. Među prednostima vrijedi istaknuti dostupnost, jednostavnost korištenja i stvaranje zasebnog dizajnera igara na temelju biblioteke Cocos Creator. Popis igara baziranih na motoru uključuje svjetski poznati BADLAND koji radi na svim dostupnim platformama.

Nešto drugo

Ako pri izradi igre trebate raditi s grafikom i animacijom u velikim količinama, onda je bolje koristiti Unity umjesto Cocos2D-X. Unity ima mogućnost besprijekorne integracije s alatima kao što su Photoshop, Maya ili Blender. U Cocos2D-X, sva grafika se dodaje izvana i referencira iz koda.

U Runetu nema lekcija o ovoj biblioteci, ali postoji izvrstan tečaj engleskog od programera.

Sok

Možda jedna od najpoznatijih grafičkih biblioteka. GTK+ je grafički okvir koji se široko koristi u mnogim sustavima. Izvorno je zamišljen kao komponenta GIMP-a, ali tijekom 20 godina od objavljivanja prve stabilne verzije, našao je upotrebu u stotinama drugih aplikacija.

Sada je GTK + punopravni grafički okvir koji nije inferioran u odnosu na isti QT. Podržava različite programske jezike i nastavlja se razvijati.

Nešto drugo

Svojedobno je knjižnica stvorena kao alternativa Qt-u, koji se plaćao. GTK+ je jedan od rijetkih okvira koji podržava jezik C. Knjižnica je višeplatformska, ali postoji mišljenje da programi na Linuxu izgledaju izvornije nego na Windowsima ili Macu (GTK+ je dobro podržan čak i na KDE-u). Zanimljivo je da je zbog nekih problema s više platformi Wireshark prešao na Qt.

Primjer prvog programa može se vidjeti na Wikipediji.

Ostale zanimljive članke o C++-u možete pronaći ovdje.

Zaključak

Gore su najpopularnije tehnologije za rad s GUI-ima, ne samo u C++, već ponekad i na drugim jezicima (na primjer, Qt i GTK+). Međutim, uvijek biste trebali uzeti u obzir značajke određene tehnologije. Napišite popis značajki svoje aplikacije, ponovno pročitajte opise svih knjižnica i okvira i tek onda odaberite ono što stvarno najviše odgovara projektu.

Ministarstvo obrazovanja i znanosti Ruske Federacije

Federalna državna proračunska obrazovna ustanova

visokom stručnom obrazovanju

„UFA DRŽAVNA NAFTA

TEHNIČKO SVEUČILIŠTE"

Zavod za računalstvo i inženjersku kibernetiku

Izrada GUI aplikacije u Microsoft Visual Studio 2010

Nastavno pomagalo

za laboratorijsku i praktičnu nastavu

sa studentima smjera

230100 (09.03.01) "Informatika i računalno inženjerstvo"

Nastavno pomagalo daje teorijske podatke, zadatke za praktičan i laboratorijski rad iz kolegija "Programiranje".

Priručnik je namijenjen nastavnicima discipline, kao i studentima smjera: 230100 "Informatika i računalno inženjerstvo".

Sastavio: Gabdullina A.A., Art. predavač na katedri VTIK

Druzhinskaya E.V., Art. predavač na katedri VTIK

Recenzent: dr. Filippov V.N., izvanredni profesor Odjela. VTIK.

1. Teoretski podaci 4

1.1. Osnovni pojmovi 4

1.2. Uvod u aplikaciju Windows Form u Microsoft Visual Studio 2010 4

1.3. Kontrolni obrazac 7

1.5. MessageBox 9 funkcija

1.6. Kontrola tekstualnog okvira 10

2.Praktični zadatak. Uvod u aplikaciju Windows Form u Microsoft Visual Studio 2010 12

2.1. Struktura ocjenjivanja za obavljeni rad 12

2.2. Postupak izvođenja praktičnog rada 12

3. Laboratorijski rad. Razvoj aplikacija u Microsoft Visual Studio 2010 16

3.1. Laboratorijski nalog 16

3.2. Zadatak 1. Tablica funkcije i izračunavanje njezinih vrijednosti u navedenom intervalu sa zadanim korakom 16

3.3. Individualni zadaci 19

3.4. Zadatak 2. Obrada dvodimenzionalnih nizova 21

3.5. Individualni zadaci 27

  1. Teoretske informacije

  1. 1.1. Osnovni koncepti

Automatizaciju informacijskih procesa trenutno predstavlja, prije svega, razvoj softverske aplikacije s grafičkim korisničkim sučeljem (GUI) koja upravlja tokovima podataka.

Grafičko korisničko sučelje (GUI) je sustav sredstava za interakciju korisnika s uređajem, koji se temelji na prezentaciji svih objekata i funkcija sustava dostupnih korisniku u obliku grafičkih komponenti ekrana (prozori, gumbi, trake za pomicanje itd.) .

Najčešće se elementi sučelja u GUI-u implementiraju na temelju metafora i prikazuju njihovu namjenu i svojstva, što nespremnim korisnicima olakšava razumijevanje i savladavanje programa. Dakle, rad korisnika se obavlja sa zaslonskim obrascima koji sadrže kontrolne objekte i alatnim trakama s akcijskim gumbima za obradu.

Standardno grafičko korisničko sučelje mora ispunjavati niz zahtjeva:

Održavati informacijsku tehnologiju rada korisnika sa programskim proizvodom;

Fokus na krajnjeg korisnika koji komunicira s programom na vanjskoj razini interakcije;

Zadovoljite princip "šest", kada u jednu traku izbornika nije uključeno više od 6 koncepata, od kojih svaki ne sadrži više od 6 opcija;

    održavati standardiziranu namjenu grafičkih objekata i, ako je moguće, njihov položaj na ekranu.

U objektno orijentiranom programiranju bavimo se klasama i objektima. Objekti su složeni tipovi podataka: oni kombiniraju više vrijednosti u jednu jedinicu i omogućuju nam da zapišemo i pohranimo te vrijednosti po imenu. Drugim riječima, objekt je neuređena zbirka svojstava, od kojih svako ima ime i vrijednost. Imenovane vrijednosti sadržane u objektu mogu biti ili elementarne vrste, kao što su brojevi ili nizovi, ili drugi objekti.

Prilikom razvoja nekonzolnih aplikacija, glavni koncept je Obrazac.

Obrazac je spremnik za hosting kontrola okoline dizajna.

Svojstva - mogućnost pristupa informacijama pohranjenim u ovom elementu.

Metode su skup radnji koje objekt može izvesti.

Događaj je radnja koju objekt prepoznaje (na primjer, klik mišem, pritisak tipke), za koju se može programirati odgovor, tj. odgovor objekta na događaj.

Vrhunski povezani članci