ΕΠΛ 133: Αντικειμενοστρεφής Προγραμματισμός (Object-orieted programmig) Διδάσκων: Μάριος Δικαιάκος Εργαστήρια: Πύρρος Μπράτσκας Βρείτε αν ένα έτος είναι δίσεκτο 1 2 Δίσεκτο έτος: διαιρείται δια 4 αλλά όχι δια εκατό, εκτός αν διαιρείται δια 400 EIΣΟΔΟΣ (iput) 2017 /** * Created by mdd o 15/01/2017. */ public class LeapYear { public static void mai(strig[] args) { it year = Iteger.parseIt(args[0]); Πρόγραµµα Java // divisible by 4 boolea isleapyear = (year % 4 == 0); // divisible by 4 ad ot 100 isleapyear = isleapyear && (year % 100!= 0); // divisible by 4 ad ot 100 uless divisible by 400 isleapyear = isleapyear (year % 400 == 0); ΕΞΟΔΟΣ (output) true ή false System.out.pritl(isLeapYear); 3 4 /** * Created by mdd o 15/01/2017. */ public class LeapYear { public static void mai(strig[] args) { it year = Iteger.parseIt(args[0]); // divisible by 4 boolea isleapyear = (year % 4 == 0); // divisible by 4 ad ot 100 isleapyear = isleapyear && (year % 100!= 0); // divisible by 4 ad ot 100 uless divisible by 400 isleapyear = isleapyear (year % 400 == 0); System.out.pritl(isLeapYear); 5 6
isleapyear(it) year 2017 false tostrig() 7 8 public class LeapYear { public boolea isleapyear(it year) { boolea isleapyear; // divisible by 4 isleapyear = (year % 4 == 0); // divisible by 4 ad ot 100 isleapyear = isleapyear && (year % 100!= 0); public class TestLeapYear { public static void mai(strig[] args) { it year = Iteger.parseIt(args[0]); LeapYear leapyearcheck = ew LeapYear(); // divisible by 4 ad ot 100 uless divisible by 400 isleapyear = isleapyear (year % 400 == 0); retur isleapyear; System.out.pritl(leapYearCheck.isLeapYear(year)); 9 10 Περίγραμμα Πληροφορίες Μαθήματος ΕΠΛ233 - Πρακτικά θέματα και Στόχοι μαθήματος Αντικειμενοστρεφείς Γλώσσες Προγραμματισμού και JAVA Η πλατφόρμα της JAVA Θεμελίωση Προβλημάτων Αφαιρετικότητα Επίλυση Προβλημάτων Διαδικασία Επίλυσης Υπολογιστικών Προβλημάτων Μ. Δικαιάκος, EΠΛ233 11 Διαλέξεις και Φροντιστήριο Τρίτη: 10:30-12:00, 12:00-13:00 (φροντιστήριο) Παρασκευή: 10:30-12:00 Αίθουσα 119, Κτήριο ΧΩΔ02 Εργαστήριο Α: Δευτέρα, Πέμπτη: 14:30-16:30, Β121, ΘΕΕ01 Β: Δευτέρα, Πέμπτη: 18:30-20:30, Β121, ΘΕΕ01 Ιστοσελίδα: http://www.cs.ucy.ac.cy/courses/epl133 Ανακοίνωση και παράδοση εργασιών μέσω Moodle: http://moodle.cs.ucy.ac.cy (κλειδί εγγραφής: epl133) Φόρουμ μέσω piazza: http://www.piazza.com 12
Πληροφορίες Μαθήματος Αξιολόγηση Προαπαιτούμενα: ΕΠΛ131(Αρχές Προγραμματισμού Ι) Επικοινωνία με διδάσκοντα (Μ. Δικαιάκο): Γραφείο: 012, κτήριο ΘΕΕ01 Ώρες γραφείου: Tρίτη: 14:00-16:00 ή κατόπιν συννενοήσεως Επικοινωνία: mdd at cs dot ucy dot ac dot cy Επικοινωνία με υπεύθυνο εργαστηρίων (Π. Μπράτσκα): Γραφείο: Β118, κτήριο ΘΕΕ01 Ώρες γραφείου: Πέμπτη, 10:00-12:00 ή κατόπιν συννενοήσεως Επικοινωνία: bratskas at cs dot ucy dot ac dot cy 13 Εργασίες και Διαγνωστικά: 23% Ενδιάμεση Εξέταση: 25% Γραπτή Τελική Εξέταση: 50% Συμμετοχή: 2% Προβιβάσιμος βαθμός: (Ενδιάµεση εξέταση * 0.33) + (Τελική εξέταση * 0.67) > 4,5 14 Γενικοί Κανόνες Παρακολούθηση: Υποχρεωτική. Καθυστερημένη είσοδος στην τάξη μετά την έναρξη του μαθήματος ΑΠΑΓΟΡΕΥΕΤΑΙ. Χρήση κινητών τηλεφώνων στην τάξη ΑΠΑΓΟΡΕΥΕΤΑΙ. Η συμμετοχή στην τάξη και στο φόρουμ του μαθήματος αξιολογείται και συνυπολογίζονται στον τελικό βαθμό. Χρήση κινητού στην τάξη συνεπάγεται τον μηδενισμό του βαθμού συμμετοχής στην τάξη. Μ. Δικαιάκος, EΠΛ425 15 Κώδικας συμπεριφοράς Η είσοδος στην τάξη μετά την έναρξη του μαθήματος απαγορεύεται. Οι εργασίες θα ελέγχονται από πρόγραμμα για την ανακάλυψη αντιγραφών. Αντιγραμμένες εργασίες θα μηδενίζονται και οι παραβάτες κινδυνεύουν να υποστούν ολικό μηδενισμό στο μάθημα και πειθαρχική δίωξη. Οι εργασίες θα εξετάζονται και προφορικά. Άγνοια ή ελλιπής κατανόηση του τι έχετε παραδώσει θα συνεπάγεται μηδενισμό της εργασίας. Ψηφοφορίες στην τάξη! Ερωτήσεις πολλαπλών (4) επιλογών. Κάθε επιλογή αντιστοιχεί σε ένα χρώμα: Μπλε, Πράσινο, Κόκκινο, Πορτοκαλί Κάθε φοιτητής ψηφίζει μόνος του (χωρίς συνεργασία) με τη λήξη του χρόνου, υψώνοντας την κάρτα αντίστοιχου χρώματος. Μπορεί να σας ζητηθεί να εξηγήσετε την απάντησή σας Δεν είναι λοταρία Αν χρειαστεί, δίνεται χρόνος για να συζητήσετε την απάντηση με τους διπλανούς σας, να φθάσετε σε συμφωνία και να ξαναψηφίσετε. Μπορεί να σας ζητηθεί να εξηγήσετε την απάντησή σας 18 17
Εγχειρίδια Στις ερωτήσεις πολλαπλής επιλογής πότε επιτρέπεται να συζητήσουμε με τους διπλανούς μας για να φθάσουμε σε συμφωνία; Βασικά εγχειρίδια Ποτέ! Πριν την πρώτη ψηφοφορία Πριν τη δεύτερη ψηφοφορία Μετά τη δεύτερη ψηφοφορία Χρήσιμα εγχειρίδια EΠΛ233 19 "Absolute Java" Walter Sawitch. 6th Editio (Global Editio). Pearso 2016. Thikig i Java by Bruce Eckel, 4th editio. (Pretice Hall, 2006) Java Tutorials: http://docs.oracle.com/javase/tutorial/ Object-orieted Desig ad Patters by Cay Horstma, 2d editio. (Wiley, 2006). "The Practice of Programmig." B. Kerigha και R. Pike, Addisso Wesley, 1999. Eclipse i actio. A guide for Java developers by David Gallardo, Ed Burette ad Robert McGover. (Maig, 2003). 20 Βιβλιογραφία Πληροφορίες για το μάθημα Ιστοσελίδα: http://www.cs.ucy.ac.cy/courses/ EPL133 Ανακοινώσεις / φόρουμ @ Piazza: 21 http://moodle.cs.ucy.ac.cy Bίντεο @ Youtube https://piazza.com/ucy.ac.cy/fall2015/epl233/home Eργασίες @ Μοοdle: (κωδικός εγγραφής: epl133) https://www.youtube.com/chael/ 22 Aπώτεροι Στόχοι Βαθύτερη γνώση του αντικειμένου «Πολυμαθίη νόον έχειν ού διδάσκει» (Ηρακλείτου, απόσπασμα Β40 - Διογένης Λαέρτιος ΙΧ 1) Η πολυμάθεια δεν μας βάζει νού Γνώση που να οδηγεί σε δυνατότητα δημιουργικής σκέψης «τας ανανεώσεις των ευρέσεων και των τεχνών και των μαθήσεων, και τα λοιπά τα στεφανούντα το σώμα εν τω κόσμω τούτω τω ορατώ» (Ισαάκ Σύρου, Λόγος ΞΓ, «Περί τάξεως πρώτης της γνώσεως», Τα Ευρεθέντα Ασκητικά) 23 24
O κανόνας των 10.000 ωρών 25 26 28 it takes roughly te thousad hours of practice to achieve mastery i a field 27 H αξία της εξάσκησης Gladwell studied the lives of extremely successful people to fid out how they achieved success. Gates ad Alle had thousads of hours of programmig practice prior to foudig Microsoft. Practice Makes Improvemet Fallig i Love With Practice 29 30
Mάθηση στην εποχή του Web Thaks to the plasticity of our euroal pathways, the more we use the Web [the mobile, social media etc] the more we trai our brai to be distracted - to process iformatio very quickly ad very efficietly but without sustaied attetio. [N. Carr, The Shallows 2011] Learig how to thik really meas learig how to exercise some cotrol over how ad what you thik. [ ] It meas beig coscious ad aware eough to choose what you pay attetio to ad to choose how you costruct meaig from experiece. David Foster Wallace, 2005 31 As the may studies of hypertext ad multimedia show, our ability to lear ca be severely compromised whe our brais become sigificatly overloaded with diverse stimuli olie. More iformatio ca mea less kowledge. N. Carr, The Shallows, 2011 As we exteralise problem solvig ad other cogitive chores to our computers, we reduce our brai s ability to build stable kowledge structures [ ] that ca later be applied i ew situatios N. Carr, The Shallows, 2011 33 34 35 36
Θεματολογία Χρήση κινητού στην τάξη συνεπάγεται τον μηδενισμό του βαθμού συμμετοχής στην τάξη. Αρχές επίλυσης Υπολογιστικών Προβλημάτων μέσω προγραμματισμού Η/Υ. Eις βάθος εισαγωγή στις Aρχές Αντικειμενοστρεφούς Προγραμματισμού (object-orieted programmig - OOP) μέσω της γλώσσας JAVA. Aρχές Αντικειμενοστρεφούς Σχεδίασης για την διατύπωση και επίλυση υπολογιστικών προβλημάτων. Αφαιρετικότητα Δεδομένων στον Α/Σ Προγραμματισμό. Προχωρημένες Προγραμματιστικές Τεχνικές JAVA. Προγραμματισμός σε Ολοκληρωμένα Περιβάλλοντα Ανάπτυξης (Itegrated Developmet Eviromets) 38 Μαθησιακοί Στόχοι Ευχέρεια καθορισμού της κατάλληλης θεμελίωσης - αφαιρετικής διατύπωσης ενός προς επίλυση πολύπλοκου προβλήματος. Η αφαιρετική διατύπωση είναι απαραίτητο βήμα για τη λύση του προβλήματος Ευχέρεια επινόησης τυπικών (formal) λύσεων σε «καλώς ορισμένα» προβλήματα, με χρήση αντικειμενοστρεφούς σχεδιασμού. Ευχέρεια υλοποίησης, ελέγχου, αποσφαλμάτωσης αντικειμενοστρεφών προγραμμάτων Java σε περιβάλλον ολοκληρωμένης ανάπτυξης όπως το Eclipse για την αποδοτική υλοποίηση αλγορίθμων. Ευχέρεια επικοινωνίας των πορισμάτων της εργασίας σας (αντικειμενοστρεφή σχέδια, προγράμματα JAVA) σε άλλους προγραμματιστές. Η επίτευξη των μαθησιακών στόχων θα αξιολογείται διαρκώς στη διάρκεια του μαθήματος μέσω γραπτών εξετάσεων, εργασιών, κουίζ προφορικής αξιολόγησης και θα κρίνει την επιτυχία/αποτυχία σας στο μάθημα 39 40 Περίγραμμα ΕΠΛ233 - Πρακτικά θέματα και Στόχοι μαθήματος Αντικειμενοστρεφείς Γλώσσες Προγραμματισμού και JAVA Η πλατφόρμα της JAVA Αντικειμενοστρεφής Προγραμματισμός και JAVA. Γιατί; Θεμελίωση Προβλημάτων Αφαιρετικότητα Επίλυση Προβλημάτων Διαδικασία Επίλυσης Υπολογιστικών Προβλημάτων Μ. Δικαιάκος, EΠΛ233 41 42
Γιατί την JAVA; Γιατί η JAVA; Accordig to the code committed by 10m users of GitHub, Java is the programmig laguage that grew more tha ay other betwee 08-15. 19/8/2015 43 44 Αντικειμενοστρεφής Προγραμματισμός Γλώσσα Προγραμματισμού JAVA Μεθοδολογία που χρησιμοποιεί την έννοια (αφαίρεσηabstractio) των «αντικειμένων» (objects) και των μεταξύ τους «αλληλεπιδράσεων» (iteractios) τους για την επίλυση υπολογιστικών προβλημάτων και την δημιουργία λογισμικών προγραμμάτων. Δημιουργήθηκε το 1991 απο την Gree team της Su Microsystems. Επίσημη ανακοίνωση της Γ.Π. το 1995. «Πατέρας» της Java θεωρείται ο James Goslig http://ighthacks.com/roller/jag/ Ο στόχος ήταν ο εύκολος προγραμματισμός ηλεκτρονικών συσκευών και συστημάτων για ευρεία κατανάλωση. Η Su Microsystems εξαγοράστηκε το 2010 από την Oracle. http://www.java.com/e/javahistory/ Θα διερευνήσουμε τις έννοιες που σχετίζονται με τη μεθοδολογία αυτή χρησιμοποιώντας την γλώσσα προγραμματισμού JAVA. Βασισμένη στη C και C++ αλλά με σημαντικές αλλαγές και βελτιώσεις. 45 46 Κύρια χαρακτηριστικά JAVA Κύρια χαρακτηριστικά JAVA (cot'd) Απλή (Simple) Αντιθέτως με την C++ η JAVA δεν έχει header files, poiter arithmetic, poiter sytax, structures, uios, operator overloadig, virtual base classes, κ.α.) Αξιόπιστη (Robust) Έλεγχος για προβλήματα κατά την διάρκεια της μεταγλώττισης(compile-time) παρά της εκτέλεσης(rutime). Αντικειμενοστρεφής (Object-orieted) Παρόμοια με την C++ με την μόνη διαφορά στη πολλαπλή κληρονομικότητα (multiple iheritace). Ανεξαρτησία Αρχιτεχτονικής (Architecture Neutral) Cross-platform. Write oce, ru everywhere. Liux, Su Solaris, Apple, Widows Φορητή (Portable) Απαλλαγή από τις συγχύσεις με big-edia/little-edia Όλοι οι αρχέγονοι τύποι (primitive data types) είναι προσδιορισμένοι με ακρίβεια. 47 48
Mονο-νηματική εκτέλεση Κύρια χαρακτηριστικά JAVA (cot'd) Πολυνηματική (Multi-threaded) Δυναμική (Dyamic) Ευκολία προσδιορισμού τύπου κατά την διάρκεια της εκτέλεσης (Ru-time iformatio) Siglethreaded executio public class Charge { private double rx, ry; private double q; «Νήµα» εκτέλεσης (ροή εντολών διεργασίας) // positio // charge public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; public double potetialat(double x, double y) { double k = 8.99e09; double dx = x - rx; double dy = y - ry; retur k * q / Math.sqrt(dx*dx + dy*dy); Κατανεμημένη (Distributed) Πρόγραµµα public Strig tostrig() { retur q + " at " + "(" + rx + ", " + ry + ")"; Βιβλιοθήκες για προγραμματισμό δικτύων με TCP/IP κ.τ.λ. Sigle-core CPU 49 H πολυνηματική εκτέλεση προγραμμάτων JAVA γίνεται μόνο σε πολυπύρηνους επεξεργαστές; Πολυ-νηματική εκτέλεση Multi-threaded executio Πρόγραµµα public class Charge { private double rx, ry; private double q; // positio // charge public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; public double potetialat(double x, double y) { double k = 8.99e09; double dx = x - rx; double dy = y - ry; retur k * q / Math.sqrt(dx*dx + dy*dy); Ναι. Δεν μπορούν να συνυπάρξουν πολλαπλά νήματα στον ίδιο πυρήνα. Όχι - ο μεταγλωττιστής ανιχνεύει το είδος του επεξεργαστή και αναλόγως προσαρμόζει τον τελικό κώδικα για τον αριθμό των διαθέσιμων πυρήνων. Όχι - πολλαπλά νήματα μπορούν να τρέξουν και σε μονοπύρηνο επεξεργαστή. Το λειτουργικό σύστημα ρυθμίζει την πολυπλεξία των νημάτων σε μια διεργασία και έναν πυρήνα. Ναι. Οι εκδόσεις της JAVA που υποστηρίζουν πολυνηματικότητα, δεν υποστηρίζονται σε πολυπύρυνες αρχιτεκτονικές. public Strig tostrig() { retur q + " at " + "(" + rx + ", " + ry + ")"; Multi-core CPU 51 Α/Σ Γλώσσες Προγραμματισμού Simula 67 Smalltalk Pytho Ruby Scala C++ C# Objective C JavaScript (?) PhP (?) 50 52 EΠΛ233 Α/Σ Προγραμματισμός: Ιστορικό 53 Ο όρος Α/Σ ΓΠ εισήχθη με τη γλώσσα Smalltalk, η οποία αναπτύχθηκε στο Xerox PARC από τον Ala Kay και άλλους στη δεκαετία του 1970. Οι επινοητές της Smalltalk εμπνεύστηκαν από τη γλώσσα Simula 67, αλλά η Smalltalk περιείχε ένα πλήρως δυναμικό σύστημα για την δημουργία και δυναμική αλλαγή κλάσεων. Η Smalltalk και ο Α/Σ.Π. παρουσιάστηκαν στο ευρύ κοινό με άρθρο στο περιοδικό BYTΕ τον Αύγουστο του 1981. 54
Xerox Parc Xerox PARC has bee the ivetor ad icubator of may elemets of moder computig i the cotemporary office work place: Laser priters, Computer-geerated bitmap graphics The graphical user iterface, featurig widows ad icos, operated with a mouse The WYSIWYG text editor Iterpress, a resolutio-idepedet graphical page-descriptio laguage ad the precursor to PostScript Etheret as a local-area computer etwork Fully formed object-orieted programmig i the Smalltalk programmig laguage ad itegrated developmet eviromet. Model view cotroller software architecture SCALA Ποιές από τις παρακάτω ΔΕΝ είναι αντικειμενοστρεφής γλώσσα προγραμματισμού; SmallTalk Prolog JAVA 55 EΠΛ233 56