Εισαγωγή στον Προγραμματισμό Ακαδημαϊκό έτος: 2010-2011 Επιμέλεια Ξενοφών Βασιλάκος
Περιεχόμενα Φροντιστηρίου 1. Εισαγωγή 2. Εντολές Εκχώρησης και Τελικές μεταβλητές 3. Μεταγλώττιση και διερμηνεία των προγραμμάτων Εισαγωγή στον Προγραμματισμό Υπολογιστών
Δεδομένα και πληροφορίες (τι είναι δεδομένο) Δεδομένα στον προγραμματισμό Εισαγωγή 3
Δεδομένα και Πληροφορίες 1/2 Τι είναι το δεδομένο (datum)? Είναι ένα σύμβολο πχ ένα ψηφίο (7), ένα γράμμα (φ), ή ένα μαθηματικό σύμβολο (,,,%).. Τι είναι το πληροφορία Ένα σύνολο από δεδομένα μαζί με την ερμηνεία επί αυτών «Παναγιωτόπουλος»: Αν ερμηνευτεί ως όνομα ανθρώπου μας πληροφορεί για το πώς ονομάζεται το εν λόγω άτομο Εκτός και αν ερμηνευτεί ως επωνυμία επιχείρησης.. κ.λπ. Εισαγωγή στον Προγραμματισμό Υπολογιστών 4
Δεδομένα και Πληροφορίες 2/2 «3020010»: Αν ερμηνευτεί ως αριθμός ή πλήθος, τότε υποδηλώνει μια πληροφορία σε σχέση με κάποια ποσότητα χρηματικό ποσό, ή πληθυσμός μιας χώρας κ.ο.κ. Αν ερμηνευτεί ως αριθμός μητρώου, τότε μας πληροφορεί ότι ο εν λόγω φοιτητής: είναι του τμήματος πληροφορικής (3), έχει έτος εισαγωγής το 2002 (02), μπήκε με πανελλαδικές εξετάσεις (0), και είναι ο 10 ος με αλφαβητική σειρά στο έτος του Εισαγωγή στον Προγραμματισμό Υπολογιστών 5
Δεδομένα στον προγραμματισμό 1/3 Τα προγράμματα παίρνουν δεδομένα ως είσοδο, τα επεξεργάζονται, και παράγουν άλλα δεδομένα εξόδου Πηγή Δεδομένα εισόδου Πρόγραμμα Δεδομένα εξόδου Έξοδος Πιθανές πηγές εισόδου: Συσκευές εισόδου από εξωτερικό περιβάλλον Κάμερα, πληκτρολόγιο, ποντίκι, μικρόφωνο, σαρωτής (scanner).. Αρχεία στη βοηθητική μνήμη Δίσκος, USB flash disk, cd/dvd/ blue ray players Διαδίκτυο (πχ το www ή το skype) Πιθανές Έξοδοι: Συσκευές εξόδου στο εξωτερικό περιβάλλον Οθόνη, ηχεία, εκτυπωτής Αρχεία στη βοηθητική μνήμη Διαδίκτυο (πχ το www ή το skype) 6
Δεδομένα στον προγραμματισμό 2/3 Δεδομένα κατανοητά στον Η/Υ Οι ζωντανοί οργανισμοί αναγνωρίζουν ήχους, εικόνες.. γενικά οτιδήποτε αναλογικά (συνεχής τιμές) δεδομένα συλλαμβάνουν με τις αισθήσεις τους Οι Η/Υ (τόσο το λογισμικό όσο και υλικό τους) κατανοούν ψηφιοποιημένα δεδομένα (digitized) Δηλ. τμήματα της συνεχούς πληροφορίας (ψηφίδες) Βλ. και κωδικοποίηση από φροντιστήριο 1 Όχι όλη τη πληροφορία πχ το mp3 αγνοεί οτιδήποτε δεν αντιλαμβάνεται ο άνθρωπος (συχνότητες, διαφορές στην ένταση των ήχων κτλ..) Εισαγωγή στον Προγραμματισμό Υπολογιστών 7
Δεδομένα στον προγραμματισμό 3/3 Δεδομένα κατανοητά στον Η/Υ Ορίζουν τη σημασία των δεδομένων (πχ ακέραιος ή ψευδής/αληθής) Το εύρος τιμών (πχ από το -128 έως το 127) Πρωταρχικοί (primitive) τύποι δεδομένων της java Τύπος char Στη μνήμη 1 byte (= 8 bits) 2b Τι κωδικοποιεί Έναν χαρακτήρα (UTF-16) boolean 1b True / false byte 1b [- 128, 127] short 2b [- 32768, 32767] int 4b [- 2147483648, 2147483647] long 8b [- 2 63, 2 63-1] float 4b [- 3.4x10 38, 3.4x10 38 ] double 8b [- 1.8x10 308, 1.8x10 308 ] Εισαγωγή στον Προγραμματισμό Υπολογιστών 8
Σταθερές Vs. Μεταβλητές Δήλωση Vs. Εκχώρηση Μεταβλητής Τελικές Μεταβλητές Εντολές Εκχώρησης / Τελικές Μεταβλητές 9
Σταθερές Vs. Μεταβλητές! Σταθερές (constants) Τιμή που δεν εξαρτάται (δεν αλλάζει) από την ροή εκτέλεσης των εντολών του προγράμματος Θ 0 24 32767-897L 3.141592 3.141592f 9.7854e-3 Μεταβλητές (variables) Περιέχουν τιμές που μπορεί να μεταβάλλονται κατά την εκτέλεση του προγράμματος Αντιστοιχούν σε θέσεις της κύριας μνήμης Τιμή μεταβλητής τιμή στη θέση μνήμης Μια μεταβλητή δημιουργείται κατά την εκτέλεση του προγράμματος Με την δήλωση της μεταβλητής, πχ int i; Εισαγωγή στον Προγραμματισμό Υπολογιστών 10
Δήλωση Vs. Εκχώρηση 1 /6 Γενικά Δήλωση: type varname; Εκχώρηση: varname = κάποια σταθερά ή παράσταση Δήλωση με ταυτόχρονη εκχώρηση (αρχικοποίηση) type varname = κάποια σταθερά ή παράσταση Εισαγωγή στον Προγραμματισμό Υπολογιστών 11
Δήλωση Vs. Εκχώρηση 2 /6 Δήλωση int myint; O int έχει μήκος 32 bit στη java H μεταβλητή myint είναι πλέον συνώνυμο της θέσης 3 στη μνήμη Διεύθυν ση 0 1 2 3 4 5 6 7 8 9 10 11 12 Μνήμη Περιεχόμενο (λέξη 32 bits) Εισαγωγή στον Προγραμματισμό Υπολογιστών 12
Δήλωση Vs. Εκχώρηση 2 /6 Δήλωση int myint; O int έχει μήκος 32 bit στη java H μεταβλητή myint είναι πλέον συνώνυμο της θέσης 3 στη μνήμη Εκχώρηση σταθεράς myint = 5; Διεύθυν ση 0 1 2 3 4 5 6 7 8 9 10 11 12 Μνήμη Περιεχόμενο (λέξη 32 bits) 0000 000000101 Εισαγωγή στον Προγραμματισμό Υπολογιστών 13
Δήλωση Vs. Εκχώρηση 2 /6 Δήλωση int myint; O int έχει μήκος 32 bit στη java H μεταβλητή myint είναι πλέον συνώνυμο της θέσης 3 στη μνήμη Εκχώρηση σταθεράς myint = 5; Εκχώρηση παράστασης myint = 5 * myint; Διεύθυν ση 0 1 2 3 4 5 6 7 8 9 10 11 12 Μνήμη Περιεχόμενο (λέξη 32 bits) 0000 00011001 Εισαγωγή στον Προγραμματισμό Υπολογιστών 14
Δήλωση Vs. Εκχώρηση Σειρά από ερωτήματα.. Πως γίνεται η εκχώρηση;? Πως γίνεται η εκχώρηση από παράσταση (και όχι σταθερά); Είναι λάθος ή σωστό το short mysrt = 99999; Εισαγωγή στον Προγραμματισμό Υπολογιστών 15
Δήλωση Vs. Εκχώρηση Σειρά από ερωτήματα.. και οι απαντήσεις αυτών.. Πως γίνεται η εκχώρηση; Το δεξί τμήμα εκχωρείται στη περιοχή της μνήμης που αντιπροσωπεύει η μεταβλητή Πως γίνεται η εκχώρηση από παράσταση (και όχι σταθερά); Το δεξί τμήμα υπολογίζεται (γίνονται πράξεις στη μνήμη από τον επεξεργαστή) και στη συνέχεια εκχωρείται στη περιοχή της μνήμης που αντιπροσωπεύει η μεταβλητή Είναι λάθος ή σωστό το short mysrt = 99999; Λάθος! Βοήθεια: ο short είναι μήκους 16 bits Επιπλέον βοήθεια: η default ερμηνεία των ακεραίων στη java είναι σε int. Απάντηση: ο short τύπος δεν μπορεί να αναπαραστήσει τιμές εκτός του πεδίου [- 32768, 32767] Εισαγωγή στον Προγραμματισμό Υπολογιστών? 16
Δήλωση Vs. Εκχώρηση? Πως γίνεται η δέσμευση μνήμης και στη συνέχεια εκχώρηση τιμής σε μια long μεταβλητή Βοήθεια: ο long πιάνει 64 bits στη μνήμη Απάντηση: επόμενη διαφάνεια Εισαγωγή στον Προγραμματισμό Υπολογιστών 17
Δήλωση Vs. Εκχώρηση 5/6 Δήλωση long mylng; O long έχει μήκος 2x32 bit στη java H μεταβλητή mylngt είναι πλέον συνώνυμο της περιοχής στη μνήμη που ξεκινά από τη θέση 3 στη μνήμη Διεύθυν ση 0 1 2 3 4 5 6 7 8 9 10 11 12 Μνήμη Περιεχόμενο (λέξη 32 bits) Εισαγωγή στον Προγραμματισμό Υπολογιστών 18
Δήλωση Vs. Εκχώρηση 5/6 Δήλωση long mylng; O long έχει μήκος 2x32 bit στη java H μεταβλητή mylngt είναι πλέον συνώνυμο της περιοχής στη μνήμη που ξεκινά από τη θέση 3 στη μνήμη Εκχώρηση σταθεράς mylng = 5; Διεύθυν ση 0 1 2 3 4 5 6 7 8 9 10 11 12 Μνήμη Περιεχόμενο (λέξη 32 bits) 0000 000000101 Εισαγωγή στον Προγραμματισμό Υπολογιστών 19
Δήλωση Vs. Εκχώρηση 5/6 Δήλωση long mylng; O long έχει μήκος 2x32 bit στη java H μεταβλητή mylngt είναι πλέον συνώνυμο της περιοχής στη μνήμη που ξεκινά από τη θέση 3 στη μνήμη Εκχώρηση σταθεράς mylng = 5; Εκχώρηση παράστασης mylng = 5 * myint; Διεύθυν ση 0 1 2 3 4 5 6 7 8 9 10 11 12 Μνήμη Περιεχόμενο (λέξη 32 bits) 0000 000011001 Εισαγωγή στον Προγραμματισμό Υπολογιστών 20
Δήλωση Vs. Εκχώρηση 6/6 Άλλα παραδείγματα Δήλωση με ταυτόχρονη εκχώρηση (αρχικοποίηση) byte i = - 128; byte i = 128; char c = θ ; char cc = 65; Ισοδύναμο του char cc = A ; What is a in Unicode UTF-16 ερώτημα στο Google» Διάλεξα την σελίδα: http://www.asciitable.com/ αφού τα πρώτα σύμβολα του Unicode ταυτίζονται με εκείνα του ASCII boolean myboolean = false; double d = 10483.2948; float ff = 18.18364f; float f = 18.18364; double dd = 10483.2948f; Compiler: possible loss of precision, γιατί ενώ πριν όχι; Ο μεταγλωττιστής (compiler) θα το απαγορεύσει, γιατί; Ο μεταγλωττιστής (compiler) θα το επιτρέψει και γιατί; Εισαγωγή στον Προγραμματισμό Υπολογιστών 21
Τελικές μεταβλητές 1/3 Λέξη κλειδί: final «Μεταβλητές» που δεν μεταβάλλεται η τιμή τους κατά την εκτέλεση του προγράμματος Παίρνουν μια φορά αρχική τιμή και την διατηρούν μέχρι το τέλος της εκτέλεσης Ουσιαστικά, δεν υποδηλώνουν θέση στη μνήμη Είναι πιο πολύ κάτι σαν όνομα μια σταθεράς Παραδείγματα final μεταβλητών: final int daysjan = 31; final float pi = 3.141592f; final char charspace = ; Ο μεταγλωττιστής (compiler) θα διαμαρτυρηθεί αν παραλείψω το f στο τέλος της σταθεράς, γιατί; 22
Τελικές μεταβλητές 2/3 1. final int daysjan = 31; 2. final float pi = 3.141592f; 3. final char charspace = ; 4. charspace = 2 * pi Ο μεταγλωττιστής (compiler) θα διαμαρτυρηθεί, γιατί; 1 ον λείπει το ; 2 ον μήπως φταίει ότι πολλαπλασιάζω ένα χαρακτήρα με εάν αριθμό; Όχι διότι επιτρέπονται πράξεις με ακεραίους αριθμούς και το αποτέλεσμα είναι τύπου int.. το πειράζει όμως που είναι δεκαδικός ο αριθμός. 3 ον φταίει ότι προσπαθώ να αλλάξω μια τελική μεταβλητή.. Εισαγωγή στον Προγραμματισμό Υπολογιστών 23
Τελικές μεταβλητές 3/3 Γιατί να κάνουμε χρήση final μεταβλητών? Γιατί να κάνουμε χρήση final μεταβλητών; Τότε ποια η διαφορά από μια σταθερά τιμή όπως το «3.14»; Εισαγωγή στον Προγραμματισμό Υπολογιστών 24
Τελικές μεταβλητές 3/3 Γιατί να κάνουμε χρήση final μεταβλητών? Γιατί να κάνουμε χρήση final μεταβλητών; Είναι πολύ χρήσιμες για περιπτώσεις τιμών που παραμένουν αμετάβλητες καθ όλη τη διάρκεια της εκτέλεσης ενός προγράμματος ή/και όταν θέλουμε να διασφαλίσουμε ότι το περιεχόμενο των μεταβλητών αυτών ΔΕΝ θα αλλάξει Τότε ποια η διαφορά από μια σταθερά τιμή όπως το «3.14»; Δεν είναι απαραίτητο να έχει ορισθεί η τιμή της final μεταβλητής at compile time.. Σε αντίθεση με τις σταθερές, η πρώτη και μοναδική ανάθεση τιμής σε μία final μεταβλητή μπορεί να γίνει κατά την εκτέλεση του προγράμματος με ανάθεση σταθεράς ή αποτελέσματος παράστασης μέσα στο πηγαίο αρχείο κώδικα Πχ: final int i; i = j*8 /32; // αρχικοποίηση σε μεταγενέστερο στάδιο. Δεν // μπορεί να γίνει πάλι ανάθεση τιμής στην i. Εισαγωγή στον Προγραμματισμό Υπολογιστών 25
JDK Από τη συγγραφή στην εκτέλεση (βήμα προς βήμα) Μεταγλώττιση και διερμηνεία των προγραμμάτων 26
JDK 1/2 Τι είναι το JDK; JDK: Ακρωνύμιο από τις λέξεις «Java Development Kit» Πρόκειται για όλη την πλατφόρμα της java όπως αυτή σχεδιάστηκε και υλοποιήθηκε από τη SUN API classes (βιβλιοθήκη κώδικα ήδη υλοποιημένου Application Program Interface / Διεπαφή Προγραμματικών Εφαρμογών) Java compiler (μεταγλωττιστής) Java Virtual Machine interpreter (διερμηνευτής εικονικής μηχανής Java) Εισαγωγή στον Προγραμματισμό Υπολογιστών 27
JDK 2/2 Τι είναι το JDK; Χρησιμοποιείται για compile και το τρέξιμο των Java applications και των applets applets (εφαρμογές για υπολογιστές που τρέχουν μέσα από browsers όπως ο Firefox) Σημ: Η πιο σύγχρονη έκδοση του JDK είναι η J2SE 1.7 (Java 2 Standard Edition). Υπάρχει και micro edition για εφαρμογές για κινητά, καθώς και η enterprise edition για εμπορικό Software με αυξημένες απαιτήσεις Από την 1.5 και μετά υπάρχουν πολλές και σημαντικές βελτιώσεις / προσθήκες στη γλώσσα και το API αυτής. Εισαγωγή στον Προγραμματισμό Υπολογιστών 28
Από τη συγγραφή στην εκτέλεση 1/5 Βήμα προς βήμα: 1 ον Συγγραφή αρχείου κώδικα Πρόκειται ουσιαστικά για αρχείο κειμένου με την κατάληξη «.java» Αρχείο Πηγαίου Κώδικα Συγγραφή με οποιονδήποτε συντάκτη κειμένου όπως το vi Περιφερειακή Μονάδα Μνήμης Ή με κάποιο ολοκληρωμένο εργαλείο (IDE) που κάνει όλα τα βήματα που περιγράφουμε σε αυτή την υποενότητα Προσοχή, ένα αρχείο που περιλαμβάνει το κώδικα της κλάσης ClassName, πρέπει να ονομαστεί ClassName.java Προγραμματι στής Εισαγωγή στον Προγραμματισμό Υπολογιστών 29
Από τη συγγραφή στην εκτέλεση 2.1/5 Βήμα προς βήμα: 2 ον Μεταγλώττιση (compiling) Είναι η διαδικασία με την οποία το κείμενο του πηγαίου αρχείου κώδικα μετατρέπεται σε ενδιάμεσο στάδιο κώδικα C:\javac όνομα.java ή $/javac όνομα.java Παράγεται ένα όνομα.class αρχείο Οι λέξεις κλειδιά μεταφράζονται σε ειδικά σύμβολα της γλώσσας δυφιοσυλλαβών εικονικής μηχανής java (JVM byte code language) Επίσης κάνει και βελτιώσεις στη σύνταξη που κάνουν πιο αποδοτικό το κώδικα (εάν επιδέχεται βελτιώσεων) Εισαγωγή στον Προγραμματισμό Υπολογιστών 30
Από τη συγγραφή στην εκτέλεση Βήμα προς βήμα: 2 ον Μεταγλώττιση (compilation) 2.2/5 Είναι η διαδικασία με την οποία το κείμενο του πηγαίου αρχείου κώδικα μετατρέπεται σε Ένα ενδιάμεσο στάδιο κώδικα Οι λέξεις κλειδιά μεταφράζονται σε ειδικά σύμβολα της γλώσσας δυφιοσυλλαβών εικονικής μηχανής java (JVM byte code language) Επίσης κάνει και βελτιώσεις στη σύνταξη που κάνουν πιο αποδοτικό το κώδικα (εάν επιδέχεται βελτιώσεων) Περιφερειακή Μονάδα Μνήμης Προγραμματιστής File: όνομα.class Java Compiler Εισαγωγή στον Προγραμματισμό Υπολογιστών 31
Από τη συγγραφή στην εκτέλεση 3.1/5 Βήμα προς βήμα: 3 ον Διερμήνευση / Τρέξιμο Αν όλα πάνε καλά τότε έχει παραχθεί το όνομα.class Αυτό είναι το αρχείο με τον java byte code κώδικα τον οποίο θα εκτελέσει το JVM ως εξής: C:\java όνομα ή $/java όνομα Εισαγωγή στον Προγραμματισμό Υπολογιστών 32
Από τη συγγραφή στην εκτέλεση 3.2/5 Βήμα προς βήμα: 3 ον Διερμήνευση / Τρέξιμο Αν όλα πάνε καλά τότε έχει παραχθεί το όνομα.class Αυτό είναι το αρχείο με τον java byte code κώδικα τον οποίο θα εκτελέσει το JVM ως εξής: java όνομα CPU Περιφερειακή Μονάδα Μνήμης RAM Προγραμματιστής... 4: Φόρτωσε executable code Java Interpreter File: όνομα.class Java Compiler 33
Από τη συγγραφή στην εκτέλεση 4/5 Just in time compiling Πληροφοριακά αναφέρουμε ότι μια βελτίωση της java είναι το just in time compiling.. Για λεπτομέρειες: http://www.java-tips.org/java-setips/java.lang/what-is-java-just-in-timecompiler.html Εισαγωγή στον Προγραμματισμό Υπολογιστών 34
Εκτέλεση προγράμματος Java Βήμα προς βήμα: Επισκόπηση / όλα τα βήματα 5/5 RAM CPU... Περιφερειακή Μονάδα Μνήμης Προγραμματι στής 4: Φόρτωσε executable code File: όνομα.class Java Interpreter Java Compiler 35
Τι Ακούσατε Σήμερα 1. Εισαγωγή Δεδομένα και πληροφορίες (τι είναι δεδομένο) Δεδομένα στον προγραμματισμό 2. Εντολές Εκχώρησης / Τοπικές και Τελικές μεταβλητές Δήλωση Vs. Εκχώρηση Τελικές Μεταβλητές 3. Μεταγλώττιση και διερμηνεία των προγραμμάτων JDK Βήμα προς βήμα από τη συγγραφή ως τη μεταγλώττιση Εισαγωγή στον Προγραμματισμό Υπολογιστών 36
ΤΕΛΟΣ!