Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #1 η : Εισαγωγή: Λογισμικό, Γλώσσες Προγραμματισμού, Java Γαβαλάς Δαμιανός dgavalas@aegean.gr Στόχοι μαθήματος Διάκριση και κατανόηση των υφιστάμενων προγραμματιστικών μοντέλων Έμφαση στο μοντέλο του αντικειμενοστραφούς προγραμματισμού Βασικές έννοιες αντικειμενοστραφούς σχεδίασης: Αντικείμενα, Κλάσεις, Μέθοδοι, Κατασκευαστές, Μέθοδοι, Κληρονομικότητα, υπερφόρτωση μεθόδων, Χειρισμός λαθών, εξαιρέσεις, Πολυνηματικός προγραμματισμός Πρακτική εφαρμογή των παραπάνω εννοιών στη γλώσσα αντικειμενοστραφούς προγραμματισμού Java 1
Στόχοι εργαστηρίου Εξοικείωση με τις βασικές έννοιες και ιδιαιτερότητες μια ευρέως χρησιμοποιούμενης γλώσσας προγραμματισμού με σημαντική επίδραση στην επίλυση υπολογιστικών προβλημάτων και στο σχεδιασμό και υλοποίηση διαδικτυακών εφαρμογών Διάκριση μεταξύ Java εφαρμογών (applications) και μικροεφαρμογών (applets) Εξοικείωση με περιβάλλοντα ανάπτυξης εφαρμογών (Integrated Development Environments, IDEs) Δεν είναι στόχος η πλήρης εκμάθηση της γλώσσας προγραμματισμού Java αλλά να δοθούν τα κατάλληλα ερεθίσματα στους φοιτητές για να ασχοληθούν περαιτέρω με τη συγκεκριμένη γλώσσα ή και με άλλες γλώσσες αντικειμενοστραφούς προγραμματισμού. Δομή & Διδασκαλία Μαθήματος Θεωρία 2 ώρες κάθε εβδοµάδα Πέμπτη 09:00 11:00 (Αίθ. Γ, κτίριο Θάλασσας) Εργαστήρια 2 ώρες κάθε εβδοµάδα (2 οµάδες) Πέμπτη 11:00 13:00 (Οµάδα Α) Πέμπτη 13:00 15:00 (Οµάδα Β) Εργαστήριο Ανθρωπογεωγραφίας (κτίριο Γεωγραφίας) 2
Τρόπος αξιολόγησης Μία εργαστηριακή άσκηση (Ε): 20% Τελική εξέταση γραπτά (Γ): 80% Τελικός βαθμός (Β): OXI Γ >= 5 NAI B = Γ B = 0.8 Γ + 0.2 Ε Διδακτικά Εγχειρίδια (ένα εκ των δύο) "Java Eισαγωγή στη σύγχρονη τεχνολογία" (Greanier Todd), Εκδόσεις Γκιούρδα, 2005 «Αντικειμενοστρεφής προγραμματισμός JAVA" (Κ. Θραμπουλίδης), Εκδόσεις Τζιόλα 3
Στη βιβλιοθήκη Μυτιλήνης Εισαγωγή στην Java :ένας ολοκληρωμένος και εύχρηστος οδηγός της γλώσσας (Γ. Λιακέας) JAVA:προγραμματισμός (H. Deitel, P. Deitel) Αλγόριθμοι σε Java (R. Sedgewick) Java 2 Black Book (S. holzner) Java for the Web with Servlets, JSP and EJB (B. Kurniawan) JSP 2.0:the complete reference (P. Hanna) Creating mobile games: using Java ME platform ltf to put the fun into your mobile devise and cell phone (C. Hamer) Beginning J2ME platform::from novice to professional (S. Li, J. Knudsen, Jonathan) Και πάρα πολλά ακόμη!!! Σελίδα του μαθήματος στο web http://www2.aegean.gr/dgavalas/oo_i/ Τι περιέχει; 4
Η έννοια του προγράμματος Τα προγράμματα (programs), γνωστά και ως λογισμικό (software) αποτελούν σειρά οδηγιών (instructions) προς τον Η/Υ. Λες στον Η/Υ τι να κάνει μέσω των προγραμμάτων. Οι Η/Υ δεν κατανοούν τις ανθρώπινες φυσικές γλώσσες, άρα απαιτείται η χρήση γλωσσών η/υ για να επικοινωνήσεις μαζί τους. Τα προγράμματα γράφονται χρησιμοποιώντας τις γλώσσες προγραμματισμού (programming languages) 9 Προγραμματισμός Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία στάδια: Τον ακριβή προσδιορισμό του προβλήματος Την ανάπτυξη του αντίστοιχου αλγορίθμου (σειράς λογικών βημάτων για την επίλυση του προβλήματος) Τη διατύπωση του αλγορίθμου σε κατανοητή μορφή από τον υπολογιστή Ο προγραμματισμός ασχολείται με το τρίτο αυτό στάδιο 5
Επίπεδα Προγραμματισμού Κατώτατο γλώσσα μηχανής (machine language) Οι οδηγίες/εντολές είναι γραμμένες σε δυαδικούς αριθμούς (δεν υπάρχουν δομές όπως οι βρόγχοι) Χαμηλό π.χ. Για να γίνει μία πρόσθεση δύο αριθμών απαιτούνται πολλές εντολές π.χ. Assembly language Υψηλό π.χ. Για να τυπώσω μια γραμμή στην οθόνη απαιτείται μία εντολή π.χ. Pascal, C Πολύ υψηλό π.χ. Για να εμφανίσω ένα παράθυρο στην οθόνη απαιτείται μια εντολή π.χ. Visual C++, Visual Basic.NET, Java Χρονική εξέλι ιξη Δημοφιλείς γλώσσες υψηλού επιπέδου (high Level) COBOL (COmmon Business Oriented Language) FORTRAN (FORmula TRANslation) BASIC (Beginner All purpose Symbolic Instructional Code) Κάποτε γλώσσα αρχαρίων Pascal (πήρε το όνομά της από τον Blaise Pascal) Γλώσσα που συχνά χρησιμοποιείται στην εκπαίδευση Ada (ονομάστηκε από την Ada Lovelace, την πρώτη προγραμματίστρια) C Ευρέως χρησιμοποιούμενη γλώσσα, υψηλής απόδοσης 6
Δημοφιλείς γλώσσες υψηλού επιπέδου (high Level) Visual Basic Visual γλώσσα που μοιάζει με τη Basic και αναπτύχθηκε από τη Microsoft Delphi Visual γλώσσα που μοιάζει με την Pascal και αναπτύχθηκε από την Borland C++ Αντικειμενοστραφής φήςγλώσσα (object oriented language) g που βασίστηκε στην C Java Αντικειμενοστραφής γλώσσα Από πού προέρχεται η ονομασία της; Εξετάζεται εκτενώς σε αυτό το μάθημα! 13 Σειριακός Προγραμματισμός (sequential programming) Ενδείξεις / Ταμπέλες (Labels) Ροή από επάνω προς τα κάτω Ανακατευθύνσεις / Πηδήματα (GOTOs, Jumps) Από το σημείο εκτέλεσης του προγράμματος προς κάποια ταμπέλα Παραδείγματα: Basic, Assembly 7
Δομημένος Προγραμματισμός (procedural programming) Βιβλιοθήκη συναρτήσεων (Functions Library) Συνάρτηση ρηη( (Function) Διαδικασία (Procedure) Κλήση Συναρτήσεων (Function Call) Απαγορεύονται τα GOTO!!! Παρότι πολλές γλώσσες δομημένου προγραμματισμού (π.χ. Pascal) τα υποστηρίζουν Παραδείγματα: Pascal, C Αντικειμενοστραφής Προγραμματισμός (objectoriented programming, OOP) Βιβλιοθήκη κλάσεων (Class Library) Στη Java λέγεται και πακέτο (package) Κλάση (Class) Αντικείμενο / Στιγμιότυπο (Object / Instance) Ιδιότητα (Attribute) Μέθοδος (Method) Κλήσεις σε αντικείμενα, μεθόδους αντικειμένων κτλ. Παραδείγματα: C++, Java, Visual Basic.NET, 8
Αντικειμενοστραφής προγραμματισμός Μια νέα τάση αντιμετώπισης προγραμματιστικών αντιλήψεων και δομών Η αντικειμενοστραφής σχεδίαση εκλαμβάνει ως πρωτεύοντα δομικά στοιχεία ενός προγράμματος οντότητες που ονομάζονται αντικείμενα (objects) Ένα αντικείμενο εμπεριέχει δεδομένα αλλά περιγράφει και «ενέργειες» (επεξεργασία) που εφαρμόζονται πάνω σε δδ δεδομένα O OOP χρησιμοποιεί την ιεραρχική σχεδίαση, τον τμηματικό (modular) προγραμματισμό και ακολουθεί τις αρχές του δομημένου προγραμματισμού Ταξινόμηση με βάση περιοχή χρήσης Παρότι θεωρητικά οι περισσότερες γλώσσες είναι γενικής χρήσης, στην πράξη κάθε γλώσσα έχει σχεδιαστεί για να ανταποκρίνεται καλύτερα σε ορισμένη κατηγορία προβλημάτων: Γλώσσες επιστημονικής κατεύθυνσης, π.χ. FORTRAN Γλώσσες εμπορικής κατεύθυνσης, π.χ. COBOL Γλώσσες προγραμματισμού συστημάτων, π.χ. C Γλώσσες τεχνητής νοημοσύνης, π.χ. LISP, PROLOG Γλώσσες ειδικής χρήσης: Πρόκειται για γλώσσες που χρησιμοποιούνται σε ειδικές περιοχές εφαρμογών στη ρομποτική 9
Ποια είναι η καλύτερη γλώσσα προγραμματισμού Υπάρχουν γλώσσες κατάλληλες για ανάπτυξη ειδικών εφαρμογών και άλλες κατάλληλες για γενική χρήση Υπάρχουν γλώσσες κατάλληλες για εκπαίδευση και άλλες για ανάπτυξη εμπορικών εφαρμογών Γλώσσες που επιτρέπουν την εύκολη ανάπτυξη εφαρμογών σε γραφικό περιβάλλον και άλλες που εκμεταλλεύονται τα παράλληλα συστήματα Υπάρχουν γλώσσες ισχυρές και γλώσσες χωρίς μεγάλες δυνατότητες αλλά απλές και εύκολες στην εκμάθηση Ποια είναι η καλύτερη γλώσσα προγραμματισμού Ο προγραμματιστής καλείται να επιλέξει την καλύτερη γλώσσα για να υλοποιήσει το πρόγραμμα Μπορούμε να ισχυριστούμε με βεβαιότητα ότι μία γλώσσα προγραμματισμού που να είναι αντικειμενικά καλύτερη από τις άλλες δεν υπάρχει, ούτε πρόκειται να υπάρξει Η επιλογή της γλώσσας εξαρτάται από το είδος της εφαρμογής, το υπολογιστικό περιβάλλον στο οποίο θα εκτελεστεί, τα προγραμματιστικά περιβάλλοντα που διαθέτουμε και κυρίως τις γνώσεις του προγραμματιστή 10
Μεταγλώττιση (compilation) πηγαίου κώδικα Ένα πρόγραμμα γραμμένο σε μια γλώσσα υψηλού επιπέδου ονομάζεται πηγαίος κώδικας (source code) Καθώς ο Η/Υ δεν κατανοεί τον πηγαίο κώδικα, χρησιμοποιούνται οι μεταγλωττιστές (compilers) για τη μετάφραση του πηγαίου κώδικα σε γλώσσα μηχανής(object program). Συχνά, το object program συνδέεται με άλλες «βιβλιοθήκες» και εν συνεχεία προκύπτει το εκτελέσιμο αρχείο (executable) που εκτελείται στον Η/Υ Source File Compiler Object File Linker Excutable File Μεταγλώττιση Java κώδικα Ο πηγαίος κώδικας μπορεί να «μεταφερθεί» (porting) σε οποιαδήποτε υπολογιστική πλατφόρμα χρησιμοποιώντας τον κατάλληλο compiler. Για κάθε μία διαφορετική πλατφόρμα, ο κώδικας πρέπει να ξανα μεταγλωττιστεί (π.χ. διαφορετικά εκτελέσιμα για windows & linux) Σε μια εποχή με κατακερματισμένο το χώρο των πλατφόρμων hardware, λειτουργικών συστημάτων και δυνατοτήτων των διαφορετικών συστημάτων, η Java σχεδιάστηκε ώστε τα προγράμματά της να μεταγλωττίζονται μία φορά και να εκτελούνται σε οποιαδήποτε πλατφόρμα! 11
Μεταγλώττιση Java κώδικα Java Bytecode Java Virtual Machine Το μότο με το οποίο η Java έγινε Οποιοσ δ ήποτε γνωστή και απέκτησε δημοφιλία ήταν: Η/Υ Write once, run everywhere!!! (γράφεις μια φορά, εκτελείς παντού) Στην Java γράφεις μία φορά και το μεταγλωττίζεις σε ένα «ενδιάμεσο» τύπο κώδικα (όχι ακριβώς εκτελέσιμο) που ονομάζεται bytecode. Ο bytecode τρέχει σε οποιαδήποτε πλατφόρμα έχει εγκατεστημένη το περιβάλλον εκτέλεσης Java εφαρμογών, που ονομάζεται Εικονική Μηχανή Java (Java Virtual Machine, JVM) το οποίο «διερμηνεύει» (interprets), δηλαδή εκτελεί το bytecode. Φυσικά, για κάθε διαφορετική πλατφόρμα εγκαθίσταται διαφορετική JVM Μεταγλώττιση vs. διερμηνεία Ο μεταγλωττιστής (compiler) δέχεται στην είσοδο ένα πρόγραμμα γραμμένο σε μια γλώσσα υψηλού επιπέδου και παράγει ένα ισοδύναμο (εκτελέσιμο) πρόγραμμα σε γλώσσα μηχανής. Το εκτελέσιμο πρόγραμμα το εκτελεί αμέσως μία μηχανή (πλατφόρμα) για την οποία ειδικά έχει μεταγλωττιστεί το πρόγραμμα Αντίθετα ο διερμηνευτής (interpreter) διαβάζει μία προς μία (διερμηνεύει) τις εντολές του ενδιάμεσου προγράμματος (bytecode) και τι μετατρέπει σε μια ισοδύναμη ακολουθία εντολών μηχανής τις οποίες και εκτελεί αμέσως. 12
Μεταγλώττιση vs. διερμηνεία Λόγω της ενδιάμεσης διαδικασίας της διερμηνείας, οι διερμηνευόμενες (interpreted) γλώσσες (όπως η Java) έχουν χαμηλότερη απόδοση (performance) από τις γλώσσες που μεταγλωττίζονται (compiled languages) Δηλαδή η Java έχει χαμηλότερη απόδοση από τη C και ως εκ τούτου η C είναι καταλληλότερη για εφαρμογές υψηλού υπολογιστικού φόρτου Αυτό το μειονέκτημα (χαμηλή απόδοση) είναι το τίμημα που πληρώνει η Java για το γεγονός ότι ο ίδιος ενδιάμεσος κώδικας «τρέχει» σε όλες τις πλατφόρμες (platform independence) Γιατί Java;; H Java δίνει στον προγραμματιστή ένα εργαλείο για την ανάπτυξη εφαρμογών στο Internet που απευθύνονται σε servers, desktop/laptops, p p,μικρές φορητές συσκευές (mobile phones, PDAs), κ.α. Το μέλλον της πληροφορικής και του προγραμματισμού επηρεάζεται άμεσα από το Internet και η Java υπόσχεται να παραμείνεις ένα μεγάλο μέρος σε αυτό το μέλλον. Η Java είναι σήμερα η σημαντικότερη γλώσσα προγραμματισμού στο Internet. Εξακολουθεί όμως να παραμένει και μια γλώσσα γενικού σκοπού (general purpose ) 26 13
Η Java, το web και σύγχρονες τάσεις Η Java μπορεί να χρησιμοποιηθεί για την ανάπτυξη Web εφαρμογών Java Applets Java Servlets και JavaServer Pages Η Java μπορεί να χρησιμοποιηθεί για την ανάπτυξη εφαρμογών σε κινητές εφαρμογές (cell phones, smartphones) Η τάση είναι η υποστήριξη Java εφαρμογών σε όλο και μικρότερες συσκευές, π.χ. σε αισθητήρες (βλ. http://www.sunspotworld.com/) Παραδείγματα Java εφαρμογών: JSP 14
Παραδείγματα Java εφαρμογών: Java SE Παραδείγματα Java εφαρμογών: Java SE 15
Παραδείγματα Java εφαρμογών: Java applets Παραδείγματα Java εφαρμογών: Java Mobile 16