java programming

34
Programavimas JAVA doc. dr. L.Pupeikienė

Upload: edvinas-prokofijovas

Post on 20-Oct-2015

37 views

Category:

Documents


5 download

DESCRIPTION

slideshow for java programming

TRANSCRIPT

Page 1: Java programming

Programavimas JAVA

doc. dr. L.Pupeikienė

Page 2: Java programming

Paveldėjimas

Page 3: Java programming

Paveldėjimo ribos Paveldėjimas – klasės gebėjimas paveldėti

protėvių klasės duomenis ir metodus (kaip vaikas paveldi iš tėvo).

Visos klasės yra java.long.Object klasės vaikai, todėl jos paveldi visus šios klasės metodus.

Tėvo klasė paprastai apima visas pagrindines savybes ir charakteristikas, kurios yra bendros visoms būsimoms vaikų klasėms.

Taigi visą uždavinio esmę lemia tėvo klasė.

Page 4: Java programming

Paveldėjimo ribos Vaikas paveldi visus matomus (ne private) tėvo k Sprendžiant uždavinį visus tėvo klasės metodus galima

papildyti savais metodais vaiko klasėje, kintamuosius ir metodus.

Tai vadinama vienos krypties paveldėjimu (tėvo klasės objektams nauji vaiko kintamieji ir metodai tėvo klasei nepasiekiami).

final klasės paveldėti negalima. Klasių, metodų ir kintamųjų varduose galima naudoti

tik lotyniškas raides. Pageidautina išvedamuosiuose į ekraną komentaruose taip pat vartoti tik lotyniškas raides (t.y. rašyti šveplai).

Page 5: Java programming

Paveldėjimo schemos Klasės Figura vaikai: Apskritimas, Kvadratas, Trikampis. Jie

paveldi tėvo klasės Figura bendrus metodus: piešti(), trinti(), gautiSpalva(), keistiSpalva().

Šiuo atveju visos trys vaiko klasės naudojasi tik tėvo klasės metodais.

Figura

piesti()trinti()gautiSpalva()keistiSpalva()

Apskritimas Kvadratas Trikampis

Page 6: Java programming

Paveldėjimo schemos Plačiai naudojamos tokios schemos:1. Vaiko klasė tik pasikeičia jai nevisai tinkančius (sukurtų algoritmų požiūriu) tėvo klasės metodus. Tai vadinama metodų

užklotimi.2. Vaiko klasė turi nuosavus metodus, kurių jei trūksta naudojant tėvo klasės metodus.3. Mišrus variantas: naudojama metodų užklotis ir pridedami nuosavi metodai. Korektiškiausias yra pirmasis variantas, nes vaikas išsaugo tėvo klasės interface ir niekada nekyla “vienos krypties papildymo

problemų”.

Page 7: Java programming

Paveldėjimo schemos Mišri schema:

Klasės Apskritimas ir Kvadratas jau naudoja naujas piesti() ir trinti() metodų modifikacijas. Klasė Trikampis turi tik jai vienai pasiekiamą metodą uzpildyti(). Tai vienos krypties metodas. O trynimui naudos tėvo klasės metodą.

Figura

piesti()trinti()gautiSpalva()keistiSpalva()

Apskritimas

piesti()trinti()

Kvadratas

piesti()trinti()

Trikampis

piesti()uzpildyti()

Page 8: Java programming

Paveldėjimo aprašas Tėvo tipo objektui galima priskirti vaiko tipo

objektą (tėvas žino viską apie savo vaiką). Vaiko tipo objektui negalima priskirti tėvo tipo

objekto (vaikas nežino visko apie savo tėvą). Paveldėjimas išreiškiamas sukuriant objektus; Paveldėjimo klasės antraštė pasipildo žodeliu

extends:

[modifikatorius] class VaikoVardas extends TevoKlasesVardas

Page 9: Java programming

Pavyzdys 1class B { public int sumavimas(int y, int x)

{ System.out.println("x+y="+(x+y));return (x+y);}

}class A extends B { public int daugyba(int x, int y)

{ System.out.println("x*y="+(x*y));return (x*y);}

}class testas { static A a = new A(); static B b = new B();

public static void main(String[] args) { int x=5, y=20, sum, dgs;

sum = a.sumavimas(x, y);dgs = a.daugyba(sum, x);System.out.println("daugyba "+a.daugyba(sum, dgs));b=a;b.sumavimas(sum, dgs);System.out.println("daugyba "+b.sumavimas(dgs, sum));

}}

class B { public int sumavimas(int y, int x)

{ System.out.println("x+y="+(x+y));return (x+y);}

}class A extends B { public int daugyba(int x, int y)

{ System.out.println("x*y="+(x*y));return (x*y);}

}class testas { static A a = new A(); static B b = new B();

public static void main(String[] args) { int x=5, y=20, sum, dgs;

sum = a.sumavimas(x, y);dgs = a.daugyba(sum, x);System.out.println("daugyba "+a.daugyba(sum, dgs));b=a;b.sumavimas(sum, dgs);System.out.println("daugyba "+b.sumavimas(dgs, sum));

}} Koks bus atsakymas ?

Page 10: Java programming

Pavyzdys 1

x+y=25x*y=125x*y=3125daugyba 3125x+y=150x+y=150daugyba 150

x+y=25x*y=125x*y=3125daugyba 3125x+y=150x+y=150daugyba 150

Page 11: Java programming

Pavyzdys 2class Class1 { private String s = "Class1: ";

public void append(String ss) { s += ss; }public void m1() { append(" m1()");}public void m2() { append(" m2()");}public void m3() { append(" m3()");}public void print() { System.out.println(s+";");}public static void main(String[] args) { Class1 c1 = new Class1();

c1.m1(); c1.m2(); c1.m3(); c1.print();}}public class testas extends Class1 { public void m3()

{ append(“ Class2.m3()");}

public void m4() { append(" m4()"); } public static void main(String[] args) { testas c2 = new testas();

c2.m1(); c2.m2(); c2.m3(); c2.m4(); c2.print();System.out.println("Test for the superclass Class1:");Class1.main(args);}

}

class Class1 { private String s = "Class1: ";

public void append(String ss) { s += ss; }public void m1() { append(" m1()");}public void m2() { append(" m2()");}public void m3() { append(" m3()");}public void print() { System.out.println(s+";");}public static void main(String[] args) { Class1 c1 = new Class1();

c1.m1(); c1.m2(); c1.m3(); c1.print();}}public class testas extends Class1 { public void m3()

{ append(“ Class2.m3()");}

public void m4() { append(" m4()"); } public static void main(String[] args) { testas c2 = new testas();

c2.m1(); c2.m2(); c2.m3(); c2.m4(); c2.print();System.out.println("Test for the superclass Class1:");Class1.main(args);}

}

Koks bus atsakymas ?

Page 12: Java programming

Pavyzdys 2

Class1: m1() m2() Class2.m3() m4();Test for the superclass Class1:Class1: m1() m2() m3();

Class1: m1() m2() Class2.m3() m4();Test for the superclass Class1:Class1: m1() m2() m3();

Page 13: Java programming

Konstruktoriai ir atributas super Taigi konstruktoriaus vieta yra skirta

paruošiamiesiems veiksmams su naujai sukurtu objektu atlikti.

Sukūrus vaiko klasės objektą, jo viduje savaime yra sukuriamas ir tėvo klasės objektas.

Tokiu atveju tėvo objektas turi būti korektiškai inicijuojamas.

Taigi JAVA pati išsikviečia tėvo konstruktorių iš vaiko konstruktoriaus.

Page 14: Java programming

Pavyzdysclass A{ A()

{System.out.println("Vykde A() konstruktoriu");}}

class B extends A{ B()

{System.out.println("Vykde B() konstruktoriu");}}

class C extends B{ C()

{System.out.println("Vykde C() konstruktoriu");}}

class testas{ public static void main(String[] args)

{ C c = new C();}}

class A{ A()

{System.out.println("Vykde A() konstruktoriu");}}

class B extends A{ B()

{System.out.println("Vykde B() konstruktoriu");}}

class C extends B{ C()

{System.out.println("Vykde C() konstruktoriu");}}

class testas{ public static void main(String[] args)

{ C c = new C();}}

Koks bus atsakymas ?

Page 15: Java programming

Pavyzdys

Vykde A() konstruktoriuVykde B() konstruktoriuVykde C() konstruktoriu

Vykde A() konstruktoriuVykde B() konstruktoriuVykde C() konstruktoriu

Page 16: Java programming

SVARBU! Jei naudojami savi konstruktoriai, kompiliatorius

tėvo ir vaiko klasei sukurs ir iškvies “bevardžius” konstruktorius.

Konstruktorius pradedamas vykdyti nuo aukščiausios klasės ir eina žemyn pagal hierarchiją (nuo tėvo klasės atgal iki vaiko klasės).

Page 17: Java programming

Atributas super Jei konstruktorius yra su parametrų sąrašu, tada

pačiam reikia iškviesti tėvo klasės konstruktorių.

Tam naudojamas žodelis super. Prie šio parametro skliausteliuose nurodomi

perduodami parametrai.

class B1 extends A1{ B1(int i)

{super(i);// kiti veiksmai ir metodai

}}

class B1 extends A1{ B1(int i)

{super(i);// kiti veiksmai ir metodai

}}

Page 18: Java programming

Pavyzdysclass A1{ A1(int i){System.out.println("Konstruktorius A1(): i^5 = "+Math.round(Math.pow(i, 5)));}}class B1 extends A1{ B1(int i)

{ super(i);System.out.println("Konstruktorius B1(): i(saknis) = "+(int)(Math.sqrt(i)));}}

class C1 extends B1{ C1(int i)

{ super(i);System.out.println("Konstruktorius C1(): i = "+i);}

}class testas{ public static void main(String[] args)

{ int i = 25;C1 c = new C1(i);}

}

class A1{ A1(int i){System.out.println("Konstruktorius A1(): i^5 = "+Math.round(Math.pow(i, 5)));}}class B1 extends A1{ B1(int i)

{ super(i);System.out.println("Konstruktorius B1(): i(saknis) = "+(int)(Math.sqrt(i)));}}

class C1 extends B1{ C1(int i)

{ super(i);System.out.println("Konstruktorius C1(): i = "+i);}

}class testas{ public static void main(String[] args)

{ int i = 25;C1 c = new C1(i);}

}

Koks bus atsakymas ?

Page 19: Java programming

Pavyzdys

Konstruktorius A1(): i^5 = 9765625Konstruktorius B1(): i(saknis) = 5Konstruktorius C1(): i = 25

Konstruktorius A1(): i^5 = 9765625Konstruktorius B1(): i(saknis) = 5Konstruktorius C1(): i = 25

Page 20: Java programming

Svarbu Jeigu klasėje C1() praleistume kontruktoriaus

iškvietimą – klaida! Jei konstruktoriaus iškvietimą praleistume B1()

klasėje – klaida! Būtina, kad sakinys super eitų pirmuoju sakiniu; super dar vadinamas kreipiniu į tėvo klasės

kintamąjį/metodą (kai sutampa vardai.

super formatai:super.kintamasissuper.metodas()

Page 21: Java programming

Pavyzdys 1class A1{ int x=3;}class B1 extends A1{int x=4;}class C1 extends B1{ int x=5;

{ A1 a = new A1();System.out.println("x = "+ x);System.out.println("kvadratas = "+Math.pow(this.x, 2));System.out.println("x = "+(super.x));System.out.println("saknis = "+Math.sqrt(super.x));System.out.println("x = "+(a.x));System.out.println("sandauga = "+(super.x*a.x));

}}class testas extends C1{ public static void main(String[] args)

{ C1 c = new C1(); System.out.println("---------"); }

}

class A1{ int x=3;}class B1 extends A1{int x=4;}class C1 extends B1{ int x=5;

{ A1 a = new A1();System.out.println("x = "+ x);System.out.println("kvadratas = "+Math.pow(this.x, 2));System.out.println("x = "+(super.x));System.out.println("saknis = "+Math.sqrt(super.x));System.out.println("x = "+(a.x));System.out.println("sandauga = "+(super.x*a.x));

}}class testas extends C1{ public static void main(String[] args)

{ C1 c = new C1(); System.out.println("---------"); }

}

Koks bus atsakymas ?

Page 22: Java programming

Pavyzdys 1

x = 5kvadratas = 25.0x = 4saknis = 2.0x = 3sandauga = 12---------

x = 5kvadratas = 25.0x = 4saknis = 2.0x = 3sandauga = 12---------

Page 23: Java programming

Pavyzdys 2class Class3 { Class3(int i)

{System.out.println("Constructor of Class3 "+i);}}class Class4 extends Class3 { Class4(int i)

{ super(i); i++; System.out.println("Constructor of Class4 " +i);}

}public class testas extends Class4 { testas(int i)

{ super(i);i = i+2;System.out.println("Constructor of testas " +i);}

public static void main (String[] args) { testas c5 = new testas(123);}}

class Class3 { Class3(int i)

{System.out.println("Constructor of Class3 "+i);}}class Class4 extends Class3 { Class4(int i)

{ super(i); i++; System.out.println("Constructor of Class4 " +i);}

}public class testas extends Class4 { testas(int i)

{ super(i);i = i+2;System.out.println("Constructor of testas " +i);}

public static void main (String[] args) { testas c5 = new testas(123);}}

Koks bus atsakymas ?

Page 24: Java programming

Pavyzdys 2

Constructor of Class3 123Constructor of Class4 124Constructor of testas 125

Constructor of Class3 123Constructor of Class4 124Constructor of testas 125

Page 25: Java programming

Klausimai ?

Page 26: Java programming

Metodų užklotis (overriding)

Tai – polimorfizmo atvejis, kai vaiko klasėse naudojami vienodi metodai.

Būtinos sąlygos: Sutampa metodų vardai; Sutampa jų antraštės; Sutampa metodų grąžinamos reikšmės tipai.

Metodo pasirinkimą nusako tipas objekto, kuriam šis metodas kviečiamas.

Page 27: Java programming

Metodų užklotis (overriding)

T.y. jei objektas yra tėvo klasės tipo, tai bus kviečiamas jos metodas. Kitu atveju kviečiamas vaiko klasės metodas.

Tai atlieka vykdymo metu ir vadinama “dinaminiu suliejimu”.

Tačiau tai prailgina programos vykdymo trukmę. Neužklojami:

Konstruktoriai; final tipo metodai; statiniai metodai (statinį metodą galima “paslėpti” tik

statiniu metodu).

Page 28: Java programming

Pavyzdysclass Figura{ protected double ilgis;

protected double plotis;Figura()//------------------------------------------{ this(0.0, 0.0);}

Figura(double i, double j) {ilgis = i; plotis = j;}

double plotas()//-----------------------------------{System.out.print("ploto nera -> ");return -1;}

double plotas(double ilgis, double plotis){System.out.print("ploto su parametrais nera -> ");return -2;}

double perimetras(){System.out.print("perimetro nera -> ");return -3;}

}

class Figura{ protected double ilgis;

protected double plotis;Figura()//------------------------------------------{ this(0.0, 0.0);}

Figura(double i, double j) {ilgis = i; plotis = j;}

double plotas()//-----------------------------------{System.out.print("ploto nera -> ");return -1;}

double plotas(double ilgis, double plotis){System.out.print("ploto su parametrais nera -> ");return -2;}

double perimetras(){System.out.print("perimetro nera -> ");return -3;}

}

Page 29: Java programming

class Staciakampis extends Figura{ Staciakampis()

{super(); }Staciakampis(double a, double b) {super (a, b);}double plotas()//-----------------------------------

{System.out.println("Staciakampis:");return ilgis*plotis;}

double plotas(double ilgis, double plotis){System.out.print("Staciakampio plotas = ");return (ilgis*plotis);}

double perimetras(){System.out.print("Staciakampio perimetras = ");return ilgis*2+plotis*2;} }

class StatusisTrikampis extends Figura{ StatusisTrikampis()

{super(); }StatusisTrikampis(double a, double b)

{ilgis = a; plotis = b;}double plotas()//-----------------------------------

{System.out.println("Statusis trikampis:");return ilgis*plotis;}

double plotas(double ilgis, double plotis){System.out.print(" Stataus trikampio plotas = ");return (ilgis*plotis)/2;}

double perimetras(){return ilgis+plotis+Math.sqrt(ilgis*ilgis+plotis*plotis);} }

class Staciakampis extends Figura{ Staciakampis()

{super(); }Staciakampis(double a, double b) {super (a, b);}double plotas()//-----------------------------------

{System.out.println("Staciakampis:");return ilgis*plotis;}

double plotas(double ilgis, double plotis){System.out.print("Staciakampio plotas = ");return (ilgis*plotis);}

double perimetras(){System.out.print("Staciakampio perimetras = ");return ilgis*2+plotis*2;} }

class StatusisTrikampis extends Figura{ StatusisTrikampis()

{super(); }StatusisTrikampis(double a, double b)

{ilgis = a; plotis = b;}double plotas()//-----------------------------------

{System.out.println("Statusis trikampis:");return ilgis*plotis;}

double plotas(double ilgis, double plotis){System.out.print(" Stataus trikampio plotas = ");return (ilgis*plotis)/2;}

double perimetras(){return ilgis+plotis+Math.sqrt(ilgis*ilgis+plotis*plotis);} }

Page 30: Java programming

class skaiciuoti{ skaiciuoti()

{super();}double skaiciuoti(Figura f, double x, double y)

{System.out.println(" Plotas = "+(int)f.plotas());System.out.println(" Perimetras = "+(int)f.perimetras());System.out.println(" Plotas = "+(int)f.plotas(x, y));return 0;}

}public class testas{

public static void main (String[] args) {double i=5.0, j=3.0;

Figura fig = new Figura(i, j);Staciakampis sta = new Staciakampis(i, j);StatusisTrikampis tri = new StatusisTrikampis(j, i);skaiciuoti skaic = new skaiciuoti();plotas = sta.plotas(i,j); System.out.println(plotas);perimetras = sta.perimetras();System.out.println(perimetras);Figura figura;System.out.println();System.out.println("G R U P E - A");figura = fig;System.out.println("Plotas = "+(int)figura.plotas());System.out.println("Perimetras = "+(int)figura.perimetras());

class skaiciuoti{ skaiciuoti()

{super();}double skaiciuoti(Figura f, double x, double y)

{System.out.println(" Plotas = "+(int)f.plotas());System.out.println(" Perimetras = "+(int)f.perimetras());System.out.println(" Plotas = "+(int)f.plotas(x, y));return 0;}

}public class testas{

public static void main (String[] args) {double i=5.0, j=3.0;

Figura fig = new Figura(i, j);Staciakampis sta = new Staciakampis(i, j);StatusisTrikampis tri = new StatusisTrikampis(j, i);skaiciuoti skaic = new skaiciuoti();plotas = sta.plotas(i,j); System.out.println(plotas);perimetras = sta.perimetras();System.out.println(perimetras);Figura figura;System.out.println();System.out.println("G R U P E - A");figura = fig;System.out.println("Plotas = "+(int)figura.plotas());System.out.println("Perimetras = "+(int)figura.perimetras());

Page 31: Java programming

figura = sta;System.out.println("Plotas = "+(int)figura.plotas());System.out.println(" Perimetras = "+(int)figura.perimetras());System.out.println();System.out.println("G R U P E - B");System.out.println("Plotas = "+(int)fig.plotas());System.out.println("Perimetras = "+(int)fig.perimetras());System.out.println("Plotas = "+(int)sta.plotas());System.out.println(" Perimetras = "+(int)sta.perimetras());System.out.println("Plotas = "+(int)tri.plotas());System.out.println("Perimetras = "+(int)tri.perimetras());System.out.println();System.out.println("G R U P E - C");skaic.skaiciuoti(sta, 40, 30);skaic.skaiciuoti(new StatusisTrikampis(i, j), 10.5, 25.5);System.out.println();System.out.println("PABAIGA");}

}

figura = sta;System.out.println("Plotas = "+(int)figura.plotas());System.out.println(" Perimetras = "+(int)figura.perimetras());System.out.println();System.out.println("G R U P E - B");System.out.println("Plotas = "+(int)fig.plotas());System.out.println("Perimetras = "+(int)fig.perimetras());System.out.println("Plotas = "+(int)sta.plotas());System.out.println(" Perimetras = "+(int)sta.perimetras());System.out.println("Plotas = "+(int)tri.plotas());System.out.println("Perimetras = "+(int)tri.perimetras());System.out.println();System.out.println("G R U P E - C");skaic.skaiciuoti(sta, 40, 30);skaic.skaiciuoti(new StatusisTrikampis(i, j), 10.5, 25.5);System.out.println();System.out.println("PABAIGA");}

}

Koks bus atsaykmas ?

Page 32: Java programming

Staciakampio plotas = 15.0Staciakampio perimetras = 16.0

G R U P E - Aploto nera -> Plotas = -1perimetro nera -> Perimetras = -3Staciakampis:Plotas = 15Staciakampio perimetras = Perimetras = 16

G R U P E - Bploto nera -> Plotas = -1perimetro nera -> Perimetras = -3Staciakampis:Plotas = 15Staciakampio perimetras = Perimetras = 16Statusis trikampis:Plotas = 15Perimetras = 13

Staciakampio plotas = 15.0Staciakampio perimetras = 16.0

G R U P E - Aploto nera -> Plotas = -1perimetro nera -> Perimetras = -3Staciakampis:Plotas = 15Staciakampio perimetras = Perimetras = 16

G R U P E - Bploto nera -> Plotas = -1perimetro nera -> Perimetras = -3Staciakampis:Plotas = 15Staciakampio perimetras = Perimetras = 16Statusis trikampis:Plotas = 15Perimetras = 13

Page 33: Java programming

G R U P E - CStaciakampis: Plotas = 15Staciakampio perimetras = Perimetras = 16Staciakampio plotas = Plotas = 1200Statusis trikampis: Plotas = 15 Perimetras = 13 Stataus trikampio plotas = Plotas = 133

PABAIGA

G R U P E - CStaciakampis: Plotas = 15Staciakampio perimetras = Perimetras = 16Staciakampio plotas = Plotas = 1200Statusis trikampis: Plotas = 15 Perimetras = 13 Stataus trikampio plotas = Plotas = 133

PABAIGA

Page 34: Java programming

Klausimai ?