5233a44a504691699c25aa7bfcd4ce1b.ppt
- Количество слайдов: 73
Εργαστήριο Πολυμέσων www. medialab. ece. ntua. gr/medialab/education/edu ation. 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 v 1. 3. 1 http: //java/sun. com/j 2 se/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. e xe JRE java. exe JVM win 3 2 linux
Editor <filename>. jav a javac. ex javac e <filename>. java <filename>. cla ss java. exe java <filename> Εκτέλεση
Παράδειγμα: Compiler - Interpreter http: //www. medialab. ece. ntua. gr/medialab/education/ed ucation. html */ The Hello. World. App class implements an application that * simply displays "Hello World!" to the standard output. */ class Hello. World. App { public static void main(String[] args) { System. out. println("Hello World!"); //Display the string. } } Hello. World. App. java C: tempjava Εφαρμογή των javac. exe και java. exe
Παράδειγμα: Compiler - Interpreter http: //www. medialab. ece. ntua. gr/medialab/education/ed ucation. html
Example: Java Applet http: //www. medialab. ece. ntua. gr/medialab/education/ed ucation. html import java. applet. Applet; import java. awt. Graphics; public class Hello. World extends Applet { public void paint(Graphics g) { g. draw. String("Hello world!", 50, 25); } } Hello. World. java C: tempjava Εφαρμογή του javac. exe
Example: Java Applet http: //www. medialab. ece. ntua. gr/medialab/education/ed ucation. html <HTML><HEAD> <TITLE>A Simple Program</TITLE></HEAD> <BODY> Here is the output of my program: <APPLET CODE="Hello. World. class" WIDTH=150 HEIGHT=25> </APPLET> </BODY></HTML> Hello. html C: tempjava Εφαρμογή του appletviewer
Example: Java Applet http: //www. medialab. ece. ntua. gr/medialab/education/ed ucation. 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) γίνεται στην αρχή
Κληρονομικότητα (Inheritance) A B C D Η κλάση Β κληρονομεί από την Α {Β} extends {A} A B Β υποκλάση της Α, Α υπερκλάση της Β {D} extends {C} και {C} extends {A} => {D} extends {A}
Προσδιοριστές πρόσβασης κλάσεως: • public Μπορεί να κληρονομηθεί από όλες τις κλάσεις • protected Μπορεί να κληρονομηθεί από κλάσεις που ανήκουν στο ί package • private Δεν μπορεί να κληρονομηθεί από υποκλάσεις της (πεδία/μέθοδοι) • final Η κλάση αυτή δεν έχει υποκλάσεις • abstract Η κλάση αυτή περιέχει έστω μια μη ολοκληρωμένη (abst μέθοδο
Δημιουργία Στιγμιοτύπου (instance) – Kατασκευαστή (constructor): {Instance’s_type} {instance’s_name} = new {Instance’s_type}() παραδείγματα • Object obj; 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) } }
Οι μεταβλητές this - super: class A { void do. Something() {. . . } } class B extends A { void do. Something() { (overrides) την. . . . Α. } } A o 1; B o 2; // "Υπερκαλύπτει" // do. Something() της κλάσης
Οι μεταβλητές this - super: super Εάν θέλουμε να καλέσουμε μια μέθοδο της Α την οποία έχουμε υπερκαλύψει στην Β τότε την καλουμε ως εξής: super. do. Something(); do. Something() της Α // τώρα καλείται η class A { int a; void set(int a) { this. a = a; } } this A { class 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: folder 1 tem p package folder 1; public class Test 1{ } folder 2 Test 1. jav a Test 2. jav a Test 1. jav a package folder 2; public class Test 2 extends folder 1. Test 1 Test 2. jav { } a C: tempjavac folder 1/Test 1. java C: tempjavac folder 2/Test 2. java
Primitive Data Types 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 double Single-precision floating point Double-precision floating point 32 -bit IEEE 754 64 -bit IEEE 754 (other types) char A single character 16 -bit Unicode character boolean A boolean value (true or false) true or false
Literal Values and Their Data Types Literal Data Type 178 int 8864 L 37. 266 D 87. 363 F 26. 77 e 3 long double float double 'c' char true false boolean
Reference Data Types Σε αντίθεση με τα Primitive Data Types δείχνουν σε μια διεύθυνση της τιμής ή συνόλου τιμών που αντιπροσοπεύουν την μετάβλητη Π. χ. Πίνακες (arrays), κλάσεις (classes)
Τελεστές (Operators) • Αριθμητικοί (Arithmetic) • Σχεσιακοί – Συνθήκης (Relational – Conditional) • Λογικοί (Logical) • Ανάθεσης (Assignment) • Άλλοι (Others)
Αριθμητικοί Τελεστές – Arithmetic Operators Operator Use Description + op 1 + op 2 Adds op 1 and op 2 - op 1 - op 2 Subtracts op 2 from op 1 * op 2 Multiplies op 1 by op 2 / op 1 / op 2 Divides op 1 by op 2 % op 1 % op 2 Computes the remainder of dividing op 1 by op 2
Αριθμητικοί Τελεστές 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 > op 1 > op 2 op 1 is greater than op 2 >= op 1 >= op 2 op 1 is greater than or equal to op 2 < op 1 < op 2 op 1 is less than op 2 <= op 1 <= op 2 op 1 is less than or equal to op 2 == op 1 == op 2 op 1 and op 2 are equal != op 1 != op 2 op 1 and op 2 are not equal
Σχεσιακοί Τελεστές – Τελεστές Συνθήκης Operator Use && op 1 && op 2 || op 1 || op 2 ! ! op & op 1 & op 2 | op 1 | op 2 either op 1 or op 2 is true, always evaluates op 1 and op 2 op 1 ^ op 2 if op 1 and op 2 are different--that is if one or the other of the operands is true but not both ^ Returns true if op 1 and op 2 are both true, conditionally evaluates op 2 either op 1 or op 2 is true, conditionally evaluates op 2 op is false op 1 and op 2 are both true, always evaluates op 1 and op 2
Λογικοί Τελεστές Operator & op 1 & op 2 | op 1 | op 2 bitwise or ^ Use Operation op 1 ^ op 2 bitwise xor ~ ~op 2 bitwise and bitwise complement
Τελεστές Ανάθεσης Operator += op 1 += op 2 op 1 = op 1 + op 2 -= op 1 -= op 2 op 1 = op 1 - op 2 *= op 1 *= op 2 op 1 = op 1 * op 2 /= Use Equivalent to op 1 /= op 2 op 1 = op 1 / op 2 %= op 1 %= op 2 op 1 = op 1 % op 2 &= op 1 &= op 2 op 1 = op 1 & op 2
Τελεστές Ανάθεσης Operator Use Equivalent to |= op 1 |= op 2 op 1 = op 1 | op 2 ^= op 1 ^= op 2 op 1 = op 1 ^ op 2 <<= op 1 <<= op 2 op 1 = op 1 << op 2 >>= op 1 >>= op 2 op 1 = op 1 >> op 2 >>>= op 1 >>>= op 2 op 1 = op 1 >>> op 2
Άλλοι Τελεστές Operator ? : op 1 ? op 2 : op 3 [] type [] Declares an array of unknown length, which contains type elements. [] Use Description type[ op 1 ] Creates and array with op 1 elements. Must be used with the new operator. [] op 1[ op 2 ] Accesses the element at op 2 index within the array op 1. Indices begin at 0 and extend through the length of the array minus one. . op 1. op 2 If op 1 is true, returns op 2. Otherwise, returns op 3. Is a reference to the op 2 member of op 1.
Άλλοι Τελεστές Operator ? : op 1 ? op 2 : op 3 [] type [] Declares an array of unknown length, which contains type elements. [] Use Description type[ op 1 ] Creates and array with op 1 elements. Must be used with the new operator. [] op 1[ op 2 ] Accesses the element at op 2 index within the array op 1. Indices begin at 0 and extend through the length of the array minus one. . op 1. op 2 If op 1 is true, returns op 2. Otherwise, returns op 3. Is a reference to the op 2 member of op 1.
Εξαιρέσεις – Exception Handlers try { statement(s) } catch (exceptiontype name) { statement(s) } finally { statement(s) } Παράδειγμα read. File { open the file; determine its size; allocate that much memory; read the file into memory; close the file; }
Εξαιρέσεις – Exception Handlers error. Code. Type read. File { initialize error. Code = 0; open the file; if (the. File. Is. Open) { determine the length of the file; if (got. The. File. Length) { allocate that much memory; if (got. Enough. Memory) { read the file into memory; if (read. Failed) { error. Code = -1; } } else { error. Code = -2; } } else { error. Code = -3; } close the file; if (the. File. Didnt. Close && error. Code == 0) { error. Code = -4; } else { error. Code = error. Code and -4; } } else { error. Code = -5; } return error. Code; } Χωρίς χρήση βρόγχου Try - Catch Αύξηση κώδικα κατά 400%
Εξαιρέσεις – Exception Handlers read. File { try { open the file; determine its size; allocate that much memory; read the file into memory; close the file; } catch (file. Open. Failed) { do. Something; } catch (size. Determination. Failed) { do. Something; } catch (memory. Allocation. Failed) { do. Something; } catch (read. Failed) { do. Something; } catch (file. Close. Failed) { do. Something; } } Με χρήση βρόγχου Try - Catch Αύξηση κώδικα κατά 250%
Εξαιρέσεις – Exception Handlers try { statement(s) } catch (exceptiontype name) { statement(s) } finally { statement(s) } try { if (a == 10) { return; } } finally { print("finallyn"); } print("after tryn");
Java Applets Δημιουργία ενός Applet Κάθε Applet υλοποιείται με την δημιουργία μιας υποκλάσης της κλάσης Applet του πακέτου java. applet Public class my. Class extends java. applet. Applet { … } ή import java. applet. Applet; Public class my. Class extends Applet { … }
Βασικές λειτουργίες των Java Applets Δημιουργία ενός Applet 1. Public void init() { … } 2. Public void start() { … } 3. Public void stop() { … } 4. Public void destroy() { … } 5. Public void paint (Graphics g) { … } 6. 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 draw. Line(start. X, start. Y, width, height); draw. Rect(start. X, start. Y, width, height); fill. Rect(start. X, start. Y, width, height); draw. Round. Rect(start. X, start. Y, width, height); fill. Round. Rect(start. X, start. Y, width, height); draw 3 DRect(start. X, start. Y, width, height, boolean value); fill. Rect(start. X, start. Y, width, height, boolean value); draw. Polygon(array. X, array. Y, array length); fill. Polygon(array. X, array. Y, array length); draw. Polygon(polygon object); fill. Polygon(polygon object);
Γραμματοσειρές Για να χρησιμοποιηθούν μέθοδοι των γραμματοσειρών της κλάσης Fonts πρέπει ο κώδικάς της να περιληφθεί στην αρχή του κώδικα της Applet εφαρμογής δηλώνοντας: import java. awt. Fonts Κατασκευαστής της κλάσης Fonts Font fb = new Font(“Times. Roman”, Font. BOLD, 24) Font af = new Font(“Arial”, Font. BOLD, 20) Font fbi = new Font(“Times. Roman”, Font. BOLD+ Font. ITALIC, 18) Για την σχεδίαση γραμματοσειράς στην οθόνη χρησιμοποιείται η μέθοδος: set. Font(font. Object);
Χρώματα Για να χρησιμοποιηθούν μέθοδοι της κλάσης Color πρέπει ο κώδικάς της να περιληφθεί στην αρχή του κώδικα της Applet εφαρμογής δηλώνοντας: import java. awt. Color Κατασκευαστής της κλάσης Color c = new Color(red. Value, green. Value, blue. Value); 0 … 255, 0 … 255 Για την σχεδίαση χρώματος στην οθόνη χρησιμοποιείται η μέθοδος: set. Color(Color. white);
Παράδειγμα http: //www. medialab. ece. ntua. gr/medialab/education/ed ucation. 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. *
Ιεραρχία Event Listeners Interfaces του package java. awt. event
Interfaces του πακέτου java. awt. event Action. Listener Adjustment. Listener Key. Listener Mouse. Listener Component. Listener Container. Listener Mouse. Motion. Listener Focus. Listener Text. Listener Item. Listener Window. Listener Καταχώρηση ακροατή γεγονότων: add. Interface. Name. Listener( Some. Class c) Η κλάση some. Class πρέπει να υλοποιεί ΟΛΕΣ τις συναρτήσεις του αντιστοίχου interface. Συνήθως όμως χρειάζόμαστε ελάχιστες από τις συναρτήσεις που υλοποιούνται στο εκάστοτε interface (π. χ. Μας ενδιαφέρει μόνο το mouse cli του αριστερού πλήκτρου).
Adapter classes ® Προκαθορισμένες κλάσεις (για κάθε τύπο γεγονότων) οι οποίες υλοποιούν τα αντίστοιχα interfaces (Περιέχουν τις απαιτούμενες συναρτήσεις με κενό όμως σώμα. ) ® Ο χρήστης ορίζει αντικείμενα των adapter κλάσεων και επαναπροσδιορίζει τις συναρτήσεις που τον ενδιαφέρουν (override) ® Η δημιουργία νέων αντικειμένων κλάσεων μπορεί να γίνει απευθείας κατά την καταχώρηση του ακροατή γεγονότων στο όρισμα. ® Παράδειγμα: add. Mouse. Listener ( new Mouse. Adapter( ) Δημιουργία νέου { object public void mouse. Clicked(Mouse. Event evt) παράκαμψη της { mouse. Clicked( ){ } Κώδικας προς εκτέλεση. . . την οποία περιέχει } by dafeult ένα object } της κλάσης ); Mouse. Adapter
1η Άσκηση Γραφικής Anisotropic mapping mode Y = 10 Χ/Υ=1 x/y = 2 0, 0 Χ = 10 Ανισοτροπικό σύστημα συντεταγμένων Είναι το σύστημα στο οποίο η οπτική αναλογία των συντεταγμένων , διαφέρει από αυτή που ορίζεται.
Παράδειγμα (Κβαντοποίηση) • V = 100 Volts • 16 καταστάσεις ( Hexadecimal system) 0, 1, …, 9, a, b, …, f A 0 100 max. Value (A) / max. Value (B) 100 / 16 15 0 B
Παράδειγμα (Κβαντοποίηση) A 0 100 max. Value (A) / max. Value (B) 100 / 16 15 0 B int i. X (float x) {return Math. round (x/transform. Value); } max. B = n – 1; transform. Value = Volt / max. B; // n = 16 καταστάσεις
1η Άσκηση Γραφικής Anisotropic mapping mode 0. 0 , 7. 5 10. 0 , 7. 5 0. 0 , 0. 0 10. 0 , 0. 0
Περιστροφή γύρω σημείο Ο κατά γωνία φ στο πεδίο Χ, Υ ( 0, 1 ) ( -sinφ, cosφ ) ( cosφ, sinφ ) φ φ O ( 1, 0 )
Κλιμάκωση γύρω από το Ο κατά sx και sy ( x, y ) ( x', y' ) O ( x', y' )
Ολίσθηση σημείου ( 0, y ) ( x+ay, y ) L O ( x, 0 ) L
Συνδυασμός Γραμμικών Μετασχηματισμών ( 0, 1 ) ( -sinφ, cosφ ) ( cosφ, sinφ ) φ O Περιστροφ ή φ ( 1, 0 ) ( cosφ, -sinφ ) ( -sinφ, -cosφ ) Κλιμάκωσ η
Συνδυασμός Γραμμικών Μετασχηματισμών Περιστροφ ή Κλιμάκωσ η Πίνακας Περιστροφής Πίνακας Κλιμάκωσης
Μη Γραμμικός Μετασχηματισμός Συντεταγμένων στο πεδίο Χ, Υ b ( x, y ) ( 0, y ) O ( x, 0 ) a
2η Άσκηση Γραφικής Περιστροφή γύρω από μεταβλητό σημείο στο πεδίο Χ, Υ σημείο C' )φ σημείο C(xc, yc) Μεταβλητό σημείο O • Αλλαγή Συστ. Συντεταγμένων με αρχή αξόνων το σημείο Ο • Περιστροφή γύρω απο το σημείο Ο κατά γωνία φ • Επαναφορά στο αρχικό Συστ. Συντεταγμένων
1. Αλλαγή Συστ. Συντεταγμένων με αρχή αξόνων το σημείο Ο(xc, yc) 2. Περιστροφή γύρω απο Ο κατά γωνία φ C C' 3. Επαναφορά στο αρχικό Συστ. Συντεταγμένων C'
• Αλλαγή Συστ. Συντεταγμένων με αρχή αξόνων το σημείο Ο • Περιστροφή γύρω απο το σημείο Ο κατά γωνία φ • Επαναφορά στο αρχικό Συστ. Συντεταγμένων
3η Άσκηση Γραφικής Περιστροφή γύρω από τυχαίο άξονα z y x
Περιστροφή γύρω απο τον άξονα x 2 D περιστροφή γύρω από το πεδίο yz Περιστροφή γύρω απο τον άξονα y 2 D περιστροφή γύρω από το πεδίο zx Περιστροφή γύρω απο τον άξονα z 2 D περιστροφή γύρω στο πεδίο xy
3η Άσκηση Γραφικής Περιστροφή γύρω από τυχαίο άξονα z v 3 θ v 2 O v 1 x α φ y
Περιστροφή γύρω από τυχαίο άξονα από O(0, 0, 0) 1. Περιστροφή του συστήματος συντεταγμένων γύρω από τον άξονα z υπό γωνία φ, χρησιμοποιώντας τον πίνακα περιστροφής Rz-1 2. Περιστροφή του συστήματος συντεταγμένων γύρω από τον άξονα y υπό γωνία θ, χρησιμοποιώντας τον πίνακα περιστροφής Ry-1 3. Περιστροφή στο πεδίο xy υπό γωνία α μέσω του πίνακα Rv 4. Αντίστροφη διαδικασία του βήματος 2 5. Αντίστροφη διαδικασία του βήματος 1 Τελικ ά:
3η Άσκηση Γραφικής Περιστροφή γύρω από τυχαίο άξονα ( προβολή στο πεδίο xy ) x z v y
Περιστροφή γύρω από τυχαίο άξονα από A O(0, 0, 0) 1. Αλλαγή του συστήματος συντεταγμένων ( Α Ο ) 2. Περιστροφή γύρω από τυχαίο άξονα από το Ο μέσω του πίνακα R (με ομογενείς συντεταγμένες πίνακας 4 x 4) 3. Αντίστροφη διαδικασία του βήματος 1 Τελικ ά:
5233a44a504691699c25aa7bfcd4ce1b.ppt