Programozási technológia

Hasonló dokumentumok
Programozási Technológia előadás bevezetés. Előadó: Lengyel Zsolt

Programozási technológia

Bevezetés. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr. Szendrei Rudolf. Információk.

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

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

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

OOP: Java 8.Gy: Gyakorlás

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

4. Gy: JAVA osztályok

OOP: Java 4.Gy: Java osztályok

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

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

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

OOP: Java 5.Gy: Osztály, referencia, konstruktor

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

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozási nyelvek Java

és az instanceof operátor

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

Osztályok. 4. gyakorlat

Programozási nyelvek Java

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

Collections. Összetett adatstruktúrák

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Szoftvertechnolo gia gyakorlat

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

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

7. K: JAVA alapok Konzultáció

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

Java és web programozás

Programozás I. Első ZH segédlet

Objektum Orientált Programozás. 6. JAVA öröklődés 30/1B IT MAN

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

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

Adatszerkezetek és algoritmusok

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozási nyelvek II.: JAVA

Java és web programozás

Reader /Writer InputStreamReader, OutputStreamWriter

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.

Globális operátor overloading

OOP: Java 1.Gy: Java alapok

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

BME MOGI Gépészeti informatika 8.

JAVA PROGRAMOZÁS 2.ELŐADÁS

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Bevezetés. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Szendrei Rudolf. Bevezetés. Szoftvertechnológia

Programozási nyelvek Java

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

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

Kalapácsvetés 2016 szöveges

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

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

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

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?

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

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

Elemi Alkalmazások Fejlesztése II.

INFORMATIKAI ALAPISMERETEK

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

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

Java programozási nyelv 6. rész Java a gyakorlatban

1. Egyszerű (primitív) típusok. 2. Referencia típusok

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.

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

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

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozási nyelvek II.: JAVA

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Java programozási nyelv

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

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Osztálytervezés és implementációs ajánlások

ISA szimulátor objektum-orientált modell (C++)

Osztálytervezés és implementációs ajánlások

OOP: Java 1.Gy: Java alapok

Objektumelvű programozás

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Segédanyag: Java alkalmazások gyakorlat

Objektumorientált programozás C# nyelven

Programozási nyelvek Java

Java I. A Java programozási nyelv

A Java programozási nyelv

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

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

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java gyakorlatok. Tartalomjegyzék

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

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

OOP #14 (referencia-elv)

Programozási technológia

Átírás:

Programozási technológia Bevezetés Dr. Szendrei Rudolf ELTE Informatikai Kar 2018.

Információk Képzés Programtervező Informatikus BSc, nappali tagozat, C szakirány Tárgykód: IP-17cPROGT1EG Előfeltétel (erős): Programozás tárgy (-2018) Objektumelvű programozás (2019-) Kreditszám: 5 Cél: 2 óra előadás 2 óra gyakorlat 1 óra konzultáció Eseményvezérelt alkalmazások készítése JAVA nyelven 2

Információk Számonkérés Gyakorlati jegy alapján megszerezhető vizsgajegy (összevont számonkérés) 3 db beadandó feladat bemutatása dokumentációval, határidőre Csak a kitűzött feladatot megoldó, önállóan megvalósított, hibátlanul működő, letesztelt program fogadható el. 3

Információk Elérhetőségek: Honlap: https://swap.web.elte.hu/ E-mail: swap@inf.elte.hu Személyesen: Déli épület, 2.602 4

Objektumorientált tervezés Ismétlés Nem a funkciókból, tevékenységekből indulunk ki, hanem az adatokból, a feladatban részt vevő elemekből. Ezeket azonosítjuk, csoportosítjuk, felderítjük a kapcsolataikat, felelősségeiket. Így jönnek létre az objektumok, illetve az osztályok. A rendszer funkcionalitását az egymással együttműködő objektumok összessége adja ki. Egy objektum csak egy jól meghatározott részért felelős. Az objektumok adatot tárolnak, ezek kezeléséért felelősek, de ezeket elrejthetik a külvilág elől. Szabványos módon lehet az objektumokkal kapcsolatba lépni. 5

Feladat Készítsünk egy alkalmazottak tárolására használható osztályt. Az alkalmazottakról a következőket tudjuk: vezetéknév, keresztnév, beosztás, fizetés. A szükséges lekérdező műveleteken kívül legyen lehetőség az alkalmazott fizetésének növelésére. 6

Megoldás package company; public class Employee { private String firstname, lastname; private String job; private int salary;... Változó láthatósága más osztályok felé: public mindenki számára látható kívülről protected csak a származtatott osztályaiban látható private csak ebben az osztályban látható 7

Megoldás package company; public class Employee { private String firstname, lastname; private String job; private int... salary; Osztály láthatósága más csomagban lévő osztályok számára: public bárhol elérhető az osztály - csak a saját csomagjában lévő osztályok számára látható (package private) 8

Megoldás package company; public class Employee {... public String getfirstname(){ return firstname; public String getlastname(){ return lastname; public int getsalary(){ return salary; public String getjob(){ return job;... boolean getter metódus neve: Egyéb getter metódus neve: Setter metódus neve: is + változónév get + változónév set + változónév 9

Megoldás public class Employee {... public Employee(String firstname, String lastname, int salary, String job) { this.firstname = firstname; this.lastname = lastname; this.salary = salary; this.job = job; Java-ban nincsenek pointerek, csak referenciák. Az objektum a this-el hivatkozhat önmagára. 10

Megoldás public class Employee {... public void raisesalary(int percent){ salary = (int)(salary*(1.0 + percent / 100.0));... Ha egy típus konverziónál információ vesztés léphet fel, akkor ott mindig kényszerítenünk kell a konverziót. 11

Java projektek felépítése A Java projektek hierarchiája: Csomagok Osztályok, interfészek, felsorolások Más csomagban található kódot az import utasítással tudunk elérhetővé tenni Az osztály nevének meg kell egyeznie a tartalmazó fájl nevével (kivéve beágyazott osztály esetében). Minden általunk deklarált adattípus, adattag, illetve metódus előtt feltüntetjük annak láthatóságát. Az adattagokat általában elrejtjük a külvilág elől, és csak beállító/lekérdező (setter/getter) metódusokon keresztül engedjük azokat használni. 12

Feladat Készítsünk egy főprogramot (main), és használjuk fel az alkalmazottak osztályt úgy, hogy a konzolról beolvasott adatokkal példányosítjuk, majd pedig kiírjuk a tulajdonságait a konzolra 13

Megoldás package company; import java.util.scanner; public class EmployeeTester { public static void main(string[] args) { Scanner sc = new Scanner(System.in); System.out.print("Vezetéknév: "); String firstname = sc.nextline(); System.out.print("Keresztnév: "); String lastname = sc.nextline(); System.out.print("Beosztás: "); String job = sc.nextline(); System.out.print("Fizetés: "); int salary = sc.nextint(); Employee e = new Employee(firstName, lastname, salary, job);... 14

Megoldás A program belépési pontja egy osztályának az alábbi statikus main metódusa lehet: public static void main(string[] args) {... A statikus metódusok az osztályhoz tartoznak, így csak az osztály statikus tagjait érhetik el! Java nyelvben: Konzol bemenet: Konzol kimenet: Kiírás konzolra: System.in System.out print metódus változataival Beolvasás konzolról: Scanner objektum megfelelő next () metódusát meghívva. 15

Megoldás javítása A megoldás meglehetősen sok kódismétlést tartalmaz, amit érdemes függvényekbe szervezéssel csökkentenünk. Vezessük be az alábbi két metódust. public static String readstring(scanner sc, String msg){ System.out.print(msg); return sc.nextline(); public static int readint(scanner sc, String msg){ System.out.print(msg); int i = sc.nextint(); // Sor végi ENTER-t pufferben hagyja! sc.nextline(); // Sorvég jel eltávolítása pufferből return i; 16

Megoldás függvényekkel public static void main(string[] args) { Scanner sc = new Scanner(System.in); String firstname = readstring(sc, "Vezetéknév: "); String lastname = readstring(sc, "Keresztnév: "); String job = readstring(sc, "Beosztás: "); int salary = readint(sc, "Fizetés: "); int raise = readint(sc, "Emelés: "); Employee e = new Employee(firstName, lastname, salary, job); System.out.println(e.getFirstName() + " " + e.getlastname() + " beosztása: " + e.getjob() + ", fizetése: " + e.getsalary()); e.raisesalary(raise); System.out.println("Emelés után:"); System.out.println(e); // kiírás tostring() használatával 17

tostring Az objektumban tárolt információ szöveges megjelenítése összetett feladat, ezért nem akarjuk azt többszörösen elvégezni. A kód függvénnyé történő kiemelése most is hasznos, azonban ennek meg van Javaban a megfelelő módja. Implementáljuk az alábbi függvényt a kiírandó objektum osztályában: @Override public String tostring() { return firstname + " " + lastname + " beosztása: " + job + ", fizetése: " + salary; 18

tostring Elemi adattípusok esetén azok értékét adja vissza Objektumok esetén alapértelmezetten azok memória referencia címét adja meg A metódust felüldefiniálva befolyásolhatjuk, hogy mit adjon vissza értékként. Konzolra való kiírásnál ez nagyban leegyszerűsíti a kódot. Az osztályban egy ősosztály metódusának felüldefiniálását az @Override annotációval jelezhetjük. Mi az Employee ősosztálya?! Javaban az Object minden osztály ősosztálya 19

Feladat Az előző feladat megoldását felhasználva hozzunk létre egy tárolót, amelybe beolvasunk a konzolról alkalmazottakat. Kérjük be, hogy milyen beosztású alkalmazottak fizetését akarjuk emelni és mennyivel, majd hajtsuk is végre az emelést. Írjuk ki az alkalmazottakról a konzolra a rólúk ismert információkat. Mondjuk meg, hogy milyen beosztású és mennyit keres az, akinek a legtöbb a fizetése. 20

Megoldás Javaban sok adatszerkezet áll rendelkezésünkre, amelyek közül választhatunk. Ezek közül a felhasználás/adattárolás módja szerint szokás választani: (bővebben később) Indexelhető: ArrayList, ArrayLinkedList, Vector, Stack Láncolt listás: Queue, DeQueue, PriorityQueue, LinkedList Fa adatszerkezetű: TreeSet, TreeMap Hasító függvényt alkalmazó: HashSet, LinkedHashSet, HashTable, HashMap Válasszuk most az ArrayList-et 21

Megoldás Az alkalmazottakat egy ciklusban olvassuk be, hogy eltároljuk őket. Az alkalmazott beolvasását akár külön metódusba is szervezhetjük. Beolvassuk a módosítással kapcsolatos adatokat. Egy ciklusban végigmegyünk minden alkalmazotton, és a megfelelő beosztásúaknál megemeljük a fizetést. Lefuttatjuk a maximum keresés programozási tételt az alkalmazottakon, hogy megtaláljuk a legjobban fizetett alkalmazottat, majd kiírjuk a beosztását és a fizetését. 22

Megoldás Alkalmazott beolvasása public static Employee reademployee(scanner sc){ String firstname = readstring(sc, "Vezetéknév: "); String lastname = readstring(sc, "Keresztnév: "); String job = readstring(sc, "Beosztás: "); int salary = readint(sc, "Fizetés: "); return new Employee(firstName, lastname, salary, job); 23

Megoldás Adatok beolvasása public static void main(string[] args){ Scanner sc = new Scanner(System.in); ArrayList<Employee> employees = new ArrayList<>(); for (int i = 0; i < 3; i++) { employees.add(reademployee(sc)); System.out.println(employees.get(i));... 24

Megoldás Fizetésemelés public static void main(string[] args){... int raise = readint(sc, "Fizetésemelés: "); String job = readstring(sc, "Beosztás: "); for (Employee e : employees) { if (e.getjob().equals(job)) e.raisesalary(raise); System.out.println(e);... 25

Objektumok összehasonlítása A beosztások összehasonlításához az equals() metódust használtuk, mivel objektumok esetében az egyenlőség operátor (==) az objektumok referenciáit hasonlítja össze! Stringek esetében az equals() és equalsignorecase() metódusok használhatók a hagyományos string összehasonlításhoz. Saját osztályokon összehasonlítást definiálni az equals() és hashcode() metódusok implementálásával lehet (automatikusan generálható a legtöbb Java fejlesztő környezetben). 26

Megoldás Maximum keresés public static void main(string[] args){... Employee richman = employees.get(0); for (Employee e : employees) if (e.getsalary() > richman.getsalary()) richman = e; System.out.println("Legjobban fizetett alkalmazott:" + richman); 27

A megoldás hiányosságai Ellenőriznünk kellene az adatok helyességét, és jelezni, ha a felhasználó pl. nem számot ad meg, amikor azt várunk. Hibakereséshez a programot többször is futtatnunk kell, és ilyenkor kézzel kell megadnunk mindig az adatokat. Az Employee osztályban nem implementáltuk az equals és hashcode metódusokat, így a hasítófüggvényt alkalmazó adatszerkezeteket még nem tudjuk velük helyesen használni. Ezek megoldásait majd a későbbiekben fogjuk elsajátítani. 28

JAVA fejlesztőeszközök és -környezetek Gyakran használt eszközök JAVA Development Kit (JDK) JAVA Runtime Environment (JRE) JAVA dokumentáció https://docs.oracle.com/javase/8/docs/ NetBeans http://netbeans.org/ Eclipse http://www.eclipse.org/ IntelliJ IDEA http://www.jetbrains.com/idea/ 29

Netbeans gyorsbillentyűk Futtatás: Aktuális fájl futtatása: Kódkiegészítő: Kódgenerálás: Kód formázása: Hibajavítási tippek: Átnevezés: Változó kiemelése kifejezésből: Attribútum kiemelése kifejezésből: Függvény készítése kódrészletből: F6 Shift + F6 Ctrl + szóköz Alt + Insert Alt + Shift + F Alt + Enter Ctrl + R Alt + Shift + V Alt + Shift + E Alt + Shift + M 30