Presentation is loading. Please wait.

Presentation is loading. Please wait.

Klasės ir Objektai Javoje

Similar presentations


Presentation on theme: "Klasės ir Objektai Javoje"— Presentation transcript:

1 Klasės ir Objektai Javoje
Parengta pagal Klasės ir Objektai Javoje Įvadas į Java klases ir objektus

2 Turinys Įvadas į Java klases ir objektus
Objektinio programavimo paradigma Javoje Java klasių savybės Vidinės klasės enum tipas

3 Įvadas Java yra objektinio programavimo kalba. Todėl jos visis programos yra klasės Visos Java programos apibrėžia klasės “būseną” ir “elgesį”, būseną apibrėžiama klasės kintamaisiais, o elgesys – jos metodais. Klasės tipo egzemplioriai realizuoja įvairias tos pačios klasės būsenas ir individualius elgesius. Klasės kuria objektus ir naudoja metodus bendraujant tarpusavyje. Klasė apjungia savyje grupę kintamųjų, taro kurių yra artimi sąryšiai. Klasių metodai apibrėžia objektų kintamųjų kitimo taisykles. Išskirtinė grupė metodų, vadinamų klasių konstruktoriais, apibrėžia klasės kintamuosius (“būseną”) naujo klasės egzemplioriaus kūrimo metu. Bet kuri klasė apibrėžia naują tipą analogišką int arba tiksliau Integer. Java apibrėžia klasės laukų ir metodų sintaksės taisykles. Klasių laukams ir metodams galioja standartiniai objektinio programavimo elementai, tai duomenų apgauba, paveldimumas, polimorfizmas, perklojimas.

4 Klasės Klasė (class) yra jos laukų (fields) (kintamųjų) ir metodų (methods, procedūros arba funkcijos) rinkinys. Metodai operuoja su tos pačios ir kitų klasių laukais . Circle centre radius circumference() area() Klasė Jos laukai ir metodai

5 Klasė Klasės apibrėžimo sintaksė: Primityvi klasė (be laukų ir metodų)
class ClassName [extends SuperClassName] { [fields declaration] [methods declaration] } public class Circle { // my circle class }

6 Pridedame laukus (kintamuosius): class Circle su laukais
Pridedame klasei laukus Klasės laukai (kintamieji) kartais vadinami egzemplioriaus kintamaisiais. public class Circle { public double x, y; // centre coordinate public double r; // radius of the circle }

7 Papildome klasę jos metodais
Klasė tik su savo laukais yra „negyva“, jų reikšmes gali keisti tik kitų klasių metodai, kuriems keblu palaikyti vieningą klasės elgesį Apibrėžyi toje pačioje klasėje metodai nurodo vieningą klasės laukų kitimo elgseną. Metodai rašomi po visų klasės laukų apibrėžimo, nors tai nėra privaloma taisyklė. Klasės metodų apibrėžimo sintaksė: type MethodName (parameter-list) { Method-body; }

8 Papildome klasę Circle jos metodais
public class Circle { public double x, y; // centre of the circle public double r; // radius of circle //Methods to return circumference and area public double circumference() { return 2*3.14*r; } public double area() { return 3.14 * r * r; Method Body

9 Kintamųjų tipas Bet kuri klasė apibrėžia savo vardo naują tipą. Klasė Circle apibrėžia naują Java duomenų tipą vardu Circle Circle ir kitos klasės gali naudoti šį duomenų tipą: Circle aCircle; Circle bCircle;

10 Klasės Circle turinys. aCircle, bCircle yra nuorodos į atminties adresą nuo kurio fiziškai yra talpinamas to tipo klasės egzemplioriaus kintamųjų ir metodų turinys. Jei egzempliorius neapibrėžtas, talpinama nuoroda į null aCircle bCircle null null Abstrakti nuoroda (Null Reference) Abstrakti nuoroda (Null Reference)

11 Klasės objekto (egzemplioriaus) sukūrimas
Objektai kuriami dinamiškai (vykdymo metu) naudojant raktinį Java žodį new . aCircle ir bCircle tampa nuorodomis į Circle objektus aCircle = new Circle() ; bCircle = new Circle() ;

12 Klasės tipo objekto sukūrimas
aCircle = new Circle(); bCircle = new Circle() ; bCircle = aCircle;

13 Klasės tipo objekto sukūrimas
aCircle = new Circle(); bCircle = new Circle() ; bCircle = aCircle; Prieš priskyrimą Po priskyrimo P aCircle bCircle P aCircle bCircle Q Q

14 Automatinis atminties atlaisvinimas (Automatic garbage collection)
Q Tarkime šis objektas neturi į save nuorodų ir todėl ateityje negali būti panaudotas. Tokie objektai tampa kandidatais automatiniam naudojamos atminties atlaisvinimui (garbage collection). Java periodiškai automatiškai suranda tokius objektus ir atlaisvina atmintį, kurią užima objektai be nuorodų.

15 Prieiga prie objekto Circle kintamųjų
Prieiga panaši į C kalboje naudojamų struktūrų sintaksę. ObjectName.VariableName ObjectName.MethodName(parameter-list) Circle aCircle = new Circle(); aCircle.x = 2.0 // initialize center and radius aCircle.y = 2.0 aCircle.r = 1.0

16 Objekto Circle metodų iškvietimas
Objekto metodų panaudojimas: kreipiamės į aCircle metodą Circle aCircle = new Circle(); double area; aCircle.r = 1.0; area = aCircle.area();

17 Klasės Circle panaudojimas
// Circle.java: Contains both Circle class and its user class //Add Circle class code here class MyMain { public static void main(String args[]) Circle aCircle; // creating reference aCircle = new Circle(); // creating object aCircle.x = 10; // assigning value to data field aCircle.y = 20; aCircle.r = 5; double area = aCircle.area(); // invoking method double circumf = aCircle.circumference(); System.out.println("Radius="+aCircle.r+" Area="+area); System.out.println("Radius="+aCircle.r+" Circumference ="+circumf); } java MyMain Radius=5.0 Area=78.5 Radius=5.0 Circumference =

18 Vidinės (inner) klasės
Sintaksė: [modifiers] class OuterClassName { code... [modifiers] class InnerClassName { code.... } Išorinė klasė ( kurioje yra vidinė ) gali sukurtu daug visinės klasės egzempliorių Jei vidinė ir išorinė yra public, kitos klasės taip pat gali kurti vidinės klasės tipo egzempliorius. Tai daroma tokiu būdu: <OuterClassName> outerObj = new <OuterClassName>(arguments); outerObj.<InnerClassName> innerObj = outerObj.new <InnerClassName>(arguments); Kai sukuriamas išorinės klasės egzempliorius, automatikai joks vidinės klasės egzepliorius neatsiranda. Jei vidinė klasė yra statinė, jos egzempliorius gali būti sukurtas nekuriant išorinės klasės egzemplioriaus. Vidinė klasė turi prieigą prie visų ją sukūrusios išorinės klasės elementų (!netgi prie private). Jei vidinė klasė turi to paties pavadinimo elementą, pasiekti išorinį elementą galima tokiu būdu: <OuterClassName>.this.<variableName>

19 Statinė vidinė klasė Sintaksė:
<access-specifier> class OuterClassName { public static class <StaticInnerClassName> { . . . } Papildomos static vidinės klasės savybės: Statiniai išorinės klasės elementai vidiniai statiniai prieinami visada. Ne statiniai neprieinami, nes statinė vidinė klasė nepriklauso egzemplioriui Jei vidinė klasė nepažymėta static, ji negali turėti statinių elementų. Vienintelis skirtumas statinės vidinės klasės nuo kitų vidinių klasių, kad ji neturi nuorodos į išorinę klasę, kurioje ji patalpinta.

20 Lokali vidinė klasė Sintaksė:
<access-specifier> class <OuterClassName> { code... <access-specifier> <return-type> <MethodName>(<arguments>){ class <LocalInnerClassName>{ } Lokalios vidinės klasės savybės: Lokaliai vidinei klasei nenurodomas prieigos tipas (t.į. public, protected ar private). Ji visada galioja tik tame bloke, kuriame yra apibrėžta. Didelis lokalių klasių privalumas: jos visiškai nematomos išorinėms klasėms. Lokalios klasės gali naudoti visus egzemplioriaus elemantus ir tuos lokalius metodo kintamuosius, kurie yra paskelbti final.

21 Bevardė vidinė klasė Sintaksė:
new SuperType(construction parameters) { inner class methods and data } Bevardės (anonymous) vidinės klasės savybės: SuperType gali būti interfeisas, pvz ActionListener. Jei taip, vidinė klasė realizuoją tą interfeisą. Jei SuperType yra klasė, bevardė vidinė klasė praplečia tą klasę. Bevardė klasė negali turėti konstruktorių, nes jos vardas yra tas pats kaip ir išorinės, kurioje ji sukurta, vardas. Rekomenduojama bevardes vidines klases naudoti saikingai, nes jos apsunkina kodo skaitymą.

22 Vidinės klasės Vidines klases sukuria kompiliatorius,JVM
vidinės klasės nieko nesiskiria nuo kitų klasių // VidinesDemo.java: vidinių klasių kūrimo pvz public class Vidines{ // Vidine klasė Test1 class Test1 {} // Vidine klasė Test2 class Test2 {} public static void main(String [] args) { // Anonymous vidinė klasė 1 new Object() {}; // Anonymous vidinė klasė 2 System.out.println("Sveikas, Pasauli"); }

23 Vidinės klasės Vidines.java klasės javac Vidines.java
Kompiliavimo rezultatas: Vidines.class Vidines$Test1.class Vidines$Test2.class Vidines$1.class Vidines$2.class Pakartokime: Vidinė klasė Statinė vidinė klasė Lokali vidinė klasė Bevardė vidinė klasė

24 enum tipas // Diena.java: apibrėžia savaitės dienų pavadinimus
public enum Diena { PIRMADIENIS, ANTRADIENIS, TREČIADIENIS, KETVIRTADIENIS, PENKTADIENIS, ŠEŠTADIENIS, SEKMADIENIS } // DienaDemo.java: enum Diena panaudojimo pvz public class DienaDemo { Diena diena; public DienaDemo(Diena diena) { this.diena = diena; } public void apibudink() { switch (diena) { case PIRMADIENIS: System.out.println("Pirmadienis sunki diena."); break; case PENKTADIENIS: System.out.println("Penktadienis gerai."); break; case ŠEŠTADIENIS: case SEKMADIENIS: System.out.println("Išeiginė puiku."); break; default: System.out.println("Elinė darbo diena."); } } java MyMain Radius=5.0 Area=78.5 Radius=5.0 Circumference =

25 enum tipas // DienaDemo.java: enum Diena panaudojimo pvz
// public class DienaDemo public static void main(String[] args) { DienaDemo pirmaDiena = new DienaDemo(Diena.PIRMADIENIS); pirmaDiena.apibudink(); DienaDemo treciaDiena = new DienaDemo(Diena.TREČIADIENIS); treciaDiena.apibudink(); DienaDemo penktaDiena = new DienaDemo(Diena.PENKTADIENIS); penktaDiena.apibudink(); DienaDemo sestaDiena = new DienaDemo(Diena.ŠEŠTADIENIS); sestaDiena.apibudink(); DienaDemo septintaDiena = new DienaDemo(Diena.SEKMADIENIS); septintaDiena.apibudink(); } Pirmadienis sunki diena. Elinė darbo diena. Penktadienis gerai. Išeiginė puiku.

26 Santrauka Klasės, objektai ir metodai yra java kalbos objektinio programavimo pagrindas. Mes aptarėme: Kaip parašyti klasę Kaip sukurti tos klasės tipo objektus Kaip apibrėžti klasės laukus ir metodus Kaip naudotis klasės laukais ir metodais Kaip sukurti ir naudotis vidinėmis klasėmis Kaip sukurti ir panaudoti išvardinamąjį (enum) tipą


Download ppt "Klasės ir Objektai Javoje"

Similar presentations


Ads by Google