190 likes | 386 Views
Verteilte Software - Java - Objektorientierte Programmierung 1. Klasse. [ public ] [ abstract | final ] class Bezeichner [ extends Klassentyp] [ implements Schnittstellenliste] { [Attribute] [Methoden] [Konstruktoren] [innere Klassen] }.
E N D
Verteilte Software - Java - Objektorientierte Programmierung 1 Klasse [public] [abstract | final] class Bezeichner [extends Klassentyp] [implements Schnittstellenliste] { [Attribute] [Methoden] [Konstruktoren] [innere Klassen] } Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 2 Attribute [public | protected | private] [static] [final] [transient] [volatile] Typ Variablenbezeichner [ = Initialisierung ] { , Variablenbezeichner [ = Initialisierung ] }; Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 3 Methode [public | protected | private] [static] [abstract | final] [native] [synchronized] Resultattyp Methodenname ( [Parameterliste] ) [throws Typnamenliste] { Vereinbarungen Anweisungen } Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 4 // Klassen und Objekte public class KlaObj { public static void main(String args []) { Klasse1 a; a = new Klasse1("heute", 47); Klasse1 b = new Klasse1 ("morgen", 11); a.show(); b.show(); new Klasse1("gestern", 2001).show(); new Klasse1("jetzt").show(); new Klasse1().show(); } } class Klasse1 { int i; String s; Klasse1 (String string, int i) { s = string; this.i = i;} Klasse1 (String string) { s = string; i = 123;} Klasse1 () {s = "default"; i = 0;} void show() { System.out.println (s + ' ' + i + " in Klasse1"); } } heute 47 in Klasse1 morgen 11 in Klasse1 gestern 2001 in Klasse1 jetzt 123 in Klasse1 default 0 in Klasse1 Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 5 // static Member in Klassen public class Static { static A a; A b = new A ("morgen"); static { a = new A ("heute"); } public static void main(String args []) { System.out.println (A.count + " *** " + A.pi); // System.out.println (A.s); System.out.println (a.count); a.show(); // b.show(); new A().show(); } } class A { static int count = -1; static double pi; String s; static { count++; pi = Math.PI;} A () { this("kein s"); } A (String string) { count++; s = string; } void show() { System.out.print (count + " Objekte von A: hier "); System.out.println (s + '\t' + pi); } } 1 *** 3.141592653589793 1 1 Objekte von A: hier heute 3.141592653589793 2 Objekte von A: hier kein s 3.141592653589793 Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 6 // Referenzen auf Objekte public class Ref { public static void main(String args []) { Kreis k1 = new Kreis(), k2; k2 = new Kreis (1, 2, 3); k1.show(); k2.show(); change_radius(k1, 4); k1.show(); k2 = k1; k2.show(); k2.move(5, 6); k1.show(); k2.show(); } static void change_radius (Kreis k, int new_radius) { k.r = new_radius; } } class Kreis { int x, y, r; Kreis () { this(0, 0, 1); } Kreis (int mx , int y, int r) { x = mx; this.y = y; this.r = r; } void move( int new_x, int new_y) { x = new_x; y = new_y; } void show() { System.out.print ("Kreis mit Mittelpunkt (" + x + ", " + y); System.out.println (") und Radius " + r); } } Kreis mit Mittelpunkt (0, 0) und Radius 1 Kreis mit Mittelpunkt (1, 2) und Radius 3 Kreis mit Mittelpunkt (0, 0) und Radius 4 Kreis mit Mittelpunkt (0, 0) und Radius 4 Kreis mit Mittelpunkt (5, 6) und Radius 4 Kreis mit Mittelpunkt (5, 6) und Radius 4 Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 7 // Vererbung public class Vererb { public static void main(String args []) { Rotationskoerper rk; rk = new Rotationskoerper(5, 3); rk.print_art(); rk.show(); Kegel keg = new Kegel(2, 7); keg.print_art(); keg.show(); System.out.println ("Kegelvolumen " + keg. getVolumen()); } } class Rotationskoerper { int durchmesser, hoehe; Rotationskoerper (int d, int h) { durchmesser = d; hoehe = h; } void print_art() { System.out.println ("Rotationskoerper"); } void show() { System.out.print ("mit Durchmesser " + durchmesser); System.out.println (" und Hoehe " + hoehe); } } class Kegel extends Rotationskoerper { Kegel (int d, int h) { super (d, h); } void print_art() { System.out.println ("Kegel"); } double getVolumen() { return Math.PI / 12 * durchmesser * durchmesser * hoehe; } } Rotationskoerper mit Durchmesser 5 und Hoehe 3 Kegel mit Durchmesser 2 und Hoehe 7 Kegelvolumen 7.330382858376184 Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 8 // Polymorphie public class Polym { public static void main(String args []) { int i; Rotationskoerper rk[] = new Rotationskoerper[3]; rk[0] = new Rotationskoerper(5, 3); rk[1] = new Kegel(6, 4); rk[2] = new Rotationskoerper(7, 5); for (i = 0; i < rk.length; i++) { rk[i].print_art(); rk[i].show(); if (rk[i] instanceof Kegel) System.out.println ("Kegelvolumen " + ((Kegel)rk[1]).getVolumen()); } } } class Rotationskoerper { int durchmesser, hoehe; Rotationskoerper (int d, int h) { durchmesser = d; hoehe = h; } void print_art() { System.out.println ("Rotationskoerper"); } void show() { System.out.print ("\tmit Durchmesser " + durchmesser); System.out.println (" und Hoehe " + hoehe); } } class Kegel extends Rotationskoerper { Kegel (int d, int h) { super (d, h); } void print_art() { System.out.println ("Kegel"); } double getVolumen() { return Math.PI / 12 * durchmesser * durchmesser * hoehe; } } Rotationskoerper mit Durchmesser 5 und Hoehe 3 Kegel mit Durchmesser 6 und Hoehe 4 Kegelvolumen 37.69911184307752 Rotationskoerper mit Durchmesser 7 und Hoehe 5 Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 9 // Exception public class Except { public static void main(String args[]) { int i; Ausnahme a = new Ausnahme(); for(i = 0; i < 5; i++) { try { a.test(i); } catch (A2 ausn2) {System.out.println(ausn2);} catch (A1 ausn1) {System.out.println(ausn1);} catch (Exception e) {System.out.println(e);} finally {System.out.println("allgemein " + i);} } } } class Ausnahme { void test(int i) throws A1, A2 { if (i == 4 || i == 9) throw new A1 ("Quadratzahl"); else if (i % 3 == 0) throw new A2 ("durch drei teilbar"); } } class A1 extends Exception { A1 (String s) {super (s);} } class A2 extends Exception { A2 (String s) {super (s);} } A2: durch drei teilbar allgemein 0 allgemein 1 allgemein 2 A2: durch drei teilbar allgemein 3 A1: Quadratzahl allgemein 4 Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 10 abstract class A_Base { abstract void work (); } // Dynamische Objekte und abstrakte Klasse public class Dyn_obj { public static void main(String args[]) { Object obj = AddClass.load (args[0]); if ( obj != null ) ((A_Base)obj).work(); } } class AddClass { static Object load (String cl_name) { Class new_cl = null; try { new_cl = Class.forName(cl_name); } catch (Exception e) { System.out.print ("Klasse "+ cl_name); System.out.println(".class nicht gefunden"); // return null; -- sofortiger Abbruch moeglich } try { return new_cl.newInstance(); } catch (Exception e) { System.out.println("Objekt nicht erzeugt"); return null; } } } class Maus extends A_Base { void work () { System.out.println ("Wo ist der Speck?"); } } class Katze extends A_Base { void work () { System.out.println ("Wo ist die Maus?"); } } C:\>java Dyn_obj Hund Klasse Hund.class nicht gefunden Objekt nicht erzeugt C:\>java Dyn_obj Katze Wo ist die Maus? C:\>java Dyn_obj Maus Wo ist der Speck? Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 11 // final - Daten und Methoden public class Final { public static void main(String args []) { Zylinder z; z = new Zylinder(10.0, 2.5, 3.3, 4.4); System.out.println ("Zylindervolumen " + z.getVolumen()); } } class Kreis { double radius, mx, my; final double pi = Math.PI; Kreis (double r, double x, double y) { // pi = 3.14; Can't assign a value to a final variable: pi radius = r; mx = x; my = y; } final double getFlaeche() { return pi * radius * radius; } } class Zylinder extends Kreis { double hoehe; Zylinder (double h, double r, double x, double y) { super (r, x, y); hoehe = h; } /* Final methods can't be overriden. Method double getFlaeche() is final in Kreis double getFlaeche() { return 3.0 * radius * radius; } */ double getVolumen() { return getFlaeche() * hoehe; } } Zylindervolumen 196.34954084936209 Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 12 public class Inner { int j; Ci1 oi1; Inner() { j = 0; oi1 = new Ci1(); System.out.println("j = " + j); oi1.inc(); System.out.println("j = " + j); } public static void main (String args []) { Ci2 oi2 = new Ci2(); new Inner(); } class Ci1 { Ci11 oi11; Ci1 () {oi11 = new Ci11();} void inc(){j++; oi11.inc();} class Ci11 { void inc(){j++;} } } static class Ci2 { Ci2(){ System.out.println("Ci2 Objekt"); } } } Ci2 Objekt j = 0 j = 2 Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 13 public class Anonym { String text; public Anonym() { text = "Anonyme Klasse"; new Print().pr(" nur Rahmen "); Print kopf = new Print() { void pr3(String text) { System.out.println("* " + text + " *"); } }; kopf.pr(text); } public static void main(String args[]) { new Anonym(); } } class Print { String rahmen; int breite; Print() { rahmen = "o"; breite = 20; } } void pr1() { for( int i = 0; i < breite; i++) System.out.print(rahmen); System.out.println(); } void pr2() { System.out.print(rahmen); for( int i = 0; i < breite - 2; i++) System.out.print(' '); System.out.println(rahmen); } void pr3(String s) { pr2(); } void pr(String s) { breite = s.length() + 4; pr1(); pr2(); pr3(s); pr2(); pr1();} } oooooooooooooooo o o o o o o oooooooooooooooo oooooooooooooooooo o o * Anonyme Klasse * o o oooooooooooooooooo Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
<<class>> IC <<class>> A <<implements>> <<interface>> BIF <<uses>> <<class>> B <<class>> Z <<implements>> <<interface>> IF <<uses>> <<class>> C <<implements>> Verteilte Software - Java - Objektorientierte Programmierung 14 Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 15 // Interface - Class public class IC { public static void main(String args []) { Z oz = new Z(1, 2, 3, 4); oz.work(); } } class A implements BIF { int a; A (int x) { a = x; } public void show_bif() { System.out.println ("(A " + a + ") bif = " + bif); } } class B implements BIF { int b; B (int x) { b = x; } public void show_bif() { System.out.println ("(B " + b + ") b*i*f = " + bif); } } class C extends A implements IF { int c; C (int x, int y) { super(x); c = y; } public void show_if() { System.out.println ("(C " + a + ") #i#f# c = " + c + bif); } } class Z { A oa; B ob; C oc; Z (int x1, int x2, int x3, int x4) { oa = new A(x1); ob = new B(x2); oc = new C(x3, x4); } void work() { use_bif(oa); use_bif(ob); use_bif(oc); use_if(oc); } void use_bif(BIF obj) { obj.show_bif();} void use_if(IF obj) { obj.show_if();} } interface BIF { char bif = 'X'; void show_bif(); } interface IF extends BIF { void show_if(); } (A 1) bif = X (B 2) b*i*f = X (A 3) bif = X (C 3) #i#f# c = 4X Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 16 package Tiere; public abstract class Tier_Base { public abstract void work(); } // Packages import Starter.AddClass; import Tiere.*; public class Verhalten { public static void main(String args[]) { Object obj = AddClass.load (args[0]); if ( obj != null ) ((Tier_Base)obj).work(); } } package Tiere; public class Katze extends Tier_Base { public void work () { System.out.println ("Wo ist die Maus?"); } } package Starter; public class AddClass { public static Object load (String cl_name) { Class new_cl = null; try { new_cl = Class.forName(cl_name); } catch (Exception e) { System.out.print ("Klasse "+ cl_name); System.out.println(".class nicht gefunden") } try { return new_cl.newInstance(); } catch (Exception e) { System.out.println("Objekt nicht erzeugt"); return null; } } } package Tiere; public class Maus extends Tier_Base { public void work () { System.out.println ("Wo ist der Speck?"); } } C:\>java Verhalten Tiere.Hund Klasse Tiere.Hund.class nicht gefunden Objekt nicht erzeugt C:\>java Verhalten Tiere.Katze Wo ist die Maus? C:\>java Verhalten Tiere.Maus Wo ist der Speck? Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 17 // Zugriffsrechte import ZA.ZA; public class Zugriff { public static void main (String args []) { ZA a = new ZA((byte)1, (byte)2, (byte)3); ZB b = new ZB(); a.show(); // a.priv++; not accessible from Zugriff // a.prot++; not accessible from Zugriff a.pub++; // a.ohne++; not accessible from Zugriff a.show(); b.dec_2(); // b.dec_3(); No method matching dec_3() found in ZB b.show(); } } package ZA; public class ZA { private byte priv; protected byte prot; public byte pub; byte ohne; public ZA (byte a, byte b, byte c) { priv = a; prot = b; pub = c; ohne = -1; } public ZA () { priv = 0; prot = 8; pub = 1; ohne = -2; } public void show() { System.out.println ("priv = " + priv + " prot = " + prot + " pub = " + pub + "\tohne = " + ohne); } } import ZA.ZA; class ZB extends ZA { // void dec_1 () {priv--;} not accessible from ZB protected void dec_2 () {prot--;} private void dec_3 () {pub--;} // public void dec_4 () {ohne--;} // not accessible from ZB } priv = 1 prot = 2 pub = 3 ohne = -1 priv = 1 prot = 2 pub = 4 ohne = -1 priv = 0 prot = 7 pub = 15 ohne = -2 Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik
Verteilte Software - Java - Objektorientierte Programmierung 18 Javaprogramm [packagestatment] {importstatment} {typedeclaration} packagestatment: package packagename; importstatment: import packagenane.*; | import classname; | import interfacename; typedeclaration: classdeclaration | interfacedeclaration | ; classdeclaration: {modifier} class name[extends classname][implements interfacename {, interfacename}] { ... } interfacedeclaration: {modifier} interface name [extends interfacename {, interfacename} ] { ... } Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik