Java sessions Part 1 - Βασικά έννοιες - μέθοδοι
Ενότητα 1 Η γλώσσα Java
1.1 - Ιστορία Ξεκίνησε το 1995 από τον James Gosling, υπάλληλο της Sun Microsystems Αρχικά ονομάστηκε Oak, αργότερα άλλαξε σε Java Open sourced το 2007 (GPL) Διάφορα implementations Τελευταίες εκδόσεις: Java 7 (2011), Java 8 (2014)
1.2 - Βασικά χαρακτηριστικά Open source γλώσσα Αντικειμενοστραφής (Object oriented) Τα πάντα είναι κλάσεις Το συντακτικό θυμίζει C++ Μεταγλωττίζεται σε ενδιάμεσο επίπεδο (bytecode) Τρέχει μέσα σε Java Virtual Machine Platform independent Write once, run anywhere
1.3 - JVM & bytecode Αρχεία: foo.java foo.class Πρόγραμμα που τρέχει Περιεχόμενο αρχείων: [κώδικας Java]... compiled by JDK [bytecode] executed by JRE [bytecode που εκτελείται]
1.4 - JRE vs JDK JRE (Java Runtime Environment): Εκτελεί τα προγράμματα Java Eγκατεστημένο σε κάθε συσκευή με Java JDK (Java Development Kit): Περιέχει ό,τι χρειαζόμαστε για δημιουργία προγραμμάτων Java π.χ. compiler και Javadoc (Java documentation) χρειάζεται για προγραμματισμό σε Java, αλλά όχι για την εκτέλεση προγραμμάτων
1.5 Development environments γραμμή εντολών (javac) Eclipse NetBeans άλλα λιγότερο δημοφιλή είναι τα: Intellij BlueJ generic text editors (π.χ Geany)
1.6 - Eφαρμογές Ποιες τεχνολογίες υπάρχουν (περιβάλλοντα): Desktop Applications Σε servers Σε browsers Mobile Applications Τι είδους προγράμματα μπορούμε να γράψουμε: Διάφορα (π.χ. Eclipse, Limewire, Minecraft) Java Server Pages(JSP), Servlets Java Applets Android Applications
Ενότητα 2 Βασικά στοιχεία προγραμματισμού
2.1 - Hello World //Αυτό είναι σχόλιο //ακολουθεί το Hello World με κάποια naming conventions public class HelloWorld //Τα ονόματα κλάσεων συνηθίζεται να γράφονται με κεφαλαίο CamelCase { //Block κώδικα (κλάσεις, μέθοδοι, if κτλ) ορίζονται με αγκύλες public static void main(string args[]) { System.out.println( Hello World ); /*Multi-line comment. To System.out είναι το *output stream της Java. H println μέθοδός του *τυπώνει το Hello World στην κονσόλα του *χρήστη.*/ } }
2.2 Τύποι δεδομένων(data types) Υπάρχουν συγκεκριμένοι τύποι δεδομένων στην Java, απλοί (primitive) και σύνθετοι (αντικείμενα). Primitive data types: Όνομα boolean byte short int long float double char Τύπος δυαδικό ακέραιος ακέραιος ακέραιος ακέραιος δεκαδικός δεκαδικός χαρακτήρας Τιμές true, false [-128, 127] [-32K, 32K] [-2 31, 2 31-1] [-2 63, 2 63-1] 32-bit float 64-bit float Unicode char Η γραμματοσειρά String είναι ναι μεν σύνθετη, αλλά χρησιμοποιείται ως απλή.
2.3 Literals Τα Literals αντιπροσωπεύουν τις σταθερές τιμές μέσα στον κώδικα. Στο παρακάτω κομμάτι βλέπουμε μερικά τέτοια literals/τιμές: int: 1, 2, 1337, -15, 0 //απλοί ακέραιοι αριθμοί double: 1.3, 42.0, -5.2, 1.0, 5.678 //απλοί δεκαδικοί αριθμοί boolean: true, false //οι μόνες δύο τιμές char: a, d, ω, ñ, 1, $ //χαρακτήρες (με μονά εισαγωγικά) String: H3llo, sp ace, πάμε, CTC //γραμματοσειρές (με διπλά εισαγωγικά)
2.4 Μεταβλητές Οι μεταβλητές στη Java λειτουργούν όπως και στις περισσότερες γλώσσες προγραμματισμού υπό την έννοια ότι μας επιτρέπουν να αποθηκεύσουμε διάφορες τιμές σε ονομαζόμενες θέσεις στη μνήμη. Οι μεταβλητές ορίζονται ως εξής: [τύπος δεδομένων] αναγνωριστικό(/identifier) = [τιμή της μεταβλητής] ; π.χ: float price = 2.4; int amount = 8; String name = Fischer ;
2.5 Πράξεις Οι βασικές μαθηματικές πράξεις στην Java γίνονται με τη χρήση αριθμητικών τελεστών: + για πρόσθεση, - για αφαίρεση, * για πολλαπλασιασμό, / για διαίρεση, % για ακέραιο υπόλοιπο. Οι τελεστές αυτοί ονομάζονται δυαδικοί διότι χρησιμοποιούνται για δύο τιμές. Για περαιτέρω μαθηματικές πράξεις όπως εξύψωση αριθμού σε δύναμη, εύρεση τετραγωνκής ρίζας χρησιμοποιoύμε την κλάση Math της Java.
2.5.1 Αριθμητικοί Τελεστές Δυαδικοί τελεστές: + - * / % Πρόσθεση Αφαίρεση Πολλαπλασιασμός Διαίρεση Υπόλοιπο Διαίρεσης Μοναδικοί τελεστές + - ++ -- Θετική τιμή Αρνητική Τιμή Αύξηση κατά 1 Μείωση κατά 1
2.5.2 Λογικοί Τελεστές Τελεστές σύγκρισης: Τελεστής ==!= < > <= >= Έννοια Ίσο με Μη ίσο με Μικρότερο από Μεγαλύτερο από Μικρότερο ή ίσο με Μεγαλύτερο ή ίσο με Λογικοί τελεστές: Τελεστής &&! Έννοια Λογικό KAI (AND) Λογικό Η (OR) Λογικό ΟΧΙ (NOT)
2.5.3 Σύντομογραφίες πράξεων Αντί για: x = x+a; μπορούμε να γράψουμε πιο σύντομα: x += a; Παρομοίως, αντί για: x = x*a; μπορούμε να γράψουμε πιο σύντομα: x *= a; κ.ο.κ. Στην ειδική περίπτωση που προσθέτουμε ή αφαιρούμε την ίδια μεταβλητή κατά 1 (x = x+1;, x = x-1;), αρκεί: x++; ή x--; αντίστοιχα.
2.6 Δομές ελέγχου Στην Java οι δομές ελέγχου μας επιτρέπουν να ελέγχουμε τη ροή του προγράμματός μας, μέσω κάποιων συνθηκών. if-then: Η βασικότερη δομή ελέγχου. Ορίζει πως ένα κομμάτι κώδικα θα εκτελεστεί αν και μόνο αν μια συνθήκη είναι αληθής. if-then-else: Μας δίνει τη δυνατότητα να καθορίσουμε δύο ή και περισσότερα πιθανώς εκτελέσιμα τμήματα κώδικα χρησιμοποιώντας αντίστοιχο αριθμό συνθηκών. switch-case: Εδώ η επιλογή του τμήματος κώδικα που θα εκτελεστεί εξαρτάται από την τιμή που θα λάβει ως όρισμα η δομή και θα εξετάσει ανάλογα με τις συνθήκες που έχουμε δώσει.
2.6.1 if-then & if-then-else Δομή if-then: boolean sober = true; int beers = 0; if(sober) { System.out.println( Have a beer! ); beers += 5; sober = false; } Δομή if-then-else: boolean sober = true; int beers = 0; if(sober) { System.out.println( Have a beer! ); beers += 5; sober = false; } else(!sober) { System.out.println( Stop drinking! ); }
2.6.2 Switch-case string result; int points = 3; switch(points) { case 0: result = defeat ; break; case 1: result = tie ; break; case 3: result = victory ; break; default: result = Invalid result ; break; } Μετάφραση σε if-then-else: if (points == 0) { result = defeat ; } else if (points == 1) { result = tie ; } κ.ο.κ
2.7 Δομές επαναλήψεων Στην Java οι δομές επαναλήψεων(/βρόγχων) μας επιτρέπουν να εκτελέσουμε ένα κομμάτι κώδικα πολλές φορές. Οι τρεις δομές επανάληψης που θα δούμε είναι οι: for, για συγκεκριμένο αριθμό επαναλήψεων. Χρησιμοποιείται συχνότερα απ τις υπόλοιπες. while, για επαναλήψεις όσο ισχύει μια συνθήκη. do-while, για επαναλήψεις όσο ισχύει μια συνθήκη, με την διαφορά ότι θα εκτελέσει τουλάχιστον την πρώτη επανάληψη, ακόμα και αν η συνθήκη δεν ισχύει.
2.7.1 For loop 1. Αρχικοποιεί την τιμή 2. Ελέγχει την συνθήκη (αν είναι αληθής, εκτελεί τις εντολές προς επανάληψη, αλλιώς τερματίζει) 3. Μεταβάλλει την τιμή Δομή: Παράδειγμα: for ([δήλωση μεταβλητής(1)]; [συνθήκη(2)]; [μεταβολή τιμής(3)]) for (int i=0; i<10; i++) { { //εντολές προς εκτέλεση System.out.println(i); } }
2.7.2 While loop 1. Ελέγχει την συνθήκη (αν είναι αληθής, εκτελεί τις εντολές προς επανάληψη και ξαναπάει στο [1], αλλιώς τερματίζει) Δομή: Παράδειγμα: while ([συνθήκη]) while (beers<3) { { //εντολές προς εκτέλεση System.out.println( I m okay ); } }
2.7.2 Do-While loop 1. Εκτελεί μία φορά τις εντολές προς επανάληψη. 2. Ελέγχει την συνθήκη (αν είναι αληθής, εκτελεί τις εντολές προς επανάληψη και πάει στο [2], αλλιώς τερματίζει) Δομή: Παράδειγμα: do do { { //εντολές προς εκτέλεση System.out.println( One more! ); } while ([συνθήκη]); }while(beers<3);
2.8 Arrays Arrays, ή μήτρες, είναι μία δομή δεδομένων που αποτελείται από ένα σύνολο μεταβλητών του ίδιου τύπου. Χρησιμοποιόντας έναν δείκτη στην μήτρα, και μια επανάληψη που τον μεταθέτει στο/στα επιθυμητά στοιχεία, μπορούμε να χειριστούμε μεγάλο πλήθος μεταβλητών πιο εύκολα.
2.8.1 Arrays - παράδειγμα int[] array; //δήλωση μεταβλητής array array = new int[3];//δημιουργία νέου array και εκχώρηση στο array //Εναλλακτικά, σε ένα βήμα: int[] array = new array[3] array[0] = 206; // εκχώρηση τιμών στα κελιά του array αντικειμένου. // Οι θέσεις των μητρών ξεκινάνε απ το 0, όχι απ το 1. array[1] = 210; array[2] = 211; System.out.println(array[1]); //εκτυπώνει 210
Ενότητα 3 Μέθοδοι
3.1 Παράδειγμα Παράδειγμα: public int add(int a, int b) { int sum; sum = a+b; return sum; } Δομή: [τελεστής ορατότητας] [τύπος επιστροφής] [όνομα μεθόδου]([παράμετροι]) { //εντολές προς εκτέλεση return [μεταβλητή επιστροφής]; }
3.2 Τύποι μεθόδου & return Οι μέθοδοι στη Java μπορούν να μας επιστρέψουν οποιονδήποτε τύπο δεδομένων, είτε απλό (int, boolean, float), είτε σύνθετο(object, String, array) ή ακόμα και να μην επιστρέψουν κάτι αν είναι τύπου void. Για να γίνει η επιστροφή των δεδομένων θα πρέπει να έχουμε ορίσει τον τύπο της μεθόδου και να χρησιμοποιήσουμε το keyword return. Σε περίπτωση void μεθόδου το return παραλείπεται ή χρησιμοποιείται για να σταματήσει η λειτουργία της μεθόδου.
3.3 Κλήση μεθόδου [όνομα μεθόδου]([παράμετροι]); π.χ. sum(2,3); sayhello(); Με ανάθεση της τιμής επιστροφής: int price = orderbeers(3); //η orderbeers θα πρέπει να είναι επιστρέφει int String name = getname( It s a me );
3.4 Παράμετροι Μια μέθοδος στην Java μπορεί να λάβει καμία, μία ή περισσότερες παραμέτρους. Οι παράμετροι μπορούν να διαφέρουν στον τύπο μεταξύ τους, αλλά και με τη μέθοδο. Η σειρά με την οποία δίνονται οι παράμετροι έχει σημασία και ΔΕΝ αλλάζει. method(int i, String s)!= method(string s, int i) Δε χρειάζεται να ορίσουμε τις παραμέτρους μέσα στη μέθοδο, διότι ορίζονται ήδη μέσα στις παρενθέσεις.
3.5 Υπογραφή μεθόδου Η ταυτότητα ή η υπογραφή(/signature) μιας μεθόδου προκύπτει από: α) Το όνομά της. β) Τον αριθμό και τον τύπο των ορισμάτων της. π.χ. public int drinkbeer(int numofbeers, String brand) { //Υπογραφή μεθόδου: drinkbeer(int, String) } Δεν μπορούμε να έχουμε δύο μεθόδους με την ίδια υπογραφή στην ίδια κλάση (τον ίδιο χώρο ).
3.6 Method overloading Η υπογραφή(/signature) μιας μεθόδου μπορεί να αλλάξει αλλάζοντας μόνο τα ορίσματα. Αυτό μας επιτρέπει να κάνουμε method overloading, δηλαδή να έχουμε πολλές μεθόδους με το ίδιο όνομα. π.χ. public int sum(int a, int b) { return a+b; //Υπογραφή μεθόδου: drinkbeer(int, int) } public float sum(float a, float b) { return a+b; //Υπογραφή μεθόδου: drinkbeer(float, float) }
Ενότητα 4 Κλείσιμο
4.1 Τί μάθαμε Περί Java JVM, bytecode JRE και JDK Βασικά στοιχεία προγραμματισμού Μεταβλητές και πράξεις Διακλάδωση (if/then/else) Επανάληψη (for, while, do-while) Μεθόδους Σύνταξη μεθόδου, oρίσματα Υπογραφή μεθόδου Method overloading
4.20 Τι θα δούμε στην συνέχεια Επόμενο session (Θέμα: Αντικειμενοστρέφεια): Κλάσεις Αντικείμενα Κληρονομικότητα Interfaces Packages Αργότερα (μέχρι το Ludum Dare): I/O Γραφικά Βασικό game development Προτάσεις; :)
Απορίες; Ευχαριστούμε :)