Print

Įvadas

Aptarsime konstruktorių sąvoką ir kūrimą.

Naudojam įrankiai:

Klasės ir objektai

Praėjusioje pamokoje sukūrėme pirmąją programą ir ją įvykdėme. Dabar panagrinėsime klases.

Java yra objektinė programavimo kalba. Tai reiškia, kad visas veiksmas vyksta tam tikruose objektuose, o tiksliau tų objektų metoduose (funkcijose).

Klasė tai yra tam tikra abstrakcija, kuri turi savo duomenis ir logiką. Pavyzdžiui klasė gali būti Automobilis. Jie turi savyje tam tikrus duomenis, kaip pavyzdžiui rida, degalų bako talpa, sėdimų vietų skaičius ir pan. Taip pat jis turi tam funkcionalumą, kuriuo mes naudojamės kaip pavyzdžiui - pripildyti dagalų baką, nuvažiuoti 10 kilometrų ir pan.

Objektas tai klasės konkretus pavyzdys. Tarkime aš turiu automobilį Porshe, kurio rida 151 650 kilometrų, bako talpa 65 litrai, o sėdimų vietų skaičius - 2.

Jei žiūrint iš duomenų bazių programuotojų, tai galima įsivaizduoti lentelę kaip klasę, kurioje numatyta duomenų struktūra, o objektas, tai lentelėje esantis konkretus įrašas. Priedo be duomenų klasės dar turi funkcionalumą. Tai jei Oralce lentelę susietume su PL/SQL paketu, tai turėtume klasę. O vienas įrašas apdojojamas pakete būtų objektas.

Oracle Java tutorial'e galima paskaityti paaiškinimą kas yra:

Kaip aiškinau ankstensnėje pamokoje klasę aprašo rezervuotas Java žodis class ir po jo einantis klasės pavadinimas. Prieš žodelį class yra nurodomas klasės matomumas. Klasės matomumas gali būti public arba private. Public klasės gali būti naudojamos kitų klasių, o private klasė gali būti naudojama tik jos apibrėžtame kontekste (pvz. ją apibrėžiančioje klasėje). Java išeities tekstai saugomi failuose su praplėtimu java.

Viename java faile gali būti tik viena public klasė ir klasės pavadinimas turi sutapti su failo pavadinimu. Jei klasės pavadinimas nesutampa su failo pavadinimu gausite kladą "The public type Klase must be defined in its own file", čia Klase yra nurodytas klasės pavadinimas.

Laukai

Klasė turi laukus, kurie nusako jos turimus duomenis. Laukai gali būti primytyvių tipų arba nuoroda į kitą klasę.

Su primityviais Java tipais galima susipažinti adresu http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Norėdami apibėžti lauką, kurio tipas yra sveikas skaičius, tam naudosime primityvų tipą int. Apibrėžtas laukas bus:

int workExperience;

 

Klasės lauką galime iškart ir inicializuoti, jam priskirdai pirminę reikšmę. 

int workExperience = 10;

Vienas iš dažniausiai naudojamų programuojan Java standaritnių objektų yra String - tai objektas nusakantis simbolių eilutę.

Modifikuokime pirmoje pamokoje esančią programą, kad pasisveikinimo tekstas būtų iškeltas į klasės lauką. 

package com.zerotoherodev.tutorial.crs;

public class CarRentSystem {

	String greeting = "Hello world!";

	public static void main(String[] args) {
		CarRentSystem carRenSystem = new CarRentSystem();
		System.out.println(carRenSystem.greeting);
	}
}

Matome, kad pasikeitė mūsų klasė - apibrėžėme klasės lauką greeting ir jam priskyrėme reikšmę. main metode, ne tik spausdiname sveikinimą bet ir sukuriame pirmąjį savo objektą. Objektas kuriamas konstruktorių pagalba. Jei klasė neturi išreikštinai aprašytų konstruktorių, yra automatiškai kompiliatoriaus sukuriamas konstruktorius pagal nutylėjimą. Taip įvyko ir šiuo atveju.

Naujas objektas kuriamas prieš klasės pavadinimą nurodant rezervinį žodelį new ir po jo klasės pavaidinimą (konstruktoriaus pavadinimas visada atitinka klasės pavadinimą) ir jei yra parametrus.

Konstruktorių galima įsivaizduoti kaip tam tikrą specialų metodą (funkciją).

Konstruktorius pagal nutylėjimą parametrų neturi, todėl kurdami naują CarRentSystem klasės objektą nurodome klasės pavadinimą ir skliaustelius CarRentSystem().

Norėdami pasiekti kintamojo duomenis ir funkcionalumą, prie kintamojo dedame tašką ir nurodome lauko ar metodo pavadinimą. Mūsų atveju, spausdindami tekstą nurodėme objektui carRentSystem naudoti lauką greeting - carRentSystem.greeting.

Metodai

Dabar sukurkime metodą, kuris grąžintų pasisveikinimą ir jį atspausdinkime. 

package com.zerotoherodev.tutorial.crs;

public class CarRentSystem {

	String greeting = "Hello world!";

	public String getGreeting() {
		return greeting;
	}

	public static void main(String[] args) {
		CarRentSystem carRenSystem = new CarRentSystem();
		System.out.println(carRenSystem.getGreeting());
	}
}

Pridėjome metodą getGreeting. Aprašant metodą pirmiausiai nurodomas jo matomumas (public), po to grąžinamas tipas (String), tada metodo pavadinimas getGreeting() ir skliausteliuose parametrai (mūsų atveju parametrų nėra).

Specialistams susidūrusiems su procedūriniu programavimu. Metodai - tai funkcijos, t.y. jos visada grąžinam reikšmę. Jei reikšmės nereikia, tai apibrėždami gražinamą tipą nurodome rezervuotą žodį void.

Dabar sukurkime metodą, kuris nustatytų sveikinimą objektui, t.y. būtų perduodamas parametras. 

package com.zerotoherodev.tutorial.crs;

public class CarRentSystem {

	String greeting = "Hello world!";

	public String getGreeting() {
		return greeting;
	}

	public void setGreeting(String greeting) {
		this.greeting = greeting;
	}

	public static void main(String[] args) {
		CarRentSystem carRenSystem = new CarRentSystem();
		carRenSystem.setGreeting("Sveikas pasauli!");
		System.out.println(carRenSystem.getGreeting());
	}
}

Sukūrėme metodą, kurio grąžinamas tipas void, kaip ir rašyta anksčiau, tai reiškia, kad jokia reikšmė negrąžinama. Ir per parametrą nurodome perduodamą reikšmę. Dabar paleidę programą, matome lietuvišką pasisveikinimą. 

Užduotys

1. Sukurti klasę Person pakete com.zerotoherodev.tutorial.crs.model. Klasė turi turėti laukus name, surname, age, kurie būtų String ir int tipų. Šiems laukams sukurti metodus, kurie paimtų (get) ir įrašytų (set) reikšmes. Sukurti asmens objektą ir jam nustatyti reikšmes ir atspausdinti. 

2. Sukurti klasę Receipe pakete com.zerotoherodev.tutorial.rbook.model. Klasė turi turėti laukus pavadinimas, aprašymas, ingridientų kiekis, autoriaus vardas, autoriaus pavardė, kiek porcijų paruošiama pagal nurodytus ingridientų kiekius. Sukurti 3 receptų objektus, juos užpildyti duomenimis ir duomenis atspausdinti.

3. Sukurti klasę Ticket pakete com.zerotoherodev.tutorial.tickets. Klasė turi turėti laukus kelionės pradžios miesto pavadinimas, kelionės pabaigos miesto pavadinimas, vietos numeris, transporto priemonės pavadinimas, išvykimo aikštelės numeris. Sukurti 4 bilietų objektus, juos užpildyti duomenimis ir duomenis atspausdinti.