ΕΠΛ 233: Αντικειμενοστρεφής Προγραμματισμός (Object-oriented programming) Διδάσκων: Μάριος Δικαιάκος Εργαστήρια: Χριστόφορος Παναγιώτου Περίγραμμα ΕΠΛ233 - Πρακτικά θέματα και Στόχοι μαθήματος Αντικειμενοστρεφείς Γλώσσες Προγραμματισμού και JAVA Η πλατφόρμα της JAVA Θεμελίωση Προβλημάτων Αφαιρετικότητα Επίλυση Προβλημάτων Διαδικασία Επίλυσης Υπολογιστικών Προβλημάτων 2 Πληροφορίες Μαθήματος Διαλέξεις Τρίτη, Παρασκευή 12:00-13:30 Αίθουσα 014, Κτήριο ΧΩΔ02 Εργαστήριο Πέμπτη 16:30-18:30, Β121, ΘΕΕ01 Παρασκευή 18:30-20:30, Β121, ΘΕΕ01 Ιστοσελίδα: http://www.cs.ucy.ac.cy/courses/epl233 Ανακοίνωση και παράδοση εργασιών μέσω Moodle: http://moodle.cs.ucy.ac.cy Πληροφορίες Μαθήματος Προαπαιτούμενα: ΕΠΛ132(Αρχές Προγραμματισμού ΙΙ) ΕΠΛ231(Δομές δεδομένων και αλγόριθμοι) Επικοινωνία με διδάσκοντα: Γραφείο: 012, κτήριο ΘΕΕ01 Ώρες γραφείου: Παρασκευή 10:30-11:30 ή κατόπιν συννενοήσεως Επικοινωνία: mdd at cs dot ucy dot ac dot cy Φόρουμ μέσω piazza: http://www.piazza.com 3 4
Αξιολόγηση Εβδομαδιαίες Εργασίες: 20% Συμμετοχή στην Τάξη κ. Φόρουμ: 5% Ενδιάμεση Εξέταση: 25% Γραπτή Τελική Εξέταση: 50% Προβιβάσιμος βαθμός: (Ενδιάµεση εξέταση * 0.33) + (Τελική εξέταση * 0.67) > 5 Ψηφοφορίες στην τάξη Ερωτήσεις πολλαπλών (4) επιλογών. Κάθε επιλογή αντιστοιχεί σε ένα χρώμα: Μπλε, Πράσινο, Κόκκινο, Πορτοκαλί Κάθε φοιτητής ψηφίζει μόνος του (χωρίς συνεργασία) με τη λήξη του χρόνου, υψώνοντας την κάρτα αντίστοιχου χρώματος. Μπορεί να σας ζητηθεί να εξηγήσετε την απάντησή σας Δεν είναι λοταρία Αν χρειαστεί, δίνεται χρόνος για να συζητήσετε την απάντηση με τους διπλανούς σας, να φθάσετε σε συμφωνία και να ξαναψηφίσετε. Μπορεί να σας ζητηθεί να εξηγήσετε την απάντησή σας 6 5 Στις ερωτήσεις πολλαπλής επιλογής πότε επιτρέπεται να συζητήσουμε με τους διπλανούς μας για να φθάσουμε σε συμφωνία; Ποτέ Πριν την πρώτη ψηφοφορία Πριν τη δεύτερη ψηφοφορία Μετά τη δεύτερη ψηφοφορία Εγχειρίδια Βασικά εγχειρίδια Thinking in Java by Bruce Eckel, 4th edition. (Prentice Hall, 2006) Java Tutorials: http://docs.oracle.com/javase/tutorial/ Χρήσιμα εγχειρίδια Object-oriented Design and Patterns by Cay Horstmann, 2nd edition. (Wiley, 2006) Eclipse in action. A guide for Java developers by David Gallardo, Ed Burnette and Robert McGovern. (Manning, 2003) Java in a Nutshell by David Flanagan, 5th edition. (O'Reilly, 2005) EΠΛ233 7 8
Βιβλιογραφία Πληροφορίες για το μάθηα Ιστοσελίδα: http://www.cs.ucy.ac.cy/ courses/epl233 Ανακοινώσεις / φόρουμ @ Piazza: Eργασίες @ Μοοdle: 9 https://piazza.com/class/idsnq2i49v22ej http://moodle.cs.ucy.ac.cy 10 Aπώτεροι Στόχοι Βαθύτερη γνώση του αντικειμένου «Πολυμαθίη νόον έχειν ού διδάσκει» (Ηρακλείτου, απόσπασμα Β40 - Διογένης Λαέρτιος ΙΧ 1) Η πολυμάθεια δεν μας βάζει νού Γνώση που να οδηγεί σε δυνατότητα δημιουργικής σκέψης «τας ανανεώσεις των ευρέσεων και των τεχνών και των μαθήσεων, και τα λοιπά τα στεφανούντα το σώμα εν τω κόσμω τούτω τω ορατώ» (Ισαάκ Σύρου, Λόγος ΞΓ, «Περί τάξεως πρώτης της γνώσεως», Τα Ευρεθέντα Ασκητικά] 11 12
Θεματολογία Αρχές επίλυσης Υπολογιστικών Προβλημάτων μέσω προγραμματισμού Η/Υ. Eις βάθος εισαγωγή στις Aρχές Αντικειμενοστρεφούς Προγραμματισμού (object-oriented programming - OOP) μέσω της γλώσσας JAVA. Aρχές Αντικειμενοστρεφούς Σχεδίασης για την διατύπωση και επίλυση υπολογιστικών προβλημάτων. Αφαιρετικότητα Δεδομένων στον Α/Σ Προγραμματισμό. Προχωρημένες Προγραμματιστικές Τεχνικές JAVA. Προγραμματισμός σε Ολοκληρωμένα Περιβάλλοντα Ανάπτυξης (Integrated Development Environments) Μαθησιακοί Στόχοι Ευχέρεια καθορισμού της κατάλληλης θεμελίωσης - αφαιρετικής διατύπωσης ενός προς επίλυση πολύπλοκου προβλήματος. Η αφαιρετική διατύπωση είναι απαραίτητο βήμα για τη λύση του προβλήματος Ευχέρεια επινόησης τυπικών (formal) λύσεων σε «καλώς ορισμένα» προβλήματα, με χρήση αντικειμενοστρεφούς σχεδιασμού. Ευχέρεια υλοποίησης, ελέγχου, αποσφαλμάτωσης αντικειμενοστρεφών προγραμμάτων Java σε περιβάλλον ολοκληρωμένης ανάπτυξης όπως το Eclipse για την αποδοτική υλοποίηση αλγορίθμων. Ευχέρεια επικοινωνίας των πορισμάτων της εργασίας σας (αντικειμενοστρεφή σχέδια, προγράμματα JAVA) σε άλλους προγραμματιστές. 13 14 Η επίτευξη των μαθησιακών στόχων θα αξιολογείται διαρκώς στη διάρκεια του μαθήματος μέσω κουίζ, γραπτών εξετάσεων, εργασιών, προφορικής αξιολόγησης και θα κρίνει την επιτυχία/ αποτυχία σας στο μάθημα Περίγραμμα ΕΠΛ233 - Πρακτικά θέματα και Στόχοι μαθήματος Αντικειμενοστρεφείς Γλώσσες Προγραμματισμούς και JAVA Η πλατφόρμα της JAVA Θεμελίωση Προβλημάτων Αφαιρετικότητα Επίλυση Προβλημάτων Διαδικασία Επίλυσης Υπολογιστικών Προβλημάτων 15 16
Αντικειμενοστρεφής Προγραμματισμός και JAVA. Γιατί; Αντικειμενοστρεφής Προγραμματισμός Μεθοδολογία που χρησιμοποιεί την έννοια («αφαίρεση» «αντικειμένων» (objects) και των μεταξύ τους «αλληλεπιδράσεων» (interactions) τους για την επίλυση υπολογιστικών προβλημάτων και την δημιουργία λογισμικών προγραμμάτων. Θα διερευνήσουμε τις έννοιες που σχετίζονται με τη μεθοδολογία αυτή χρησιμοποιώντας την γλώσσα προγραμματισμού JAVA. 17 18 Γλώσσα Προγραμματισμού JAVA Δημιουργήθηκε το 1991 απο την Green team της Sun Microsystems. Επίσημη ανακοίνωση της Γ.Π. το 1995. «Πατέρας» της Java θεωρείται ο James Gosling http://nighthacks.com/roller/jag/ Ο στόχος ήταν ο εύκολος προγραμματισμός ηλεκτρονικών συσκευών και συστημάτων για ευρεία κατανάλωση. Η Sun Microsystems εξαγοράστηκε το 2010 από την Oracle. http://www.java.com/en/javahistory/ Κύρια χαρακτηριστικά JAVA Απλή (Simple) Αντιθέτως με την C++ η JAVA δεν έχει header files, pointer arithmetic, pointer syntax, structures, unions, operator overloading, virtual base classes, κ.α.) Αντικειμενοστρεφής (Object-oriented) Παρόμοια με την C++ με την μόνη διαφορά στη πολλαπλή κληρονομικότητα (multiple inheritance). Βασισμένη στη C και C++ αλλά με σημαντικές αλλαγές και βελτιώσεις. 19 20
Κύρια χαρακτηριστικά JAVA (cont'd) Αξιόπιστη (Robust) Έλεγχος για προβλήματα κατά την διάρκεια της μεταγλώττισης(compile-time) παρά της εκτέλεσης(runtime). Ανεξαρτησία Αρχιτεχτονικής (Architecture Neutral) Cross-platform. Write once, run everywhere. Linux, Sun Solaris, Apple, Windows Φορητή (Portable) Απαλλαγή από τις συγχύσεις με big-endian/little-endian Όλοι οι αρχέγονοι τύποι (primitive data types) είναι προσδιορισμένοι με ακρίβεια. Κύρια χαρακτηριστικά JAVA (cont'd) Πολυνηματική (Multi-threaded) Δυναμική (Dynamic) Ευκολία προσδιορισμού τύπου κατά την διάρκεια της εκτέλεσης (Run-time information) Κατανεμημένη (Distributed) Βιβλιοθήκες για προγραμματισμό δικτύων με TCP/IP κ.τ.λ. 21 22 Mονο-νηματική εκτέλεση Πολυ-νηματική εκτέλεση Singlethreaded execution public class Charge { private double rx, ry; private double q; Πρόγραµµα // position // charge public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; } public double potentialat(double x, double y) { double k = 8.99e09; double dx = x - rx; double dy = y - ry; return k * q / Math.sqrt(dx*dx + dy*dy); } public String tostring() { return q + " at " + "(" + rx + ", " + ry + ")"; } } «Νήµα» εκτέλεσης (ροή εντολών διεργασίας) Multi-threaded execution public class Charge { private double rx, ry; private double q; Πρόγραµµα // position // charge public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; } public double potentialat(double x, double y) { double k = 8.99e09; double dx = x - rx; double dy = y - ry; return k * q / Math.sqrt(dx*dx + dy*dy); } public String tostring() { return q + " at " + "(" + rx + ", " + ry + ")"; } } Core Core Core Core Single-core CPU Core Core Core Core Core Core Core Core Multi-core CPU 23 24
H πολυνηματική εκτέλεση προγραμμάτων JAVA γίνεται μόνο σε πολυπύρηνους επεξεργαστές; Α/Σ Γλώσσες Προγραμματισμού Ναι. Δεν μπορούν να συνυπάρξουν πολλαπλά νήματα στον ίδιο πυρήνα. Όχι - ο μεταγλωττιστής ανιχνεύει το είδος του επεξεργαστή και αναλόγως προσαρμόζει τον τελικό κώδικα για τον αριθμό των διαθέσιμων πυρήνων. Όχι - πολλαπλά νήματα μπορούν να τρέξουν και σε μονοπύρηνο επεξεργαστή. Το λειτουργικό σύστημα ρυθμίζει την πολυπλεξία των νημάτων σε μια διεργασία και έναν πυρήνα. Ναι. Οι εκδόσεις της JAVA που υποστηρίζουν πολυνηματικότητα, δεν υποστηρίζονται σε πολυπύρυνες αρχιτεκτονικές. 25 EΠΛ233 Simula 67 Smalltalk Python Ruby Scala C++ C# Objective C JavaScript (?) PhP (?) Α/Σ Προγραμματισμός: Ιστορικό Xerox Parc Ο όρος Α/Σ ΓΠ εισήχθη με τη γλώσσα Smalltalk, η οποία αναπτύχθηκε στο Xerox PARC από τον Alan Kay και άλλους στη δεκαετία του 1970. Xerox PARC has been the inventor and incubator of many elements of modern computing in the contemporary office work place: Οι επινοητές της Smalltalk εμπνεύστηκαν από τη γλώσσα Simula 67, αλλά η Smalltalk περιείχε ένα πλήρως δυναμικό σύστημα για την δημουργία και δυναμική αλλαγή κλάσεων. Η Smalltalk και ο Α/Σ.Π. παρουσιάστηκαν στο ευρύ κοινό με άρθρο στο περιοδικό BYTΕ τον Αύγουστο του 1981. 26 27 Laser printers, Computer-generated bitmap graphics The graphical user interface, featuring windows and icons, operated with a mouse The WYSIWYG text editor Interpress, a resolution-independent graphical page-description language and the precursor to PostScript Ethernet as a local-area computer network Fully formed object-oriented programming in the Smalltalk programming language and integrated development environment. Model view controller software architecture 28
Γιατί η JAVA; Γιατί την JAVA; According to the code committed by 10m users of GitHub, Java is the programming language that grew more than any other between 08-15. 19/8/2015 29 30 SCALA SmallTalk Prolog JAVA Ποιές από τις παρακάτω ΔΕΝ είναι αντικειμενοστρεφής γλώσσα προγραμματισμού; Περίγραμμα ΕΠΛ233 - Πρακτικά θέματα και Στόχοι μαθήματος Αντικειμενοστρεφείς Γλώσσες Προγραμματισμούς και JAVA Η πλατφόρμα της JAVA Θεμελίωση Προβλημάτων Αφαιρετικότητα Επίλυση Προβλημάτων Διαδικασία Επίλυσης Υπολογιστικών Προβλημάτων EΠΛ233 31 32
Μεταγλωττιστές, Διερμηνείς Μεταγλωττιστές (compilers): προγράμματα που μετασχηματίζουν εντολές μιας γλώσσας προγραμματισμού σε οδηγίες (εντολές) στη γλώσσα μηχανής μιας συγκεκριμένης αρχιτεκτονικής. Απαιτείται μεγαλύτερη προσπάθεια κατά τον μετασχηματισμό Μεγαλύτερες δυνατότητες για βελτιστοποιήσεις του τελικού κώδικα, ανάλογα και με τις ιδιαιτερότητες της κάθε μηχανής Διερμηνείς (interpreters): συνδυάζουν τον μετασχηματισμό με την εκτέλεση των εντολών μιας γλώσσας προγραμματισμού σε ένα πρόγραμμα, το οποίο διαβάζει τον πηγαίο κώδικα (source code), τον μετατρέπει και τον εκτελεί απευθείας. Πλατφόρμες Περιβάλλοντα λογισμικού και υλικού στα οποία εκτελούνται προγράμματα. Συνήθως είναι συνδυασμός Λειτουργικού Συστήματος και του Υλικού Υποστρώματος του ΛΣ. Δημοφιλείς πλατφόρμες: Microsoft Windows, Linux, Solaris OS, Mac OS. Πλατφόρμα Java Standard Edition (JAVA SE): Σύστημα λογισμικού που τρέχει πάνω σε διάφορες πλατφόρμες υλικού. Bασικά συστατικά: Java Development Kit (JDK) and Java SE Runtime Environment (JRE). 33 34 Η Πλατφόρμα της JAVA SE Βασικά Εργαλεία της Πλατφόρμας Java Το Java Runtime Environment (JRE) παρέχει: βιβλιοθήκες (libraries) την Εικονική Μηχανή JAVA (Java Virtual Machine) δομοστοιχεία λογισμικού που χρειάζονται για την εκτέλεση applets και εφαρμογών γραμμένων σε Java Το Java Development Kit είναι υπερσύνολο του JRE και περιέχει: ό,τι υπάρχει στο JRE εργαλεία όπως μεταγλωττιστές (compilers), αποσφαλματωτές (debuggers) που χρειάζονται για την ανάπτυξη λογισμικού Εργαλεία Ανάπτυξης Λογισμικού: μεταγλώττιση (compiling), εκτέλεση (running), παρακολούθηση (monitoring), αποσφαλμάτωση (debugging),τεκμηρίωση (documentation): javac, java launcher, javadoc. Java API (Application Programming Interface) Τεχνολογίες Εγκατάστασης Λογισμικού (Deployment Technologies): Java Web Start, Java Plug-In. Εργαλειοσύνολα Γραφικών Διαπροσωπειών (GUI Toolkits): Swing. Τεχνολογίες Ολοκλήρωσης:JDBC API, JNDI API, Java RMI 35 36
Η Πλατφόρμα της JAVA Εικονικές Μηχανές (virtual machines) Εικονική Μηχανή: λογισμικό προσομοίωσης υπολογιστικού συστήματος, το οποίο τρέχει προγράμματα σαν πραγματικό Υ/Σ. JAVA Virtual Machine (JVM): μια εικονική μηχανή που υλοποιεί το σύνολο εντολών ενός Η/Υ με αρχιτεκτονική στοίβας (stack-oriented architecture) και δέχεται προς εκτέλεση μια μορφή ενδιάμεσου κώδικα, των δυφιοσυλλαβών Java (Java bytecode). 1.1 δισ. επιτραπέζιοι Η/Υ τρέχουν JAVA (2013) 930 εκατομύρια JRE καταφορτώσεις / έτος (2013) 3 δισ. κινητά τηλέφωνα τρέχουν JAVA (2013). 37 38 3 όψεις του JVM Προδιαγραφή (specification): Α document that formally describes what is required of a JVM implementation. Having a single specification ensures all implementations are interoperable. Υλοποίηση (implementation): A computer program that meets the requirements of the JVM specification. Στιγμιότυπο (instance): An implementation of the JVM specification, running in a process that executes a computer program compiled into Java bytecode. Java Virtual Machine The cornerstone of the Java platform. Component responsible for JAVA s hardware- and OS-independence, small size of its compiled code, and ability to protect users from malicious programs. An abstract computing machine. It has an instruction set and manipulates various memory areas at run time. Does not assume any particular implementation technology, host hardware, or host operating system. Not inherently interpreted - can just as well be implemented by compiling its instruction set to that of a silicon CPU. It may also be implemented in microcode or directly in silicon. 39 40
Αρχιτεκτονική JVM Class Loader 41 The class loader must be able to recognize and load anything that conforms to the Java class file format. Any implementation is free to recognize other binary forms besides class files, but it must recognize class files. Performs three basic activities in this strict order: Loading: finds and imports the binary data for a type Linking: performs verification, preparation, and (optionally) resolution Verification: ensures the correctness of the imported type Preparation: allocates memory for class variables and initializing the memory to default values Resolution: transforms symbolic references from the type into direct references. Initialization: invokes Java code that initializes class variables to their proper starting values. 42 JVM and bytecodes JVM knows nothing of the Java programming language, only of a particular binary format, the class file format. A class file contains JVM instructions (or bytecodes) and a symbol table, as well as other ancillary information. Any language with functionality that can be expressed in terms of a valid class file can be hosted by the JVM. For security, JVM imposes strong syntactic and structural constraints on the code in a class file. Δυφιοσυλλαβές (bytecodes) Compiled code to be executed by the JVM. Represented using a hardware- and operating system-independent binary format, typically (but not necessarily) stored in a file, known as the class file format. The class file format precisely defines the representation of a class or interface. 43 44
Μοντέλο εκτέλεσης JAVA Μοντέλο εκτέλεσης JAVA Η JAVA συνδυάζει τις δύο τεχνικές της μεταγλώττισης και της διερμηνείας: Πηγαίος κώδικας μεταγλωττίζεται σε JVM bytecode. Tα bytecode μπορούν να εκτελεσθούν άμεσα από τον διερμηνέα της JVM. O διερμηνέας παρακολουθεί επίσης πόσο συχνά εκτελείται το κάθε τμήμα bytecode (run-time profiling) και προωθεί συχνά εκτελούμενο κώδικα (hot spots) στον «πάνω-στην-ώρα» μεταγλωττιστή (just-in-time - JIT) compiler. Ο JIT μετατρέπει το bytecode σε τελικό κώδικα, και τον τρέχει. 45 Ο JIT μπορεί να κάνει βελτιστοποιήσεις στον κώδικα που θα μεταφράσει, αξιοποιώντας τις πληροφορίες που συγκεντρώνονται από την παρακολούθηση του τρεχούμενου κώδικα. Δυνατότητα καλύτερης βελτιστοποίησης της επίδοσης από παραδοσιακούς μεταγλωττιστές Η αρχιτεκτονική της JAVA επιτρέπει την εκτέλεση κώδικα σε οποιαδήποτε μηχανή στην οποία υπάρχει ο διερμηνέας JVM και την γρήγορη εκτέλεση σε οποιαδήποτε μηχανή υπάρχει και ο μεταγλωττιστής JIT. Σοβαρή βελτιστοποίηση γίνεται για τα hot spots του κώδικα. 46 Μοντέλο εκτέλεσης JAVA JVM πέρα από τη JAVA 47 48
Πλεονεκτήματα vs Μειονεκτήματα Κύκλος ζωής απλού προγράμματος Πλεονεκτήματα: Ασφάλεια Εύκολος προγραμματισμός δικτύων (Network-centric programming) Ανεξαρτησία αρχιτεκτονικής Μεταγλωττιστής Διερµηνέας Μειονεκτήματα: Επίδοση(performance) - όταν γίνεται χρήση διερμηνέα, η εκτέλεση προγραμμάτων είναι πιο αργή από την εκτέλεση ιθαγενή κώδικα (native code) Δυσκολία άμεσης διαχείρισης μνήμης από τον προγραμματιστή Ενδιάµεσος Κώδικας διφυοσυλλαβών (bytecodes) 49 50 Τι χρειάζεστε για να ξεκινήσετε; Γλώσσα Προγραμματισμού Java (Java programming language) Η γλώσσα που γράφονται όλα τα προγράμματα JAVA (applets, servlets and JavaBeans components) Πλατφόρμα Java (Java Platform or Java Runtime Environment) Προκαθορισμένες κλάσεις(class) που υπάρχουν σε κάθε εγκατάσταση Java. Οργανωμένες σε μορφή βιβλιοθηκών (packages). Διαθέσιμες για χρήση από όλα τα προγράμματα JAVA. JVM Ποιά από τις παρακάτω προτάσεις είναι αληθής αναφορικά με την εκτέλεση προγραμμάτων JAVA; Μεταγλωττίζουμε τον πηγαίο (source) σε ιθαγενή (native) κώδικα και εκτελείται ο ιθαγενής κώδικας από το λειτουργικό. Η εκτέλεση μπορεί να γίνει απευθείας από τον διερμηνέα χωρίς χρήση μεταγλωττιστή. Ο javac μεταγλωττίζει τον πηγαίο κώδικα σε ενδιάμεσο και αυτός εκτελείται από τον διερμηνέα. Κάποια τμήματα κώδικα, μπορεί να μεταγλωττιστούν δυναμικά από τον JIT σε ιθαγενή κώδικα. Καμιά από τις παραπάνω. 51 EΠΛ233 52
Διαδικασία Προγραμματισμού User Text Editor (Kwrite, Emacs) Source code (class_name.java) Πρώτο πρόγραμμα στη Java Τι ακολουθεί; Compilation errors Java Compiler (javac) Bytecodes (class_name.class) Output Java Virtual Machine 54 Πρώτο πρόγραμμα στη Java Πρώτο πρόγραμμα στη Java Τι ακολουθεί; Μεταγλώττιση (compiling) Τι ακολουθεί; Μεταγλώττιση (compiling) Δημιουργία διφυοσυλλαβών (Fibonacci.class) 55 56
Πρώτο πρόγραμμα στη Java Τι ακολουθεί; IDEs: Integrated Development Environments (Ενσωματωμένο Περιβάλλον Ανάπτυξης) Μεταγλώττιση (compiling) Δημιουργία διφυοσυλλαβών (Fibonacci.class) Εκτέλεση (execution) Αποτέλεσμα Eclipse IDE 57 58 Πόσα πρέπει να ξέρω; Υπάρχουν βασικοί αλγόριθμοι, η χρήση των οποίων εμφανίζεται σχεδόν σε κάθε πρόγραμμα (κυρίως αλγόριθμοι αναζήτησης και ταξινόμησης). Οι δομές δεδομένων που χρησιμοποιούνται συνήθως είναι γνωστές, ή προκύπτουν από τη σύνθεση γνωστών δομών: Πίνακες (arrays) Λίστες (lists) Πίνακες κατακερματισμού (hash tables) Δένδρα (trees) Περίγραμμα ΕΠΛ233 - Πρακτικά θέματα και Στόχοι μαθήματος Αντικειμενοστρεφείς Γλώσσες Προγραμματισμούς και JAVA Η πλατφόρμα της JAVA Θεμελίωση Προβλημάτων Αφαιρετικότητα Επίλυση Προβλημάτων Διαδικασία Επίλυσης Υπολογιστικών Προβλημάτων 59 60
«Καλώς ορισμένα» Προβλήματα (well- «Καλώς ορισμένα» Προβλήματα defined problems) Μπορεί να διατυπωθεί ένας σαφής και αυστηρά διατυπωμένος (τυπικός-formal) ορισμός του προβλήματος, από την περιγραφή του σε φυσική γλώσσα; Ενδεχομένως με την υιοθέτηση διασαφηνιστικών υποθέσεων που δεν αλλοιώνουν την υφή του προβλήματος Υπάρχει δυνατότητα εύρεσης λύσης που είναι αποδεδειγμένα σωστή (ή μαθηματική απόδειξη ότι δεν μπορεί να βρεθεί λύση;) Η λύση μπορεί να βρεθεί σε πεπερασμένο αριθμό αλγοριθμικών βημάτων; 61 Ποιό είναι το αποτέλεσμα της πράξης; 1 x 2 + 3 Ποιό είναι το αποτέλεσμα της πράξης; 1 + 2 x 3 Lakis Express problem: Ποιά είναι η καλύτερη διαδρομή για την παράδοση δεμάτων σε 7 σημεία στον ακόλουθο χάρτη; 62 Λευκωσία Ποιό από τα πιο κάτω ισχύει για το πρόβλημα του Lakis Express με 7 σημεία-σταθμούς; Πάφος Είναι καλά ορισμένο Δεν έχει λύση Δεν είναι καλά ορισμένο Έχει λύση αλλά είναι πολύπλοκη Λάρνακα 63 EΠΛ233 64
Πλακόστρωτο μονοπάτι (tiling) Σας δίνεται ένας πεπερασμένο σύνολο από διαφορετικά έγχρωμα πλακάκια. Πλακόστρωτο μονοπάτι Σας δίνεται ένας αριθμός από πλακάκια διαφορετικών χρωμάτων και δύο σημεία στο επίπεδο Α και Β. Επιτρέπεται να τοποθετήσετε δύο πλακάκια δίπλαδίπλα μόνο αν οι συνορεύουσες ακμές τους έχουν το ίδιο χρώμα. ΟΚ ΟΧΙ Δεν επιτρέπεται να περιστρέψετε τα πλακάκια. Αναζητείτε έναν αλγόριθμο που να μπορεί να λύσει το ακόλoυθο πρόβλημα: Μπορούμε να συνδέσουμε τα σημεία Α και Β με ένα φιδάκι από πλακάκια, όταν το φιδάκι επιτρέπεται να κινηθεί οπουδήποτε στο επίπεδο: ΝΑΙ ή ΟΧΙ ; Διαθέτετε απεριόριστο αριθμό από κάθε είδος. 65 66 Το πλακόστρωτο μονοπάτι ως υπολογιστικό πρόβλημα A B A B??????? Αλγόριθμος ΝΑΙ/ ΝΑΙ/ΟΧΙ ΟΧΙ 67 68
Δεδομένου αριθμού από πλακάκια και σημείων Α και Β στο επίπεδο, μπορούμε να συνδέσουμε τα Α και Β με ένα φιδάκι από πλακάκια, όταν το φιδάκι επιτρέπεται να κινηθεί οπουδήποτε στο επίπεδο: ΝΑΙ ή ΟΧΙ; Ποιό από τα πιο κάτω ισχύει για το πρόβλημα αυτό; Είναι καλά ορισμένο Δεν έχει λύση Δεν είναι καλά ορισμένο Τίποτα από τα πιο πάνω Πότε υπάρχει λύση; Δεδομένου ενός αριθμού από πλακάκια και δύο σημείων στο επίπεδο Α και Β, μπορούμε να συνδέσουμε τα σημεία Α και Β με ένα φιδάκι από πλακάκια, όταν το φιδάκι επιτρέπεται να κινηθεί οπουδήποτε στο επίπεδο: ΝΑΙ ή ΟΧΙ ; Αποδεικνύεται ότι υπάρχει λύση (αλγόριθμος) όταν το φιδάκι μπορεί να επεκταθεί ελεύθερα σε ολόκληρο το επίπεδο: Αν όμως χωρίσουμε το επίπεδο στα δύο και περιορίσουμε την κίνηση του φιδιού στο μισό επίπεδο τότε αποδεικνύεται ότι δεν υπάρχει αλγόριθμος που να μπορεί να μας πει ΝΑΙ ή ΟΧΙ EΠΛ233 69 70 Περίγραμμα ΕΠΛ233 - Πρακτικά θέματα και Στόχοι μαθήματος Αντικειμενοστρεφείς Γλώσσες Προγραμματισμούς και JAVA Η πλατφόρμα της JAVA Θεμελίωση Προβλημάτων Αφαιρετικότητα Επίλυση Προβλημάτων Διαδικασία Επίλυσης Υπολογιστικών Προβλημάτων Αφαίρεση - abstraction Εννοιολογική επεξεργασία μέσα από την οποία γενικοί κανόνες και έννοιες προκύπτουν από τη χρήση και ταξινόμηση παραδειγμάτων, σημαινόντων, πρωταρχικών εννοιών, συστημάτων ή λειτουργιών/ μεθόδων. Η «αφαίρεση»-αφαιρετική έννοια αποκαλείται επίσης το αποτέλεσμα της διαδικασίας της αφαίρεσης: συνοψίζει τα υπό περιγραφή παραδείγματα, σημαίνοντα, συστήματα, φαινόμενα, λειτουργίες/ μεθόδους. Πηγή: Wikipedia (https://en.wikipedia.org/wiki/abstraction) 71 72
Aφαίρεση - πώς πραγματοποιείται; Η διαδικασία της αφαίρεση συνήθως εμπεριέχει το φιλτράρισμα του πληροφοριακού περιεχομένου μιας έννοιας, ενός συνόλου παραδειγμάτων, παρατηρούμενων φαινομένων, σημαινόντων, συστημάτων, λειτουργιών με στόχο: την απάλειψη πληροφοριών που δεν ενδιαφέρουν ή δεν είναι σημαντικές την επιλογή και συμπερίληψη εκείνων των στοιχείων / πληροφοριών που είναι χρήσιμες / σχετικές για κάποιο συγκεκριμένο σκοπό Αφαίρεση: πού χρησιμοποιείται; Τέχνες Πληροφορική Μηχανική Γλωσσολογία Μαθηματικά Μουσική Νευρολογία Φιλοσοφία Ψυχολογία 73 74 Ποιό από τα πιο κάτω αποτελεί «αφηρημένη τέχνη» (abstract art); Στις διαφάνειες όπου εµφανίζεται αυτή η σύνθεση, θα µιλάµε για αφαιρετικότητα (abstraction) Λ. Λαµέρας, «Δύο κόρες», 1950 75 76
Αφαιρετικότητα στον προγραμματισμό Η/Υ Αφαιρετικότητα και πραγματικός κόσμος Γλώσσες Υψηλότερου Επιπέδου Διαδικασιακές Γλώσσες (C, Fortran, Modula) Lisp Prolog (setq bar (cons 'x (cdr foo))) sibling(x, Y) :- parent_child(z, X), parent_child(z, Y). Συµβολικές Γλώσσες (assembly) addcc %r1,-4,%r1 addcc %r1,%r2,%r4 ld %r4,%r5 ba loop 01101 01100 00101 01111 77 Παραδοσιακές «διαδικασιακές» Γ.Π. (Fortran, BASIC, C): " Γλώσσες Υψηλότερου Επιπέδου Αποτελούν αφαιρετική αναπαράσταση των συμβολικών γλωσσών (assembly), οι οποίες με την σειρά τους αποτελούν μια αφαιρετική αναπαράσταση των λειτουργιών του υλικού του Η/Υ. Ο προγραμματιστής καλείται να δημιουργήσει μια σύνδεση ανάμεσα στο μοντέλο μηχανής και στο μοντέλο του προβλήματος που προσπαθεί να επιλύσει. Αλγόριθµος Διαδικασιακές Γλώσσες (C, Fortran, Modula) Θεωρητικό Συµβολικές Γλώσσες Μοντέλο Μηχανής (assembly) LISP, APL, PROLOG: επιβάλλουν συγκεκριμένη μοντελοποίηση του πραγματικού κόσμου (π.χ. σαν σύνολο από λίστες, σαν αλγορίθμους, ή σαν αλυσίδες αποφάσεων). 78 Αφαιρετικότητα στον προγραμματισμό Η/Υ Αφαιρετικότητα στον προγραμματισμό Η/Υ " 1110010101 1110000101 1110011101 1010010101 Μηχανή Turing 79 80
Αφαιρετικότητα δεδομένων Data Abstraction. Διαφοροποιεί: τις βασικές ιδιότητες δομών δεδομένων από τις λεπτομέρειες της υλοποίησής τους το τι μπορούμε να πράξουμε με τα δεδομένα από το πώς έχουν αυτά αναπαρασταθεί/κωδικοποιηθεί στον Η/Υ Π.χ. μπορούμε να αναπαραστήσουμε αριθμούς με πολλούς τρόπους: Ελληνική αρίθμηση: α, β, γ, δ, ε, στ, ζ, η, θ, ι Αραβική αρίθμηση: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Λατινική αρίθμηση: I, II, III, IV, V, VI, VII, VIII, IX, X Κινεζική αρίθμηση:,,,,,,,,,, Ψηφιακή αρίθμηση: 0, 1 Πράξεις πάνω στους αριθμούς ακολουθούν τους ίδιους κανόνες ανεξάρτητα του πώς αναπαριστούνται οι αριθμοί. 81 Πλεονεκτήματα data abstraction Αποκρύπτουν από τους προγραμματιστές ή τους χρήστες των δομών δεδομένων επουσιώδεις λεπτομέρειες (που δεν είναι ιδιαίτερα σημαντικές για την εργασία τους). Για την ανάπτυξη των περισσοτέρων εφαρμογών συνήθως μας ενδιαφέρει πώς και γιατί μπορούμε να χρησιμοποιήσουμε κάποιες δομές δεδομένων και όχι το πώς αυτές υλοποιούνται ή τι αναπαράσταση έχουν. Διευκολύνεται ο μετασχηματισμός ενός πολύπλοκου προβλήματος σε σύνολο απλούστερων υποπροβλημάτων (διαίρει και βασίλευε). Διευκολύνεται η αλλαγή υλοποίησης μιας λειτουργίας χωρίς να επηρεάζεται η συνολική λειτουργικότητα ενός συστήματος. 82 Πλεονεκτήματα αφαιρετικότητας Γλώσσες Υψηλότερου Επιπέδου Διαδικασιακές Γλώσσες (C, Fortran, Modula) Συµβολικές Γλώσσες (assembly) Το πρόβληµα του Akis Express (traveling salesman) Περίγραμμα ΕΠΛ233 - Πρακτικά θέματα και Στόχοι μαθήματος Αντικειμενοστρεφείς Γλώσσες Προγραμματισμούς και JAVA Η πλατφόρμα της JAVA Θεμελίωση Προβλημάτων Αφαιρετικότητα Επίλυση Προβλημάτων Διαδικασία Επίλυσης Υπολογιστικών Προβλημάτων 83 84
Διαδικασία Επίλυσης Προβλημάτων Ορισμός και ανάλυση του προβλήματος Ορισμός: Βρες τον καλύτερο τρόπο για να παραδώσεις αντικείμενα στα 7 σημεία του χάρτη, ξεκινώντας και επιστρέφοντας στο αστέρι. Ανάλυση: Αναγκαίες υποθέσεις, αφαίρεση, υποπροβλήματα, τυπικός ορισμός Επινόηση πλήρους λύσης Διατύπωση λύσης σε βήματα με λεπτομέρεια Έλεγχος ορθότητας (testing), αξιολόγηση (evaluation) λύσης και βελτίωση Eπίλυση Προβλημάτων (παράδειγμα) Τεκµηρίωση (documentation) λύσης και συντήρηση (maintenance) 85 Eπίλυση Προβλημάτων (παράδειγμα) 87 Υποβολή στον πελάτη περιγραφής της διαδρομής που έχουμε επιλέξε Συντήρηση: Έλεγξε την ορθότητα της λύσης Έλεγξε τα υπολογιζόμενα αποτελέσματα έναντι πραγματικών μετρήσεων Τεκμηρίωση Ανάλυση όλων των πιθανών διαδρομών και μέσων μεταφοράς Επιλογή της διαδρομής που πληροί τα κριτήριά μας (π.χ. συντομότερη και φθηνότερη) 86 Έλεγχος και αξιολόγηση: Λάβε υπόψη όλους τους δυνατούς δρόμους και όλα τα μέσα μεταφοράς Βρες τον τρόπο υπολογισμού του κόστους μιας πιθανής διαδρομής Βελτιωμένος Σχεδιασμός Eπίλυση Προβλημάτων (παράδειγμα) Αρχική Επινόηση Λύσης και Σχεδιασμός Ελάχιστη απόσταση, συντομότερη απόσταση ή χαμηλότερο κόστος; Διαθέσιμα μέσα Βάρος, όγκος Συλλογή σχολίων από τον πελάτη για το ταξίδι του Αναδιαμόρφωση της λύσης αν ο πελάτης δεν ήταν ικανοποιημένος από την εμπειρία Ανάλογα βήματα γίνονται όταν προγραμματίζουμε έναν Η/Υ για να δώσουμε υπολογιστική λύση σε ένα πρόβλημα 88
Περίγραμμα ΕΠΛ233 - Πρακτικά θέματα και Στόχοι μαθήματος Αντικειμενοστρεφείς Γλώσσες Προγραμματισμούς και JAVA Η πλατφόρμα της JAVA Θεμελίωση Προβλημάτων Αφαιρετικότητα Επίλυση Προβλημάτων Διαδικασία Επίλυσης Υπολογιστικών Προβλημάτων Επίλυση Υπολογιστικών Προβλημάτων Θεμελίωση (φορμαλιστική διατύπωση) Προβλήματος: ορισμός και ανάλυση του προβλήματος Ποιά είναι η είσοδος και ποιά η έξοδος; Ποιές άλλες πληροφορίες είναι απαραίτητες για τη λύση; Ποιά είναι η κατάλληλη αναπαράσταση του προβλήµατος; Επινόηση και διατύπωση αλγορίθµου επίλυσης Ποιά είναι τα βήµατα για επίλυση του προβλήµατος; Κωδικοποίηση αλγορίθµου σε πρόγραµµα Μεταγλώττιση, έλεγχος ορθότητας και αποσφαλµάτωση προγράµµατος Τεκµηρίωση και συντήρηση του προγράµµατος 89 90 Αρκούν αυτά; "World does not need software. It needs fully functional, easy to use systems. Ragmar Saksing ΑΛΓΟΡΙΘΜΟΙ + ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ = ΠΡΟΓΡΑΜΜΑΤΑ (Niclaus Wirth) Η ικανότητα να επιλύουµε προβλήµατα εξαρτάται σε καθοριστικό βαθμό από τη χρήση αλγορίθμων και δομών δεδομένων. Κάθε πρόγραμμα βασίζεται σε αλγορίθµους και δοµές δεδοµένων. Ο σχεδιασμός των δομών δεδομένων αποτελεί καθοριστική απόφαση στον σχεδιασμό ενός προγράμματος. Αφού έχουμε επιλέξει τις δομές που θα χρησιμοποιήσουμε, ο σχεδιασμός ή η επιλογή των αλγορίθμων επίλυσης τού προβλήματός μας, και ο προγραμματισμός του σε κάποια γλώσσα προγραμματισμού, είναι εύκολες υποθέσεις. Συνήθως, οι δομές δεδομένων και οι αλγόριθμοι που χρησιμοποιούμε είναι γνωστά και μελετημένα. Άρα, πρέπει να γνωρίζετε δομές δεδομένων και αλγορίθμους και τα χαρακτηριστικά τους, για να μπορείτε να επιλέγετε τα κατάλληλα για την επίλυση υπολογιστικών προβλημάτων. 91 92
Υπολογιστικη Σκέψη (computational thinking) Ο τρόπος με τον οποίο οι επιστήμονες της Πληροφορικής χρησιμοποιούν: αποδόμηση (decomposition) αναδρομή (recursion) αλγορίθμους (algorithms) για να αντιμετωπίσουν δύσκολα προβλήματα Η Υπολογιστική Σκέψη συγκεράζει όλα τα πλεονεκτήματα των υπολογιστικών μοντέλων, μεθόδων, εργαλείων και αφαιρέσεων που χρησιμοποιούμε. Σε ποιά από τα παρακάτω βήματα επίλυσης ενός υπολογιστικού προβλήματος εφαρμόζεται η έννοια της αντικειμενοστρέφειας; Προγραμματισμός, Μεταγλώττιση, Έλεγχος Ορθότητας Προγραμματισμός, Τεκμηρίωση, Συντήρηση Θεμελίωση προβλήματος, επινόηση λύσης, προγραμματισμός Εύρεση αλγορίθμου, Προγραμματισμός, Μεταγλώττιση 93 EΠΛ233 94 Αναπαράσταση υπολογιστικών προβλημάτων Μετάπτωση κατάστασης Ορισμός του προβλήματος με χρήση αναπαράστασης χώρου καταστάσεων (state space representation): To πρόβλημα αναπαρίσταται σαν ένα σύνολο (χώρος) καταστάσεων Ο χώρος καταστάσεων είναι το σύνολο όλων των καταστάσεων, συμπεριλαμβανομένων της: αρχικής κατάστασης τελικών καταστάσεων Δύο καταστάσεις είναι συνδεδεμένες αν υπάρχει λειτουργία που μπορεί να μετασχηματίσει τη μια στην άλλη Sleep Operate Ένα «συμβάν» ενεργοποιεί την μετάβαση από τη μια κατάσταση στην άλλη Π.χ. ο χρήστης πατάει το κουμπί στο ipad και αυτό μεταπίπτει από κατάσταση Sleep σε Operate και πίσω. 95 96
Τρίλιζα Τα τετράγωνα των μήλων Κάθε κατάσταση αναπαριστά μια δυνατή τοποθέτηση του Χ και του Ο στην τρίλιζα. Το διάγραμμα των καταστάσεων αναπαριστά όλες τις δυνατές κινήσεις που μπορούν να γίνουν με βάση τους κανόνες του παιχνιδιού. Χ Αρχική κατάσταση Ο Χ Τελική Χ κατάσταση Χ Χ Ο Ο Ο Ο Χ Ο 97 Πρόβλημα: Ξεκινώντας από το κεντρικό τετράγωνο, μπορεί το σκουλήκι να φάει όλα τα μήλα; Κανόνες: Το σκουλήκι μπορεί να μετακινηθεί μεταξύ τετραγώνων που έχουν κοινή ακμή. Το σκουλήκι επισκέπτεται ένα τετράγωνο μόνο μια φορά. 98 Aναπαράσταση καταστάσεων 99 100
Πόσες διαφορετικές διαδρομές μπορεί να ακολουθήσει το σκουλήκι για να φάει όλα τα μήλα; Καμία - δεν υπάρχει λύση Τα τετράγωνα των μήλων ΙΙ Πόσες και ποιές διαδρομές μπορεί να ακολουθήσει το σκουλήκι, ξεκινώντας από ένα οποιοδήποτε τετράγωνο, ώστε να φάει όλα τα μήλα; 1 8 32 EΠΛ233 101 102 Τα τετράγωνα των πολύχρωμων μήλων Τετράγωνα των μήλων σε 3 διαστάσεις Ξεκινώντας από το κεντρικό τετράγωνο, μπορεί το σκουλήκι να φάει όλα τα μήλα; Κανόνες: Το σκουλήκι μπορεί να μετακινηθεί μεταξύ τετραγώνων που έχουν κοινή ακμή αλλά διαφορετικό χρώμα μήλου. Το σκουλήκι επισκέπτεται ένα τετράγωνο μια μόνο φορά. Πόσες λύσεις (διαδρομές) έχουμε αν το σκουλήκι: ξεκινήσει από το κέντρο; ξεκινήσει από γωνία με πράσινο ή με κόκκινο μήλο; 103 104
Τετράγωνα των μήλων σε 3 διαστάσεις 105