Û ØÓÒ ÔÖÓ Ö ÑÑ Ø Ñ ¾ Ç Ö ÐÓ ØÛÒ ÙÔÓÐÓ ØôÒ Ο υπολογιστής είναι εργαλείο επίλυσης προβλημάτων λόγω: ταχύτητας υπολογισμού και μεγέθους μνήμης γενικής χρησιμότητας μέσω της έννοιας του προγραμματισμού. Η λειτουργία του προσαρμόζεται στο επιλυόμενο πρόβλημα. Ενα πρόγραμμα: Είναι μια αλληλουχία κατάλληλων οδηγιών(εντολών) που εκτελεί ο υπολογιστής για την επίλυση ενός προβλήματος. Υλοποιεί έναν αλγόριθμο.
Ð Ö ÑÓ Μαθηματική μεθοδολογία υπολογιστικής επίλυσης προβλήματος. Κάθε αλγόριθμος ικανοποιεί τα παρακάτω κριτήρια: Είσοδος( 0 εξωτερικά δεδομένα). Εξοδος( 1 αποτελέσμα/ατα). Ορισμένος(περιέχει σαφείς και ακριβείς οδηγίες). Κάθε οδηγία, μεμονωμένα, είναι εξαιρετικά απλή. Καλύπτει όλες τις δυνατές καταστάσεις. Τερματισμός(σε πεπερασμένο αριθμό βημάτων ή χρόνο). Συνηθέστεροι τρόποι περιγραφής αλγορίθμων: (i)ψευδοκώδικας, (ii)διάγραμμαροής. ¼ Ð ÓÖ Ñ Ò Ö Κάθε αλγόριθμος περιγράφεται τελικά μόνο με οδηγίες για: είσοδο δεδομένων, έξοδο αποτελεσμάτων, πράξεις και αναθέσεις τιμών σε μεταβλητές, έλεγχο ποσοτήτων- επιλογή ανάλογης δράσης, επαναληπτική εκτέλεση, τερματισμό. Τα βήματα ενός αλγορίθμου/προγράμματος εκτελούνται σειριακά. Ενας αλγόριθμος τερματίζει σε πεπερασμένο αριθμό βημάτων.
È Ö Ñ Ø Ð ÓÖ ÑÛÒ Μέσος όρος 2 αριθμών. Ελάχιστος 2 αριθμών. Μετατροπή δεκαδικού σε δυαδικό αριθμό. Μέγιστος N αριθμών?. Βαθμός εργαστηρίων Πληροφορικής Ι. Τελικός βαθμός Πληροφορικής Ι. ¾ Ñ Ø Ø Ò ÙÔÓÐÓ Ø ÔÐÙ ÔÖÓ Ð Ñ ØÓ 1. Ανάλυση δεδομένων του προβλήματος. 2. Μαθηματική διατύπωση του προβλήματος. 3. Ανάπτυξη τεχνικών επίλυσης: αλγόριθμος. Σχεδιασμός ή επιλογή αλγορίθμου. Συνήθως: ένα πρόβλημα πολλοί αλγόριθμοι. 4. Διατύπωση αλγορίθμου σε γλώσσα προγ/σμού: πρόγραμμα. 5. Εκτέλεση προγράμματος για συγκεκριμένα δεδομένα. 6. Ερμηνεία αποτελεσμάτων.
Ðô ÔÖÓ Ö ÑÑ Ø ÑÓ Γλώσσα μηχανής(γμ) Οι εντολές είναι αλληλουχίες bits(δυαδικών ψηφίων). Εκτελούνται άμεσα από την CPU Διαφορετική για κάθε τύπο επεξεργαστή. Γλώσσα assembly Μνημονικά ονόματα αντί bits(ίδιο πλήθος εντολών). Μετατροπή σε ΓΜ από κατάλληλο πρόγραμμα(assembler). Διαφορετική για κάθε τύπο επεξεργαστή. Γλώσσεςυψηλούεπιπέδου:π.χ. Fortran, Lisp, C, C++, Java. Υψηλή αφαίρεση ευκολότερος προγραμματισμός Μετατροπή σε ΓΜ από κατάλληλα πρόγραμματα: μεταγλωττιστές(compilers) ή διερμηνείς(interpreters) Ανεξάρτητες από τύπο επεξεργαστή portable. Hello, world Ò ÔÖ Ö ÑÑ C #include <stdio.h> main() { printf("hello, world\n"); }
Hello, world Ðô Ñ Õ Ò 0000000 457f 464c 0101 0001 0000 0000 0000 0000 0000020 0002 0003 0001 0000 82c0 0804 0034 0000 0000040 1d08 0000 0000 0000 0034 0020 0007 0028 0000060 0021 001e 0006 0000 0034 0000 8034 0804 0000100 8034 0804 00e0 0000 00e0 0000 0005 0000 0000120 0004 0000 0003 0000 0114 0000 8114 0804... 0026060 6e69 755f 6573 0064 5f5f 6164 6174 735f 0026100 6174 7472 5f00 764a 525f 6765 7369 6574 0026120 4372 616c 7373 7365 5f00 675f 6f6d 5f6e 0026140 7473 7261 5f74 005f 0026150...712γραμμές Hello, world assembly ; Hello World for Intel Assembler (MSDOS) mov ax,cs mov ds,ax mov ah,9 mov dx, offset Hello int 21h xor ax,ax int 21h Hello: db "Hello World!",13,10,"$"
Å Ø ÐÛØØ Ø compilersµ Προγράμματα που μετατρέπουν ένα πηγαίο πρόγραμμα γραμμένο σε γλώσσα υψηλού επιπέδου σε εκτελέσιμο(σε ΓΜ). ΑΡΧΕΙΟ ΠΡΟΓΡΑΜΜΑΤΟΣ ΑΡΧΕΙΟ OBJECT #include <stdio.h> main() { printf("hello, world\n"); } COMPILER 011000110100100110001010001 101100101110010101001010101 ΕΚΤΕΛΕΣΙΜΟ ΑΡΧΕΙΟ LINKER 011000110100100110001010001 101100101110010101001010101 100001100011100101010100101 111001101010011101011110010 100001100011100101010100101 111001101010011101011110010 ΑΡΧΕΙΑ/ΒΙΒΛΙΟΘΗΚΕΣ OBJECT Ο μεταγλωττιστής δεν εκτελεί το πηγαίο πρόγραμμα. Το παραγόμενο εκτελέσιμο πρόγραμμα«τρέχει» αυτόνομα σε κάθε υπολογιστή που«καταλαβαίνει» τη συγκεκριμένη ΓΜ. ÖÑ Ò interpretersµ Προγράμματα που εκτελούν άμεσα ένα πηγαίο πρόγραμμα γραμμένο σε γλώσσα υψηλού επιπέδου. ΠΡΟΓΡΑΜΜΑ ΙΕΡΜΗΝΕΑΣ ΕΚΤΕΛΕΣΗ Δεν παράγουν εκτελέσιμο πρόγραμμα. Για την εκτέλεση του πηγαίου προγράμματος σε κάποιον υπολογιστή απαιτείται και η ύπαρξη του διερμηνέα. Τα ερμηνευόμενα προγράμματα είναι αργότερα από τα μεταγλωττιζόμενα.
À Ðô ÔÖÓ Ö ÑÑ Ø ÑÓ Java Σχεδιάστηκεαπότον James Gosling, Sun Microsystems, ca 1995για: Καινούργια αρχή(όχι συμβατότητα προς τα πίσω). Αντικειμενοστραφή προγραμματισμό. Προγραμματισμό στο Internet. Ασφάλεια. Αρχιτεκτονικά ουδέτερη και μεταφέρσιμη: Write once, run everywhere. Εύκολη ανάπτυξη μεγάλων εφαρμογών πλήθος βιβλιοθηκών. κ.α. ¼ ³ Ò ÔÖôØÓ ÔÖ Ö ÑÑ Java /* * Εμφανίζει το μήνυμα "Hello, world" στην οθόνη. * H Java έκδοση του πρώτου προγράμματος στο κλασσικό * βιβλίο των Kernighan \& Ritchie, * "The C Programming Language" */ public class HelloWorld { public static void main(string[] args) { System.out.println("Hello, world"); } }
Å Ø ÐôØØ ÔÖÓ Ö ÑÑ ØÓ Java Με κειμενογράφο(editor) δημιουργούμε το αρχείο: HelloWorld. java που περιέχει το παραπάνω πρόγραμμα. Το όνομα του αρχείου πρέπει: ναείναιτοίδιομετοόνοματηςκλάσης ναλήγεισε.java Μεταγλώττιση: javac HelloWorld. java που μετατρέπει το πρόγραμμα Java στο HelloWorld.java, σε bytecode στο αρχείο HelloWorld.class ¾ Bytecode & JVM Bytecode: δυαδική αναπαράσταση εκτελέσιμου προγράμματος, που όμως δεν εκτελείται σε κάποιο συγκεκριμένο υπολογιστή, αλλά εκτελείται από μια ιδεατή«μηχανή»: έναν αφηρημένο υπολογιστή που προσομοιώνεται από κατάλληλο πρόγραμμα(βλ. μηχανές Turing) Java Virtual Machine (JVM): η ιδεατή μηχανή που εκτελεί Java bytecode. Ενα αρχείο bytecode(.class) μπορεί να τρέξει στην JVM οποιουδήποτε άλλου υπολογιστή χωρίς επανα-μεταγλώττιση (portability).
Ø Ð ÔÖÓ Ö ÑÑ ØÓ Java Ηεντολή: java HelloWorld 1. θα ξεκινήσει την Java Virtual Machine 2. θα φορτώσει τον bytecode του HelloWorld.class στην JVM 3. η JVM θα εκτελέσει τον bytecode Θα εμφανιστεί στην οθόνη το μήνυμα: Hello, world Å Ø ÐôØØ Ø Ð ÔÖÓ Ö ÑÑ ØÓ Java Java προγραµµα Java compiler (javac) Java class αρχεια (bytecode) Java Virtual Machine (JVM) ΕΚΤΕΛΕΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ αρχεια βιβλιοθηκων
Ì ÑÔÓÖ Ò Ô ØÖ Συντακτικά σφάλματα(syntax errors) Ανιχνεύονται από τον compiler. Σφάλματα στην εκτέλεση(run-time errors) Ανιχνευόνται από τον interpreter(σε γλώσσες που διαθέτουν ένα)καιστη Javaαπότην JVM. Σφάλματα λογικής(bugs) Ανιχνεύονται από τον προγραμματιστή(συχνά με υπομονή και επιμονή) εφ όσον αποκαλυφθούν(debugging). Βασική αρχή προγραμματισμού Σε κάθε πρόγραμμα, πάντα υπάρχει τουλάχιστον ακόμα ένα bug. ÌÓ ÔÖôØÓ bug