ΠΠΜ 401 - Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής 4. Εισαγωγή στη Java Χειμερινό εξάμηνο 2014 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1
Θέματα Εισαγωγή στη γλώσσα προγραμματισμού Java Δημιουργία απλού προγράμματος σε Java Σχόλια σε προγράμματα Java Χρήση εντολών εισόδου/εξόδου Μνήμη και μεταβλητές Αριθμητικοί τελεστές και υπολογισμοί Προτεραιότητα αριθμητικών τελεστών Λογικές εκφράσεις και αποφάσεις Τελεστές συγκρίσεως και ισότητας Εντολές ελέγχου: διακλαδώσεις και βρόγχοι 2
Ανάπτυξης και εκτέλεση προγραμμάτων Java 3
Δημιουργία απλού προγράμματος σε Java Βασικοί τύποι προγραμμάτων Java Java Application Εκτελείται με τη χρήση της εντολής java από το παράθυρο εντολών (DOS command window ή Unix Shell) η οποία ξεκινά τη νοητή μηχανή της Java (Java Virtual Machine-JVM) Java Applet Εκτελείται μέσα από το περιβάλλον κάποιου web-browser (π.χ. Internet Explorer, Netscape, κ.λπ.), εφόσον είναι δυνατή και επιτρεπτή η εκτέλεση προγραμμάτων Java http://java.sun.com/docs/books/tutorial/getstarted/cupojava/win32.html 4
javac myfile.java IDE: Integrated Development Environment (π.χ. JBuilder, NetBeans, κλ.π.) java myfile Τυπική διαδικασία ανάπτυξης και εκτέλεσης προγραμμάτων Java: 5
Java Application Welcome.java public class Welcome { public static void main ( String args[ ]) { System.out.println("Welcome to CEE 401"); } } > javac Welcome.java > java Welcome Welcome to CEE 401 6
Java Applet import java.applet.applet; import java.awt.*; WelcomeApplet.java public class WelcomeApplet extends Applet { public void paint(graphics g) { g.setcolor(color.red); } } g.drawstring("welcome to CEE 401", 50, 35); > javac WelcomeApplet.java 7
Χρήση Applet σε ιστοσελίδα myapplet.html: <HTML> <HEAD> <TITLE> A simple program to run a Java Applet</TITLE> </HEAD> <BODY> Here the class myapplet is loaded: <P> <APPLET CODE= WelcomeApplet.class" WIDTH=300 HEIGHT=100 align=center> </APPLET> </BODY> </HTML> 8
Δημιουργία, μεταγλώττιση και εκτέλεση προγράμματος Java Δημιουργία πηγαίου κώδικα (source code) Το αρχείο πρέπει να έχει επέκταση.java, π.χ. Welcome.java Ένα αρχείο (file) που έχει μία public class πρέπει απαραίτητα να έχει το ίδιο όνομα με το όνομα της κλάσης (τάξης) συν την.java επέκταση Μεταγλώττιση προγράμματος Java Ανοίγοντας ένα παράθυρο εντολών (command prompt window), αφού πάτε στο directory όπου βρίσκεται το αρχείο, πληκτρολογήστε: > javac filename (π.χ. javac Welcome.java) Αν δεν υπάρχουν λάθη δημιουργείται το αρχείο Welcome.class Το αρχείο αυτό περιέχει bytecodes τα οποία μπορούν να εκτελεστούν από οποιοδήποτε JVM, ασχέτως του τύπου του Η/Υ στον οποίο τρέχει Εκτέλεση ενός προγράμματος > java Welcome Η εντολή java ξεκινά την JVM, φορτώνει τα bytecodes του Welcome.class και, αφού κάνει κάποιους ελέγχους, τα εκτελεί καλώντας πρώτα τη μέθοδο main 9
Είδη σχολίων σε προγράμματα Java //.. /*.......*/ /**..*/ Javadoc > javadoc Welcome1.java 10
11
Είδη σχολίων σε προγράμματα Java //.. /*.......*/ /**..*/ Javadoc > javadoc Welcome1.java 12
Εκτύπωση (output) 1 // Fig. 2.3: Welcome2.java 2 // Printing a line of text with multiple statements. 3 4 public class Welcome2 5 { 6 // main method begins execution of Java application 7 public static void main( String args[] ) 8 { 9 System.out.print( "Welcome to " ); 10 System.out.println( "Java Programming!" ); System.out.print keeps the cursor on the same line, so System.out.println continues on the same line. 11 12 } // end method main 13 14 } // end class Welcome2 Welcome to Java Programming! 13
1 // Fig. 2.4: Welcome3.java Outline 2 // Printing multiple lines of text with a single statement. 3 4 public class Welcome3 5 { 6 // main method begins execution of Java application 7 public static void main( String args[] ) 8 { 9 System.out.println( "Welcome\nto\nJava\nProgramming!" ); 10 11 } // end method main 12 13 } // end class Welcome3 Welcome to Java Programming! 14
Ειδικοί χαρακτήρες εκτύπωσης (escape sequences) Escape sequence Description \n Newline. Position the screen cursor at the beginning of the next line. \t Horizontal tab. Move the screen cursor to the next tab stop. \r Carriage return. Position the screen cursor at the beginning of the current line do not advance to the next line. Any characters output after the carriage return overwrite the characters previously output on that line. \\ Backslash. Used to print a backslash character. \" Double quote. Used to print a double-quote character. For example, System.out.println( "\"in quotes\"" ); displays "in quotes" 15
1 // Fig. 2.6: Welcome4.java 2 // Printing multiple lines in a dialog box. 3 4 public class Welcome4 5 { 6 // main method begins execution of Java application 7 public static void main( String args[] ) 8 { 9 System.out.printf( "%s\n%s\n", 10 "Welcome to", "Java Programming!" ); System.out.printf displays formatted data. 11 12 } // end method main 13 14 } // end class Welcome4 Welcome to Java Programming! 16
1 // Fig. 2.7: Addition.java Είσοδος δεδομένων (input) Outline 2 // Addition program that displays the sum of two numbers. 3 import java.util.scanner; // program uses class Scanner 4 5 public class Addition 6 { 7 // main method begins execution of Java application 8 public static void main( String args[] ) 9 { 10 // create Scanner to obtain input from command window 11 Scanner input = new Scanner( System.in ); 12 13 int number1; // first number to add 14 int number2; // second number to add 15 int sum; // sum of number1 and number2 16 17 System.out.print( "Enter first integer: " ); // prompt 18 number1 = input.nextint(); // read first number from user 19 Read an integer from the user and assign it to number1. Δήλωση πακέτων (packages) πριν από τον ορισμό τάξεων import declaration imports class Scanner from package java.util. Declare and initialize variable input, which is a Scanner. Declare variables number1, number2 and sum. 17
Outline 20 System.out.print( "Enter second integer: " ); // prompt Addition.java 21 number2 = input.nextint(); // read second number from user 22 (2 of 2) 23 sum = number1 + number2; // add numbers 24 4. Addition 5. printf 25 System.out.printf( "Sum is %d\n", sum ); // display sum 26 27 } // end method main 28 29 } // end class Addition Read an integer from the user and assign it to number2. Calculate the sum of the variables number1 and number2, assign result to sum. Display the sum using formatted output. Enter first integer: 45 Enter second integer: 72 Sum is 117 Two integers entered by the user. 18
Παράδειγμα εισαγωγής δεδομένων import java.util.scanner; public class Dynamic1 { public static void main(string args[]) { double m, k, w; System.out.println("Provide the properties of a SDOF system:"); Scanner inputscanner = new Scanner(System.in); System.out.print(" Mass: m = "); m = inputscanner.nextdouble(); System.out.print(" Stiffness: k = "); k = inputscanner.nextdouble(); } } w = Math.sqrt(k/m); System.out.printf("%s m=%.3f and k=%.2f equals w=%5.3f", "The frequency of a SDOF with", m, k, w); 19
Βασικά/πρωταρχικά είδη μεταβλητών/δεδομένων (primitive data types) boolean (boolean value, true or false) char (2-byte, character - Unicode) byte (1-byte, signed integer) short (2-byte, signed short integer) int (4-byte, signed integer) long (8-byte, signed long integer) float (4-byte, floating point) double (8-byte, double precision floating point) 20
Μετατροπές (casting) βασικών/πρωτόγονων τύπων Είναι επιτρεπτός ο ορισμός της τιμής μιας μεταβλητής βασικού (primitive) τύπου σε μια μεταβλητή άλλου βασικού τύπου χωρίς explicit cast αν ο τύπος της πρώτης μεταβλητής είναι στα δεξιά του τύπου της δεύτερης στη πιο κάτω λίστα: byte < short < int < long < float < double Μεταβλητή τύπου char μπορεί να προαχθεί σε int, long, float ή double Μια μεταβλητή τύπου boolean δεν μπορεί να μετατραπεί σε άλλο τύπο Ο ορισμός της τιμής μιας μεταβλητής ανώτερου βασικού (primitive) τύπου σε μια μεταβλητή κατώτερου τύπου είναι επιτρεπτή μόνο όταν καθοριστεί η συγκεκριμένη μετατροπή (explicit casting), αφού έτσι χάνεται κάποια ακρίβεια, π.χ. int x = (int) 4.75; 21
Επιτρεπόμενες μετατροπές (casting) βασικών/πρωτόγονων τύπων Οι πιο κάτω μετατροπές μπορούν να γίνουν έμμεσα χωρίς explicit casting: 22
Μνήμη και μεταβλητές Κάθε μεταβλητή έχει όνομα, τύπο, μέγεθος και τιμή Η κάθε μεταβλητή αντιστοιχεί σε μία θέση στη μνήμη Όταν μια νέα τιμή δοθεί σε μία μεταβλητή τότε αυτή η τιμή αποθηκεύεται στην αντίστοιχη μνήμη και η προηγούμενη τιμή χάνεται Διαβάζοντας τιμές από την μνήμη δεν έχει καμία επίπτωση σε αυτές 23
Αριθμητικοί τελεστές * πολλαπλασιασμός (multiplication) / διαίρεση (division) % υπόλοιπο από διαίρεση (remainder) + και πρόσθεση και αφαίρεση Διαίρεση ακεραίων περικόπτει το υπόλοιπο 7 / 5 ισούται με 1 Ο τελεστής υπολοίπου (remainder) % δίνει το υπόλοιπο 7 % 5 ισούται με 2 Java operation Arithmetic operator Algebraic expression Addition + f + 7 f + 7 Subtraction p c p - c Multiplication * Bm b * m Java expression Division / x / y or or x y x / y 24
Προτεραιότητα βασικών τελεστών Operator(s) Operation(s) Order of evaluation (precedence) * / % + - Multiplication Division Remainder Addition Subtraction Evaluated first. If there are several operators of this type, they are evaluated from left to right. Evaluated next. If there are several operators of this type, they are evaluated from left to right. 25
Προτεραιότητα τελεστών: (βλέπε Appendix A) 26
Προτεραιότητα (precedence) και σχετικότητα (associativity) τελεστών (operators) Operators Associativity Type * / % left to right multiplicative + - left to right additive < <= > >= left to right relational ==!= left to right equality = right to left assignment Όταν τελεστές της ίδιας τάξης προτεραιότητας (precedence) παρουσιάζονται στην ίδια έκφραση, τότε η ιδιότητα της associativity καθορίζει με ποια σειρά θα εκτελεστούν. Όλοι οι τελεστές με την ίδια προτεραιότητα εκτελούνται από αριστερά στα δεξιά, εκτός από τους τελεστές ορισμού (assignment operators) 27
Παράδειγμα 28
Άμεση (ρητή) μετατροπή - Explicit casting Ο τελεστής (type) είναι διαθέσιμος για ρητή μετατροπή (explicit casting) ενός τύπου σε κάποιο άλλο: π.χ. 9 / 4 2 (double) 9 / 4 2.25 Ο τελεστής (type) είναι unary operator με προτεραιότητα ίση με τα unary + και -, και έχει precedence από δεξιά προς αριστερά 29
Λογικές εκφράσεις και αποφάσεις Έλεγχος αν η λογική έκφραση είναι αληθής (true) ή όχι (false) Εντολή διακλάδωσης if: Αν η λογική έκφραση που χρησιμοποιείται σαν συνθήκη είναι αληθής τότε εκτελείται η επόμενη εντολή ή η ομάδα εντολών που ακολουθούν μέσα σε { } Τελεστές ισότητας (equality) και συγκρίσεως (relational) μπορούν να χρησιμοποιηθούν σε λογικές εκφράσεις: Standard algebraic equality or relational operator Java equality or relational operator Sample Java condition Meaning of Java condition Equality operators == x == y x is equal to y!= x!= y x is not equal to y Relational operators > x > y x is greater than y < x < y x is less than y >= x >= y x is greater than or equal to y <= x <= y x is less than or equal to y 30
1 // Fig. 2.15: Comparison.java 2 // Compare integers using if statements, Outline relational operators 3 // and equality operators. 4 import java.util.scanner; // program uses class Scanner 5 6 public class Comparison 7 { 8 // main method begins execution of Java application 9 public static void main( String args[] ) 10 { 11 // create Scanner to obtain input from command window 12 Scanner input = new Scanner( System.in ); 13 14 int number1; // first number to compare 15 int number2; // second number to compare 16 17 System.out.print( "Enter first integer: " ); // prompt 18 number1 = input.nextint(); // read first number from user 19 20 System.out.print( "Enter second integer: " ); // prompt 21 number2 = input.nextint(); // read second number from user 22 23 if ( number1 == number2 ) 24 System.out.printf( "%d == %d\n", number1, number2 ); 25 26 if ( number1!= number2 ) 27 System.out.printf( "%d!= %d\n", number1, number2 ); 28 29 if ( number1 < number2 ) 30 System.out.printf( "%d < %d\n", number1, number2 ); Test for equality, display result using printf. Compares two numbers using relational operator < 31
31 32 if ( number1 > number2 ) Outline 33 System.out.printf( "%d > %d\n", number1, number2 ); 34 35 if ( number1 <= number2 ) Comparison.java 36 System.out.printf( "%d <= %d\n", number1, number2 ); 37 (2 of 2) 38 if ( number1 >= number2 ) 39 System.out.printf( "%d >= %d\n", number1, number2 ); 40 41 } // end method main 42 43 } // end class Comparison Program output Enter first integer: 777 Enter second integer: 777 777 == 777 777 <= 777 777 >= 777 Compares two numbers using relational operator >, <= and >=. Enter first integer: 1000 Enter second integer: 2000 1000!= 2000 1000 < 2000 1000 <= 2000 Enter first integer: 2000 Enter second integer: 1000 2000!= 1000 2000 > 1000 2000 >= 1000 32
Εντολές ελέγχου διακλάδωσης if (logical test) statement; if (logical test) { } statements. if (logical test) statement; else if (logical test) statement; else statement; switch (variable) { case value1: statements break; case value3: statements break; case value4: case value5: statements break; default: statements } 33
Εντολές ελέγχου επαναλήψεων (βρόγχων) for (initialization ; logical test; modification) statement; for (initialization ; logical test; modification) { } statements } while (logical test) statement; while (logical test) { statements do { statements; } while (logical test); 34
Γενικές Εισηγήσεις και Παρατηρήσεις Να γράφετε τα προγράμματα σας με τον πιο απλό δυνατό τρόπο και με ευκρίνεια ώστε να μπορεί κάποιος εύκολα να καταλάβει τι κάνετε Να χρησιμοποιείτε πάντα σχόλια και ομαδοποιήσεις/στοιχίσεις (indentation) Πάντα να δοκιμάζετε τα προγράμματα σας κάτω από όλες τις δυνατές περιπτώσεις και σε όλες τις πλατφόρμες που θα χρησιμοποιηθούν Να διαβάζετε τις περιγραφές των τάξεων της Java (documentation) και να είστε ενήμεροι με τις πολλές τους δυνατότητες Αν δεν είστε σίγουροι πώς να χρησιμοποιήσετε κάποια δυνατότητα της Java απλά δοκιμάστε μια απλή περίπτωση Προσέξτε όλα τα ενδεχόμενα λάθη κατά τη διάρκεια της μεταγλώττισης (compiletime errors or compilation errors) για να τα διορθώσετε με τη σειρά Λάθη όπως η διαίρεση με το μηδέν (division by zero) συμβαίνουν κατά την εκτέλεση ενός προγράμματος (runtime errors or execution-time errors) κάποια προκαλούν τερματισμό της εκτέλεσης (fatal runtime errors) κάποια δεν προκαλούν τερματισμό της εκτέλεσης (nonfatal runtime errors) προκαλώντας λανθασμένα αποτελέσματα, το οποίο είναι πιο επικίνδυνο 35
Εκτέλεση παρεχόμενων προγραμμάτων Java Από το συνοδευτικό CD του βιβλίου:.. \examples\ch01: cd ATM java ATMCaseStudy cd BouncingBall java BouncingBall cd GuessGame java GuessGame cd LogoAnimator java LogoAnimator cd TicTacToe java TicTacToeTest 36