ZH mintapélda. Feladat. Felület

Hasonló dokumentumok
Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Collections. Összetett adatstruktúrák

Java Programozás 11. Ea: MVC modell

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Programozási technológia

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Programozási nyelvek Java

Access adatbázis elérése OLE DB-n keresztül

JAVA PROGRAMOZÁS 3.ELŐADÁS

Felhasználó által definiált adattípus

és az instanceof operátor

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Programozási nyelvek II.: JAVA

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Szoftvertechnolo gia gyakorlat

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Java Programozás 3. Gy: Java GUI. Swing, AWT

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Tervminták a valósidejű gyakorlatban

VI. Grafikus Java alkalmazások

Programozási nyelvek II.: JAVA, 11. gyakorlat

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Objektumorientált programozás Java-ban

OOP: Java 8.Gy: Gyakorlás

Java és web programozás

Reader /Writer InputStreamReader, OutputStreamWriter

Eseménykezelés Java környezetben, AWT alapok

Programozás II. labor

Adatbázis-kezelés ODBC driverrel

Java és web programozás

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

A Java nyelv. VI. Adatbázis-kezelés Javaban, Példaprogram Az elôzô részben láthattuk, hogy a Java ideális programozási nyelv perszisztens objektumok

Java felhasználói felület

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Java programozási nyelv 8. rész Grafikus felhasználói felület

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Segédanyag: Java alkalmazások gyakorlat

Programozási nyelvek Java

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

PHP5 Új generáció (2. rész)

Algoritmusok és adatszerkezetek II.

C#, OOP. Osztályok tervezése C#-ban

Magas szintű programozási nyelvek 2 Előadás jegyzet

Abstract osztályok és interface-ek. 7-dik gyakorlat

Programozási nyelvek II.: JAVA

Java és web programozás

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Segédanyag: Java alkalmazások gyakorlat

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

INFORMATIKAI ALAPISMERETEK

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Java programozási nyelv 5. rész Osztályok III.

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Szoftvertechnológia alapjai Java előadások

A feladatok megoldásához felhasználandó osztályok leírásait az alábbi URL-en találja meg:

3. Osztályok II. Programozás II

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Delegátumok C#-ban Krizsán Zoltán iit

II. labor Az alábbi osztálydiagram (2.10 ábra) alapján hozzuk létre a diagramban feltüntetett csomagokat, interfészt és osztályokat.

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Java és web programozás

Swing. (A javax.swing csomag)

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

I. 288.: Utcai WiFi térkép

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

JAVA PROGRAMOZÁS 2.ELŐADÁS

Tartalomjegyzék. Bevezetés...2

Programozási nyelvek Java

Szoftvertechnológia alapjai Java előadások

Elemi adatszerkezetek

OOP: Java 7.Gy: Öröklődés, referenciák

OOP: Java 4.Gy: Java osztályok

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Web-technológia PHP-vel

Generikus osztályok, gyűjtemények és algoritmusok

Segédanyag: Java alkalmazások gyakorlat

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

Tömbök, kollekciók és egyéb alaposztályok

.Net adatstruktúrák. Készítette: Major Péter

7. K: JAVA alapok Konzultáció

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

Objektumorientált programozás C# nyelven

C# osztályok. Krizsán Zoltán

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

C# feladatok gyűjteménye

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Átírás:

ZH mintapélda Feladat Írjon Java alkalmazást, amely képes hallgatók rekordjaittárolni és azokat különbözo rendezo kulcsok szerint sorba rendezni. A program grafikus felhasználói felületén keresztül új rekordokat lehet felvenni, illetve a korábban bevitt rekordokat lehet megjeleníteni. A Save gomb megnyomásakor a kitöltött mezoket elmentjük egy láncolt listában. Az elozo rekordot a Previous, a soron következot pedig a Next gomb megnyomásával tudjuk megnézni. A Sort by Name és a Sort by Code gombokkal a lista elemeit lehet ABC sorrendbe rendezni név, illetve kód szerint. A programot a Model-View Controller paradigma szabályai szerint tervezze meg. Törekedjen arra, hogy a program rugalmasan bovítheto legyen (például a rekordokat ki lehessen egészíteni a lakcímmel, születési dátummal, stb.) A különbözo kulcsok szerint elvégezheto rendezést implementálja a rekordok összességét reprezentáló objektum stratégiájaként. 2 / 17 Felület 3 / 17

View public class View extends Frame Control control; TextField nametextfield, codetextfield; Button prevbutton, nextbutton, savebutton, sortbynamebutton, sortbycodebutton; void display(model model) { if(model.endoflist()) { nametextfield.settext (""); codetextfield.settext (""); return; String name = model.getname(); if(name!= null) nametextfield.settext(name ); else nametextfield.settext (""); String code = model.getcode (); if(code!= null) codetextfield.settext(code); else codetextfield.settext (""); public String getnamefield () { return nametextfield.gettext (); public String getcodefield() { return codetextfield.gettext (); public View(Control c) { 4 / 17 View konstruktora public View(Control c) { control = c; setlayout(new BorderLayout()); Panel panelnorth= new Panel(); add("north", panelnorth); Panel panelcenter = new Panel(); add("center", panelcenter); Panel panelsouth = new Panel(); add("south", panelsouth); panelnorth.add(new Label("Name:")); panelnorth.add(nametextfield= new TextField("", 30)); panelcenter.add(new Label("Code:")); panelcenter.add(codetextfield= new TextField("", 6)); panelsouth.add(savebutton = new Button("Save")); panelsouth.add(prevbutton= new Button("Previous")); panelsouth.add(nextbutton= new Button("Next")); panelsouth.add(sortbynamebutton= new Button("Sort by Name")); panelsouth.add(sortbycodebutton = new Button("Sort by Code")); // eseményfigyelok regisztr álása... pack(); show(); 5 / 17 Eseményfigyelok regisztrálása public View(Control c) { control = c; savebutton.addactionlistener(control.getsavelistener()); prevbutton.addactionlistener(control.getprevlistener()); nextbutton.addactionlistener(control.getnextlistener()); sortbynamebutton.addactionlistener( control.getsortbynamelistener()); sortbycodebutton.addactionlistener( control.getsortbycodelistener()); addwindowlistener(control.getwindowlistener()); pack(); show(); 6 / 17

Controller public class Control { View view; Model model; ActionListenersaveListener, prevlistener, nextlistener, sortbynamelistener, sortbycodelistener; WindowListener windowlistener; public Control() { model = new Model(); savelistener = new ActionListener() { public void actionperformed(actionevent e){ model.save(view.getnamefield(), view.getcodefield()); ; prevlistener = new ActionListener() { public void actionperformed(actionevent e){ model.prev(); view.display(model); ; nextlistener = new ActionListener() { public void actionperformed(actionevent e){ model.next(); view.display(model); ; sortbynamelistener = new ActionListener() { public void actionperformed(actionevent e){ model.sortbyname(); ; sortbycodelistener = new ActionListener() { public void actionperformed(actionevent e){ model.sortbycode(); ; windowlistener = new WindowAdapter() { public void windowclosing(windowevent e){ System.exit(0); ; view = new View(this); // public static void main (String[] args) { new Control(); 7 / 17 Controller public class Control { View view; Model model; // public ActionListener getsavelistener() { return savelistener; public ActionListener getprevlistener() { return prevlistener; public ActionListener getnextlistener() { return nextlistener; public ActionListener getsortbynamelistener() { return sortbynamelistener; public ActionListener getsortbycodelistener() { return sortbycodelistener; public WindowListener getwindowlistener() { return windowlistener; public static void main (String[] args) { new Control(); 8 / 17 Stratégia alkalmazása Az objektumok viselkedésének egy bizonyos aspektusát függetlenül akarjuk kezelni: nem csak egy osztály, hanem egy osztályhierarchia viselkedését akarjuk variálni (kombinatorikus robbanás elkerülése) egy adott viselkedést leíró kód egységbe zárása az eredeti osztály egyszerusítése azáltal, hogy a viselkedés egy aspektusa jól elkülönül egy interfészen keresztül 9 / 17

Felelosségek és együttmuködés Környezet környezetinterfész() Stratégia algoritmusinterfész() KonkrétStratégiaA algoritmusinterfész() KonkrétStratégiaB algoritmusinterfész() 10 / 17 Felelosségek és együttmuködés Stratégia definiálja a viselkedési variációk közös interfészét KonkrétStratégia megvalósít egy konkrét viselkedési variációt Környezet viselkedésének egy részét a KonkrétStratégia objektummal együttmuködve határozza meg a kommunikáció a Stratégia interfészen keresztül történik átadja a variáció megvalósításához szükséges adatokat, vagy a saját referenciáját a KonkrétStratégia objektumnak 11 / 17 Adaptáció a feladathoz Model LinkedList list SortingStrategy int compare(student, Student) SortingByName int compare(student, Student) SortingByCode int compare(student, Student) 12 / 17

Rendezés mint stratégia interface SortingStrategy { int compare(student s1, Student s2); class SortingByName implements SortingStrategy { public int compare(student s1, Student s2) { return s1.name.compareto(s2.name); class SortingByCode implements SortingStrategy { public int compare(student s1, Student s2) { return s1.code.compareto(s2.code); 13 / 17 Iterátor használata Kliens hasnext() next() remove() ListIterator List listiterator() LinkedList.Itr hasnext() next() remove() LinkedList listiterator() 14 / 17 Model public class Model { SortingStrategy sortingstrategy; class Student implements Comparable{ String name, code; public Student(String n, String c) { name = n; code = c; public int compareto(object object) { return sortingstrategy.compare(this, (Student)object); List list; ListIteratoriterator; Student current = null; public Model() { list = new LinkedList(); iterator = list.listiterator(); public String getname() { if(current!= null) return current.name; return null; public String getcode() { if(current!= null) return current.code; return null; // 15 / 17

Model public class Model { SortingStrategysortingStrategy; public boolean prev() { if(iterator.hasprevious()) { current = ( Student)iterator.previous(); return true; current = null; return false; public boolean next() { if(iterator.hasnext()) { current = ( Student)iterator.next(); return true; current = null; return false; public boolean endoflist() { if(current == null) return true; return false; public void sortbyname() { sortingstrategy= new SortingByName(); Collections.sort(list); public void sortbycode() { sortingstrategy= new SortingByCode(); Collections.sort(list); public void save(string n, String c) { iterator.add(new Student(n, c)); 16 / 17 Comparator interfész interface Comparator { intcompare(objecto1, Object o2); boolean equals(object obj); Rendezés a komparátor objektummal: Collections.sort(List list, Comparator c) ; 17 / 17