730 likes | 856 Views
Εργαστήριο Πολυμέσων. www.medialab.ece.ntua.gr/medialab/education/education.html. Java references site Java http://java.sun.com tutorials http://java.sun.com/docs/books/tutorial documentation http://java.sun.com/docs/index.html
E N D
Εργαστήριο Πολυμέσων www.medialab.ece.ntua.gr/medialab/education/education.html • Java references • site Java http://java.sun.com • tutorials http://java.sun.com/docs/books/tutorial • documentation http://java.sun.com/docs/index.html • doc. SDK v1.3.1 http://java/sun.com/j2se/1.3/docs.html • SDK platform http://java.sun.com/downloads/
Ύλη Java • Εργαλεία της Java • Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό • Ορισμός Κλάσης • Κληρονομικότητα • Κατασκευαστές • Access specifiers – modifiers • Τύποι δεδομένων – exceptions • Applets
Χαρακτηριστικά της Java • Object-Oriented programming language • Ενσωμάτωση - Encapsulation • Κληρονομικότητα – Inheritance • Πολυμορφισμός – Polymorphism Δημιουργία ανεξάρτητων εφαρμογών (Applets) Interpreted programming language Κατανεμημένη Multithreaded Υποστηρίζει multimedia εφαρμογές
Εργαλεία της Java • Java compiler – javac.exe javac <filename>.java • Java interpreter – java.exe java <filename> • Appletviewer – Internet Browsers
JDK compiler javac.exe JRE java.exe JVM linux win32
Editor <filename>.java javac.exe javac <filename>.java <filename>.class java.exe java <filename> Εκτέλεση
Παράδειγμα: Compiler - Interpreter http://www.medialab.ece.ntua.gr/medialab/education/education.html */ The HelloWorldApp class implements an application that * simply displays "Hello World!" to the standard output. */ class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); //Display the string. } } HelloWorldApp.java C:\temp\java Εφαρμογή των javac.exe και java.exe
Παράδειγμα: Compiler - Interpreter http://www.medialab.ece.ntua.gr/medialab/education/education.html
Example: Java Applet http://www.medialab.ece.ntua.gr/medialab/education/education.html import java.applet.Applet; import java.awt.Graphics; public class HelloWorld extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } } HelloWorld.java C:\temp\java Εφαρμογή του javac.exe
Example: Java Applet http://www.medialab.ece.ntua.gr/medialab/education/education.html <HTML><HEAD> <TITLE>A Simple Program</TITLE></HEAD> <BODY> Here is the output of my program: <APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25> </APPLET> </BODY></HTML> Hello.html C:\temp\java Εφαρμογή του appletviewer
Example: Java Applet http://www.medialab.ece.ntua.gr/medialab/education/education.html
Ορισμός κλάσεως: • Η κλάση χρησιμεύει για να δημιουργεί αντικείμενα (object) • Object = στιγμιότυπο μιας κλάσεως • Δομή κλάσεως: • - Δήλωση • - Σώμα (body) • Δήλωση κλάσεως: • {access specifier} class {class_name} extends {name_of_superclass} implements {name_of_interface}
Packages • Package = sub-directory / folder • Χρησιμοποιούνται με σκοπό την ομαδοποίηση συγκεκριμένων κλάσεων. Σε κάθε package έχουμε κλάσεις που σχετίζονται μεταξύ τους • Για να περιέχεται μια κλάση σε ένα package πρέπει ο πηγαίος κώδικας της να περιέχεται στο αντίστοιχο folder • Η δήλωση του package (package statement) γίνεται στην αρχή
B A Κληρονομικότητα (Inheritance) A B C D Η κλάση Β κληρονομεί από την Α {Β}extends {A} Β υποκλάση της Α, Α υπερκλάση της Β {D}extends {C}και {C}extends {A} => {D}extends {A}
Προσδιοριστές πρόσβασης κλάσεως: • public • Μπορεί να κληρονομηθεί από όλες τις κλάσεις • protected • Μπορεί να κληρονομηθεί απόκλάσεις που ανήκουν στο ίδιο package • private • Δεν μπορεί να κληρονομηθεί από υποκλάσεις της(πεδία/μέθοδοι) • final • Η κλάση αυτή δεν έχει υποκλάσεις • abstract • Η κλάση αυτή περιέχει έστω μια μη ολοκληρωμένη (abstract) μέθοδο • “κενό” ή default • Η κλάση αυτή είναι public για το τρέχων package
Δημιουργία Στιγμιοτύπου (instance) – Kατασκευαστή (constructor): • {Instance’s_type} {instance’s_name} • {instance’s_name} = new {Instance’s_type}() • παραδείγματα • Objectobj; • obj = new Object(); • A a = new A(); • String str = new String("Hello, I am a new string!");
Σημειώσεις: • Ο constructor με κενή λίστα παραμέτρων καλείται default ή null constructor της κλάσης. • Αν η κλάση Β κληρονομεί απο την Α, (Β υποκλάση της Α) και δεν έχουν οριστεί constructors σε αυτήν τότε χρησιμοποιείται ο default constructor της Α • Όταν ένας constructor καλείται, πριν κάνει οτιδήποτε άλλο καλεί τον default constructor της υπερκλάσης του, για την δημιουργία και αρχικοποίηση των πεδίων που κληρονομούνται από αυτή.
Παράδειγμα Κληρονομικότητας: class A { int a; void add(int x) { a += x;} } class B extends A { // Τα 'a' και 'void add(int x) {...}' υπονοούνται int prev; void sub(int x) { prev = a; a - = x; } }
Παράδειγμα Κληρονομικότητας με overriding: class A { int a; void add(int x) { a += x;} } class B extends A { // Τα 'a' και 'void add(int x) {...}' υπονοούνται float a; // αλλάγή τύπου του a void add(int x) { a = a + ((float) x); // αλλάγή της add(int x) } } ** H μέθοδος που υπερκαλύπτεται πρέπει να έχει το ίδιο όνομα, λίστα παραμέτρων και επιστρεφόμενο τύπο με αυτήν που κληρονομεί
Οι μεταβλητές this - super: class A { void doSomething() { ...... } } class B extends A { void doSomething() { // "Υπερκαλύπτει" (overrides) την ........ // doSomething() της κλάσης Α. } } A o1; B o2; o1.doSomething();// Καλείται η doSomething() της Α o2.doSomething();// Καλείται η doSomething() της Β
Οι μεταβλητές this - super: super Εάν θέλουμε να καλέσουμε μια μέθοδο της Α την οποία έχουμε υπερκαλύψει στην Β τότε την καλουμε ως εξής: super.doSomething(); // τώρα καλείται η doSomething() της Α this class A { int a; void set(int a) { this.a = a; } } class A { void make_a_new_object() { B tmp; tmp.owner(this); } }
Παράδειγμα με προσδιοριστές πρόσβασης κλάσεων: class A { int b; //φαίνεται σε όλο το package, πρακτικά παντού protected c; //φαίνεται στην Α και την Β private d; //φαίνεται μόνο στην Α public A() {...} //ορατή από παντού private void who_am_i() { System.out.println("I am class A!"); } } class B extends A { // Κληρονομεί: b, c, A() via super() // Δεν Κληρονομεί: d, who_am_i() }
Παράδειγμα με packages: folder1 temp folder2 Test1.java Test2.java package folder1; public class Test1{ } Test1.java package folder2; public class Test2 extends folder1.Test1 { } Test2.java C:\temp\java\javac folder1/Test1.java C:\temp\java\javac folder2/Test2.java
Keyword Description Size/Format (integers) byte Byte-length integer 8-bit two's complement short Short integer 16-bit two's complement int Integer 32-bit two's complement long Long integer 64-bit two's complement (real numbers) float Single-precision floating point 32-bit IEEE 754 double Double-precision floating point 64-bit IEEE 754 (other types) char A single character 16-bit Unicode character boolean A boolean value (true or false) true or false Primitive Data Types
Literal Data Type 178 int 8864L long 37.266 double 37.266D double 87.363F float 26.77e3 double ' c ' char true boolean false boolean Literal Values and Their Data Types
Reference Data Types Σε αντίθεση με τα Primitive Data Types δείχνουν σε μια διεύθυνση της τιμής ή συνόλου τιμών που αντιπροσοπεύουν την μετάβλητη Π.χ. Πίνακες (arrays), κλάσεις (classes)
Τελεστές (Operators) • Αριθμητικοί (Arithmetic) • Σχεσιακοί – Συνθήκης (Relational – Conditional) • Λογικοί (Logical) • Ανάθεσης (Assignment) • Άλλοι (Others)
Operator Use Description + op1 + op2 Adds op1 and op2 - op1 - op2 Subtracts op2 from op1 * op1 * op2 Multiplies op1 by op2 / op1 / op2 Divides op1 by op2 % op1 % op2 Computes the remainder of dividing op1 by op2 Αριθμητικοί Τελεστές – Arithmetic Operators
Αριθμητικοί Τελεστές Operator Use Description ++ op++ Increments op by 1; evaluates to the value of op before it was incremented ++ ++op Increments op by 1; evaluates to the value of op after it was incremented -- op-- Decrements op by 1; evaluates to the value of op before it was decremented -- --op Decrements op by 1; evaluates to the value of op after it was decremented
ΣχεσιακοίΤελεστές – ΤελεστέςΣυνθήκης Operator Use Returns true if > op1 > op2 op1 is greater than op2 >= op1 >= op2 op1 is greater than or equal to op2 < op1 < op2 op1 is less than op2 <= op1 <= op2 op1 is less than or equal to op2 == op1 == op2 op1 and op2 are equal != op1 != op2 op1 and op2 are not equal
ΣχεσιακοίΤελεστές – ΤελεστέςΣυνθήκης Operator Use Returns true if && op1 && op2 op1 and op2 are both true, conditionally evaluates op2 || op1 || op2 either op1 or op2 is true, conditionally evaluates op2 ! ! op op is false & op1 & op2 op1 and op2 are both true, always evaluates op1 and op2 | op1 | op2 either op1 or op2 is true, always evaluates op1 and op2 ^ op1 ^ op2 if op1 and op2 are different--that is if one or the other of the operands is true but not both
ΛογικοίΤελεστές Operator Use Operation & op1 & op2 bitwise and | op1 | op2 bitwise or ^ op1 ^ op2 bitwise xor ~ ~op2 bitwise complement
Τελεστές Ανάθεσης Operator Use Equivalent to += op1 += op2 op1 = op1 + op2 -= op1 -= op2 op1 = op1 - op2 *= op1 *= op2 op1 = op1 * op2 /= op1 /= op2 op1 = op1 / op2 %= op1 %= op2 op1 = op1 % op2 &= op1 &= op2 op1 = op1 & op2
Τελεστές Ανάθεσης Operator Use Equivalent to |= op1 |= op2 op1 = op1 | op2 ^= op1 ^= op2 op1 = op1 ^ op2 <<= op1 <<= op2 op1 = op1 << op2 >>= op1 >>= op2 op1 = op1 >> op2 >>>= op1 >>>= op2 op1 = op1 >>> op2
Άλλοι Τελεστές Operator Use Description ?: op1 ? op2 : op3 If op1 is true, returns op2. Otherwise, returns op3. [] type [] Declares an array of unknown length, which contains type elements. [] type[ op1 ] Creates and array with op1 elements. Must be used with the new operator. [] op1[ op2 ] Accesses the element at op2 index within the array op1. Indices begin at 0 and extend through the length of the array minus one. . op1.op2 Is a reference to the op2 member of op1.
Άλλοι Τελεστές Operator Use Description ?: op1 ? op2 : op3 If op1 is true, returns op2. Otherwise, returns op3. [] type [] Declares an array of unknown length, which contains type elements. [] type[ op1 ] Creates and array with op1 elements. Must be used with the new operator. [] op1[ op2 ] Accesses the element at op2 index within the array op1. Indices begin at 0 and extend through the length of the array minus one. . op1.op2 Is a reference to the op2 member of op1.
Εξαιρέσεις – Exception Handlers try { statement(s) } catch (exceptiontype name) { statement(s) } finally { statement(s) } Παράδειγμα readFile { open the file; determine its size; allocate that much memory; read the file into memory; close the file; }
Εξαιρέσεις – Exception Handlers errorCodeType readFile { initialize errorCode = 0; open the file; if (theFileIsOpen) { determine the length of the file; if (gotTheFileLength) { allocate that much memory; if (gotEnoughMemory) { read the file into memory; if (readFailed) { errorCode = -1; } } else { errorCode = -2; } } else { errorCode = -3; } close the file; if (theFileDidntClose && errorCode == 0) { errorCode = -4; } else { errorCode = errorCode and -4; } } else { errorCode = -5; } return errorCode; } Χωρίς χρήση βρόγχου Try - Catch Αύξηση κώδικα κατά 400%
Εξαιρέσεις – Exception Handlers readFile { try { open the file; determine its size; allocate that much memory; read the file into memory; close the file; } catch (fileOpenFailed) { doSomething; } catch (sizeDeterminationFailed) { doSomething; } catch (memoryAllocationFailed) { doSomething; } catch (readFailed) { doSomething; } catch (fileCloseFailed) { doSomething; } } Με χρήση βρόγχου Try - Catch Αύξηση κώδικα κατά 250%
Εξαιρέσεις – Exception Handlers try { statement(s) } catch (exceptiontype name) { statement(s) } finally { statement(s) } try { if (a == 10) { return; } } finally { print("finally\n"); } print("after try\n");
Java Applets Δημιουργία ενός Applet Κάθε Applet υλοποιείται με την δημιουργία μιας υποκλάσης της κλάσης Applet του πακέτου java.applet Public class myClass extends java.applet.Applet { … } ή import java.applet.Applet; Public class myClass extends Applet { … }
Βασικές λειτουργίες των Java Applets • Δημιουργία ενός Applet • Public void init() { … } • Public void start() { … } • Public void stop() { … } • Public void destroy() { … } • Public void paint (Graphics g) { … } • import java.awt.Graphics
“Κύκλος ζωής” του Applet Simple.java http://java.sun.com/docs/books/tutorial/applet/overview/index.html lc.html <html> <head> <title>Applet's life cycle</title> </head> <body> <applet code=“Simple.class" width=250 height=150></applet> </body> </html>
Γραφικά 0,0 Χ Υ import java.awt.Graphics drawLine(startX, startY, width, height); drawRect(startX, startY, width, height); fillRect(startX, startY, width, height); drawRoundRect(startX, startY, width, height);fillRoundRect(startX, startY, width, height); draw3DRect(startX, startY, width, height, boolean value);fillRect(startX, startY, width, height, boolean value); drawPolygon(arrayX, arrayY, array length); fillPolygon(arrayX, arrayY, array length); drawPolygon(polygon object); fillPolygon(polygon object);
Γραμματοσειρές Για να χρησιμοποιηθούν μέθοδοι των γραμματοσειρών της κλάσης Fonts πρέπει ο κώδικάς της να περιληφθεί στην αρχή του κώδικα της Applet εφαρμογής δηλώνοντας: import java.awt.Fonts Κατασκευαστής της κλάσης Fonts Font fb = new Font(“TimesRoman”, Font.BOLD, 24) Font af = new Font(“Arial”, Font.BOLD, 20) Font fbi = new Font(“TimesRoman”, Font.BOLD+ Font.ITALIC, 18) Για την σχεδίαση γραμματοσειράς στην οθόνη χρησιμοποιείται η μέθοδος: setFont(fontObject);
Χρώματα Για να χρησιμοποιηθούν μέθοδοι της κλάσης Color πρέπει ο κώδικάς της να περιληφθεί στην αρχή του κώδικα της Applet εφαρμογής δηλώνοντας: import java.awt.Color Κατασκευαστής της κλάσης Color Color c = new Color(redValue, greenValue, blueValue); 0 … 255, 0 … 255, 0 … 255 Για την σχεδίασηχρώματος στην οθόνη χρησιμοποιείται η μέθοδος: setColor(Color.white);
Παράδειγμα http://www.medialab.ece.ntua.gr/medialab/education/education.html
Βασικά στοιχεία ενός GUI Ένα GUI αποτελείται από GUI-components. Οι κλάσεις που χρησιμοποιούνται για την κατασκευή αντικειμένων τύπου GUI-components ανήκουν στο java.awt (Abstract Windowing Toolkit) package. Οι βασικότερες από αυτές είναι η κλάση Component και η κλάση Container. import java.awt.*
Γεγονότα στα GUI(GUI Events) Γεγονότα στέλνονται σε ένα πρόγραμμα Java από τα Windows. Η πληροφορία σχετικά με ένα GUI event, αποθηκεύεται σε ένα αντικείμενο που ανήκει στην κλάση ή σε υποκλάσεις της AWTEvent. Η AWTEvent είναι ορισμένη στο πακέτο java.awt.event. Το επόμενο σχήμα εμφανίζει την ιεραρχία των κλάσεων του πακέτου java.awt.event. import java.awt.event.*
Διαχείριση γεγονότων (events) Γεγονότα:Κλήσεις που παράγονται από γραφικά (Components) Περιλαμβάνουν ( click ποντικιού, μετακίνηση ποντικιού, πληκτρολόγηση κ.λ.π.) Ακρόαση-Διαχείριση γεγονότων:Ανατίθεται σε αντικείμενα κλάσεων που υλοποιούν ένα απαιτούμενο interface. Για κάθε ομάδα γεγονότων (π.χ. Mouse events, Action events) έχει προκαθοριστεί και ένα αντίστοιχο interface. Περιέχονται στο πακέτο java.awt.event.*