ΕΠΛ133 Αντικειμενοστρεφές Προγραμματισμό PDF

Document Details

Uploaded by Deleted User

Χριστόφορος Χριστοφόρου

Tags

java programming computer programming programming languages

Summary

Αυτό το έγγραφο περιγράφει την πλατφόρμα Java, συμπεριλαμβάνοντας πληροφορίες για τις γλώσσες προγραμματισμού.

Full Transcript

1 ΕΠΛ133 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Object-Oriented Programming) Η Πλατφόρμα Java Διδάσκων Δρ. Χριστόφορος Χριστοφόρου [email protected] ...

1 ΕΠΛ133 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Object-Oriented Programming) Η Πλατφόρμα Java Διδάσκων Δρ. Χριστόφορος Χριστοφόρου [email protected] 2 3 Επίπεδα γλωσσών προγραμματισμού ❑ Γλώσσα μηχανής (Machine language): Machine Language ❑ Binary Language (Group of 0s and 1s) ❑ Γλώσσα κατανοητή στον υπολογιστή → Machine Depended 3 3 Επίπεδα γλωσσών προγραμματισμού ❑ Γλώσσα Assembly (Συμβολική) Assembly ❑ Πιο απλή από τη γλώσσα μηχανής ❑ Introduced Keywords like add, mov, etc. ❑ Πρόγραμμα γραμμένο σε γλώσσα assembly θα πρέπει να “μεταφραστεί” σε Γλώσσα Μηχανής πριν να μπορέσει να τρέξει (Assembler). add 2, 3, result 1101101010011010 Cannot be executed Assembler Can be executed 4 3 Επίπεδα γλωσσών προγραμματισμού ❑ Γλώσσα προγραμματισμού υψηλού επιπέδου High-level language (High-level language): ❑ Γλώσσα κατανοητή στον άνθρωπο → Ευκολία στον Προγραμματισμό. ❑ Πρόγραμμα γραμμένο σε γλώσσα υψηλού επιπέδου θα πρέπει να “μεταφραστεί” σε μια γλώσσα κατανοητή στον υπολογιστή πριν μπορέσει να τρέξει → Γλώσσα Μηχανής ❑ Α “Compiler” and/or an “Interpreter” is used to translate Source Code to Machine Code 5 Ορολογία Προγραμμάτων ❑ Κώδικας (code) ❑ Πρόγραμμα ή μέρος προγράμματος ❑ Πηγαίος κώδικας (Source code) ❑ Πρόγραμμα γραμμένο σε γλώσσα υψηλού επιπέδου – Π.χ., Στην Java είναι τα αρχεία *.java) ❑ Η είσοδος (input) σε μεταγλωττιστή (Compiler) ❑ Tελικός κώδικας (Machine Code or “Executable” code) ❑ Το πρόγραμμα μεταφρασμένο σε μια γλώσσα χαμηλού επιπέδου (π.χ., Γλώσσα Μηχανής) ❑ Η Έξοδος από το Compiler (Μεταγλωττιστή) - Π.χ., Στην Java έχουμε Java bytecode τα οποία είναι τα αρχεία *.class) ❑ Στην περίπτωση Java bytecode, είναι η είσοδος στον Java bytecode Interpreter → This is the Java Virtual Machine (JVM) 6 Compiler Vs Interpreter ❑ Compiler: ❑ Translates all the source code into machine code and creates an Executable File that can be Executed by the Computer Source Code Compiler Machine Code Executor OUTPUT Executable File Στην Java έχουμε Java bytecode τα οποία είναι τα αρχεία *.class τα οποία θα δοθούν στο JVM για εκτέλεση. 7 Compiler Vs Interpreter ❑ Interpreter: ❑ Translates each statement of the “source code” (one by one) into machine code and executes it right away (i.e., Does not translate all the source code at once like the Compiler) Statement Interpreter OUTPUT Στην Java έχουμε τα Java bytecode (*.class) αρχεία, τα οποία είναι η είσοδος στον Java bytecode Interpreter → This is the Java Virtual Machine (JVM) 8 Editions of Java ❑ Java Standard Edition (SE): develop applications that run on desktop. ❑ Java Enterprise Edition (EE): develop server-side applications. ❑ Java Micro Edition (ME): develop applications for mobile devices For EPL133 we will use Java Standard Edition (SE) which is the foundation of all other editions If you learn Java SE then you can easily learn the other two editions. 9 Java Standard Edition (SE) ❑ Java Standard Edition (JAVA SE): Σύστημα λογισμικού που τρέχει πάνω σε διάφορες πλατφόρμες (Windows, Linux, MacOS, etc) ❑ Bασικά συστατικά: ❑ Java Development Kit (JDK), και ❑ Java Runtime Environment (JRE). 10 Java Standard Edition (SE) ❑ In Java, the Java Runtime Environment (JRE) and the Java Development Kit (JDK) serve different purposes and can be installed separately. ❑ Java Runtime Environment (JRE) ❑ Designed to run Java applications. ❑ It includes the Java Virtual Machine (JVM), core libraries, and other components necessary to RUN Java programs. ❑ You can install the JRE without installing the JDK. This is typically sufficient for end users who need to run Java applications but do not need to develop them. JVM executes our java programs on different Machines. Thanks to JVM, Java is Machine Independent! Write Once, Run Everywhere!!! 11 Java Standard Edition (SE) ❑ Java Development Kit (JDK) ❑ Intended for developers who want to write, compile, and debug Java applications. ❑ It includes the JRE (and thus the JVM) along with development tools such as the Java compiler (javac), Java debugger, and other tools necessary for development. When you install the JDK, you automatically get the JRE as well. 12 Java Bytecode ❑ Κάθε κλάση στη Java οφείλει να είναι ένα αυτόνομο αρχείο, του οποίου το όνομα να είναι ίδιο με το όνομα της κλάσης ακολουθούμενο από την κατάληξη *.java ❑ Κάθε κλάση μεταγλωττίζεται από το Java Compiler (javac) σε ένα πρόγραμμα bytecode, το οποίο είναι ανεξάρτητο αρχιτεκτονικής και λειτουργικού συστήματος. ❑ Το όνομα του bytecode αρχείου είναι το ίδιο με το όνομα της κλάσης ακολουθούμενο από την κατάληξη *.class και είναι εκτελέσιμο από το Java Virtual Machine (JVM). Use javap -c filename.class to view the bytecode instructions inside a class file 13.class files ❑ Η JVM δεν γνωρίζει τίποτα για τη γλώσσα προγραμματισμού Java (δηλαδή τα *.java αρχεία). ❑ Εκείνο που γνωρίζει είναι η συγκεκριμένη δυαδική μορφή bytecode του αρχείου με κατάληξη.class ❑ Ένα αρχείο.class περιέχει JVM οδηγίες (ή bytecodes) και έναν πίνακα συμβόλων, καθώς και άλλες βοηθητικές πληροφορίες. 14 Παράδειγμα: Δίσεκτο Έτος (LeapYear) 15 Παράδειγμα Java Bytecode javap -c LeapYear.class javap -c TestLeapYear.class Για ασφάλεια, το JVM επιβάλλει ισχυρούς συντακτικούς και δομικούς περιορισμούς στον κώδικα σε ένα αρχείο.class 16 Using javap and other tools (i.e, javac) ❑ The ‘javap’ is not recognized as an internal command. ❑ To use javap tool do the following: ❑ Find javap location: Find the location of your Java JDK installed where javap and other java tools resides and copy the location path of the folder. 17 Using javap and other tools (i.e, javac) ❑ Update the system variable PATH: ❑ Type Environment on the Windows search and open "Edit the system environment variables". This will open System Properties window. 18 Using javap and other tools (i.e, javac) ❑ Update the system variable PATH: ❑ Under Advanced tab, select Environment Variables…. This will open the Environment Variables window. 19 Using javap and other tools (i.e, javac) ❑ Update the system variable PATH: ❑ Highlight Path and select Edit… to open Edit environment variable window. 20 Using javap and other tools (i.e, javac) ❑ Update the system variable PATH: ❑ Select New and paste the Path to a new row. Then select OK 21 Μοντέλο εκτέλεσης Java Η Java συνδυάζει και τις δύο τεχνικές της μεταγλώττισης και της διερμηνείας: ❑ O πηγαίος κώδικας (.java files) μεταγλωττίζεται σε Java bytecode (.class files). ❑ Tα bytecode.class αρχεία μπορούν να ερμηνευτούν σε γλώσσα μηχανής από τον διερμηνέα της JVM και να εκτελεσθούν άμεσα. 22 Java bytecode και Java Virtual Machine (JVM) ❑ Οι compilers των περισσότερων γλωσσών προγραμματισμού μεταφράζουν προγράμματα απευθείας σε γλώσσα μηχανής, δημιουργώντας ένα εκτελέσιμο αρχείο το οποίο είναι σε μορφή κατάλληλη για τη συγκεκριμένη αρχιτεκτονική υπολογιστή και λειτουργικό σύστημα το οποίο χρησιμοποιήθηκε για την υλοποίηση του (Π.χ., x86 από x64, Windows, Unix, MacOS, κτλ.) → Machine Depended. ❑ H Java είναι μία γλώσσα η οποία όταν μεταγλωττίζεται παράγεται ένας ιδιαίτερος τύπος κώδικα χαμηλού επιπέδου → Java bytecode. 23 Java bytecode και Java Virtual Machine (JVM) ❑ Το Java bytecode μοιάζει με Assembly με την ιδιαιτερότητα όμως ότι δεν αντιστοιχεί με κάποια υφιστάμενη αρχιτεκτονική υπολογιστή ή λειτουργικό σύστημα. Java bytecode Java Compiler (javac) Java Source Code 24 Java bytecode και Java Virtual Machine (JVM) ❑ Ο κώδικας αυτός (Java bytecode) είναι εύκολο να μεταγλωττιστεί (από τον Java Compiler) και να εκτελεστεί σε πραγματικό χρόνο από μία εικονική μηχανή* εκτέλεσης κώδικα (Java Virtual Machine), στην γλώσσα μηχανής οποιουδήποτε υπολογιστή. ❑ Η διαδικασία μεταγλώττισης και εκτέλεσης ενός προγράμματος Java φαίνεται στα δεξία. ❑ O κώδικας Java (.java) μεταγλωττίζεται σε διαδικά Write αρχεία.class τα οποία είναι εκτελέσιμα από το JVM. Once, Run ❑ Με τη βοήθεια του JVM, το ίδιο bytecode Everywhere! αρχείο.class μπορεί να εκτελεστεί σε υπολογιστές διαφορετικού λειτουργικού συστήματος και αρχιτεκτονικής. * Εικονικές Μηχανές (Virtual Machines): Λογισμικό που προσομοιώνει τη λειτουργία ενός υπολογιστικού συστήματος -“τρέχει” προγράμματα σαν πραγματικό Υ/Σ → VMWare, VirtualBox 25 Java Byte-Code και Java Virtual Machine (JVM) ❑ H Java Virtual Machine είναι μια Εικονική μηχανή που δεν προϋποθέτει κάποια συγκεκριμένη τεχνολογία υλοποίησης, υλικό ή λειτουργικό σύστημα. ❑ Μόλις μεταγλωττιστεί σε Java bytecode, ένα πρόγραμμα Java μπορεί να χρησιμοποιηθεί σε οποιονδήποτε υπολογιστή που τρέχει JVM, καθιστώντας τον κώδικα portable (φορητό) → Write Once, Run Everywhere! ❑ Αν και η δομή του Java bytecode επιτρέπει την γρήγορη εκτέλεση του κώδικα Java σε οποιαδήποτε αρχιτεκτονική, για το λόγο ότι εμπλέκεται λογισμικό (π.χ., Java Virtual Machine) στην εκτέλεση του κώδικα (αντί για εκτέλεση απευθείας πάνω στο υλικό/hardware), η γλώσσα Java είναι πιο αργή στην εκτέλεση της από οποιαδήποτε γλώσσα που εκτελείται απευθείας στο hardware, όπως οι C ή C++. 26 Java Virtual Machine (JVM) και Just-In-Time (JIT) compilers ❑ Προκειμένου να βελτιωθεί η απόδοση, χρησιμοποιούνται Just-In-Time (JIT) compilers. ❑ Ο μεταγλωττιστής Just-In-Time (JIT) είναι ένα ουσιαστικό μέρος του JRE (Java Runtime Environment), το οποίο είναι υπεύθυνο για τη βελτιστοποίηση της απόδοσης των εφαρμογών που βασίζονται σε java κατά το χρόνο εκτέλεσης. 27 Java Virtual Machine (JVM) και Just-In-Time (JIT) compilers ❑ Συγκεκριμένα, ο JVM διερμηνέας παρακολουθεί πόσο συχνά εκτελείται το κάθε τμήμα bytecode (run-time profiling) και προωθεί συχνά εκτελούμενο κώδικα (hot spots) στον JIT compiler. ❑ Ο JIT μετατρέπει το bytecode σε τελικό κώδικα, και τον τρέχει. ❑ Βελτιστοποιεί το χρόνο εκτέλεσης αφού δεν χρειάζεται ο JVM να ερμηνεύει την ίδια ακολουθία bytecode επανειλημμένα και να επιβαρύνει τη διαδικασία μετάφρασης. 28 Class Loader ❑ Τα προγράμματα Java χωρίζονται σε μικρότερα μέρη που ονομάζονται κλάσεις (Class) ❑ Κάθε κλάση είναι συνήθως σε ξεχωριστό αρχείο (.java file) και μεταγλωττίζεται ξεχωριστά. ❑ Αυτές οι Java κλάσεις δεν φορτώνονται στο JVM ταυτόχρονα, αλλά όταν απαιτείται από μια εφαρμογή. ❑ Εδώ εμφανίζεται ο Class Loader ο οποίος είναι υπεύθυνος για τη φόρτωση στο JVM των bytecode των Java κλάσεων (.class file) όταν χρειάζονται για την εκτέλεση του προγράμματος. Τι χρειάζεστε για να ξεκινήσετε; 29 Configure your Java Development Environment 1. Install the latest version of JDK (Java SE) Download from here: https://www.oracle.com/jav a/technologies/downloads/ Τι χρειάζεστε για να ξεκινήσετε; 30 Configure your Java Development Environment 1. Find and copy the path that JDK is stored 2. In case you want to run java through CMD (Command Prompt) Set up the Environment Variables → Let our Computer know where to find JDK Τι χρειάζεστε για να ξεκινήσετε; 31 Configure your Java Development Environment 2. In the Environment Variables in the System Variables include the following and following and press OK Τι χρειάζεστε για να ξεκινήσετε; 32 Configure your Java Development Environment 4. Press New, write 3. In the System Variables Find and Edit the %JAVA_HOME%\bin\ and press OK Path Variable. Τι χρειάζεστε για να ξεκινήσετε; 33 Configure your Java Development Environment 5. To make sure that everything works as intended Open the Command Prompt (cmd) and write: java –version If you can see a message similar to below that means that everything is OK! 34 Compiling a Java Program or Class (Using Command Prompt) ❑ Each class definition must be in a file whose name is the same as the class name followed by.java (Aρχείο πηγαίου κώδικα) ❑ For example, the class Hello must be in a file named Hello.java (σύμβαση ονοματολογίας αρχείων) ❑ With “Command Prompt” each class is compiled with the command javac followed by the name of the file in which the code of the class resides javac Hello.java ❑ The result is a bytecode file whose filename is the same as the class name followed by.class (τελικός κώδικας) Hello.class 35 Running a Java Program (Using Command Prompt) ❑ A Java program can be given the run command java after all its classes have been compiled → This will call the JVM to run the program! ❑ Only run the class that contains the main method (the system will automatically load and run the other classes, if any) ❑ The main method begins with the line: public static void main(String[ ] args) ❑ Follow the java run command by the name of the class only (no.java or.class extension) java Hello Τι χρειάζεστε για να ξεκινήσετε; 36 Configure your Java Development Environment 3. Install an Integrated Development Environment (IDE) - Ενσωματωμένο Περιβάλλον Ανάπτυξης Popular Java IDEs are Eclipse, NetBeans, IntelliJ IDEA We will use Eclipse IDE → Download from here: https://www.eclipse.org/downloads/ Ερωτήσεις? Additional Slides 39 Μεταγλωττιστής (compiler) ❑ Ελέγχει συντακτικά τον πηγαίο κώδικα γραμμένο σε γλώσσα υψηλού επιπέδου και τον μετασχηματίζει/μεταγλωττίζει σε εντολές στη γλώσσα μηχανής (τελικό κώδικα) κάποιας αρχιτεκτονικής επεξεργαστή (Π.χ., Windows, Unix, MacOS, κτλ). ❑ Εκτός από μεταγλώττιση σε γλώσσα μηχανής, χρησιμοποιεί προχωρημένους αλγορίθμους ανάλυσης κώδικα για να πραγματοποιήσει βελτιστοποιήσεις του τελικού κώδικα, ανάλογα και με τις ιδιαιτερότητες της κάθε μηχανής. ❑ Πλεονεκτήματα ❑ Ταχύτητα εκτέλεσης προγράμματος ❑ Οικονομικότερη διαχείριση μνήμης Τρέχει πριν την εκτέλεση του προγράμματος!!! 40 Μεταγλωττιστής (compiler) Μεταγλώττιση (compiling): Μετάφραση από υψηλού επιπέδου γλώσσα προγραμματισμού στο ανάλογο πρόγραμμα σε γλώσσα μηχανής ή "Εκτελέσιμο Κώδικα" ΕΞΟΔΟΣ (output) EIΣΟΔΟΣ (input) public class LeapYear { public static void main(String[] args) { int year = Integer.parseInt(args); // divisible by 4 boolean isLeapYear = (year % 4 == 0); // divisible by 4 and not 100 Μεταγλωττιστής isLeapYear = isLeapYear && (year % 100 != 0); // divisible by 4 and not 100 unless divisible by 400 isLeapYear = isLeapYear || (year % 400 == 0); System.out.println(isLeapYear); } } 41 Διερμηνέας (interpreter) ❑ Πρόγραμμα που εκτελεί απευθείας τις εντολές του πηγαίου κώδικα χωρίς προηγουμένως να μετασχηματίσει το πρόγραμμα αυτό σε γλώσσα μηχανής. ❑ Σαρώνει τον πηγαίο κώδικα (source code) εντολή-εντολή, και εκτελεί την κάθε εντολή καθώς την διαβάζει. EIΣΟΔΟΣ Χρήστη (user input) 2017 EIΣΟΔΟΣ (input) ΕΞΟΔΟΣ public class LeapYear { public static void main(String[] args) { int year = Integer.parseInt(args); program output // divisible by 4 boolean isLeapYear = (year % 4 == 0); // divisible by 4 and not 100 isLeapYear = isLeapYear && (year % 100 != 0); Διερμηνέας False // divisible by 4 and not 100 unless divisible by 400 isLeapYear = isLeapYear || (year % 400 == 0); System.out.println(isLeapYear); } } 42 Java Virtual Machine (JVM) πέρα από Java Οποιαδήποτε γλώσσα με λειτουργικότητα που μπορεί να εκφραστεί ως έγκυρο αρχείο.class μπορεί να φιλοξενηθεί από το JVM. 43 Βασικά Εργαλεία της Πλατφόρμας Java (JDK and JRE) ❑ Εργαλεία Ανάπτυξης Λογισμικού (Tools & Tool APIs): μεταγλώττιση (compiling), εκτέλεση (running), παρακολούθηση (monitoring), αποσφαλμάτωση (debugging), τεκμηρίωση (documentation): javac, java launcher, javadoc. ❑ Τεχνολογίες Εγκατάστασης Λογισμικού (Deployment Technologies): Java Web Start, Java Plug-In. ❑ Εργαλειοσύνολα Γραφικών Διαπροσωπειών (User Interface (GUI) Toolkits): Swing, Java 2D, etc. ❑ Βιβλιοθήκες Ολοκλήρωσης (Integration Libraries): JDBC API, JNDI API, Java RMI ❑ Java SE API: Also known as Libraries. Contains predefined java code that we can use to develop Java Programs.

Use Quizgecko on...
Browser
Browser