210 likes | 324 Views
ΕΠΑΝΑΛΗΨΗ. ΓΙΑ ΑΠΟΡΙΕΣ vkolias@medialab.ntua.gr. ΜΕΡΟΣ Ι. ΒΑΣΙΚΑ ΣΤΟΙΧΕΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΣΕ JAVA. Java vs Other Languages. Κώδικας. Κώδικας. Java Compiler. OS Dependent. bytecode. Compiler/Linker. Java Virtual Machine. ΓΛΩΣΣΑ ΜΗΧΑΝΗΣ. Στοιχεία της Java. Classes and Objects
E N D
ΕΠΑΝΑΛΗΨΗ ΓΙΑ ΑΠΟΡΙΕΣ vkolias@medialab.ntua.gr
ΜΕΡΟΣ Ι ΒΑΣΙΚΑ ΣΤΟΙΧΕΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΣΕ JAVA
Java vs Other Languages Κώδικας Κώδικας Java Compiler OS Dependent bytecode Compiler/Linker Java Virtual Machine ΓΛΩΣΣΑ ΜΗΧΑΝΗΣ
Στοιχεία της Java • Classes and Objects • Objects: δεσμευμένες θέσεις μνήμης από δεδομένα και μεθόδους • Classes: Ο ορισμός του τύπου των δεδομένων και της λειτουργικότητας των μεθόδων που θα έχουν τα αντικείμενα που θα την υλοποιούν • Methods • Κώδικας που προσδιορίζει τη συμπεριφορά ενός αντικειμένου Το όνομα της κλάσης public class MyClass { public static void main (String[] args){ } } Ο κώδικας της κλάσης αρχίζει εδώ Είναι κλάση Ο κώδικας της μεθόδου αρχίζει εδώ Μπορούν να χρησιμοποιηθούν από παντού Δεν επιστρέφει κάποια τιμή Μπορεί να καλεστεί χωρίς να δημιουργηθεί αντικείμενο της κλάσης MyClass Ο κώδικας της μεθόδου τελειώνει εδώ Τύπος και όνομα της παραμέτρου της μεθόδου Ο κώδικας της κλάσης τελειώνει εδώ
Στοιχεία της Java • Variables • Σύμβολα που αναπαριστούν τιμές στη μνήμη • Μπορούν να ξεκινούν με (a-z, A-Z),_,$ και να ακολουθούνται από (a-z, A-Z),_,$ και νούμερα • Δεν πρέπει να είναι δεσμευμένη λέξη της Java
Στοιχεία της Java • Data Types • Προσδιορίζουν το είδος της τιμής που μια μεταβλητή μπορεί να έχει • Primitives: Βασικοί τύποι δεδομένων της Java (bool, byte, short, char, int, long, float, double) • Objects: Τύποι δεδομένων που συνοδεύουν τη Java ή που είναι φτιαγμένοι από τον προγραμματιστή (String, Socket, Thread, MyClass)
Στοιχεία της Java • Variables and Datatypes • Δήλωση μεταβλητής • Access modifiers • public: ορατά από οποιασδήποτε κλάση • private: ορατά μόνο από την κλάση στην οποία ανήκουν • protected: ορατά από την κλάση στην οποία ανήκουν και από υποκλάσεις της • Χωρίς δήλωση: ορατά από κλάσεις που ανήκουν στο ίδιο package • Usage modifiers • final: class: δε μπορεί να κληρονομηθεί, variable: δεν αλλάζει τιμή, method: no override • static: variable, method: μπορούν να χρησιμοποιηθούν χωρίς αντικείμενο • abstract:class, method: που θα υλοποιηθούν από τις subclasses • native:method: υλοποιημένη σε άλλη γλώσσα • transient: variables: να υπάρχουν μόνο στη μνήμη για λόγους ασφάλειας
Στοιχεία της Java • Expressions • Συνδυασμοί βασικών στοιχείων ενός προγράμματος (μεταβλητές, operators, literals, μέθοδοι) που αφορά μια τιμή (myName = “Bill”, args.length) • Statements • Μονάδα εκτέλεσης ενός προγράμματος ή αλλιώς εντολή (δηλ. Expressions με ένα ερωτηματικό στο τέλος) • Π.χ. myName = “Bill” ; • Blocks • Ομάδες από statements μεταξύ δύο αγκυλών { }. Μπορεί να υπάρχουν πολλαπλάάλλα blocks μέσα σε ένα block.
Χαρακτηριστικά της Java • Platform Independence • Object Oriented Programming • Encapsulation • Ο συνδυασμός δεδομένων με μεθόδους ώστε να «κρύβονται» από το χρήστη • Η κλάση είναι η βασική μονάδα ενθυλάκωσης • Inheritance • Η ιδιότητα της μεταφοράς των ιδιοτήτων και της συμπεριφοράς μιας κλάσης σε μια άλλη • Όσο πιο κάτω στην ιεραρχία κλάσεων τόσο πιο ειδικός κώδικας γράφεται • Object class : Η υπερκλάση όλων των κλάσεων • Polymorphism • Method Overriding
Άλλες χρήσιμες έννοιες • Architecture neutral • Κώδικας Μεταγλώττιση Bytecode (ανεξάρτητο από λειτουργικά και αρχιτεκτονικές) • Distributed • Εκτέλεση κώδικα μέσα από το Internet • Dynamic • Νέος κώδικας μπορεί να προστεθεί στις βιβλιοθήκες χωρίς να επηρεαστούν τα προγράμματα που τις χρησιμοποιούν • Just In Time Compilation • Μετατρέπει το bytecode σε κώδικα μηχανής κατά το runtime κρατώντας στο cache τμήματα κώδικα που χρησιμοποιούνται συχνά από το πρόγραμμα
Άλλες χρήσιμες έννοιες • Multithreaded • Επιτρέπει την «ταυτόχρονη» εκτέλεση κώδικα • Portable • Δεν υπάρχει θέμα εξάρτησης με το λειτουργικό, ο ίδιος κώδικας εκτελείται ίδια παντού • Robust • Έλεγχος για λάθη κατά τη μεταγλώττιση και κατά την εκτέλεση • Secure • Διάφορα security features για την εκτέλεση στο διαδίκτυο
ΜΕΡΟΣ ΙΙ Παραδείγματα
enums public class EnumTest { BeltSize size; Color color; public static void main(String[] args) { EnumTest w1 = new EnumTest(); EnumTest w2 = new EnumTest(); w1.size = BeltSize.SMALL; w1.color = Color.BLUE; w2.size = BeltSize.LARGE; w2.color = Color.GREEN; System.out.println("W1: Size = " + w1.size + " W2: Size = " + w2.size); System.out.println("W1: Color = " + w1.color + " W2: Color = " + w2.color); } } enum Color {RED, GREEN, BLUE} enum BeltSize { SMALL(30), MEDIUM(34), LARGE(40); //First define the enum constants. private int size; //The instance variables, constructors, methods may follow. BeltSize(int size) { this.size = size; } public int getSize() { return size; } }
Inheritance & Arrays // Class ComputerLab class JavaLab extends MultimediaClass { int labStudents = 30; String labAssistant[] = new String[2]; public JavaLab() { labAssistant[0] = "Vasilis Kolias"; labAssistant[1] = "Giannis Gianoukos"; } public void printStudentInfo() { System.out.println("There are " + GetTotalStudents() + " students total, and "+ labStudents + " students in the java lab."); } String getLabAssistant(int position){ return labAssistant[position]; } } class TestJavaLab { public static void main(String[] args) { JavaLab jlab = new JavaLab(); System.out.println("Multimidia Technology Class:"); jlab.printStudentInfo(); System.out.print("Professor and assistants:\n"); } } class MultimediaClass { int totalStudents = 90; String professor = "Vasilis Loumos"; int GetTotalStudents() { return totalStudents; } String getProfessor(){ return professor; } } To do: εκτυπώστε τα ονόματα των βοηθών
Inheritance and Constructors class MySubClass extends MySuperClass { int subVar = 20; MySubClass() { System.out.println("MySubClass constructor subVar: " + subVar); } } class MySubSubClass extends MySubClass { int subSubVar = 30; MySubSubClass() { this("MySubSubClass empty constructor calls constructor with string parameter"); } MySubSubClass(String message){ System.out.println(message); System.out.println("MySubSubClass constructor with string prints variable: " + subSubVar); } } public class TestConstructors { public static void main(String[] args) { System.out.println("Create object MySubSubClass"); MySubSubClass example = new MySubSubClass(); } } class MySuperClass { int superVar = 10; MySuperClass(){ System.out.println("MySuperClass constructor. superVar: " + superVar); } MySuperClass(String message) { System.out.println(message + "superVar: " + superVar); } }
Interfaces class InheritClass implements Child { public void printParentOne(){ System.out.print("From Parrent One "); System.out.println(pOne); } public void printParentTwo(){ System.out.println(pTwo); } public void printChild(){ System.out.println(child); } } class TestInterface { public static void main(String[] args){ InheritClass ic = new InheritClass(); ic.printParentOne(); ic.printParentTwo(); ic.printChild(); } } interface ParentOne { int pOne = 1; void printParentOne(); } interface ParentTwo { int pTwo = 2; void printParentTwo(); } interface Child extends ParentOne, ParentTwo{ int child = 3; void printChild(); }
Ασκήσεις • Για το παρακάτω πρόγραμμα • Compiler error στη γραμμή 9 • Runtime Error στη γραμμή 4 • Όλα ΟΚ και εμφανίζει Hello, Dear. • Δεν κάνει τίποτα
Ασκήσεις • Ποια η έξοδος του προγράμματος; • Hello from B. • Compiler error στη γραμμή 2 • Compiler error στη γραμμή 13 • Compile OK αλλά πετάει exception
Άσκηση • Τι γίνεται αν η printSomething καλεστεί από άλλη κλάση; • i=5 j=7 • Compile error στην 5 • Compile error στην 6 • Runtime error
Άσκηση • Ποιος από τους ακόλουθους modifiers δε θα πετάξει error για τον παρακάτω κώδικα στη γραμμή7; • Static • Public • Protected • Transient