OOP: Java 4.Gy: Java osztályok. 36/1 B ITv: MAN 2019.03.02
Feladat Készítsen el egy Employee osztályt és egy Employee osztályt használó osztályt (EmpProgram). Az Employee osztálynak: van name és salary adattagja (default hozzáférés módosítóval); van egy metódusa, amely egy paraméterként kapott értékkel megnöveli a fizetést (increasesalary) van egy metódusa (displayinfo), amely egy String-be összefűzi a nevet és a fizetést, és ezt adja vissza. Az EmpProgram osztályban egy main metódus van, amelyben létrehozunk egy Employee objektumot: értéket adunk a tagjainak, kiírjuk az adatait, megemeljük a fizetését és újra kiírjuk az adatait. 36/2
EMPLO- YEE 36/3
Az Employee osztály kódja public class Employee { String name; long salary; Adattagok void increasesalary(long sum) { salary += sum; Metódusok String displayinfo() { return " Name: " + name + " Salary: "+ salary; 36/4
Az EmpProgram osztály kódja public class EmpProgram { public static void main(string[] args) { Employee employee = new Employee(); Példányosítás - new employee.name = "John Smith"; Értékadás adattagnak employee.salary = 150000; System.out.println(employee.displayInfo()); employee.increasesalary(1000); Metódus hívás System.out.println(employee.displayInfo()); Az Employee osztály ugyanabban a csomagban van, mint az EmpProgram osztály, ezért példányosításkor elegendő a nevét megadni (egyébként kellene az elérési útvonala is, vagy importálni kellene az osztályt!). 36/5 Name: John Smith Salary: 150000 Name: John Smith Salary: 151000
Feladat Írjuk át az Employee osztályban az adattagokat private-ra és készítsünk setter metódusokat az adatok beállításához, és getter metódusokat az adatok lekérdezéséhez (adatrejtés). Írjuk át ennek megfelelően az Employee osztályt használó osztályt. 36/6
Tagok hozzáférési kategóriái Az információ rejtés alapelv megvalósításának eszköze. Feladatuk az objektumok (osztály, metódus, adattag) láthatóságának (elérhetőségének) szabályozása Módosító private nincs megadva protected public Hozzáférési kategória Privát: más osztályból nem látható, de az adott osztály összes példánya számára elérhető Alap (félnyilvános): csak az azonos csomagban levő osztályok érhetik el (angolul default vagy packageprivate) Védett: az adott csomagban lévő és a leszármazott osztályok érik el Nyilvános: bármely csomagban levő bármely osztályból elérhető 36/7
Az Employee osztály kódja public class Employee { private String name; private long salary; Védett adattagok public void increasesalary(long sum) { salary += sum; public String displayinfo() { return " Name: " + name + " Salary: "+ salary; public String getname() { return name; getter metódusok public long getsalary() { return salary; public void setname(string name) { this.name = name; public void setsalary(long salary) { this.salary = salary; 36/8 setter metódusok Nézzük meg az EmpProgram osztályban a hibaüzeneteket!
Az EmpProgram osztály kódja public class EmpProgram { public static void main(string[] args) { Employee employee = new Employee(); Példányosítás - new employee.setname("john Smith"); employee.setsalary(150000); System.out.println(employee.displayInfo()); employee.increasesalary(1000); System.out.println(employee.displayInfo()); Metódus hívások Name: John Smith Salary: 150000 Name: John Smith Salary: 151000 36/9
Feladat Egészítsük ki az Employee osztályt a következő metódusokkal: adjon vissza igazat, ha a fizetés a paraméterként megadott határok közé esik, és hamisat ha nem (isinsalaryrange); adja vissza a fizetendő adó értéket, ha az adókulcs 16% (gettax); adjon vissza igazat, ha a fizetés nagyobb, mint egy paraméterként megadott másik alkalmazott fizetése (hashighersalary). Egészítsük ki az EmpProgram osztályt úgy, hogy minden funkciót ki tudjunk próbálni. 36/10
Az Employee osztály kódja TXT public class Employee {... public boolean isinsalaryrange(long lowerboundary, long upperboundary) { if (this.salary<=upperboundary && this.salary>=lowerboundary) { return true; else return false; public long gettax() { return Math.round(this.salary*0.16); Ajánlom a fenti metódus helyett: public boolean isinsalaryrange(long lowerboundary, long upperboundary) { return this.salary<=upperboundary && this.salary>=lowerboundary; 36/11
Az Employee osztály kódja TXT public class Employee {... public boolean hashighersalary(employee employee) { if (this.salary>employee.salary) { return true; else return false; Ajánlom a fenti metódus helyett: public boolean hashighersalary(employee employee) { return this.salary>employee.salary; 36/12
Az EmpProgram osztály kódja TXT import java.util.scanner; public class EmpProgram { public static void main(string[] args) { Employee employee_1 = new Employee(); employee_1.setname("john Smith"); employee_1.setsalary(250000); System.out.println(employee_1.displayInfo()); employee_1.increasesalary(1000); System.out.println(employee_1.displayInfo()); //new features System.out.println(employee_1.getName() + "'s salary is " + employee_1.getsalary()); long lowerboundary = readlowerboundary(); long upperboundary = readupperboundary(lowerboundary); System.out.print("Salary is in [" + lowerboundary + " - " + upperboundary + "] : "); System.out.println(employee_1.isInSalaryRange(lowerBoundary, upperboundary)); System.out.println("Tax to be paid: " + employee_1.gettax()); 36/13
Az EmpProgram osztály kódja TXT System.out.println("Tax to be paid: " + employee_1.gettax()); Employee employee_2 = new Employee(); employee_2.setname("julia Smith"); employee_2.setsalary(150000); if (employee_1.hashighersalary(employee_2)) System.out.println(employee_1.getName() + " has higher salary than " + employee_2.getname()); else System.out.println(employee_2.getName() + " has higher salary than " + employee_1.getname()); //=== End of main public static long readlowerboundary() { Scanner input = new Scanner(System.in); long n; do { System.out.println("Enter lower boundary (min. 100000): "); while (!input.hasnextlong()) { System.out.println("That's not a number"); input.next(); 36/14
Az EmpProgram osztály kódja TXT public static long readlowerboundary() { Scanner input = new Scanner(System.in); long n; do { System.out.println("Enter lower boundary (min. 100000): "); while (!input.hasnextlong()) { System.out.println("That's not a number"); input.next(); n = input.nextlong(); while (n<100000); return n; public static long readupperboundary(long lowerboundary) { Scanner input = new Scanner(System.in); long n; do { System.out.println("Enter upper boundary: "); while (!input.hasnextlong()) { System.out.println("That's not a number"); input.next(); 36/15
Az EmpProgram osztály kódja TXT System.out.println("That's not a number"); input.next(); n = input.nextlong(); while (n<100000); return n; public static long readupperboundary(long lowerboundary) { Scanner input = new Scanner(System.in); long n; do { System.out.println("Enter upper boundary: "); while (!input.hasnextlong()) { System.out.println("That's not a number"); input.next(); n = input.nextlong(); while (n<=lowerboundary); return n; 36/16
Az EmpProgram osztály kódja Name: John Smith Salary: 250000 Name: John Smith Salary: 251000 John Smith's salary is 251000 Enter lower boundary (min. 100000): 120000 Enter upper boundary: 200000 Salary is in [120000-200000] : false Tax to be paid: 40160 John Smith has higher salary than Julia Smith 36/17
Feladat Az EmpProgram osztályban deklaráljunk és beolvasással töltsünk fel adatokkal egy Employee-ból álló 5 elemű tömböt. Állapítsuk meg, hogy kinek a legmagasabb a fizetése. Számoljuk meg, hogy hány alkalmazott fizetése esik egy megadott intervallumba. Számítsuk ki az alkalmazottak átlagfizetését. Számítsuk ki az alkalmazottak által befizetett adó összértékét. 36/18
Az EmpProgram osztály kódja TXT import java.util.scanner; public class EmpProgram { public static void main(string[] args) { Employee[] employeearray= new Employee[10]; for (int i = 0; i < employeearray.length; i++) { employeearray[i]= new Employee(); employeearray[i].setsalary( (i+1)*100000+i*200 ); employeearray[i].setname("worker_" + (i+1)); listarray(employeearray); System.out.println("Best paid employee : " + employeearray[hasmaxsalary(employeearray)].getname()); System.out.println("Average salary : " + avgsalary(employeearray)); System.out.println("Give a salary range : "); long lowerboundary = readlowerboundary(); long upperboundary = readupperboundary(lowerboundary); System.out.println("Number of salaries in range: " + countsalaries(employeearray, lowerboundary, upperboundary)); 36/19
Az EmpProgram osztály kódja TXT System.out.println("Sum of tax to be paid: " + sumtax(employeearray)); //=== End of main public static int hasmaxsalary(employee[] employeearray) { int maxindex = 0; for (int i = 1; i < employeearray.length; i++) { if (employeearray[i].hashighersalary(employeearray[maxindex])) { maxindex=i; return maxindex; public static long avgsalary(employee[] employeearray) { double avg = 0; for (Employee employee : employeearray) { avg += employee.getsalary(); avg /= employeearray.length; return Math.round(avg); 36/20
Az EmpProgram osztály kódja TXT public static long readlowerboundary() { Scanner input = new Scanner(System.in); long n; do { System.out.println("Enter lower boundary (min. 100000): "); while (!input.hasnextlong()) { System.out.println("That's not a number"); input.next(); n = input.nextlong(); while (n<100000); return n; public static long readupperboundary(long lowerboundary) { Scanner input = new Scanner(System.in); long n; do { System.out.println("Enter upper boundary: "); while (!input.hasnextlong()) { System.out.println("That's not a number"); input.next(); 36/21
Az EmpProgram osztály kódja TXT public static long readupperboundary(long lowerboundary) { Scanner input = new Scanner(System.in); long n; do { System.out.println("Enter upper boundary: "); while (!input.hasnextlong()) { System.out.println("That's not a number"); input.next(); n = input.nextlong(); while (n<=lowerboundary); return n; public static int countsalaries(employee[] employeearray, long lowerboundary, long upperboundary) { int counter = 0; for (Employee employee : employeearray) if (employee.isinsalaryrange(lowerboundary, upperboundary)) counter++; return counter; 36/22
Az EmpProgram osztály kódja TXT public static long sumtax(employee[] employeearray) { long sum = 0; for (Employee employee : employeearray) sum += employee.gettax(); return sum; public static void listarray(employee[] employeearray) { for (Employee employee : employeearray) { System.out.println(employee.displayInfo()); //=== End of Program 36/23
36/24
Feladat Készítsen Book osztályt és egy BookProgram osztályt. A Book osztály adattagjai: author, title, yearofpublication, price Legyen egy metódusa, amely a paraméterként kapott százalékos értékkel növeli a könyv árát (increaseprice). Legyen egy metódusa, ami egy String-be összefűzi az adatokat és ezt adja vissza (displayinfo). Írjunk setter metódusokat az adatok beállításához, és getter metódusokat az adatok lekérdezéséhez (adatrejtés ellenőrzött adathozzáférés). A BookProgram osztályban hozzunk létre egy könyvet és kérdezzük le az adatait. 36/25
A Book osztály kódja public class Book { private String author; private String title; private int yearofpublication; private int price; public void increaseprice(int percentage) { price += Math.round(price*(float)percentage/100); public String displayinfo() { return author + ": " + title + ", " + yearofpublication + ". Price: " + price + " Ft"; public String getauthor() { return author; public void setauthor(string author) { this.author = author; 36/26
A Book osztály kódja public String gettitle() { return title; public void settitle(string title) { this.title = title; public int getyearofpublication() { return yearofpublication; public void setyearofpublication(int yearofpublication) { this.yearofpublication = yearofpublication; public int getprice() { return price; public void setprice(int price) { this.price = price; 36/27
A BookProgram osztály kódja public class BookProgram { public static void main(string[] args) { Book book = new Book(); book.setauthor("j.k. Rowling"); book.settitle("harry Potter"); book.setyearofpublication(2008); book.setprice(3500); System.out.println(book.displayInfo()); book.increaseprice(10); System.out.println(book.displayInfo()); J.K. Rowling: Harry Potter, 2008. Price: 3500 Ft J.K. Rowling: Harry Potter, 2008. Price: 3850 Ft 36/28
/son 36/29
Házi feladat Készítsen egy Person osztályt az alábbi adatokkal: name, weight (int), height (float) Legyen egy metódusa, amely visszaadja a testtömeg indexet (tti=tomeg/(m*m)) (calculatebmi). Legyen egy metódusa, amely visszaad egy alkatot jellemző szöveget (bodyshape): 36/30 "thin": tti<18,5 "fat": tti>25 "normal": egyébként Legyen egy metódusa (displayinfo), amely egy String-be összefűzi az adatokat és visszaadja azokat az alábbi alakban: név, súly, magasság, tti: alkat. Írjunk setter metódusokat az adatok beállításához, és getter metódusokat az adatok lekérdezéséhez (adatrejtés ellenőrzött adathozzáférés).
Feladat Készítsen egy futtatható osztályt (PersonProgram), amelyben beolvassa egy személy adatait (név, súly, magasság) és kiírja azokat összefűzve a kiszámított testtömegindexel és alkattal. 36/31
A Person osztály kódja public class Person { private String name; private int weight; private float height; public float calculatebmi() { return weight / (height*height); public String bodyshape() { if (calculatebmi() < 18.5) return "thin"; else if (calculatebmi() > 25) return "fat"; else return "normal"; public String displayinfo() { return name + ", " + weight + "kg, " + height + "m, BMI: " + calculatebmi() + " -> " + bodyshape(); 36/32
A Person osztály kódja public String getname() { return name; public void setname(string name) { this.name = name; public int getweight() { return weight; public void setweight(int weight) { this.weight = weight; public float getheight() { return height; public void setheight(float height) { this.height = height; 36/33
A PersonProgram osztály kódja import java.util.scanner; public class PersonProgram { public static void main(string[] args) { 36/34 Person person = new Person(); Scanner input = new Scanner(System.in); System.out.println("Név: "); String name = input.nextline(); person.setname(name); System.out.println("Tömeg (kg): "); int weight = input.nextint(); person.setweight(weight); System.out.println("Magasság (m): "); float height = input.nextfloat(); person.setheight(height); System.out.println(person.displayInfo()); Név: John Tömeg (kg): 84 Magasság (m): 1,75 John, 84kg, 1.75m, BMI: 27.428572 -> fat
36/35
VÉGE VÉGE 36/36