2 Αντικειµενοστρεφής προγραµµατισµός

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "2 Αντικειµενοστρεφής προγραµµατισµός"

Transcript

1 11/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 19 2 Αντικειµενοστρεφής προγραµµατισµός 2.1 Τα δεδοµένα στο επίκεντρο Στον δοµηµένο προγραµµατισµό, η προσοχή µας εστιάζεται στην επεξεργασία (processing), δηλαδή στις ενέργειες που πρέπει να εκτελεστούν τα δεδοµένα έρχονται στο προσκήνιο αργότερα, όταν είναι προφανές τι λειτουργίες πρέπει να εκτελεστούν πάνω τους. Αυτό είναι καλό, γιατί µπορούµε να επιλέξουµε δοµές δεδοµένων που να αποδίδουν βέλτιστα για το σύνολο των απαιτούµενων λειτουργιών. Ωστόσο, εάν αργότερα χρειαστεί να τροποποιήσουµε το πρόγραµµα και να προσθέσουµε µια νέα λειτουργία στα δεδοµένα, η δόµηση του προγράµµατος χρειάζεται εκτεταµένες αλλαγές. Κατά την αντικειµενοστρεφή (object-oriented, Ο-Ο) προσέγγιση, το σύστηµα αποτελείται από αλληλεπιδρώντα αντικεί- µενα. Κάθε αντικείµενο έχει ιδιότητες ή χαρακτηριστικά που οι τιµές τους αναπαριστάνουν την τρέχουσα κατάστασή του. Επίσης απαντά σε ένα σύνολο ενεργειών που ορίζουν τη συµπεριφορά του. Πιο συγκεκριµένα, το αντικείµενο περιλαµβάνει: (α) δεδοµένα που αναπαριστάνουν τις ιδιότητές του, και (β) λειτουργίες που υλοποιούν τις πράξεις που µπορούν να εφαρµοστούν πάνω του. Το πρόγραµµα δηµιουργεί αντικεί- µενα και καλεί µεθόδους τους για να τα διαχειριστεί. Ας συγκρίνουµε τις δύο προσεγγίσεις µε ένα παράδειγµα. Θέλουµε να φτιάξουµε ένα πρόγραµµα που λειτουργεί πάνω σε διάφορα γεωµετρικά σχήµατα, πχ ευθύγραµµα τµήµατα, κύκλους, παραλληλόγραµµα, κλπ. Θέλουµε τα προβάλουµε, να υπολογίζουµε το εµβαδόν τους, να τα µετακινούµε, να βρίσκουµε αν τέµνονται, κά. Κατά το δοµηµένο προγραµµατισµό, το πρόγραµµα οργανώνεται µε βάση τις λειτουργίες. Για παράδειγµα, θα έ- χουµε µια µέθοδο που θα σχεδιάζει το σχήµα που της δίνεται ως παράµετρος: public double epifaneia(sxhma s) { switch (s.type) { case KYKLOS: return Math.PI * s.aktina * s.aktina; case PARALLHLOGRAMMO: /* αντίστοιχος κώδικας */... //end switch //end epifaneia Κατά τον αντικειµενοστρεφή προγραµµατισµό, το πρόγραµµα οργανώνεται µε βάση τα σχήµατα. Για κάθε σχήµα ορίζονται τα χαρακτηριστικά του και υλοποιούνται στην κλάση του οι λειτουργίες στις οποίες ανταποκρίνεται. Έτσι µπορούµε να προσθέσουµε σχήµατα στη συλλογή µας χωρίς να αλλάζουµε τον υφιστάµενο κώδικα των σχηµάτων που έχουµε ήδη φτιάξει. Κύριοι στόχοι του αντικειµενοστρεφούς προγραµµατισµού είναι η επαναχρησιµοποίηση κώδικα (software reuse) και η ακρίβεια της µοντελοποίησης του συστήµατος που προσοµοιώνουµε µε το πρόγραµµα. Χαρακτηριστικά αντικειµενοστρεφών συστηµάτων ανάπτυξης λογισµικού: Αρθρωσιµότητα (modularity): διαίρεση σε µικρότερα κοµµάτια, βλέπε και δοµηµένος προγραµµατισµός Αφαίρεση (abstraction): επικεντρώνει την προσοχή στις κύριες ή σχετικές ιδιότητες του αντικειµένου και αγνοεί τις δευτερεύουσες ή επουσιώδεις. Ενθυλάκωση (encapsulation): προσφέρει προστασία ιδιωτικών δεδοµένων και δίνει τη δυνατότητα να αλλάξει η εσωτερική αναπαράσταση των αντικειµένων, χωρίς αυτό να γίνεται αντιληπτό στα σηµεία κλήσης των µεθόδων. Ιεραρχία και κληρονοµικότητα (inheritance): εξειδίκευση κλάσεων µέσω επέκτασης της συµπεριφοράς άλλων κλάσεων Γλώσσες που υποστηρίζουν αντικειµενοστρεφή προγραµµατισµό είναι οι Smalltalk, Java, C++. Ειδικά οι δύο πρώτες είναι πλήρως αντικειµενοστρεφείς: όλα τα δεδοµένα (µπορούν να) είναι αντικείµενα και τα προγράµµατα είναι κλάσεις. Επίσης υποστηρίζουν τα παραπάνω τέσσερα χαρακτηριστικά. Καταρχήν είναι εφικτό να αναπτύξει κάποιος ένα αντικειµενοστρεφές πρόγραµµα, χωρίς να χρησιµοποιήσει µια αµιγώς αντικειµενοστρεφή Εικόνα 25 Πρόγονοι της Java γλώσσα, όπως αυτές που αναφέρονται παραπάνω 1. Άλλες γλώσσες έχουν επεκταθεί µε αντικειµενοστρεφή χαρακτηριστικά, όπως η Visual Basic. Στη δεκαετία του 70 είχαµε ένα παρόµοιο φαινόµενο όταν οι πρώτες διαδικαστικές γλώσσες, όπως η Basic και η Fortran επεκτείνονταν µε µηχανισµούς κλήσης υπορουτινών και περάσµατος παραµέτρων για να υποστηρίξουν τις αρχές του δοµηµένου προγραµµατισµού. 1 Και το αντίστροφο ισχύει, και µάλιστα συµβαίνει συχνά: µπορεί κάποιος να χρησιµοποιεί µια αντικειµενοστρεφή γλώσσα προγραµµατισµού κι όµως να αναπτύσσει µη αντικειµενοστρεφή προγράµµατα.

2 Σελίδα 20 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 11/3/2006 Ο Alan Kay συνοψίζει πέντε χαρακτηριστικά της Smalltalk, της πρώτης αντικειµενοστρεφούς γλώσσας προγραµµατισµού που ισχύουν σε µεγάλο βαθµό και για τη Java: Τα πάντα είναι αντικείµενα. 2 Το πρόγραµµα είναι µια οµάδα αντικειµένων που λένε το ένα στο άλλο τι να κάνει στέλνοντας µηνύµατα. Τα µηνύ- µατα δηλαδή είναι το ανάλογο των υπορουτινών στις διαδικαστικές γλώσσες προγραµµατισµού. Κάθε αντικείµενο έχει τη µνήµη του και αποτελείται από άλλα αντικείµενα. Κάθε αντικείµενο έχει έναν τύπο. Ακολουθώντας την ορολογία, κάθε αντικείµενο είναι στιγµιότυπο µιας κλάσης. Όλα τα αντικείµενα του ίδιου τύπου µπορούν να λάβουν τα ίδια µηνύµατα. 2.2 Η έννοια της αφαίρεσης Όλες οι γλώσσες προγραµµατισµού είναι εργαλεία για τον ορισµό αφαιρέσεων 3 (abstractions). Αν και οι γλώσσες είναι υπολογιστικά ισοδύναµες, δηλαδή όλες µπορούν να λύσουν το ίδιο σύνολο προβληµάτων, η πολυπλοκότητα των προβληµάτων που µπορεί να λύσει ένας προγραµµατιστής, εξαρτάται από το είδος και την ποιότητα της αφαίρεσης που υποστηρίζει η γλώσσα. Όσο πιο υψηλού επιπέδου είναι µια γλώσσα, τόσο πιο µεγάλη αφαιρετική ικανότητα προσφέρει. Υπάρχουν γλώσσες που προσφέρουν συγκεκριµένες αφαιρέσεις και µπορούν να χρησιµοποιηθούν για να εκφράσουν λύσεις προβληµάτων που σχετίζονται µε αυτές τις αφαιρέσεις. Για παράδειγµα, η Lisp είναι καλό εργαλείο για προβλήµατα που αντιµετωπίζονται µε λίστες και η Prolog για προβλήµατα που λύνονται µε εξαντλητική διερεύνηση του χώρου λύσεων µετά την εφαρµογή περιορισµών (constraints). Αντίθετα, η assembly που είναι πολύ χαµηλού επιπέδου, προσφέρει στον προγραµµατιστή µόνον τη δυνατότητα να χρησιµοποιεί µνηµονικά ονόµατα για τις εντολές του µικροεπεξεργαστή και τις θέσεις µνήµης του προγράµµατος. Κατά τα άλλα ο προγραµµατιστής εκφράζει τη λύση του προβλήµατος χρησιµοποιώντας τις εντολές της γλώσσας µηχανής του υπολογιστή στόχος. Με την αντικειµενοστρεφή προσέγγιση, τα προβλήµατα επιλύονται δηµιουργώντας αφαιρέσεις («µοντέλα») των αντικειµένων που εµπλέκονται στο πρόβληµα. Έτσι όταν κάποιος διαβάζει το πρόγραµµα, βλέπει αντικείµενα και λειτουργίες που έχουν ανάλογα στον χώρο του προβλήµατος (problem space) και όχι στον χώρο της γλώσσας προγραµµατισµού ή του υπολογιστή. Παράδειγµα: Ας πούµε ότι σχεδιάζουµε ένα πρόγραµµα που ελέγχει το φωτισµό ενός καταστήµατος. Ο φωτισµός γίνεται µε λάµπες. Το αντικεί- µενο «λάµπα» (Light) έχει µια κατάσταση (state) και λειτουργίες για ά- ναµµα, σβήσιµο. Επίσης, έχει δυνατότητα για µείωση / αύξηση φωτισµού. Η εσωτερική αναπαράσταση της κατάστασης της λάµπας µπορεί να είναι ένας αριθµός που υποδηλώνει πόσο αναµµένη ή σβηστή είναι. είτε στην ενότητα 2.14 Υλοποίηση κλάσης λάµπα σε Java για µια υλοποίηση. Σηµειώστε ότι η αναπαράσταση µπορεί να αλλάξει, πχ αντί για Εικόνα 26 Το αντικείµενο λάµπα πραγµατικός αριθµός που παίρνει τιµές µεταξύ 0 και 1, µπορούµε να χρησιµοποιήσουµε έναν ακέραιο µε κάποιο εύρος [ 0..n). Παρότι η υ- λοποίηση των υπορουτινών που υλοποιούν τη «συµπεριφορά» της λάµπας, δηλαδή οι εντολές στις οποίες ανταποκρίνεται θα αλλάξει, κάποιος που χρησιµοποιεί αντικείµενα της κλάσης, δεν θα αντιληφθεί την αλλαγή. Αυτό επιτυγχάνεται µε την ενθυλάκωση. Αφού φτιάξουµε την κλάση Lampa που αντιστοιχεί στο «πρότυπο» ή την προδιαγραφή, το επόµενο βήµα είναι να παράγουµε ένα ή περισσότερα «στιγµιότυπα» (instances) αντικειµένων, που αντιστοιχούν σε συγκεκριµένες λά- µπες του καταστήµατος. Πρέπει σε αυτό το σηµείο να κατανοείτε τη διαφορά ανάµεσα σε µια κλάση (ορίζει τις ιδιότητες και τις λειτουργίες κάθε αντικειµένου της κλάσης) και στα αντικείµενα που έχουν κατασκευαστεί µε βάση την κλάση. Ας υποθέσουµε ότι µερικές λάµπες µπορούν µόνο να ανάβουν και να σβήνουν κι όχι να αυξοµειώνουν τη ένταση του φωτισµού, ενώ σε κάποιες άλλες µπορούµε να αλλάξουµε το χρώµα. Τότε µπορούµε να ορίσουµε άλλες κατηγορίες ή κλάσεις που είναι κατά βάση λάµπες, αλλά τροποποιούν / επεκτείνουν τη συµπεριφορά της «βασικής» λάµπας. Αν οι λάµπες έχουν διάφορα χρώµατα, τότε πρέπει να συµπεριλάβουµε στις ιδιότητές τους το χρώµα. Στην περίπτωση που το χρώµα τους είναι σταθερό, θα επιτρέπουµε να ορίζεται µόνο κατά την κατασκευή της κάθε λάµπας και δεν θα υπάρχει δυνατότητα αλλαγής του αργότερα. Αντίθετα, αν η λάµπα µπορεί να αλλάζει χρωµατισµούς, τότε θα πρέπει να παράσχουµε επιπρόσθετα µια λειτουργία που θα θέτει το τρέχον χρώµα της λάµπας στο αντίστοιχο αντικείµενο. Τα βήµατα που ακολουθούµε για να σχεδιάσουµε τα αντικείµενα είναι ως εξής. (1) Ξεκινούµε επιλέγοντας τις οντότητες του προβλήµατος που θα απεικονιστούν ως αντικείµενα. (2) Ορίζουµε µοντέλα αυτών των οντοτήτων όπου περιλαµβάνονται οι ιδιότητες και οι λειτουργίες τους. Προσπαθούµε να κάνουµε αυτά τα µοντέλα να προσοµοιάζουν όσο το 2 Βέβαια στη Java, σχεδόν όλα είναι αντικείµενα. Για λόγους επιδόσεων, οι βασικοί τύποι δεδοµένων (αριθµοί, χαρακτήρες) δεν είναι αντικείµενα, εκτός αν ο προγραµµατιστής χρησιµοποιήσει τις κλάσεις περιτυλίγµατος (wrapper classes) Integer, Long, κτλ. 3 Μια οπτική γωνία που µπορεί κάποιος να δει τα προγράµµατα είναι ως κατασκευές που εκτελούνται πάνω σε γενικής χρήσης υπολογιστικές µηχανές και διαµορφώνουν (εξειδικεύουν) τη συµπεριφορά τους, ώστε να λύνουν κάποιο πρόβληµα. Το πρόγραµµα «σκεπάζει» τις λεπτοµέρειες της εσωτερικής του λειτουργίας, καθώς και της συσκευής πάνω στην οποία εκτελείται και την «µεταµφιέζει» σε µια συσκευή που λύνει το πρόβληµα, δηλαδή αποδέχεται εισόδους κατά τις προδιαγραφές και παράγει τις νόµιµες εξόδους.

3 11/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 21 δυνατόν πιστότερα τις οντότητες του προβλήµατος. (3) Κατασκευάζουµε στιγµιότυπα των µοντέλων και εφαρµόζουµε λειτουργίες επί αυτών. Ακόµη κι αν κάποιος προγραµµατίζει ακολουθώντας πιστά το µοντέλο του αντικειµενοστρεφούς προγραµµατισµού, όταν υλοποιεί την εσωτερική οργάνωση των αντικειµένων θα χρησιµοποιήσει τεχνικές δοµηµένου προγραµµατισµού, πχ την οργάνωση του κώδικα σε µπλοκ εντολών, την κλήση σε υπορουτίνες, κλπ. Άρα τελικά οι δύο τεχνικές δεν είναι ξένες ή εχθρικές αντίθετα, συνδυάζονται αρµονικά όποτε χρειάζεται. 2.3 Μειονεκτήµατα του Ο-Ο προγραµµατισµού Ασαφείς έννοιες και δυσνόητοι όροι. Επίσης, χρησιµοποιούνται διαφορετικοί όροι από τους συνηθισµένους των διαδικαστικών γλωσσών προγραµµατισµού. ιαφορετική θεώρηση. Αρκετοί έχουν συνηθίσει την προσέγγιση του δο- µηµένου προγραµµατισµού και βρίσκουν πολύ διαφορετική την αντικει- µενοστρεφή προσέγγιση. Έλλειψη επιδόσεων. Ε- κτός από τη διερµηνεία στην ιδεατή µηχανή, υ- Εικόνα 27 Έννοιες αντικειµενοστρεφούς και δοµηµένου προγραµµατισµού πάρχουν εγγενείς αιτίες που προκαλούν αργά προγράµµατα: η δυναµική σύνδεση των µηνυµάτων µε τις µεθόδους, η δυναµική εκχώρηση µνήµης, κά. 2.4 Αντικείµενο = δεδοµένα + συµπεριφορά σε ενθυλάκωση Η κλάση (class) είναι ένα περίγραµµα ή ένα προσχέδιο για το πώς θα λειτουργεί και τι πληροφορίες ή ιδιότητες θα περιλαµβάνει ένα αντικείµενο. Αυτό το «καλούπι» χρησιµοποιείται για να παράγει αντικείµενα (objects). Το κάθε αντικείµενο έχει µια µοναδική ταυτότητα για να ξεχωρίζει από τα «αδέλφια» του. Στην απλούστερη περίπτωση, µια κλάση µπορεί να ορίζει µόνον ιδιότητες και καθόλου συµπεριφορά για τα αντικείµενα που παράγει, δηλαδή να έχει µόνο µεταβλητές στιγµιότυπου. Τότε η κλάση λειτουργεί όπως οι τύποι δεδοµένων ο- ριζόµενοι από το χρήστη (user-defined data types) στις κλασικές γλώσσες προγραµµατισµού. Το σύνολο των ιδιοτήτων ενός αντικει- µένου, που είναι δηλωµένα στην ενότητα «µεταβλητές στιγµιότυπου» στην Εικόνα 28, αποτελούν την κατάστασή του. Ένα κλάσµα έχει ιδιότητες τον α- ριθµητή και τον παρονοµαστή του δείτε την κλάση Klasma στην ενότητα 2.15 Κλασµατικοί αριθµοί για µια υλοποίηση.. Παρατηρήστε ότι οι µεταβλητές στιγµιότυπου δηλώνονται σε επίπεδο κλάσης κι όχι µέσα σε κάποια µέθοδο. Αυτό το συναντούµε για πρώτη φορά µέχρι τώρα όλες οι µεταβλητές δηλώνονταν στο εσωτερικό µιας µεθόδου, πχ της main. Παρότι οι µεταβλητές στιγµιότυπου αρχικοποιούνται κατά τη δήλωσή τους σε προκαθορισµένη τιµή (µηδέν οι αριθµητικές, ψευδές οι λογικές), είναι ορθή Απόκρυψη πληροφορίας (information hiding) επιτυγχάνουµε περιορίζοντας την εµβέλεια των ιδιοτήτων στο εσωτερικό της κλάσης. Η δηµόσια διεπαφή (public interface) της κλάσης αποτελείται από ενέργειες στις οποίες µπορεί να ανταποκριθεί το αντικείµενο. Παράδειγµα: στο ραδιοκασετόφωνο αυτοκινήτου, η διεπαφή του αποτελείται από χειριστήρια και υποδοχές για κεpublic class SomeClass { // το όνοµα της κλάσης // µεταβλητές στιγµιότυπου /* εδώ δηλώνονται οι µεταβλητές που αντιστοιχούν στις ιδιότητες κάθε αντικειµένου */ // κατασκευαστές /* εδώ ορίζονται µία ή περισσότερες δηµόσιες συναρτήσεις µε τις οποίες κατασκευάζονται νέα αντικείµενα κυρίως αρχικοποιούν τις ιδιότητες */ // µέθοδοι ανάγνωσης get και εγγραφής set /* εδώ ορίζονται δηµόσιες συναρτήσεις getsomeproperty και setsomeproperty που επιτρέπουν την πρόσβαση και την αλλαγή στις τιµές ιδιοτήτων του αντικει- µένου */ /* εδώ ορίζονται άλλες δηµόσιες µέθοδοι που ορίζουν τη συµπεριφορά των αντικειµένων της κλάσης */ /* εδώ ορίζονται βοηθητικές µέθοδοι ιδιωτικής εµβέλειας που χρησιµοποιούνται από τις δηµόσιες µεθόδους */ //end class Εικόνα 28 Ένας σκελετός για τον ορισµό µιας κλάσης Java προγραµµατιστική τεχνική να τις αρχικοποιεί ο προγραµµατιστής πριν διαβάσει την τιµή τους. Κατ αντιδιαστολή οι τοπικές µεταβλητές απαιτούν αρχικοποίηση από τον προγραµµατιστή πριν να διαβαστεί η τιµή τους δεν αρχικοποιούνται αυτόµατα από το σύστηµα.

4 Σελίδα 22 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 11/3/2006 ραία, ηχεία, κτλ που γνωρίζεις τι κάνουν ή πώς συνδέονται, χωρίς να ξέρεις πώς λειτουργούν. Μπορούµε να δηλώσουµε κάποιες ιδιότητες ως ιδιωτικές και κάποιες άλλες ως δηµόσιες και το ίδιο ισχύει και για τις µεθόδους. Μια αρχή που ακολουθούν οι στρατιωτικοί είναι ότι η διάχυση της πληροφορίας πρέπει να γίνεται on-a-need-toknow-basis αυτό σηµαίνει ότι καθένας πρέπει να γνωρίζει µόνον ότι είναι απαραίτητο για να εκτελέσει σωστά την αποστολή του. Η αρχή αυτή εφαρµόζεται στον προγραµµατισµό µε τον περιορισµό της εµβέλειας όσο το δυνατόν περισσότερων ονοµάτων µέσα στην κλάση. Όταν ένα όνοµα (µεταβλητής ή µεθόδου) δηλώνεται private, η εµβέλειά του περιορίζεται στο εσωτερικό της κλάσης. Αντίθετα όταν δηλώνεται public, είναι ορατό και προσπελάσιµο από παντού. Όταν εισάγουµε την κληρονοµικότητα, θα δούµε ότι η Java υποστηρίζει ακόµα µια δήλωση εµβέλειας, την protected. Αν περιορίσουµε την εµβέλεια των µεταβλητών στιγµιότυπου δηλώνοντάς τις ως private, είναι απαραίτητο να χρησιµοποιήσουµε ειδικές µεθόδους ανάγνωσης και εγγραφής µέσω των οποίων θα προσπελαύνονται. 2.5 Κατασκευαστές και καταστροφείς αντικειµένων Είναι οι ειδικές εκείνες µέθοδοι που αναλαµβάνουν τη δηµιουργία νέων αντικειµένων και την καταστροφή των υπαρχόντων. Οι κατασκευαστές (constructors) στην Java πρέπει να έχουν ίδιο όνοµα µε την κλάση της οποίας αντικείµενα κατασκευάζουν και δεν επιστρέφουν τιµή. Ακόµη κι αν δεν γράψουµε κώδικα για κανένα κατασκευαστή, η Java από µόνη της φτιάχνει έναν «αόρατο» κατασκευαστή δίχως παραµέτρους που αρχικοποιεί τις µεταβλητές στιγµιότυπου στις εξ ορισµού τιµές τους. Πριν να κατασκευάσουµε ένα αντικείµενο πρέπει να δηλώσουµε µια µεταβλητή που θα «δείχνει» αυτό το αντικείµενο και µέσω της οποίας θα προσπελαύνονται οι ιδιότητες και οι µέθοδοί του. Για παράδειγµα, η εντολή Light lampasaloniou = new Light(0); δηλώνει τη µεταβλητή lampasaloniou να µπορεί να δεχθεί ως τιµή αντικείµενα τύπου Light και έπειτα κατασκευάζει ένα τέτοιο αντικείµενο µε τη δεσµευµένη λέξη new και κλήση του κατασκευαστή Light(0). Σηµειώνεται ότι το πρώτο Light είναι δήλωση της κλάσης, ενώ το Light(0) είναι κλήση µιας µεθόδου του κατασκευαστή. Τιµή της µεταβλητής lampasaloniou είναι ένα προσδιοριστικό του συγκεκριµένου αντικειµένου. Τυπώνοντάς την βγαίνει κάτι σαν Βέβαια δεν έχει νόηµα να τυπώσουµε την τιµή µιας µεταβλητής αντικειµένου - απλώς µέσω αυτής καλούνται οι µέθοδοι του αντικειµένου στο οποίο «στοχεύει» και ανακαλούνται οι δηµόσιες ιδιότητές του. Για να γίνει πλήρως κατανοητή η διάκριση ανάµεσα σε ένα αντικείµενο και σε µια µεταβλητή που δείχνει προς αυτό, δείτε το διπλανό κώδικα. Οι δύο µεταβλητές lamp και samelamp αναφέρονται στο ίδιο αντικείµενο γι αυτό λέγονται ψευδώνυµα (aliases). Οι καταστροφείς (destructors) αντικειµένων, εάν υπάρχουν, πρέπει να έχουν το όνοµα µεθόδου finalize. Η βασικότερη λειτουργία τους είναι η απόδοση πίσω στο σύστηµα των πόρων που απελευθερώνονται από την διαγραφή του αντικειµένου και η συντήρηση διαφόρων δοµών δεδοµένων ή µετρητών στιγµιότυπων, πχ µπορεί ο προγραµµατιστής να διατηρεί το πλήθος των αντικειµένων µιας κλάσης. είτε το παράδειγµα 2.15 Κλασµατικοί αριθµοί. ιαχείριση µνήµης Στο διπλανό παράδειγµα, το αντικείµενο Light που δηµιουργείται στη γραµµή Γ και προσπελαύνεται µέσω της µεταβλητής h, προκαλεί αδυναµία προσπέλασης του πρώτου αντικειµένου που είχε κατασκευαστεί στη γραµµή Α. Έτσι το αντικείµενο αυτό καταλαµβάνει πόρους (µνήµη), αλλά είναι αδύνατο να χρησιµοποιηθεί πλέον στο πρόγραµµα, αφού δεν υπάρχει κάποια µεταβλητή που να οδηγεί σε αυτό. Συλλογή απορριµµάτων (garbage collection) είναι ο µηχανισµός αυτόµατης αποδέσµευσης της µνήµης, όταν πια δεν χρησιµοποιείται το αντικείµενο που την καταλαµβάνει. Υλοποιείται από µια νηµατική διεργασία (thread process) που τρέχει στο παρασκήνιο (background) µε χαµηλή προτεραιότητα. Εάν θελήσουµε να επιβάλλουµε εκτέλεση της συλλογής απορριµµάτων σε συγκεκριµένη στιγµή, η εντολή είναι System.gc(). Συλλογή απορριµµάτων έχει υλοποιηθεί από παλιά (πχ στις γλώσσες Lisp, Smalltalk), αλλά σε σύγχρονες γλώσσες τη διαχείριση µνήµης την αναλαµβάνει ο ίδιος ο προγραµµατιστής, γιατί καταναλώνει πολύ χρόνο όταν γίνεται αυτόµατα. Η Java υποστηρίζει συλλογή απορριµµάτων, αλλά αρκετοί µεταγλωττιστές έχουν προβλήµατα στην υ- λοποίηση. ιαρροή µνήµης (memory leak) έχουµε όταν δεν απελευθερώνονται τµήµατα µνήµης που δεν είναι πλέον προσπελάσιµα από κανέναν. Μπορεί να οδηγήσει σε µείωση της διαθέσιµης µνήµης ή και εξάντλησή της. 2.6 Μέθοδοι ανάγνωσης και εγγραφής Light lamp, samelamp; //δηλώνει δύο µεταβλητές lamp = new Light(0); //φτιάχνει ένα αντικείµενο //και θέτει τη µεταβλητή lamp να δείχνει σε αυτό samelamp = lamp; //δεν δηµιουργείται άλλο αντικείµενο Εικόνα 29 Ψευδώνυµα Light h; Light k; h = new Light(0); //Α k = new Light(0); //Β /*... */ h = new Light(1); //Γ k = null; Εικόνα 30 Μη προσπελάσιµο αντικείµενο

5 11/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 23 Οι µέθοδοι ανάγνωσης (reader ή getter ή accessor) είναι δηµόσιες µέθοδοι που συνήθως το όνοµά τους αρχίζει από get, δεν παίρνουν κάποια παράµετρο ως είσοδο και µόνον επιστρέφουν µια τιµή. Καθιστούν δυνατή την ανάγνωση της τιµής των µεταβλητών στιγµιότυπου (instance variables) που για λόγους απόκρυψης πληροφορίας (information hiding) είναι συνήθως ορισµένες ως ιδιωτικές µέσα στην κλάση. Οι µέθοδοι εγγραφής (writer ή setter ή mutator) είναι δηµόσιες µέθοδοι που συνήθως το όνοµά τους αρχίζει από set, παίρνουν παραµέτρους τις τιµές που ε- πιθυµούµε να θέσουµε σε µεταβλητές στιγµιότυπου και δεν επιστρέφουν τίποτε 4. Χρησιµοποιούνται για να αλλάξουν την τιµή των ιδιωτικών µεταβλητών µιας κλάσης, καθώς η απευθείας ανάθεση σε αυτές µιας τιµής δεν είναι δυνατή, όταν γίνεται έξω από την κλάση. Στις µεθόδους εγγραφής συχνά συµπεριλαµβάνεται κώδικας που ελέγχει ότι οι τιµές που δίνονται στις ιδιότητες του αντικειµένου αντιστοιχούν σε µια «νόµιµη» ή συνεπή κατάσταση για το αντικείµενο. Για παράδειγµα στην Εικόνα 31, το κλάσµα αποκλείεται να αποκτήσει µηδενικό παρονοµαστή. Απαγορεύοντας απευθείας προσπέλαση στις µεταβλητές στιγµιότυπου µε τη δήλωσή τους ως private, επιβάλλουµε ότι ο µόνος τρόπος ορισµού / αλλαγής τους είναι µέσω των κατασκευαστών και των µεθόδων εγγραφής στις οποίες υπάρχουν έλεγχοι ότι τα στιγµιότυπα της κλάσης µας δεν τίθενται σε «παράνοµη» κατάσταση. Αυτό µας γλιτώνει από πρόσθετους ελέγχους αργότερα στη ζωή του στιγµιότυπου, πχ δεν χρειάζεται να ελέγξουµε για διαίρεση δια 0, όταν υπολογίζουµε την τιµή του κλάσµατος public float computeratio() { return (float) arithmitis / paronomastis; Τυπικά, σε µια κλάση που ορίζει έναν τύπο αντικειµένων, θα συναντήσουµε (α) µεταβλητές στιγµιότυπου που αναπαριστούν τις ιδιότητες, (β) κατασκευαστές, (γ) µεθόδους ανάγνωσης / εγγραφής, (δ) µεθόδους που υλοποιούν τη συ- µπεριφορά του αντικειµένου. Επίσης, συνηθίζεται να υπάρχει µια µέθοδος tostring (δείτε Εικόνα 31) που επιστρέφει κάποιας µορφής µετατροπή του αντικειµένου σε συµβολοσειρά, ώστε να µπορεί να εκτυπωθεί. Για παράδειγµα, Klasma x = new Klasma(3, 2); System.out.println(x.toString()); //τυπώνει 3.0/2.0, όπως αναµενόταν System.out.println(x); //πάλι τυπώνει 3.0/2.0 αφού καλεί εµµέσως την tostring() Παράδειγµα: ζητείται η κατασκευή ενός ηλεκτρονικού καταστήµατος µέσω του οποίου οι πελάτες επιλέγουν προϊόντα από έναν κατάλογο, υποβάλουν τις παραγγελίες τους και τις εξοφλούν µε πιστωτική κάρτα. Κατασκευάζουµε κλάσεις για τα προϊόντα, τους πελάτες και τις παραγγελίες. Η κλάση για το προϊόν µπορεί να ενσωµατώνει χαρακτηριστικά όπως κωδικός, περιγραφή, τιµή, διαθέσιµη ποσότητα και µεθόδους δηµιουργίας, ενηµέρωσης, κλπ. 2.7 Ροή εκτέλεσης //µεταβλητές στιγµιοτύπου private int arithmitis; //αριθµητής private int paronomastis; //παρονοµαστής //τυπική µέθοδος ανάγνωσης public int getarithmitis () { return this.arithmitis; //τυπική µέθοδος εγγραφής public void setfraction(int arithmitis, int paronomastis) { this.arithmitis = arithmitis; this.paronomastis = ((paronomastis==0)?1: paronomastis); //τυπική µέθοδος εκτύπωσης public String tostring() { return arithmitis + / + paronomastis; Εικόνα 31 είγµατα µεθόδων get, set, tostring Κατά το αντικειµενοστρεφές µοντέλο, αντί κλήσεων υπορουτινών, η εκτέλεση του προγράµµατος εκτυλίσσεται µε α- νταλλαγή µηνυµάτων (messages) µεταξύ αντικειµένων. Η σύνταξη των κλήσεων είναι ως εξής: παραλήπτης.µέθοδος() ή αντικείµενο.ρήµα(), πχ παράθυρο.κλείσε() ή λάµπασαλονιού.άναψε(). Οι παρενθέσεις χρειάζονται για να διαφοροποιείται η ανταλλαγή µηνυµάτων από την αναφορά σε ιδιότητες αντικειµένων και περικλείουν τη λίστα των πραγµατικών παραµέτρων (actual parameters). Τα µηνύµατα τα συλλαµβάνει το αντικείµενο - παραλήπτης και εκτελεί την οµώνυµη µέθοδο. Ο παραλήπτης του µηνύµατος δεν καθορίζεται κατά τη µεταγλώττιση, γιατί κατά τη µεταγλώττιση ο παραλήπτης δεν υφίσταται ως αντικείµενο και επειδή η µέθοδος µπορεί να είναι υπερφορτωµένη, άρα ο µεταγλωττιστής δεν γνωρίζει ποια από τις εκδοχές της να αντιστοιχίσει στην κλήση. Μόνο κατά την εκτέλεση (runtime) συσχετίζεται η αποστολή του µηνύµατος µε τον παραλήπτη. Αυτό λέγεται δυναµική ή καθυστερηµένη σύνδεση (dynamic / late binding). Μπορούµε να αναφερόµαστε στις ιδιότητες του αντικειµένου µε τη σύνταξη object.property πχ παράθυροπρόσοψης.ύψος, ή λάµπασαλονιού.χρώµα υπό την προϋπόθεση ότι έχουν δηµόσια εµβέλεια. Ο κύκλος λειτουργίας ενός αντικειµενοστρεφούς συστήµατος περιλαµβάνει τα βήµατα: (α) εκκίνηση εφαρµογής, (β) δηµιουργία αντικειµένων, (γ) παραµονή σε αναµονή γεγονότος, (δ) αναγνώριση γεγονότος, (ε) αναζήτηση αντικειµένου παραλήπτη, (στ) εκτέλεση χειριστή γεγονότος, (ζ) περαιτέρω γεγονότα ή αναµονή. 4 Μερικές φορές είναι χρήσιµο να επιστρέφουν µια τιµή που υποδηλώνει ότι η εγγραφή της τιµής έγινε κανονικά στην ιδιότητα του αντικειµένου.

6 Σελίδα 24 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 11/3/ Υπερφόρτωση / Πολυµορφισµός Στην ίδια κλάση µπορούµε να ορίσουµε µεθόδους µε το ίδιο όνοµα, αρκεί να διαφέρουν στις παραµέτρους τους κατά το πλήθος, τον τύπο ή απλώς τη σειρά. Τότε το όνοµα της µεθόδου είναι υπερφορτωµένο (overloaded method). Κατά την κλήση του ονόµατος, το περιβάλλον εκτέλεσης θα εκτελέσει την µέθοδο της οποίας η λίστα των τυπικών παραµέτρων ταιριάζει µε τις πραγµατικές παραµέτρους. Συνήθως υπερφορτωµένες µέθοδοι είναι οι κατασκευαστές, δηλαδή οι µέθοδοι µε τις οποίες αρχικοποιείται η κατάσταση των νεοδηµιουργηθέντων αντικειµένων. Οι υπερφορτωµένες µέθοδοι συνήθως εκτελούν παρόµοιες λειτουργίες. Προκύπτει ότι το όνοµα µιας µεθόδου δεν είναι αρκετό για τον πλήρη προσδιορισµό της χρειάζεται και η λίστα των παραµέτρων της µε τους τύπους τους. Όλα αυτά ονοµάζονται υπογραφή (signature) της υπερφορτωµένης µεθόδου. Το σώµα της µεθόδου που έχει κληθεί καθορίζεται από το αντικείµενο παραλήπτη κατά τη διάρκεια της εκτέλεσης κι όχι κατά τη µετάφραση (καθυστερηµένη σύνδεση, late binding). Το χαρακτηριστικό αυτό βελτιώνει την προσαρµοστικότητα και αυξάνει την επαναχρησιµοποίηση, αλλά είναι πηγή σφαλµάτων και καθυστέρησης στην εκτέλεση. Η λειτουργία που επιτελεί ένας πολυµορφικός τελεστής εξαρτάται από το αντικείµενο στο οποίο εφαρµόζεται. Σε αντίθεση µε τη C++, η Java δεν επιτρέπει στον προγραµµατιστή να υπερφορτώσει τελεστές, παρότι ορισµένοι τελεστές της είναι υπερφορτωµένοι από τη γλώσσα, όπως το Κλήση µεθόδων Για την κλήση µιας µεθόδου, η συνήθης σύνταξη είναι αντικείµενο.µέθοδος( λίσταπραγµατικώνπαραµέτρων ) που εφαρµόζει τη συγκεκριµένη µέθοδο πάνω σε ένα αντικείµενο, πχ textarea.settext("abc"). Η σύνταξη αυτή ισχύει για τις µεθόδους στιγµιότυπων. Ωστόσο, σε µερικές περιπτώσεις συναντούµε τη σύνταξη Κλάση.µέθοδος( λίσταπραγµατικώνπαραµέτρων ) που εφαρµόζει τη µέθοδο στην κλάση, πχ Integer.parseInt(sBuffer), ή Math.sqrt(16). Σε αυτή την περίπτωση, κατά τον ορισµό της στην κλάση, η µέθοδος έχει οριστεί ως static. Στατικές µέθοδοι µπορούν να κληθούν ακόµη κι αν δεν έχουν δηµιουργηθεί στιγµιότυπα της κλάσης. Για να χρησιµοποιήσουµε µια µέθοδο πχ από µια βιβλιοθήκη, δεν αρκεί να γνωρίζουµε το όνοµά της - πρέπει να γνωρίζουµε την «υπογραφή» της, δηλαδή την επικεφαλίδα του ορισµού της: αν είναι στατική ή όχι, τι τύπο δεδοµένων επιστρέφει, το πλήθος και τον τύπο των παραµέτρων της. Πχ η µέθοδος στιγµιότυπου που µετατρέπει µια συµβολοσειρά σε κεφαλαία συντάσσεται sname.touppercase() και όχι String.toUpperCase(sName). Τα διαγράµµατα κλάσεων (class diagrams) είναι µια εποπτική απεικόνιση των ιδιοτήτων και των µεθόδων µιας κλάσης. Για κάθε κλάση αναγράφονται διαδοχικά: (α) όνοµα, (β) ιδιότητες και (γ) µέθοδοι. Η εµβέλεια του κάθε ονόµατος υποδηλώνεται µε + όταν είναι δηµόσια (public) και µε όταν είναι ιδιωτική (private). Στην Εικόνα 32 φαίνεται το διάγραµµα της κλάσης Klasma - ο κώδικάς της βρίσκεται στην ενότητα Οι παράµετροι πάντοτε εγκλείονται σε παρενθέσεις και διαχωρίζονται µε κόµµα. Οι παράµετροι στην κλήση µιας µεθόδου ονοµάζονται πραγµατικές παράµετροι (actual parameters). Οι παράµετροι στην επικεφαλίδα του ορισµού της µεθόδου ονο- µάζονται τυπικές παράµετροι (formal parameters). Κατά την κλήση µιας µεθόδου αντιστοιχίζονται οι πραγµατικές µε τις τυπικές παραµέτρους, άρα το πλήθος τους πρέπει να είναι ί- διο η Java δεν υποστηρίζει άµεσα προαιρετικές (optional) παραµέτρους, όπως πχ η Visual Basic. Μπορούµε ωστόσο να επιτύχουµε το ίδιο αποτέλεσµα υπερφορτώνοντας τη µέθοδο, δηλ. ορίζοντάς την πολλές φορές µε το ίδιο όνοµα µε διαφορετικό α- ριθµό παραµέτρων. Τα ονόµατα που δηλώνονται σε επίπεδο κλάσης χρησιµοποιώντας Εικόνα 32 ιάγραµµα κλάσης τη δεσµευµένη λέξη static δεν αναπαράγονται κάθε φορά που δηµιουργείται ένα αντικείµενο της κλάσης και προσπελαύνονται µε αναφορά στο όνοµα της κλάσης όχι το όνοµα ε- νός συγκεκριµένου στιγµιότυπου της κλάσης. Συνήθως δηλώνονται σταθερές κλάσης, πχ public class Euro { public static final CONVERSION_RATE = ; στην οποία αναφερόµαστε µε Euro.CONVERSION_RATE. Τα υπάρχοντα πακέτα της Java ορίζουν αρκετές στατικές σταθερές, όπως Math.PI. Σε µερικές περιπτώσεις χρειάζεται να δηµιουργήσουµε ένα και µοναδικό στιγµιότυπο µιας κλάσης. Μπορεί να αναρω-

7 11/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 25 τηθείτε αν αξίζει να κατασκευάσουµε ένα αντικείµενο και µεθόδους στιγµιότυπου γι αυτό, ή είναι καλύτερο να χρησιµοποιήσουµε στατικές µεταβλητές και µεθόδους. Η επικρατέστερη άποψη είναι να αποφεύγονται οι στατικές µέθοδοι, διότι: Παραβιάζουν το αντικειµενοστρεφές µοντέλο σχεδίασης. Στο µέλλον µπορεί να απαιτηθεί η δηµιουργία και άλλων στιγµιότυπων. Το όνοµα µιας µεταβλητής βασικού τύπου (πχ int, double) λειτουργεί σαν µια ετικέτα για µια περιοχή µνήµης όπου αποθηκεύεται η τιµή της µεταβλητής. Αντίθετα, το όνοµα µιας µεταβλητής αντικειµένου (πχ String) είναι µια ετικέτα για µια περιοχή µνήµης που βρίσκεται η διεύθυνση του στιγµιότυπου Πέρασµα παραµέτρων Στη Java τo πέρασµα παραµέτρων (parameter passing) γίνεται µε τιµή (call by value). Ωστόσο, ο µηχανισµός λειτουργεί διαφορετικά, ανάλογα µε το αν η παράµετρος είναι µια απλή µεταβλητή κάποιου από public static void main(string args[]){ public class ParameterPassing { τους βασικούς τύπους δεδοµένων, ή αν είναι double a = 9.5; //βασικός τύπος δεδοµένων αντικείµενο. int b[] = {4, 2, 7; //πίνακας Για τους βασικούς τύπους δεδοµένων System.out.println(a + " " + b[0]); //9.5 4 (int, float, double, κλπ), οι πραγµατικές και οι τυπικές παράµετροι είναι διαφο- pass2(a, b); //πραγµατικές παράµετροι είναι τα a, b ρετικές µεταβλητές και δεν µοιράζονται System.out.println(a + " " + b[0]); //9.5-4 τον ίδιο χώρο µνήµης. Κατά την κλήση της µεθόδου, εκχωρείται µνήµη για τις τυπικές παραµέτρους, η τιµή των πραγµατικών // τυπικές παράµετροι είναι τα x,y ανατίθεται στην αντίστοιχη τυπική παρά- private static void pass2(double x, int[] y) { µετρο. Κατά συνέπεια, ό,τι αλλαγές κι αν x = -x; γίνουν στις τιµές των τυπικών παραµέτρων στο εσωτερικό της µεθόδου δεν α- System.out.println(x + " " + y[0]); // y[0] = -y[0]; ντανακλώνται στις πραγµατικές παραµέτρους. Κατά την επιστροφή από την µέ- θοδο, ο χώρος των τυπικών παραµέτρων επιστρέφεται στον διαθέσιµο χώρο του Εικόνα 33 Πέρασµα απλής µεταβλητής και αντικειµένου συστήµατος. Εξηγήστε γιατί η µέθοδος swap στην Εικόνα 34 αποτυγχάνει να αντιµεταθέσει τις τιµές των πραγµατικών παρα- µέτρων. Όταν η παράµετρος είναι αντικείµενο (πχ πίνακας, συµβολοσειρά, ή άλλο αντικείµενο κλάσης που έχει ορίσει ο χρήστης) µεταβιβάζεται η αναφορά του. Πάλι δηµιουργείται αντίγραφο της αναφοράς, αλλά όχι αντίγραφο του αντικειµένου προς το οποίο δείχνει η αναφορά. Έτσι ε- ξοικονοµείται µνήµη και χρόνος, καθώς δεν γίνεται εκχώρηση / αποδέσµευση µνήµης, ούτε και αντιγραφή τι- µών για ολόκληρο το αντικείµενο. Εικόνα 34 Πέρασµα µε τιµή Για λόγους απλότητας και περιορισµού των παρενεργειών, η Java υποστηρίζει αποκλειστικά πέρασµα παραµέτρων µε τιµή 5. Άρα ο καλών µπορεί να τροφοδοτεί την καλούµενη µέθοδο µε τιµές που η µέθοδος θα χρησιµοποιεί στο εσωτερικό της για να διαµορφώνει τη συµπεριφορά της. Πώς όµως επιστρέφει µια µέθοδος τα αποτελέσµατα που υπολόγισε πίσω σε αυτόν που την κάλεσε, ειδικά όταν αυτά τα αποτελέσµατα είναι βασικού τύπου δεδοµένων; Αν απαιτείται να επιστραφεί ένα µόνο αποτέλεσµα, τα πράγµατα είναι εύκολα: δηλώνουµε στην επικεφαλίδα τον τύπο του αποτελέσµατος που θέλουµε να επιστραφεί και επιστρέφουµε την τιµή του µε µια εντολή return. Αν χρειάζεται να επιστρέψουµε πολλά αποτελέσµατα, και µε δεδοµένο ότι δεν υποστηρίζεται επιστροφή αποτελεσµάτων µέσω των παραµέτρων, το µόνο που µπορούµε να κάνουµε είναι να δηλώσουµε δηµόσιες µεταβλητές, οπότε επιτρέπεται η πρόσβαση και η αλλαγή τους από την µέθοδο (και από οπουδήποτε αλλού). Αυτό είναι µια αναγκαία, αλλά άσχηµη και επικίνδυνη πρακτική διότι δεν είναι εύκολα ορατές οι παρενέργειες που προκαλεί η µέθοδος στο περιβάλλον της. Μια εναλλακτική λύση είναι να «πακετάρουµε» τις τιµές που θέλουµε να επιστρέψουµε σε κάποιο αντικείµενο Σύνθεση... int a = 1, c = 3; swap (a, c); //κλήση... // παραµένουν a = 1 και c = 3 public static void swap(int x, int y) { int temp = x; x = y; y = temp; Σύνθεση (composition) είναι ένας µηχανισµός µοντελοποίησης όπου ορίζουµε µια κλάση µε συστατικά που είναι ορισµένα από άλλες κλάσεις. Για παράδειγµα, ένας Φοιτητής ορίζεται να έχει όνοµα που είναι ένα αντικείµενο String και ηµεροµηνίαεγγραφής που είναι µια Date, δηλαδή αντικείµενο µιας άλλης κλάσης (από τη βιβλιοθήκη java.util.date). 5 Σε άλλες γλώσσες προγραµµατισµού, ο προγραµµατιστής δηλώνει τον τρόπο περάσµατος παραµέτρων στη λίστα των παραµέτρων που βρίσκεται στην επικεφαλίδα της υπορουτίνας, πχ στη Visual Basic δηλώνει ByVal ή ByRef.

8 Σελίδα 26 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 11/3/2006 Μέχρι τώρα έχουµε δει αναδροµικές µεθόδους, δηλαδή µεθόδους που καλούν τον εαυτό τους υπό προϋποθέσεις (αν δεν υπάρχει κάποια προϋπόθεση, τότε η αναδροµικές κλήσεις θα συνεχιζόταν µέχρι να εξαντληθούν οι διαθέσιµη µνήµη του υπολογιστή). Ωστόσο, µπορούµε να ορίσουµε και αναδροµικές κλάσεις. είτε ένα παράδειγµα στην Εικόνα 35, όπου για κάθε άτοµο ορίζουµε διάφορες ιδιότητες, µεταξύ των οποίων και η µητέρα και ο πατέρας του, που είναι αντικείµενα άτοµο. Η δυνατότητα αναδροµικής σύνθεσης στις κλάσεις είναι πολύ χρήσιµη για να ορίζουµε «αλυσίδες» κόµβων που περιέχουν πληροφορία. Στην απλούστερη περίπτωση, κάθε κόµβος της αλυσίδας περιέχει κάποια πληροφορία και ένα σύνδεσµο προς τον επό- µενο κόµβο στην αλυσίδα. Περισσότερα γι αυτή την τεχνική στο µάθηµα επιλογής «Αλγόριθµοι & οµές εδοµένων» Κληρονοµικότητα class Person { String name; Person mother; Person father; Εικόνα 35 Αναδροµικές κλάσεις Κληρονοµικότητα (inheritance) είναι ένας µηχανισµός επαναχρησιµοποίησης που επιτρέπει σε νεότερες κλάσεις να επεκτείνουν υπάρχουσες κλάσεις, όσον αφορά τα δεδοµένα τους, όσο και τη συµπεριφορά τους. Η κληρονοµικότητα µπορεί να συνεχίζεται σε αρκετές γενιές. Οι κλάσεις απόγονοι (υποκλάσεις ή παράγωγες κλάσεις, subclasses ή derived classes) επιτρέπεται όχι µόνο να επεκτείνουν, αλλά και να τροποποιούν την υπάρχουσα συµπεριφορά των προγόνων τους (υπέρ-κλάσεις, super classes). Παράδειγµα: Τόσο οι προπτυχιακοί όσο και οι µεταπτυχιακοί φοιτητές µοιράζονται ορισµένες κοινές ιδιότητες, πχ ηµεροµηνία εγγραφής και λειτουργίες, πχ δηλώνουν µαθήµατα που πρέπει να περάσουν. Οι µεταπτυχιακοί ωστόσο έχουν την επιπρόσθετη βαθµό πτυχίου. Ορίζουµε µια κλάση «Φοιτητές» που έχει τις κοινές ιδιότητες, όπως ο- νοµατεπώνυµο, ηµεροµηνία εγγραφής, και µεθόδους δήλωσημαθήµατος, κλπ. Ορίζουµε τις κλάσεις «ΜεταπτυχιακόςΦοιτητής» και «ΠροπτυχιακόςΦοιτητής» να κληρονοµούν την κλάση «Φοιτητής» και να προσθέτουν τις ιδιότητες και τις µεθόδους που τους προσιδιάζουν και δεν είναι κοινές. Επίσης, µπορούν να επαναορίζουν την µέθοδο δήλωσημαθήµατος, υπερκαλύπτοντας τον ορισµό που έχει στην υπέρ-κλάση, καθώς οι µεταπτυχιακοί έχουν διαφορετική διαδικασία επιλογής µαθηµάτων από τους προπτυχιακούς. Απλή κληρονοµικότητα έχουµε όταν η υποκλάση βασίζεται Φοιτητής µόνον σε µια άλλη υπέρ-κλάση. Τέτοιου τύπου κληρονοµικότητα υποστηρίζει η Java µέσω της δεσµευµένης λέξης extends που συντάσσεται στην επικεφαλίδα της υποκλάσης και δηλώνει ΠροπτυχιακόςΦοιτητής ΜεταπτυχιακόςΦοιτητής το όνοµα της προγονικής κλάσης. Η απλή κληρονοµικότητα α- πεικονίζεται γραφικά ως ένα ανεστραµµένο δέντρο που στο πάνω µέρος του βρίσκεται η υπέρ-κλάση η οποία συνδέεται µε Υποψήφιος ιδάκτορας γραµµές µε τις υποκλάσεις της (δείτε Εικόνα 36). Μια υποκλάση µπορεί να (επανα)ορίζει µε διαφορετικό τύπο µια µεταβλητή στιγµιότυπου που είναι ήδη ορισµένη στην Εικόνα 36 Απεικόνιση κληρονοµικότητας υπέρ-κλάση της. Επίσης µια υποκλάση µπορεί να (επανα)ορίζει µια µέθοδο που είναι ήδη ορισµένη µε την ίδια ακριβώς υπογραφή στην υπέρ-κλάση της. Υποστήριξη κληρονοµικότητας από τη Java Για να αναφερθούµε στην προγονική κλάση όταν βρισκόµαστε στο σώµα της υποκλάσης, χρησιµοποιούµε τη λέξη super 6. Έχουµε δει τα προσδιοριστικά εµβέλειας public και private που επιτρέπουν / απαγορεύουν πρόσβαση έξω από την κλάση αντίστοιχα. Ενδιάµεσα, ένα όνοµα (µεταβλητή ή µέθοδος) δηλωµένο ως protected, είναι ορατό στις υποκλάσεις που κληρονοµούν την τρέχουσα κλάση και στις κλάσεις του ίδιου πακέτου στο οποίο είναι ορισµένο. Οι κατασκευαστές της υπέρ-κλάσης δεν κληρονοµούνται από τις υποκλάσεις της. Στη Java όλες οι κλάσεις κληρονοµούν άµεσα ή έµµεσα από την υπέρ-κλάση Object. Έτσι όταν θέλουµε να αναφερθούµε σε αντικείµενο του οποίου την κλάση δεν γνωρίζουµε δηλώνουµε την αναφορά του ως Object. είτε την ενότητα 2.16 Πολύφωτο για ένα παράδειγµα. Για να προσδιορίσουµε την κλάση ενός αντικείµενου που έχει χαρακτηριστεί ως Object, χρησιµοποιούµε τον τελεστή instanceof. Με το προσδιοριστικό final στην επικεφαλίδα µιας κλάσης απαγορεύουµε τη δηµιουργία υποκλάσεων που να κληρονοµούν από αυτή την κλάση. Έτσι δεν υπάρχει περίπτωση κάποιος να ορίσει κλάση που να κληρονοµεί την final και να αλλάζει την υλοποίηση κάποιων µεθόδων της ή να αποκτήσει προσπέλαση στα protected δεδοµένα / µεθόδους της (που µπορεί να τα έχει κληρονοµήσει από κάποια υπέρ-κλάση της). Ως final µπορεί να προσδιοριστεί και µια µέθοδος οπότε δεν µπορεί να οριστεί σε κάποια υποκλάση. Αν µια κλάση δηλωθεί ως public, τότε µπορεί να χρησιµοποιηθεί από οποιαδήποτε άλλη κλάση ακόµη και αν δεν ανήκουν στο ίδιο πακέτο (package). Υπενθυµίζεται ο κανόνας ότι µια public κλάση πρέπει να αποθηκεύεται σε οµώνυµο αρχείο µε την κατάληξη.java 7. Αν µια κλάση δεν είναι public, ονοµάζεται «φιλική» (friendly) και τότε µπορεί να χρησιµοποιηθεί µόνον από κάποια κλάση του ίδιου πακέτου. 6 Παράβαλε µε τη δεσµευµένη λέξη this µε την οποία αναφερόµαστε στο τρέχον αντικείµενο από το εσωτερικό της κλάσης του. 7 Στο ίδιο αρχείο µπορούν να συνυπάρχουν και άλλες κλάσεις αλλά αυτές δεν µπορούν να είναι public.

9 11/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 27 Με το προσδιοριστικό abstract στην επικεφαλίδα µιας κλάσης απαγορεύουµε τη δηµιουργία στιγµιότυπων της κλάσης. Και τότε τι την θέλουµε την κλάση, αφού δεν µπορούµε να κατασκευάσουµε αντικείµενά της; Οι abstract κλάσεις περιέχουν κάποιες κανονικές µεθόδους που περιλαµβάνουν κώδικα υλοποίησης και κάποιες abstract µεθόδους, που έχουν επικεφαλίδα, αλλά δεν περιέχουν κώδικα υλοποίησης. Υποκλάσεις που επεκτείνουν την abstract κλάση µπορούν να συµπληρώσουν την υλοποίηση των abstract µεθόδων της και βέβαια είναι δυνατόν να κατασκευαστούν στιγµιότυπα αυτών των υποκλάσεων. Γενικά χρησιµοποιούµε µια abstract κλάση για να οµαδοποιήσουµε κάποιες κοινές µεθόδους των υποκλάσεών της, οπότε αποφεύγουµε να επαναλαµβάνουµε τον κώδικα των κοινών µεθόδων σε καθεµιά υποκλάση. Κουίζ: γιατί είναι αντίφαση µια abstract µέθοδος να είναι και final; Γιατί µια κλάση δεν µπορεί να είναι abstract και static; Παράδειγµα: Ορίζουµε µια abstract υπέρ-κλάση Sxhma, αφού δεν έχει νόηµα να κατασκευάσουµε στιγµιότυπά της, επειδή είναι πολύ γενική και αφηρηµένη. Η Sxhma έχει την ιδιότητα Xroma, άρα οποιαδήποτε υποκλάση της, πχ Trigono, Kyklos, θα την κληρονοµεί και έτσι γλιτώνουµε από το να την ορίζουµε και να την ελέγχουµε σε κάθε υποκλάση. Στη Sxhma ορίζουµε και την abstract µέθοδο ypologiseemvadon(), που δεν έχει σώµα Trigono Polygono Sxhma Tetragono Kyklos Εικόνα 37 Γεωµετρικά σχήµατα µόνον επικεφαλίδα. Αυτό µας βολεύει γιατί δεν υπάρχει τρόπος (µαθηµατικός τύπος) που να υπολογίζει το εµβαδόν κάθε σχήµατος, όµως έχουµε καταφέρει να δεσµεύσουµε όλες τις υποκλάσεις να την υλοποιήσουν µε ακριβώς αυτό το όνοµα και υπογραφή (εννοείται ότι το σώµα θα διαφέρει για κάθε υποκλάση). Η κληρονοµικότητα είναι ένας µηχανισµός µοντελοποίησης, δηλαδή επιτρέπει να κατασκευάσουµε προγράµµατα που θα απεικονίζουν κατά το δυνατόν πιστά τις οντότητες του πραγµατικού κόσµου των οποίων τη λειτουργία προσο- µοιώνουν. Όταν προγραµµατίζουµε µε αντικειµενοστρεφή τρόπο και θέλουµε να επεκτείνουµε τις ιδιότητες ενός αντικειµένου µπορούµε είτε να προσθέσουµε νέες µεταβλητές στιγµιότυπου, ή να επεκτείνουµε την κλάση του αντικειµένου ορίζοντας µια υποκλάση της µε τις πρόσθετες ιδιότητες. Για να επιλέξουµε µπορούµε να σκεφτούµε ως εξής: Όταν η σχέση είναι κλάσης υποκλάσης, τη διατυπώνεις µε τη φράση "... είναι-ένα... " (is-a relation). Για παράδειγµα, ο άνθρωπος είναι ένα θηλαστικό, ή το αυτοκίνητο είναι ένα τετράτροχο που µε τη σειρά του είναι ένα όχηµα. ιαφορετικά, η φράση "... έχει-ένα... " (has-a ή part-whole relation) υποδηλώνει ότι θα πρέπει να προσθέσουµε µεταβλητές στιγµιότυπου (δες ενότητα 2.11). Για παράδειγµα, ο άνθρωπος έχει χέρια και πόδια, ή το αυτοκίνητο έχει κυβισµό, χρώµα, κλπ. Ας δούµε ένα απλό παράδειγµα. Θέλουµε να διαχειριστούµε διάφορες λειτουργίες ενός νοσοκοµείου και αρκετές από αυτές αφορούν γιατρούς και ασθενείς. Θα µπορούσαµε να υλοποιήσουµε δύο ανεξάρτητες κλάσεις µε τις απαιτούµενες ιδιότητες και µεθόδους, ωστόσο παρατηρούµε ότι γιατροί και ασθενείς µοιράζονται κοινά χαρακτηριστικά που τα υλοποιούµε δύο φορές. Για να το αποφύγουµε αυτό, φτιάχνουµε µια κλάση που υλοποιεί ό,τι αφορά ένα άτοµο, είτε είναι γιατρός, είτε ασθενής. Έπειτα φτιάχνουµε ξεχωριστές υποκλάσεις για γιατρούς και ασθενείς που κληρονοµούν τα κοινά χαρακτηριστικά των ατόµων και υλοποιούν τα ιδιαίτερα χαρακτηριστικά που τους αφορούν. Στην ενότητα 2.16 Εικόνα 38 ιάγραµµα κλάσεων UML που απεικονίζει την κληρονοµικότητα κλάσεων Γιατροί και ασθενείς (κληρονοµικότητα) υπάρχει µια υλοποίηση του παραδείγµατος. Στην Εικόνα 38 φαίνονται οι τρεις κλάσεις µε τις ιδιότητες και τις µεθόδους τους και η σχέση κληρονοµικότητας α- πεικονίζεται µε τα βέλη. Το διάγραµµα απεικονίζει τις κλάσεις ως κουτιά τα οποία συνδέονται µε βέλη που δείχνουν τη σχέση κληρονοµικότητας. Η εµβέλεια υποδηλώνεται µε # όταν είναι protected, µε + όταν είναι public και µε

10 Σελίδα 28 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 11/3/2006 όταν είναι private. Όταν ένα πρόγραµµα αποτελείται από πολλές κλάσεις που θέλουµε να τις οµαδοποιήσουµε για να µπορούν να α- νταλλάσσουν µηνύµατα, τις εντάσσουµε στο ίδιο πακέτο µε την εντολή package όνοµαπακέτου. Τα µεταγλωττισµένα αρχεία.class τοποθετούνται σε ένα φάκελο στο σηµείο που δείχνει η µεταβλητή συστήµατος CLASSPATH. Για να χρησιµοποιήσουµε κώδικα του πακέτου Χ από κάποια κλάση άλλου πακέτου Υ, δηλώνουµε στην αρχή της κλάσης import X.ΌνοµαΚλάσης ή γενικά import X.*; Όταν κατασκευάζουµε ένα µεγάλο πρόγραµµα, είναι πιθανόν να πρέπει να µοντελοποιήσουµε αρκετές οντότητες που θα συνδέονται µεταξύ τους µε σχέσεις κληρονοµικότητας. Γι αυτή την περίπτωση υπάρχουν εργαλεία που επιτρέπουν στον προγραµµατιστή να σχεδιάζει τις κλάσεις και τη σχέση τους σε µορφή διαγράµµατος κλάσης UML (Universal Modeling Language), όπως φαίνεται και στο σχήµα και έπειτα παράγουν αυτόµατα τον σκελετό των κλάσεων σε κάποια γλώσσα προγραµµατισµού. Ένα τέτοιο εργαλείο που παράγει κώδικα Java είναι το Poseidon for UML µια ελεύθερη έκδοσή του µπορείτε να βρείτε στο (community edition for Windows, έκδοση 3.0.1, ~24Mb). Ο προγραµµατιστής έπειτα αρκεί να «γεµίσει» τα σώµατα των µεθόδων µε κώδικα. Τόσο το σχήµα στην Εικόνα 38, όσο και ο σκελετός του προγράµµατος της ενότητας 2.16 Γιατροί και ασθενείς (κληρονοµικότητα) προήλθαν από το εργαλείο Poseidon. Ένα αντίστοιχο εργαλείο είναι και το Rational Rose της ΙΒΜ. Η κληρονοµικότητα πέρα από την αναλογία της µε αντικείµενα και καταστάσεις του πραγµατικού κόσµου, µας χρησι- µεύει για: να αποφεύγουµε τη συγγραφή του ίδιου κώδικα, αφού ο κοινό κώδικας συγκεντρώνεται στην υπέρ-κλάση και οι υποκλάσεις τον κληρονοµούν από εκείνη, και να ορίζουµε ένα κοινό «πρωτόκολλο» σε ένα σύνολο κλάσεων, όταν θέλουµε όλες οι υποκλάσεις να «απαντούν» µε ένα κοινό τρόπο για (κάποιες από) τις λειτουργίες τους. Εικόνα 39 ιάγραµµα κλάσεων UML για φοιτητές Στην Εικόνα 39 βλέπουµε άλλο ένα παράδειγµα κληρονοµικότητας. Η κλάση Φοιτητής είναι δηλωµένη abstract, άρα δεν επιτρέπεται να κατασκευαστούν στιγµιότυπά της. Η χρησιµότητά της είναι ότι κληρονοµείται από τις παράγωγες κλάσεις Προπτυχιακός και Μεταπτυχιακός. Επιπλέον, ένας Υποψήφιος ιδάκτορας είναιένας Μεταπτυχιακός. Στο διάγραµµα πρόκειται να προστεθούν όλες οι µέθοδοι στις οποίες «απαντούν» οι κλάσεις. Πολλαπλή κληρονοµικότητα έχουµε όταν µια κλάση κληρονοµεί ή επεκτείνει πολλές. Η πολλαπλή κληρονοµικότητα παρέχει µεγαλύτερες δυνατότητες µοντελοποίησης, αλλά είναι πιο δύσχρηστη και «επικίνδυνη». Η γλώσσα C++ υποστηρίζει άµεσα πολλαπλή κληρονοµικότητα. Στη Java η πολλαπλή κληρονοµικότητα υλοποιείται έµµεσα ορίζοντας ότι µια κλάση υλοποιεί µία ή περισσότερες διεπαφές (interface 8 ). 8 εν έχει καµία σχέση µε τη γραφική διεπαφή χρήστη (graphical user interface).

11 11/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 29 Μια διεπαφή στη Java είναι ο σκελετός µιας κλάσης που εισάγεται µε τη δεσµευµένη λέξη interface, αντί της class, και περιλαµβάνει δηλώσεις σταθερών ή επικεφαλίδες µεθόδων χωρίς το σώµα τους, δηλαδή την υλοποίησή τους. Μια κλάση που υλοποιεί τη διεπαφή έχει στην επικεφαλίδα της τη δεσµευµένη λέξη implements και περιλαµβάνει τις επικεφαλίδες των µεθόδων µαζί µε τον κώδικα που υ- λοποιεί τη λειτουργικότητά τους. Ουσιαστικά µια διεπαφή «δεσµεύει» ο- νόµατα για τις µεθόδους και τους τύπους των παραµέτρων τους, έτσι ώ- στε κάθε κλάση που επεκτείνει τη διεπαφή να υποχρεώνεται να ακολουθήσει τις προδιαγραφές αυτές. Ενώ µια κλάση µπορεί να επεκτείνει (extends) µόνον µία άλλη υπέρ-κλάση (απλή κληρονοµικότητα), είναι δυνατόν να υλοποιεί (implements) περισσότερες από µία διεπαφές (πολλαπλή κληρονοµικότητα). Το συντακτικό για τον ορισµό µιας κλάσης της Java φαίνεται στην Εικόνα 40. Τα προσδιοριστικά καθορίζουν αν η κλάση είναι public, final ή abstract. Προσέξτε το σταυρό στην ενότητα implements που δηλώνει ένα ή περισσότερα ονό- µατα διεπαφής. Μια συνηθισµένη χρήση των διεπαφών είναι να ορίζουν σταθερές, όπως φαίνεται στην Εικόνα 41. Μια άλλη κλάση για να χρησιµοποιήσει τις σταθερές απλώς χρειάζεται να δηλώσει στην επικεφαλίδα ότι υλοποιεί (implements) τις διεπαφές Ασκήσεις Α25. Φτιάξτε κλάση που διαχειρίζεται σηµεία στο επίπεδο, δηλαδή σηµεία που έχουν µια τετµηµένη x και µια τεταγµένη y. Φτιάξτε µέθοδο distance που να υπολογίζει την απόσταση δύο σηµείων. Φτιάξτε άλλη µέθοδο a.isfurther(b) που βρίσκει αν το a απέχει από την αρχή των αξόνων περισσότερο από το b (Υπόδειξη: µπορεί να χρησι- µοποιεί την προηγούµενη). Τέλος, µια µέθοδο που θα ελέγχει αν τρία σηµεία είναι στην ίδια ευθεία. Φτιάξτε µια άλλη κλάση που ορίζει διανύσµατα ως διατεταγµένα ζεύγη σηµείων. Μια µέθοδος των διανυσµάτων να υπολογίζει το µήκος τους. Κατασκευάστε µερικά διανύσµατα και βρείτε το πιο µεγάλο. Επεκτείνετε την κλάση, έτσι ώστε τα σηµεία να είναι στον τρισδιάστατο χώρο. [προσδιοριστικάκλάσης] class όνοµακλάσης [extends όνοµαυπερκλάσης] [implements όνοµα ιεπαφής + ] { σώµακλάσης Εικόνα 40 Η σύνταξη µιας επικεφαλίδας κλάσης public interface MyConstants { // Μεγέθη για πουκάµισα byte SIZE_SMALL = 0; // όλες οι δηλώσεις σε byte SIZE_MEDIUM = 1; // interface είναι εξ byte SIZE_LARGE = 2; // ορισµού byte SIZE_X_LARGE = 3; // public και final byte SIZE_XX_LARGE = 4; // Τύποι πουκάµισων byte MONOXROMO = 0; // σταθερά byte EMPRIME = 1; byte RIGE = 2; public class Poykamisa implements MyConstants { byte megethos = SIZE_MEDIUM; // ιδιότητες byte typos = MONOXROMO; public Poykamisa(byte megethos, byte typos) { if ((megethos >= SIZE_SMALL) && (megethos <= SIZE_XX_LARGE)) this.megethos = megethos; Εικόνα 41 Ορισµός και χρήση διεπαφής Α26. Φτιάξτε κλάση που περιέχει το ονοµατεπώνυµο ενός φοιτητή, το εξάµηνο στο οποίο βρίσκεται και τους βαθµούς πέντε µαθηµάτων του. Όλες οι ιδιότητες της κλάσης θα είναι ιδιωτικές. Φτιάξτε µεθόδους ανάγνωσης και εγγραφής για όλες τις ιδιότητες. Ειδικά για τους βαθµούς, θα υλοποιήσετε µέθοδο float getbathmos(int armath) και void set- Bathmos(int armath, float fbathmos). Τέλος, κατασκευάστε µερικούς φοιτητές και χρησιµοποιήστε όλες τις µεθόδους τουλάχιστον µία φορά. Με βάση τους φοιτητές που έχετε κατασκευάσει υπολογίστε το µέσο όρο τους σε όλα τα µαθήµατα στα οποία έ- χουν πάρει βαθµό. Υπόδειξη: εάν ένας µαθητής δεν έχει πάρει βαθµό σε κάποιο από τα πέντε µαθήµατα, βάλτε του µια «αδύνατη» τιµή, πχ (-1). Υλοποιήστε κλάση για τους µεταπτυχιακούς φοιτητές που κληρονοµεί από την αρχική κλάση. Α27. Φτιάξτε κλάσεις για δισδιάστατα γεωµετρικά αντικείµενα µε µεθόδους που υπολογίζουν την περίµετρο και το εµβαδόν τους. Για παράδειγµα, (α) τρίγωνο µε πλευρές α, β, γ, (β) κύκλο ακτίνας ρ, (γ) παραλληλόγραµµο πλευρών α, β, (δ) τραπέζιο µε παράλληλες πλευρές α, β και ύψος υ. Έπειτα φτιάξτε πρόγραµµα που θα δηµιουργεί αντικείµενα συγκεκριµένου τύπου και ιδιοτήτων και θα τυπώνει πληροφορίες γι αυτά. Επεκτείνετε το πρόγραµµα προσθέτοντας κι άλλες κλάσεις για τα γεωµετρικά αντικείµενα (ε) έλλειψη και (στ) τοµέα κύκλου. Τροποποιήστε τον κατασκευαστή του τριγώνου έτσι ώστε να ελέγχει ότι κάθε πλευρά του είναι µικρότερη από το άθροισµα των άλλων δύο και µεγαλύτερη από τη διαφορά τους (αλλιώς τι σόι τρίγωνο είναι αυτό). Επεκτείνετε την κλάση του τριγώνου µε δυαδικές µεθόδους einaiorthogonio, einaiskalino, einaiisoskeles, einaiisoplevro. Α28. Φτιάξτε κλάσεις για στερεά αντικείµενα (α) παραλληλεπίπεδο (µε πρόσθετο κατασκευαστή για κύβο), (β) σφαίρα, (γ) κώνος, (δ) κύλινδρος. Για κάθε στερεό θα συµπεριλάβετε στην κλάση του µεθόδους που υπολογίζουν τον όγκο και την επιφάνειά του. Μια άλλη κλάση θα δίνει επιλογή στο χρήστη για το αντικείµενο που θέλει να κατασκευάσει και στο τέλος

12 Σελίδα 30 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 11/3/2006 θα τυπώνει το συνολικό όγκο των αντικειµένων που κατασκευάστηκαν. Επεκτείνετε το πρόγραµµα προσθέτοντας κλάσεις για το στερεό αντικείµενο (ε) πυραµίδα. Επίσης, το πρόγραµµα θα πρέπει να σταµατάει όταν η συνολική επιφάνεια των στερεών που κατασκευάστηκαν υπερβεί τις 10 τετραγωνικές µονάδες. Α29. Φτιάξτε κλάση για το αντικείµενο ώρα χρησιµοποιώντας ιδιωτικά δεδοµένα. Υλοποιήστε τις συνηθισµένες µεθόδους (κατασκευαστές, getter, setter). Επίσης, φτιάξτε µέθοδο tostring που θα επιστρέφει την ώρα ως 23:26:43 ή 11:26:43µµ ανάλογα µε διακόπτη (παράµετρο). Επίσης, υλοποιήστε µέθοδο που βρίσκει τη διαφορά ανάµεσα σε δύο ώ- ρες. Επεκτείνετε το πρόγραµµα έτσι ώστε να διαβάζει τις ώρες προσέλευσης και αποχώρησης ενός εργαζοµένου και όταν τερµατίζει να τυπώνει τη συνολική διάρκεια που εργάστηκε, και πόσες φορές προσήλθε στην εργασία του. [Υπάρχει πιθανότητα ο εργαζόµενος να ξεκινήσει να δουλεύει στις 23:00:00 και να βγει στις 07:00:00.] Α30. Φτιάξτε κλάση για ηµεροµηνίες χρησιµοποιώντας ιδιωτικά δεδοµένα. Οι ιδιότητες θα πρέπει να ελέγχονται για εγκυρότητα. Υλοποιήστε µεθόδους για εκτύπωση και µέθοδο που επιστρέφει τη διαφορά σε ηµέρες ανάµεσα σε δύο ηµεροµηνίες (θα πρέπει, βέβαια να λαβαίνετε υπόψη πόσες ηµέρες έχει ο κάθε µήνας. Με δεδοµένο ότι πχ η 3 η Απριλίου 2003 είναι Πέµπτη, θα φτιάξετε µέθοδο που θα υπολογίζει την ηµέρα της εβδοµάδας για την ηµεροµηνία. Θα χρειαστεί να φτιάξετε ιδιωτικές µεθόδους που θα εντοπίζουν δίσεκτα έτη και πόσες ηµέρες µεσολαβούν από την αρχή του έτους ως µια ηµεροµηνία και από µια ηµεροµηνία ως το τέλος του έτους. Μετρήστε πώς κατανέµονται οι Πρωτοχρονιές τον εικοστό πρώτο αιώνα (πόσες είναι ευτέρες, πόσες Τρίτες, κοκ). Αν κάποιος γεννήθηκε την 21 η Οκτωβρίου 1999, ποια ηµεροµηνία θα έχει ζήσει ηµέρες; Α31. Ένα κατάστηµα εµπορεύεται πουκάµισα διαφόρων τύπων, συγκεκριµένων χρωµάτων, µεγεθών και τιµών αγοράς και πώλησης. Φτιάξτε κλάση που να αποθηκεύει τα χαρακτηριστικά και να υλοποιεί τις βασικές λειτουργίες πάνω στα πουκάµισα. Έπειτα φτιάξτε πρόγραµµα που θα παραλαµβάνει πουκάµισα στο κατάστηµα (ισοδυναµεί µε δηµιουργία α- ντικειµένου) και θα πουλάει µερικά από αυτά (ισοδυναµεί µε καταστροφή αντικειµένου). Με την παραλαβή θα αυξάνεται το χρέος προς τον προµηθευτή και µε την πώληση θα αυξάνεται ο τζίρος. Τροποποιήστε το παραπάνω πρόγραµµα µε δεδοµένο ότι το κατάστηµα πουλάει τα πουκάµισα µε ποσοστό κέρδους 17%. Επίσης, υποθέστε ότι ο επιχειρηµατίας έχει διαθέσιµο κεφάλαιο για να αγοράζει στοκ. Κάντε το πρόγραµµα να τερµατίζει όταν το κατάστηµα πουλήσει τόσα πουκάµισα ώστε το κέρδος να υπερβεί τα 200. Α32. Όπως θα διαπιστώσατε στην άσκηση Α17, αν προσπαθήσετε να υπολογίσετε το ν παραγοντικό χρησι- µοποιώντας ακεραίους int, θα φτάσετε ως ν=16. Με µεγάλους ακεραίους long, ως ν=39. Για µεγαλύτερα ν, χρησιµοποιήστε την κλάση περιτυλίγ- µατος BigInteger. Τέτοιοι ακέραιοι είναι αντικείµενα κι όχι απλές µεταβλητές. Φτιάξτε πρόγραµµα που να υπολογίζει το ν παραγοντικό όλων των αριθµών µέχρι το Α33. Φτιάξτε πρόγραµµα που να περιλαµβάνει µεθόδους που συγκρίνουν Εικόνα 42 Χρήση κλάσης περιτυλίγµατος αντικείµενα της κλάσης Κλάσµα. Υ- πενθυµίζεται ότι το κλάσµα έχει δύο ιδιότητες και ότι ο παρονοµαστής του αποκλείεται να γίνει 0. Εκτός από τους βασικούς τελεστές +, -, *, /, θα υλοποιήσετε τους σχεσιακούς τελεστές µε τις µεθόδους isequal, isgreater και µετά θα χρησιµοποιήσετε αυτές τις δύο για να υλοποιήσετε τις isdifferent, isgreaterthanorequal, islessthanorequal, islessthan. Στη main θα πρέπει να καλέσετε τουλάχιστον µία φορά όλες τις µεθόδους που φτιάξατε. Αριθµητική κλασµατικών αριθµών. υλοποιήστε απλοποίηση, σχεσιακούς τελεστές σύγκρισης. Για µια (µερική) υλοποίηση δείτε την ενότητα 2.15 Κλασµατικοί αριθµοί. Φτιάξτε αριθµοµηχανή που λειτουργεί επί κλασµάτων. Το πρόγραµµα θα διαχειρίζεται έναν αριθµό πχ 5 κλασµάτων. Κατά τη βούληση του χρήστη θα µπορεί να θέτει (αλλάζει) τους όρους τους, να εκτελεί τις βασικές αριθµητικές και λογικές πράξεις, να τα τυπώνει και ό,τι άλλο εσείς κρίνετε χρήσιµο για µια αριθµοµηχανή. Α34. Φτιάξτε κλάση ΤραπεζικόςΛογαριασµός και υλοποιήστε τις απαραίτητες µεθόδους που θα τον πιστώνουν και θα τον χρεώνουν παίρνοντας όλες τις απαραίτητες προφυλάξεις. Φτιάξτε τρεις λογαριασµούς και έναν απλό διερµηνευτή που θα δέχεται εντολές για ανάληψη / κατάθεση σε αυτούς. Α35. Φτιάξτε κλάση ΑΤΜ (Αυτόµατη Ταµειολογιστική Μηχανή) µε την οποία κάνουν τραπεζικές κινήσεις οι συναλλασσό- µενοι. Για την εκτέλεση των κινήσεων χρησιµοποιήστε τις µεθόδους της κλάσης ΤραπεζικόςΛογαριασµός. ηµιουργήστε δύο ΑΤΜ. Α36. Άλγεβρα συνόλων. Υλοποιήστε κατασκευαστές συνόλων και τις βασικές λειτουργίες: ανήκει, υποσύνολο, τοµή, ένωpublic static BigInteger factorial(long n) { BigInteger product = new BigInteger("1"); BigInteger increment = new BigInteger("1"); for (long i = 1L; i <= n; i++) { product = product.multiply(increment); increment = increment.add(biginteger.one); return product; public static void main(string[] args) { BigInteger t = new BigInteger("0"); for(long i = 1L; i <= 1000L; i++) { t = factorial(i); System.out.println("fac(" + i + ")=" + t.tostring());

13 11/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 31 ση, διαφορά. Αριθµοµηχανή συνόλων. Φτιάξτε πρόγραµµα που θα διαχειρίζεται σύνολα: θα επιτρέπει την προσθήκη / διαγραφή στοιχείων, την εκτέλεση πράξεων επί αυτών και την εκτύπωση αποτελεσµάτων. Α37. Φτιάξτε κλάσεις που να αντικατοπτρίζουν το παρακάτω σενάριο: Ένα όχηµα έχει έναν κινητήρα και µπορεί να είναι αυτοκίνητο ή µοτοσικλέτα. Ο κινητήρας καίει κανονική ή αµόλυβδη βενζίνη και συγκεκριµένο κυβισµό και ιπποδύναµη. Τα αυτοκίνητα έχουν τέσσερις τροχούς, ενώ οι µοτοσικλέτες δύο. Για κάθε τροχό γνωρίζουµε τη διάµετρο και την πίεση στην οποία είναι φουσκωµένος. Οι λειτουργίες που µπορεί να εκτελέσουµε στο όχηµα είναι: άναµµα / σβήσιµο της µηχανής, αλλαγή τροχού, έλεγχος και φούσκωµα τροχού. Α38. Ένας κερµατοδέκτης δέχεται κέρµατα 1 και 2 ευρώ, καθώς επίσης και 50, 20, 10, 5, 2, 1 λεπτών. Φτιάξτε µεθόδους που εισάγουν κέρµατα στον κερµατοδέκτη, τυπώνουν το ποσό που έχει µέσα. Επίσης, φτιάξτε µέθοδο που επιστρέφει συγκεκριµένο ποσόν µε τον ελάχιστο αριθµό κερµάτων. Εάν αυτό δεν γίνεται (εξαιτίας έλλειψης συγκεκριµένων κερµάτων), προσπαθεί να επιστρέψει το ποσόν µε τα κέρµατα που είναι διαθέσιµα στις θήκες του, αλλά πάλι φροντίζει να δώσει ελάχιστα κέρµατα και ζητάει συγγνώµη που έδωσε πολλά «ψιλά». Αν δεν µπορεί να επιστρέψει το συγκεκριµένο ποσό, ζητάει συγγνώµη και δηλώνει αδυναµία. Α39. Σχεδιάστε κλάση «Εργαζόµενος» που περιέχει ατοµικά στοιχεία και δύο υποκλάσεις (derived) «Ωροµίσθιος» και «Μισθωτός» που προσθέτουν τα µισθολογικά στοιχεία του εργαζοµένου. 2 2 x + y Α40. Αριθµητική µιγαδικών αριθµών. Εκτός από τις τέσσερις βασικές αλγεβρικές πράξεις, υλοποιήστε µέτρο. Για µια υλοποίηση που περιλαµβάνει και διεπαφή ρυθµού χαρακτήρων, δείτε την ενότητα 2.17 Μιγαδικοί και διερµηνευτής. Α41. Η κλάση Nomisma αναπαριστά τιµές νοµισµάτων, όπως το ευρώ και το δολάριο. Για κάθε νόµισµα θα υπάρχει (α) το διεθνές τριψήφιο σύµβολό του, πχ EUR ή USD, (β) το πρόσηµό του, + ή -, (γ) η ακέραια τιµή του, πχ 3 ή 142, και (δ) τα εκατοστά του 9, πχ 33 ή 99. Φτιάξτε κατασκευαστή Nomisma("EUR", '+', 3, 33) ή Nomisma("USD", '-', 142, 99) που να δηµιουργεί «νόµιµα» νοµίσµατα, εκτυπωτικό tostring που τυπώνει EUR+3.33 ή USD και δύο µεθόδους που να προσθέτουν και να αφαιρούν νοµίσµατα. Επίσης φτιάξτε ένα κατασκευαστή ακόµη που θα "αναγνωρίζει" τιµές νοµισµάτων όπως στα παραπάνω παραδείγµατα. Φτιάξτε πρόγραµµα που θα υπολογίζει την συνολική αξία σε ευρώ των νοµισµατικών τιµών που έχουν δηµιουργηθεί. Επιτρέπουµε νοµίσµατα σε EUR, USD, GBP. Για τα δύο τελευταία τηρούµε την ισοτιµία τους µε το ευρώ. Μετά από πολύµηνη χρήση, διαπιστώνετε ότι στα αντικείµενα της κλάσης Nomisma εκτελούνται πολύ συχνά οι µέθοδοι της πρόσθεσης και της αφαίρεσης, οπότε για λόγους επιδόσεων σκεφτόσαστε να αλλάξετε την αναπαράσταση του αριθµητικού µέρους και του πρόσηµου. Αντί για ένα χαρακτήρα, έναν ακέραιο και ένα µικρό ακέραιο (byte) θα χρησιµοποιήσετε έναν µεγάλο (προσηµασµένο) ακέραιο long. Έτσι ο 1.33 αποθηκεύεται ως 133 και ο ως Αλλάξτε την υλοποίηση της κλάσης, χωρίς ωστόσο να πειράξετε στο παραµικρό τις δηµόσιες µεθόδους, έτσι ώστε να υπάρχει συµβατότητα µε τα προγράµµατα που ήδη χρησιµοποιούν την κλάση Nomisma Υλοποίηση κλάσης λάµπα σε Java package lampa; public class Light { // instance variable /* value ranges from * 0 means the light is off, 1 means the light is fully on * some value in between means light operates in reduced capacity */ private float lightstatus; // constructors public Light() { lightstatus = (float) 0; System.out.println("A new light was created turned off."); public Light(float initialstatus) { lightstatus = minimum(maximum(initialstatus, (float) 0), (float) 1); System.out.println("A new light was created with initial status " + lightstatus + "."); // public methods public void on() { // turns the light on to full brightness lightstatus = (float) 1; System.out.println("The light was turned on."); 9 ιερευνήστε γιατί δεν είναι καλή ιδέα να αναπαραστήσουµε την τιµή του νοµίσµατος, πχ 3.33 µε έναν float ή ακόµα και µε double πραγµατικό αριθµό; Σε µερικές γλώσσες, όπως στην «αρχαία» γλώσσα προγραµµατισµού Cobol υπήρχε η αναπαράσταση αριθµών BCD (Binary coded Decimal) βρείτε πώς λειτουργεί και γιατί χρησιµοποιείται παρόλο που είναι «σπάταλη».

14 Σελίδα 32 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 11/3/2006 public void off() { // turns the light off to complete darkness lightstatus = (float) 0; System.out.println("The light was turned off."); public void brighten() { // turns the light a little brighter lightstatus = minimum(1, (lightstatus + (float) 0.1)); System.out.println("The light became brighter."); public void dim() { // turns the light a little dimmer lightstatus = maximum(0, (lightstatus - (float) 0.1)); System.out.println("The light became dimmer."); // private methods private float minimum(float x, float y) { //returns the lesser of two floating numbers return (x < y)?x:y; private float maximum(float x, float y) { //returns the bigger of two floating numbers return (x > y)?x:y; //end class 2.15 Κλασµατικοί αριθµοί και συλλογή απορριµάτων package klasma; public class Klasma { //µεταβλητή κλάσης private static int count = 0; //µετράει πόσα κλάσµατα υπάρχουν //µεταβλητές στιγµιοτύπων private int arithmitis; // ο αριθµητής του κλάσµατος private int paronomastis; // ο παρονοµαστής του κλάσµατος //κατασκευαστές & καταστροφέας public Klasma() { // ο πιο απλός κατασκευαστής arithmitis = 0; paronomastis = 1; count ++; System.out.println("Πλήθος " + count); public Klasma(int arithmitis, int paronomastis) { this.arithmitis = arithmitis; // το this χρειαζεται για να ξερει σε οτι... this.paronomastis = ((paronomastis==0)?1:paronomastis); // αναφεροµαστε... count ++; // στην ιδιότητα και όχι στην παράµετρο System.out.println("Πλήθος " + count); public Klasma(int timh) { this(timh, 1); //χρησιµοποιεί τον προηγούµενο κατασκευαστή public void finalize() { // να και ο καταστροφέας count --; System.out.println("Πλήθος " + count); //µέθοδοι ανάκλησης (get) και τοποθέτησης (set) public int getarithmitis() { return(arithmitis); public int getparonomastis() { return(paronomastis);

15 11/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 33 public void setarithmitis(int arithmitis) { this.arithmitis=arithmitis; public void setparonomastis(int paronomastis) { if (paronomastis!= 0) this.paronomastis=paronomastis; // αν πας να βάλεις παρονοµαστή το 0, αφήνει τον παλιό παρονοµαστή //άλλες µέθοδοι public float compute() { // το cast µε το float είναι απαραίτητο, γιατί... return ((float) arithmitis) / paronomastis; // αλλιώς κάνει ακέραια διαίρεση public String tostring() { return arithmitis + "/" + paronomastis; public void antistrefo() { // αντιστρέφει τυς όρους του κλάσµατος if (arithmitis!= 0) { int temp = paronomastis; paronomastis = arithmitis; arithmitis = temp; // αν ο αριθµητής είναι 0, το κλάσµα παραµένει ως έχει public void aplopoio() { // απλοποιεί το κλάσµα int mkdklasmatos = mkd(arithmitis, paronomastis); arithmitis = arithmitis / mkdklasmatos; paronomastis = paronomastis / mkdklasmatos; //ιδιωτικές µέθοδοι private static int mkd (int m, int n) { while (n!=0 && m!=0) if (m > n) m -=n; else n -=m; return Math.max(m, n); //end class package klasma; public class KlasmaAlgebra { //όλες οι µέθοδοι επιστρέφουν νέο κλάσµα που έχει το αποτέλεσµα public static Klasma antistrefo(klasma k ) { // δεν πειράζει το αρχικό κλάσµα - δηµιουργεί άλλο που ειναι αντεστραµµένο return new Klasma(k.getParonomastis(), k.getarithmitis()); public static Klasma prostheto(klasma k1, Klasma k2) { Klasma apot = new Klasma(); //προσωρινή µεταβλητή αντικειµένου apot.setparonomastis(k1.getparonomastis() * k2.getparonomastis()); apot.setarithmitis(k1.getarithmitis() * k2.getparonomastis() + k2.getarithmitis() * k1.getparonomastis() ); return apot; public static Klasma afairo(klasma k1, Klasma k2) { Klasma apot = new Klasma(k1.getArithmitis() * k2.getparonomastis() - k2.getarithmitis() * k1.getparonomastis(), k1.getparonomastis() * k2.getparonomastis() ); return apot; public static Klasma pollaplasiazo(klasma k1, Klasma k2) { return new Klasma(k1.getArithmitis() * k2.getarithmitis(), k1.getparonomastis() * k2.getparonomastis() ); public static Klasma diairo(klasma k1, Klasma k2) { if (k2.getarithmitis() == 0) return new Klasma(); else return new Klasma(k1.getArithmitis() * k2.getparonomastis(), k1.getparonomastis() * k2.getarithmitis() ); //end class

16 Σελίδα 34 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 11/3/2006 package klasma; public class KlasmaDemo { public static void main(string[] args) { Klasma r = new Klasma(5, 7); System.out.println("Arithmitis=" + r.getarithmitis()+ " Paronomastis=" + r.getparonomastis() + " Timh=" + r.compute() ); r.setarithmitis(3); r.setparonomastis(4); System.out.println("To idio klasma meta apo allagh synteleston " + r.tostring()); printlines(2); Klasma s = new Klasma(1, 2); System.out.println("Ena allo klasma " + s); // δεν χρειάζεται να βάλω.tostring() System.out.println("To antistrofo toy einai " + KlasmaAlgebra.antistrefo(s)); // η παραπάνω εντολή έφτιαξε ένα (ανώνυµο) κλάσµα που δεν είναι προσπελάσιµο System.gc(); // τώρα καταστρέφεται αυτό το κλάσµα printlines(2); Klasma t = KlasmaAlgebra.prostheto(r, s); System.out.println("Prosthesi " + r + " syn " + s + " kanei " + t); t.aplopoio(); System.out.println(" me aplopoiisi " + t); printlines(2); System.out.println("Afairesi " + r + " meion " + s + " kanei " + KlasmaAlgebra.afairo(r, s)); System.exit(0); //end main private static void printlines(int n){ for (int i=1; i<=n; i++) System.out.println(); //end class 2.16 Πολύφωτο Παραλλαγή της λάµπας όπως έχει υλοποιηθεί στην ενότητα Η δεύτερη κλάση κατασκευάζει και διαχειρίζεται πίνακα από αντικείµενα µέσω ενός απλού διερµηνευτή διαταγών. package polifoto; public class Lampa { private final boolean ANAMMENH = true; //σταθερες της κλασης private final boolean SBHSMENH = false; private boolean katastasi; //ιδιοτητα των αντικειµενων Λαµπα public Lampa() { //κατασκευαστης: φτιαχνει µια νεα σβηστη λαµπα katastasi = SBHSMENH; System.out.println("Κατασκευάστηκε µια νέα λάµπα"); public boolean getkatastasi() { return katastasi; //επιστρεφει κατασταση λαµπας γιατι ειναι ιδιωτικη public void anapse() { //αναβει τη λαµπα katastasi = ANAMMENH; System.out.println("Αναψε µια λάµπα"); public void sbhse() { //σβηνει τη λαµπα katastasi = SBHSMENH; System.out.println("Εσβησε µια λάµπα"); package polifoto; import javax.swing.*;

17 11/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 35 public class Polifoto { public static void main(string[] args) { Object[] fotistiko; //το φωτιστικο ειναι ενας πινακας µε στοιχεια αντικειµενα String slampes = JOptionPane.showInputDialog("Πόσες λάµπες έχει το φωτιστικό;"); int ilampes = Integer.parseInt(sLampes); fotistiko = new Object[iLampes]; //κατασκευαζεται πινακας µε µεγεθος που του δωσαµε for(int i = 0; i < ilampes; i++) //εδω γεµιζει ο πινακας µε στοιχεια fotistiko[i] = new Lampa(); //καθε στοιχειο ειναι µια νεα λαµπα String sepilampa; int iepilampa; //επιλογη λαµπας String sepileit; char cepileit; //επιλογη λειτουργιας Lampa epilampa; //επιλεγµενη λαµπα πανω στην οποια θα γινει η λειτουργια while (true) { sepilampa = JOptionPane.showInputDialog("Επιλογή λάµπας 0 έως " + (ilampes - 1) + ". Αλλος αριθµός τερµατίζει το πρόγραµµα."); iepilampa = Integer.parseInt(sEpiLampa); if ((iepilampa < 0) (iepilampa>=ilampes)) break; epilampa = (Lampa) fotistiko[iepilampa]; sepileit = JOptionPane.showInputDialog( "Επιλογή λειτουργίας α=αναψε, σ=σβησε, κ=κατασταση"); cepileit = sepileit.charat(0); switch (cepileit) { case 'α': epilampa.anapse(); break; case 'σ': epilampa.sbhse(); break; case 'κ': JOptionPane.showMessageDialog(null,"Η λάµπα " + iepilampa + " είναι " + (epilampa.getkatastasi()?"αναµµένη":"σβηστή")); break; //end switch //end while for (int i = 0; i < fotistiko.length; i++) //τυπωνει την κατασταση ολων των λαµπων System.out.println("Η λαµπα " + i + " είναι " + (((Lampa) fotistiko[i]).getkatastasi()?"αναµµένη":"σβηστή")); System.exit(0); //end main //end class 2.17 Μιγαδικοί και διερµηνευτής package migadikoi; public class Migadikos { //ιδιότητες µιγαδικού public double pragmat; //πραγµατικό µέρος public double fantast; //φανταστικό µέρος //κατασκευαστές public Migadikos (){ //κατασκευάζει 0+0i public Migadikos (double pra, double fan){ pragmat = pra; fantast = fan; public void setmigadikos(double pra, double fan) { pragmat = pra; fantast = fan; public String tostring() { return pragmat + (fantast >= 0? "+" : "") + fantast + "i";

18 Σελίδα 36 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 11/3/2006 public double metro() { return Math.sqrt(pragmat * pragmat + fantast * fantast); public Migadikos syzyghs() { return new Migadikos(pragmat, - fantast); public void add(migadikos x, Migadikos y) { pragmat = x.pragmat + y.pragmat; fantast = x.fantast + y.fantast; public void subtract(migadikos x, Migadikos y) { pragmat = x.pragmat - y.pragmat; fantast = x.fantast - y.fantast; public void multiply(migadikos x, Migadikos y) { pragmat = x.pragmat * y.pragmat - x.fantast * y.fantast; fantast = x.pragmat * y.fantast + x.fantast * y.pragmat; public void divide(migadikos x, Migadikos y) { double temp = y.metro(); temp = temp * temp; Migadikos w = new Migadikos(); w.multiply(x, y.syzyghs()); pragmat = w.pragmat / temp; fantast = w.fantast / temp; //end class package migadikoi; import java.io.*; public class MigadikoiDemo { public static void main(string[] args) throws IOException { /* ιερµηνευτής διαταγών που διαβάζονται από την είσοδο και έχουν τη µορφή χαρακτήρων.*/ Migadikos x = new Migadikos(); Migadikos y = new Migadikos(); Migadikos z = new Migadikos(); BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in)); char cin; //χαρακτήρας διαταγής ενέργειας double pra; double fan; do{ //επαναλάµβανε cin = readchar(stdin); switch (cin){ case 'X': pra = readnumber("πραγµατικό µέρος ", stdin); fan = readnumber("φανταστικό µέρος ", stdin); x.setmigadikos(pra, fan); break; case 'Y': pra = readnumber("πραγµατικό µέρος ", stdin); fan = readnumber("φανταστικό µέρος ", stdin); y.setmigadikos(pra, fan); break; case 'Z': System.out.println("X = " + x.tostring() + "\n" + "Y = " + y.tostring() + "\n" + "Z = " + z.tostring()); break; case '+': z.add(x,y); z.tostring(); break; case '-': z.subtract(x, y); z.tostring(); break; case '*': z.multiply(x, y); z.tostring(); break; case '/': z.divide(x,y); z.tostring(); break; case 'T': break; //Πιάσε το για να µην το θεωρήσει άγνωστη πράξη

19 11/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 37 default : System.out.println(printOdhgies()); //end switch while (cin!='t'); //end do - µέχρι System.out.println("Το πρόγραµµα τερµατίστηκε."); System.exit(0); //end main private static char readchar (BufferedReader stdin) throws IOException { /* ιαβάζει µια συµβολοσειρά από την είσοδο και επιστρέφει τον πρώτο της χαρακτήρα στα κεφαλαία. Αν η συµβολοσειρά είναι κενή, επιστρέφει #. */ System.out.print("Ενέργεια >"); System.out.flush(); String strin = stdin.readline().touppercase(); if (strin.equals("")) return '#'; else return Character.toUpperCase(strIn.charAt(0)); //end readchar private static double readnumber(string meros, BufferedReader stdin) throws IOException { System.out.print("Αριθµός (" + meros + ") >"); System.out.flush(); return Double.parseDouble(stdIn.readLine()); private static String printodhgies() { return "Πρέπει να εισάγεις ένα από τα:\n" + " X δίνει τιµή στον πρώτο µιγαδικό\n" + " Y δίνει τιµή στο δεύτερο µιγαδικό\n" + " Ζ τυπώνει τιµές των Χ, Υ και του αποτελέσµατος της πράξης που προηγήθηκε\n" + " +,-,*,/ εκτελεί την αντίστοιχη πράξη\n" + " Τ τερµατίζει το πρόγραµµα."; //end printodhgies //end class MigadikoiDemo 2.18 Γιατροί και ασθενείς (κληρονοµικότητα) public class Person { protected String onoma; //ορατά εδώ και στις υποκλάσεις της Person protected String hmgen; // ηµεροµηνια γέννησης public Person(String onoma, String hmgen) { //κατασκευαστής this.onoma = onoma; this.hmgen = hmgen; public String getonoma() { return this.onoma; //µόνον για ανάγνωση public String gethmgen() { return this.hmgen; // δεν υπάρχουν set - οι ιδιότητες του ασθενούς απαγορεύεται να αλλάξουν public String tostring() { return "Ον/νυµο: " + this.onoma + "\n" + // το this δεν είναι απαραίτητο "Ηµ.γένν: " + this.hmgen; // απλώς τονίζει ότι πρόκειται // για µεταβλητές στιγµιότυπου public class Giatros extends Person { protected String eidikotita; public Giatros(String onoma, String hmgen, String eidikotita) { super(onoma, hmgen); // καλεί τον κατασκευαστή της υπερκλάσης this.eidikotita = eidikotita; public String geteidikotita() { return eidikotita; public String tostring() { return "ΓΙΑΤΡΟΣ" + "\n" + super.tostring() + "\n" + "Ειδικότ: " + this.eidikotita;

20 Σελίδα 38 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 11/3/2006 public class Asthenis extends Person { protected String tameio; protected String klinikh = ""; // συµπληρώνεται κατά την εισαγωγή protected boolean efyge = false; // γίνεται true όταν γίνει εξαγωγή public Asthenis(String onoma, String hmgen, String tameio) { super(onoma, hmgen); this.tameio = tameio; public String gettameio() { return this.tameio; public void settameio() { this.tameio = tameio; public String getklinikh() { return this.klinikh; public void eisagogiasthenoys(string klinikh) { if (this.efyge) System.out.println(" εν µπορει να γίνει εισαγωγή αφού ο ασθενής έχει φύγει"); else if (!this.klinikh.equals("")) System.out.println("Εχει εισαχθεί στην " + this.klinikh); else this.klinikh = klinikh; public void exagogiasthenoys() { if (this.klinikh.equals("")) System.out.println(" εν έχει εισαχθεί ακόµη"); else this.efyge = true; public String tostring() { return "ΑΣΘΕΝΗΣ" + "\n" + super.tostring() + "\n" + "Ταµείο: " + this.tameio + "\n" + "Κλινική: " + this.klinikh + "\n" + (this.efyge? "Έφυγε" : "Νοσηλεύεται"); public class AtomoDemo { public static void main(string[] args) { Person pers = new Person("Γιάννης Ιωάννου", "12/03/1970"); System.out.println(pers.toString()); Giatros giat = new Giatros("Πέτρος Βασιλείου", "18/02/1960", "Παιδίατρος"); System.out.println(giat.toString()); Asthenis ast = new Asthenis("Νικος Νικολάου", "03/06/1980", "ΙΚΑ"); ast.eisagogiasthenoys("ορθοπεδική"); System.out.println(ast); ast.exagogiasthenoys(); System.out.println(ast);

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

Διαβάστε περισσότερα

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

Διαβάστε περισσότερα

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις. 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος 2 http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα

Διαβάστε περισσότερα

Κεφάλαιο 5ο: Εντολές Επανάληψης

Κεφάλαιο 5ο: Εντολές Επανάληψης Χρήστος Τσαγγάρης ΕΕ ΙΠ Τµήµατος Μαθηµατικών, Πανεπιστηµίου Αιγαίου Κεφάλαιο 5ο: Εντολές Επανάληψης Η διαδικασία της επανάληψης είναι ιδιαίτερη συχνή, αφού πλήθος προβληµάτων µπορούν να επιλυθούν µε κατάλληλες

Διαβάστε περισσότερα

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

Διαβάστε περισσότερα

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει;

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει; ΜΑΘΗΜΑ 7 Κλήση αλγορίθμου από αλγόριθμο Αναδρομή Σ χ ο λ ι κ ο Β ι β λ ι ο ΥΠΟΚΕΦΑΛΑΙΟ 2.2.7: ΕΝΤΟΛΕΣ ΚΑΙ ΔΟΜΕΣ ΑΛΓΟΡΙΘΜΟΥ ΠΑΡΑΓΡΑΦΟI 2.2.7.5: Κλήση αλγορίθμου από αλγόριθμο 2.2.7.6: Αναδρομή εισαγωγη

Διαβάστε περισσότερα

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA 2 «Μονάδα Μετάφρασης» 2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit)

Διαβάστε περισσότερα

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1) Αντικείμενα (Objects) στην Java Αντικείμενα στη Java Παύλος Εφραιμίδης Ένα πρόγραμμα Java κατά την εκτέλεσή του δημιουργεί αντικείμενα τα αντικείμενα αλληλεπιδρούν, στέλνοντας μηνύματα το ένα στο άλλο

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

Διαβάστε περισσότερα

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες -

Διαβάστε περισσότερα

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

Διαβάστε περισσότερα

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ και ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ 2.1 Να δοθεί ο ορισμός

Διαβάστε περισσότερα

ΕΚΦΩΝΗΣΗ ΥΠΟΧΡΕΩΤΙΚΗΣ ΕΡΓΑΣΙΑΣ σε UML

ΕΚΦΩΝΗΣΗ ΥΠΟΧΡΕΩΤΙΚΗΣ ΕΡΓΑΣΙΑΣ σε UML ΕΚΦΩΝΗΣΗ ΥΠΟΧΡΕΩΤΙΚΗΣ ΕΡΓΑΣΙΑΣ σε UML για το µάθηµα ΑΝΑΛΥΣΗΣ ΣΥΣΤΗΜΑΤΩΝ Ακαδηµαϊκό Έτος 2012-2013 «Αντικειµενοστρεφής Ανάλυση Ηλεκτρονικού Καταστήµατος Προσφορών (e-shop)» Η άσκηση αφορά στη χρήση της

Διαβάστε περισσότερα

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΣΚΗΣΕΙΣ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΡΩΤΗΣΕΙΣ ΣΩΣΤΟ ΛΑΘΟΣ Σημειώστε αν είναι σωστή ή

Διαβάστε περισσότερα

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να αναπτύξουν ένα πρόγραμμα όπου θα επαναλάβουν τα βήματα ανάπτυξης μιας παραθυρικής εφαρμογής.

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Βρείτε τα λάθη Στο πρόγραμμα στην επόμενη διαφάνεια υπάρχουν διάφορα λάθη Ποια είναι? public abstract

Διαβάστε περισσότερα

Κανόνες για ανάπτυξη διαγραµµάτων κλάσεων

Κανόνες για ανάπτυξη διαγραµµάτων κλάσεων 1 Ελληνικό Ανοικτό Πανεπιστήµιο Κανόνες για ανάπτυξη διαγραµµάτων κλάσεων ρ. Πάνος Φιτσιλής 2 Περιεχόµενα Προσδιορισµός κλάσεων Πως να ονοµάσουµε τις κλάσεις; Που να τις βρούµε; Τι να κοιτάξουµε; Τι να

Διαβάστε περισσότερα

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Κεφάλαιο 6ο Εισαγωγή στον Προγραµµατισµό Μέρος Πρώτο (6.1, 6.2 και 6.3) Α. Ερωτήσεις Σωστού Λάθους 1. Η γλώσσα µηχανής είναι µία γλώσσα υψηλού επιπέδου.

Διαβάστε περισσότερα

ΑΛΓΟΡΙΘΜΟΙ. Τι είναι αλγόριθμος

ΑΛΓΟΡΙΘΜΟΙ. Τι είναι αλγόριθμος ΑΛΓΟΡΙΘΜΟΙ Στο σηµείωµα αυτό αρχικά εξηγείται η έννοια αλγόριθµος και παραθέτονται τα σπουδαιότερα κριτήρια που πρέπει να πληρεί κάθε αλγόριθµος. Στη συνέχεια, η σπουδαιότητα των αλγορίθµων συνδυάζεται

Διαβάστε περισσότερα

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 1.3-1.4: Εισαγωγή Στον Προγραµµατισµό ( ιάλεξη 2) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Περιεχόµενα Εισαγωγικές Έννοιες - Ορισµοί Ο κύκλος ανάπτυξης προγράµµατος Παραδείγµατα Πότε χρησιµοποιούµε υπολογιστή?

Διαβάστε περισσότερα

Περιεχόμενο του μαθήματος

Περιεχόμενο του μαθήματος ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Απαιτήσεις Λογισμικού Περιπτώσεις χρήσης Δρ Βαγγελιώ Καβακλή Τμήμα Πολιτισμικής Τεχνολογίας και Επικοινωνίας Πανεπιστήμιο Αιγαίου Εαρινό Εξάμηνο 2012-2013 1 Περιεχόμενο του μαθήματος

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

Διαβάστε περισσότερα

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 2 ο Αν χ και y μεταβλητές με τιμές 5 και 10 αντίστοιχα να εξηγηθούν οι ακόλουθες εντολές εξόδου.

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 2 ο Αν χ και y μεταβλητές με τιμές 5 και 10 αντίστοιχα να εξηγηθούν οι ακόλουθες εντολές εξόδου. 2.1 Αν χ και y μεταβλητές με τιμές 5 και 10 αντίστοιχα να εξηγηθούν οι ακόλουθες εντολές εξόδου. 1) Η τιμή του χ είναι,χ Ητιμή του χ είναι 5 Ηεντολή εμφανίζει ότι υπάρχει στα διπλά εισαγωγικά ως έχει.

Διαβάστε περισσότερα

Εισαγωγή στις Βάσεις εδοµένων και την Access

Εισαγωγή στις Βάσεις εδοµένων και την Access Μάθηµα 1 Εισαγωγή στις Βάσεις εδοµένων και την Access Τι είναι οι βάσεις δεδοµένων Μία βάση δεδοµένων (Β..) είναι µία οργανωµένη συλλογή πληροφοριών, οι οποίες είναι αποθηκευµένες σε κάποιο αποθηκευτικό

Διαβάστε περισσότερα

Κεφάλαιο 9 ο Κ 5, 4 4, 5 0, 0 0,0 5, 4 4, 5. Όπως βλέπουµε το παίγνιο δεν έχει καµιά ισορροπία κατά Nash σε αµιγείς στρατηγικές διότι: (ΙΙ) Α Κ

Κεφάλαιο 9 ο Κ 5, 4 4, 5 0, 0 0,0 5, 4 4, 5. Όπως βλέπουµε το παίγνιο δεν έχει καµιά ισορροπία κατά Nash σε αµιγείς στρατηγικές διότι: (ΙΙ) Α Κ Κεφάλαιο ο Μεικτές Στρατηγικές Τώρα θα δούµε ένα παράδειγµα στο οποίο κάθε παίχτης έχει τρεις στρατηγικές. Αυτό θα µπορούσε να είναι η µορφή που παίρνει κάποιος µετά που έχει απαλείψει όλες τις αυστηρά

Διαβάστε περισσότερα

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Τ.Ε.Ι ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ & ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΤΗΛΕΠΛΗΡΟΦΟΡΙΚΗΣ & ΔΙΟΙΚΗΣΗΣ Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Πτυχιακή εργασία του φοιτητή Γιαννακίδη Αποστόλη Επιβλέπων καθηγητής Τσούλος

Διαβάστε περισσότερα

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1 Στόχοι Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής (Αντικειμενοστρεφής Προγραμματισμός) Αντώνιος Συμβώνης www.math.ntua.gr/~symvonis Καλή γνώση βασικών αρχών προγραμματισμού Καλή γνώση βασικών αρχών αντικειμενοστρεφή

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β. ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β. Καβακλή Χειμερινό Εξάμηνο 2001 1 Σύνολο χαρακτήρων της Pascal Για

Διαβάστε περισσότερα

Περιληπτικά, τα βήματα που ακολουθούμε γενικά είναι τα εξής:

Περιληπτικά, τα βήματα που ακολουθούμε γενικά είναι τα εξής: Αυτό που πρέπει να θυμόμαστε, για να μη στεναχωριόμαστε, είναι πως τόσο στις εξισώσεις, όσο και στις ανισώσεις 1ου βαθμού, που θέλουμε να λύσουμε, ακολουθούμε ακριβώς τα ίδια βήματα! Εκεί που πρεπει να

Διαβάστε περισσότερα

3. Σηµειώσεις Access. # Εισαγωγή ψηφίου ή κενού διαστήµατος. Επιτρέπονται τα ση-

3. Σηµειώσεις Access. # Εισαγωγή ψηφίου ή κενού διαστήµατος. Επιτρέπονται τα ση- Μάθηµα 3 Προχωρηµένες ιδιότητες πεδίων Μάσκες εισαγωγής Οι ιδιότητες Μορφή και Μάσκα εισαγωγής περιγράφονται µαζί γιατί έχουν κοινά χαρακτηριστικά που αφορούν την εµφάνιση. Με την ιδιότητα Μορφή καθορίζουµε

Διαβάστε περισσότερα

Κεφάλαιο 7. Τρισδιάστατα Μοντέλα

Κεφάλαιο 7. Τρισδιάστατα Μοντέλα Κεφάλαιο 7. 7.1 ομές εδομένων για Γραφικά Υπολογιστών. Οι δομές δεδομένων αποτελούν αντικείμενο της επιστήμης υπολογιστών. Κατά συνέπεια πρέπει να γνωρίζουμε πώς οργανώνονται τα γεωμετρικά δεδομένα, προκειμένου

Διαβάστε περισσότερα

Περιεχόμενα. Κεφάλαιο 1: Εισαγωγή...17. Κεφάλαιο 2: Μια πρώτη ματιά στη C++...49

Περιεχόμενα. Κεφάλαιο 1: Εισαγωγή...17. Κεφάλαιο 2: Μια πρώτη ματιά στη C++...49 Περιεχόμενα Κεφάλαιο 1: Εισαγωγή...17 O στόχος του βιβλίου και σε ποιους απευθύνεται...19 Πως να διαβάσετε αυτό το βιβλίο...20 Η γλώσσα C++ Ιστορική αναδρομή...21 Τα χαρακτηριστικά της C++...22 Βασικές

Διαβάστε περισσότερα

Οι περιπτώσεις χρήσης

Οι περιπτώσεις χρήσης 1 Ελληνικό Ανοικτό Πανεπιστήµιο Οι περιπτώσεις χρήσης ρ. Πάνος Φιτσιλής 2 Περιεχόµενα Το µοντέλο των περιπτώσεων χρήσης Τα διαγράµµατα των περιπτώσεων χρήσης Λεκτική περιγραφή των περιπτώσεων χρήσης Τρόπος

Διαβάστε περισσότερα

Visual Basic Βασικές Έννοιες

Visual Basic Βασικές Έννοιες Visual Basi Βασικές Έννοιες «Είδα στον ύπνο µου ότι η ζωή είναι χαρά. Ξύπνησα και είδα ότι είναι χρέος. Αγωνίστηκα και είδα ότι τo χρέος είναι χαρά.» Ραµπριτανάθ Ταγκόρ Κουλλάς Χρίστος www.oullas.om oullas

Διαβάστε περισσότερα

Διάγραμμα Κλάσεων. Class Diagram

Διάγραμμα Κλάσεων. Class Diagram Διάγραμμα Κλάσεων Class Diagram Γενικά Ορίζει τις κλάσεις αντικειμένων σε ένα σύστημα, τις μεθόδους και τις συναρτήσεις τους, και τις συσχετίσεις μεταξύ των κλάσεων. Περιγράφουν την δομή και συμπεριφορά

Διαβάστε περισσότερα

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Καθηγητής. Γουνόπουλος Άσκηση 1 Σκοπός της εργασίας αυτής είναι η κατανόηση της εσωτερικής λειτουργίας

Διαβάστε περισσότερα

υαδικό έντρο Αναζήτησης (BSTree)

υαδικό έντρο Αναζήτησης (BSTree) Εργαστήριο 6 υαδικό έντρο Αναζήτησης (BSTree) Εισαγωγή Οι περισσότερες δοµές δεδοµένων, που εξετάσαµε µέχρι τώρα (λίστες, στοίβες, ουρές) ήταν γραµ- µικές (ή δοµές δεδοµένων µιας διάστασης). Στην παράγραφο

Διαβάστε περισσότερα

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 27 Μαρτίου 2013 Περίληψη Σκοπός της παρούσας εργασίας είναι η εξοικείωσή σας με τις θεμελιώδεις θεωρητικές και πρακτικές πτυχές

Διαβάστε περισσότερα

Παράρτημα A: PHP, HTML φόρμες και το πρωτόκολλο HTTP.

Παράρτημα A: PHP, HTML φόρμες και το πρωτόκολλο HTTP. Εργαστήριο #5 Τι πρέπει να έχετε ολοκληρώσει από το προηγούμενο εργαστήριο. Θα πρέπει να ξέρετε να εισάγετε ένα βασικό πρόγραμμα PHP μέσα σε μια ιστοσελίδα, τη χρήση της echo και τον χειρισμό απλών μεταβλητών

Διαβάστε περισσότερα

ΥΠΗΡΕΣΙΑ WEBMAIL ΚΥΠΕΣ

ΥΠΗΡΕΣΙΑ WEBMAIL ΚΥΠΕΣ ΥΠΗΡΕΣΙΑ WEBMAIL ΚΥΠΕΣ Η υπηρεσία διαχείρισης αλληλογραφίας µέσω web (webmail) δίνει την δυνατότητα στους χρήστες να διαχειριστούν την αλληλογραφία τους απ οποιοδήποτε σηµείο βρίσκονται εφόσον υπάρχει

Διαβάστε περισσότερα

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23 Περιεχόμενα Λίγα λόγια για αυτή την έκδοση...... 23 Κεφάλαιο 1 Εισαγωγή... 25 O στόχος του βιβλίου και σε ποιους απευθύνεται... 27 Πώς να διαβάσετε αυτό το βιβλίο... 27 Εκπαίδευση από απόσταση... 29 Ιστορική

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Ενότητα 14 Δυναμική διαχείριση μνήμης Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Στατική δέσμευση μνήμης Με τη δήλωση απλών μεταβλητών

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07 Ακαδ έτος 2007-2008 ΠΛΗΡΟΦΟΡΙΚΗ Ι Φερεντίνος 22/11/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με ΑΜ σε 3, 7, 8 & 9 22/11/07 Παράδειγμα με if/else if και user input: import javautil*; public class Grades public

Διαβάστε περισσότερα

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της; 1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες (μορφές) της; Η δομή επανάληψης χρησιμοποιείται όταν μια σειρά εντολών πρέπει να εκτελεστεί σε ένα σύνολο περιπτώσεων, που έχουν κάτι

Διαβάστε περισσότερα

Σενάριο 17: Παιχνίδι μνήμης με εικόνες

Σενάριο 17: Παιχνίδι μνήμης με εικόνες Σενάριο 17: Παιχνίδι μνήμης με εικόνες Φύλλο Εργασίας Τίτλος: Παιχνίδι μνήμης με εικόνες Γνωστικό Αντικείμενο: Εφαρμογές Πληροφορικής-Υπολογιστών Διδακτική Ενότητα: Διερευνώ - Δημιουργώ Ανακαλύπτω, Συνθετικές

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΠΡΟΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΜΑΘΗΜΑ: ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ ΔΙΑΔΙΚΑΣΙΕΣ ΠΑΡΑΓΩΓΗΣ ΛΟΓΙΣΜΙΚΟΥ Διδάσκων: Γ. Χαραλαμπίδης,

Διαβάστε περισσότερα

Εισαγωγή. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο 2005-06. Κατανεµηµένα συστήµατα αρχείων. Μέρη κατανεµηµένου συστήµατος αρχείων

Εισαγωγή. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο 2005-06. Κατανεµηµένα συστήµατα αρχείων. Μέρη κατανεµηµένου συστήµατος αρχείων Εισαγωγή Ε-03: Λειτουργικά Συστήµατα ΙΙ Εαρινό Εξάµηνο 2005-06 «Κατανεµηµένα Συστήµατα Αρχείων (1/2)» ρ. Παναγιώτης Χατζηδούκας (Π..407/80) Σύστηµα αρχείων Αποθήκευση, προσπέλαση και διαχείριση δεδοµένων

Διαβάστε περισσότερα

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Βασικές Έννοιες Προγραμματισμού Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Αριθμητικά συστήματα Υπάρχουν 10 τύποι ανθρώπων: Αυτοί

Διαβάστε περισσότερα

ΙΑΝΥΣΜΑΤΑ ΘΕΩΡΙΑ ΘΕΜΑΤΑ ΘΕΩΡΙΑΣ. Τι ονοµάζουµε διάνυσµα; αλφάβητου επιγραµµισµένα µε βέλος. για παράδειγµα, Τι ονοµάζουµε µέτρο διανύσµατος;

ΙΑΝΥΣΜΑΤΑ ΘΕΩΡΙΑ ΘΕΜΑΤΑ ΘΕΩΡΙΑΣ. Τι ονοµάζουµε διάνυσµα; αλφάβητου επιγραµµισµένα µε βέλος. για παράδειγµα, Τι ονοµάζουµε µέτρο διανύσµατος; ΙΝΥΣΜΤ ΘΕΩΡΙ ΘΕΜΤ ΘΕΩΡΙΣ Τι ονοµάζουµε διάνυσµα; AB A (αρχή) B (πέρας) Στη Γεωµετρία το διάνυσµα ορίζεται ως ένα προσανατολισµένο ευθύγραµµο τµήµα, δηλαδή ως ένα ευθύγραµµο τµήµα του οποίου τα άκρα θεωρούνται

Διαβάστε περισσότερα

Μοντελοποίηση Συστημάτων

Μοντελοποίηση Συστημάτων Εργασία για το μάθημα Μοντελοποίηση Συστημάτων 29 Οκτωβρίου 204 Α. Στόχος Στην εργασία αυτή θα εξοικειωθείτε με τα πρώτα στάδια σχεδιασμού λογισμικού. Συγκεκριμένα, μετά την εκπόνηση της εργασίας θα πρέπει

Διαβάστε περισσότερα

Προγραµµατιστική Εργασία 1 ο Μέρος

Προγραµµατιστική Εργασία 1 ο Μέρος Πανεπιστήµιο Κρήτης, Τµήµα Επιστήµης Υπολογιστών 4 Νοεµβρίου 2011 ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος 2011-12 ιδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία 1 ο Μέρος Ηµεροµηνία

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2010 Ι ΑΣΚΩΝ: ΑΝΤΩΝΙΟΣ ΣΑΒΒΙ ΗΣ ΒΑΣΙΚΗ ΕΡΓΑΣΙΑ ΦΑΣΗ 2η από 5 Ανάθεση: Πέµπτη 15 Απριλίου 2010, 11:00 (πρωί)

Διαβάστε περισσότερα

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Nα κατασκευάσουν πίνακες από δεδομένα. Να κατασκευάσουν συναρτήσεις με πίνακες. Να κάνουν χρήση

Διαβάστε περισσότερα

Τύποι, Σταθερές και Μεταβλητές

Τύποι, Σταθερές και Μεταβλητές ΚΕΦΑΛΑΙΟ 3 Τύποι, Σταθερές και Μεταβλητές Η έννοια της μεταβλητής Γενικά μπορούμε να πούμε ότι η έννοια της μεταβλητής στον προγραμματισμό είναι άμεσα συνδεδεμένη με την έννοια που αυτή έχει σε μαθηματικό

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΠΕΜΠΤΟ Triggers, Stored procedures Γιώργος Μαρκοµανώλης Περιεχόµενα Triggers-Ενηµέρωση δεδοµένων άλλων πινάκων... 1 Ασφάλεια...

Διαβάστε περισσότερα

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιαχείριση Εξαιρέσεων. Εισαγωγή στη ιαχείριση Εξαιρέσεων

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιαχείριση Εξαιρέσεων. Εισαγωγή στη ιαχείριση Εξαιρέσεων Προγραµµατισµός ΙΙ Ηγλώσσααντικειµενοστραφούς προγραµµατισµού Java ιδάσκων ηµήτριος Κατσαρός, Ph.D. @ Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας ιάλεξη 6η: 06/04/2006 1 ιαχείριση

Διαβάστε περισσότερα

B Γυμνασίου. Ενότητα 9

B Γυμνασίου. Ενότητα 9 B Γυμνασίου Ενότητα 9 Γραμμικές εξισώσεις με μία μεταβλητή Διερεύνηση (1) Να λύσετε τις πιο κάτω εξισώσεις και ακολούθως να σχολιάσετε το πλήθος των λύσεων που βρήκατε σε καθεμιά. α) ( ) ( ) ( ) Διερεύνηση

Διαβάστε περισσότερα

1ο. Η αριθµητική του υπολογιστή

1ο. Η αριθµητική του υπολογιστή 1ο. Η αριθµητική του υπολογιστή 1.1 Τί είναι Αριθµητική Ανάλυση Υπάρχουν πολλά προβλήµατα στη µαθηµατική επιστήµη για τα οποία δεν υπάρχουν αναλυτικές εκφράσεις λύσεων. Στις περιπτώσεις αυτές έχουν αναπτυχθεί

Διαβάστε περισσότερα

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System)

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System) 2.1.1 Εισαγωγή στη διαχείριση αρχείων Οι Η/Υ αποθηκεύουν τα δεδομένα και τα επεξεργάζονται. Εφαρμογή Προγράμματος C:\Documents and Settings\user\Τα έγγραφά μου\leitourgika.doc Λ.Σ. File System Γι αυτό

Διαβάστε περισσότερα

Μ Ε Ρ Ο Σ Γ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

Μ Ε Ρ Ο Σ Γ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Μ Ε Ρ Ο Σ Γ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Γλώσσες Προγραμματισμού 6.1.1 Γλώσσες μηχανής (1 η γενιά) Η γλώσσα στην οποία ένας ηλεκτρονικός υπολογιστής καταλαβαίνει

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης ΚΕΦΑΛΑΙΟ 1ο 3ο 1. Συμπληρώστε τα κενά με τη λέξη που λείπει. α. Ένα πρόβλημα το χωρίζουμε σε άλλα απλούστερα, όταν είναι ή όταν έχει τρόπο επίλυσης. β. Η επίλυση ενός προβλήματος προϋποθέτει την του. γ.

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ & ΤΕΧΝΟΛΟΓΙΑΣ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ «ΠΛΗΡΟΦΟΡΙΚΗ»

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ & ΤΕΧΝΟΛΟΓΙΑΣ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ «ΠΛΗΡΟΦΟΡΙΚΗ» ΤΕΛΙΚΗ ΕΞΕΤΑΣΗ Σάββατο 5 Ιουνίου 2010 Οδηγίες: Η διάρκεια της εξέτασης είναι τρεις και µισή (3 ½) ώρες. Ισχύουν όσα αναφέρονται στους Κανονισµούς Εξετάσεων του ΕΑΠ γενικότερα και της Θ.Ε. ειδικότερα. Τα

Διαβάστε περισσότερα

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΣ ΣΕ ΑΝΤΙΚΕΙΜΕΝΑ Προσανατολισμός σε αντικείμενα είναι η προσέγγιση που

Διαβάστε περισσότερα

ΙΑΓΩΝΙΣΜΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΘΕΜΑ 1 Α.

ΙΑΓΩΝΙΣΜΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΘΕΜΑ 1 Α. ΙΑΓΩΝΙΣΜΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΘΕΜΑ 1 Α. 1. Αν το Α έχει την τιµή 10 και το Β την τιµή 20 τότε η έκφραση (Α > 8 ΚΑΙ Β < 20) Ή (Α > 10 Ή Β = 10) είναι αληθής 2. Σε περίπτωση εµφωλευµένων βρόχων, ο εσωτερικός

Διαβάστε περισσότερα

ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΘΕΜΑ 1 (Α) Σημειώστε δίπλα σε κάθε πρόταση «Σ» ή «Λ» εφόσον είναι σωστή ή λανθασμένη αντίστοιχα. 1. Τα συντακτικά λάθη ενός προγράμματος

Διαβάστε περισσότερα

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ ΒΑΙΚΕ ΕΝΝΟΙΕ ΑΓΟΡΙΘΜΩΝ ΕΡΩΤΗΕΙ ΑΞΙΟΟΓΗΗ ΕΡΩΤΗΕΙ ΩΤΟΥ ΑΘΟΥ 1. ηµειώστε το γράµµα αν η πρόταση είναι σωστή και το γράµµα αν είναι λάθος. 1. Ο αλγόριθµος πρέπει να τερµατίζεται µετά από εκτέλεση πεπερασµένου

Διαβάστε περισσότερα

ιαφάνειες παρουσίασης #1

ιαφάνειες παρουσίασης #1 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ http://www.corelab.ece.ntua.gr/courses/programming/ ιδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 5 η Η σειριακή επικοινωνία ΙΙ 1.1 ΣΚΟΠΟΣ Σκοπός της άσκησης αυτής είναι η κατανόηση σε βάθος των λειτουργιών που παρέχονται από το περιβάλλον LabView για τον χειρισµό της σειριακής επικοινωνίας

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΥΠΗΡΕΣΙΩΝ) 2007 ΕΚΦΩΝΗΣΕΙΣ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΥΠΗΡΕΣΙΩΝ) 2007 ΕΚΦΩΝΗΣΕΙΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΥΠΗΡΕΣΙΩΝ) 2007 ΘΕΜΑ 1ο ΕΚΦΩΝΗΣΕΙΣ Α. Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις

Διαβάστε περισσότερα

Δυαδικό Σύστημα Αρίθμησης

Δυαδικό Σύστημα Αρίθμησης Δυαδικό Σύστημα Αρίθμησης Το δυαδικό σύστημα αρίθμησης χρησιμοποιεί δύο ψηφία. Το 0 και το 1. Τα ψηφία ενός αριθμού στο δυαδικό σύστημα αρίθμησης αντιστοιχίζονται σε δυνάμεις του 2. Μονάδες, δυάδες, τετράδες,

Διαβάστε περισσότερα

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Email: liliadis@fmenr.duth.gr 1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Τα προγράµµατα αποτελούνται από εντολές οι οποίες γράφονται σε έναν απλό επεξεργαστή που προσφέρει και το Περιβάλλον της Visual C++. Οι εντολές

Διαβάστε περισσότερα

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΣΒΔ - ΕΙΣΑΓΩΓΗ ΣΤΟ ΜΟΝΤΕΛΟ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΙΣΕΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΣΒΔ - ΕΙΣΑΓΩΓΗ ΣΤΟ ΜΟΝΤΕΛΟ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΙΣΕΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Χειμερινό Εξάμηνο 2013 - ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΣΒΔ - ΕΙΣΑΓΩΓΗ ΣΤΟ ΜΟΝΤΕΛΟ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΙΣΕΩΝ Δρ. Βαγγελιώ Καβακλή ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ, ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ 1 Αρχιτεκτονική

Διαβάστε περισσότερα

Κεφάλαιο 7 Βασικά Θεωρήµατα του ιαφορικού Λογισµού

Κεφάλαιο 7 Βασικά Θεωρήµατα του ιαφορικού Λογισµού Σελίδα 1 από Κεφάλαιο 7 Βασικά Θεωρήµατα του ιαφορικού Λογισµού Στο κεφάλαιο αυτό θα ασχοληθούµε µε τα βασικά θεωρήµατα του διαφορικού λογισµού καθώς και µε προβλήµατα που µπορούν να επιλυθούν χρησιµοποιώντας

Διαβάστε περισσότερα

ΕΝ ΕΙΚΤΙΚΑ ΠΑΡΑ ΕΙΓΜΑΤΑ ΚΡΙΤΗΡΙΩΝ ΑΞΙΟΛΟΓΗΣΗΣ. Κεφάλαιο 17

ΕΝ ΕΙΚΤΙΚΑ ΠΑΡΑ ΕΙΓΜΑΤΑ ΚΡΙΤΗΡΙΩΝ ΑΞΙΟΛΟΓΗΣΗΣ. Κεφάλαιο 17 ΕΝ ΕΙΚΤΙΚΑ ΠΑΡΑ ΕΙΓΜΑΤΑ ΚΡΙΤΗΡΙΩΝ ΑΞΙΟΛΟΓΗΣΗΣ 1 ο Παράδειγµα (διάρκεια: 15 λεπτά) Κεφάλαιο 17 Α. ΣΤΟΙΧΕΙΑ ΤΟΥ ΜΑΘΗΤΗ ΟΝΟΜΑΤΕΠΩΝΥΜΟ ΜΑΘΗΤΗ:... ΤΑΞΗ:... ΤΜΗΜΑ:... ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ:... ΗΜΕΡΟΜΗΝΙΑ:... Β.

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Βασικές αλγοριθμικές δομές

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Βασικές αλγοριθμικές δομές Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Βασικές αλγοριθμικές δομές Βασικές Αλγοριθμικές Δομές 2 Εισαγωγή Οι αλγοριθμικές δομές εκφράζουν διαφορετικούς τρόπους γραφής ενός αλγορίθμου.

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΘΕΜΑ 1Ο Α1. Να χαρακτηρίσετε τις παρακάτω προτάσεις σαν Σωστό ή Λάθος. 1. Ο υπολογιστής είναι ο ταχύτερος μηχανισμός επεξεργασίας δεδομένων. 2. Οι εντολές

Διαβάστε περισσότερα

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα 1. Ποια είναι η σχέση της έννοιας του μικροεπεξεργαστή με αυτή του μικροελεγκτή; Α. Ο μικροεπεξεργαστής εμπεριέχει τουλάχιστο έναν μικροελεγκτή. Β. Ο

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο. Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο. Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 Εισαγωγή Οι αριθμητικές πράξεις που εκτελούνται στον υπολογιστή αποτελούν το

Διαβάστε περισσότερα

Μοτίβα Σχεδίασης (Design Patterns)

Μοτίβα Σχεδίασης (Design Patterns) Ενότητα 6 Μοτίβα Σχεδίασης (Design Patterns) Ορισµοί βασικές έννοιες. Σηµαντικά µοτίβα σχεδίασης: Παρατηρητής (Observer). Πρόσοψη (Façade). Προσαρµογέας (Adapter). Πληρεξούσιος (Proxy). Μοναχοπαίδι (Singleton).

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Θέµα 1 ο Α. Να απαντήσετε τις παρακάτω ερωτήσεις τύπου Σωστό Λάθος (Σ Λ) 1. Σκοπός της συγχώνευσης 2 ή περισσοτέρων ταξινοµηµένων πινάκων είναι η δηµιουργία

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στην FORTRAN Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 Fortran FORmula TRANslation: (Μία από τις πρώτες γλώσσες τρίτης γενιάς) Εκδόσεις FORTRAN (1957) FORTRAN II (1958) FORTRAN III

Διαβάστε περισσότερα

Πίνακας κατανοµής συχνοτήτων και αθροιστικών συχνοτήτων. Σχετ.

Πίνακας κατανοµής συχνοτήτων και αθροιστικών συχνοτήτων. Σχετ. Λυµένη Άσκηση στην οµαδοποιηµένη κατανοµή Στην Γ τάξη του Ενιαίου Λυκείου µιας περιοχής φοιτούν 4 µαθητές των οποίων τα ύψη τους σε εκατοστά φαίνονται στον ακόλουθο πίνακα. 7 4 76 7 6 7 3 77 77 7 6 7 6

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 18. 18 Μηχανική Μάθηση

ΚΕΦΑΛΑΙΟ 18. 18 Μηχανική Μάθηση ΚΕΦΑΛΑΙΟ 18 18 Μηχανική Μάθηση Ένα φυσικό ή τεχνητό σύστηµα επεξεργασίας πληροφορίας συµπεριλαµβανοµένων εκείνων µε δυνατότητες αντίληψης, µάθησης, συλλογισµού, λήψης απόφασης, επικοινωνίας και δράσης

Διαβάστε περισσότερα

Κεφάλαιο 10. Υποπρογράμματα

Κεφάλαιο 10. Υποπρογράμματα Κεφάλαιο 10 Υποπρογράμματα 10.1 Γενικός διδακτικός σκοπός Ο γενικός σκοπός του κεφαλαίου είναι να καταστούν ικανοί οι μαθητές να χρησιμοποιούν υποπρογράμματα για τη δημιουργία συνθέτων προγραμμάτων. 194

Διαβάστε περισσότερα

Προγραµµατισµός ΙΙ Java 2

Προγραµµατισµός ΙΙ Java 2 Προγραµµατισµός ΙΙ Java 2 Προχωρηµένα Θέµατα Πακέτα Τις κλάσεις που κατασκευάζουµε µπορούµε να τις οργανώνουµε σε πακέτα εν «κουβαλάµε» µια-µια τις κλάσεις που επιθυµούµε αλλά ένα συµπαγές αρχείο, το πακέτο

Διαβάστε περισσότερα

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD Σε ορισµένες περιπτώσεις είναι ιδιαίτερα χρήσιµη η δηµιουργία ιστοσελίδων ενηµερωτικού περιεχοµένου οι οποίες στη συνέχεια µπορούν να δηµοσιευθούν σε κάποιο τόπο

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 1. Structural Programming

ΑΣΚΗΣΗ 1. Structural Programming ΑΣΚΗΣΗ 1 Structural Programming Στην άσκηση αυτή θα υλοποιήσετε σε C ένα απλό πρόγραµµα Βάσης εδοµένων το οποίο θα µπορούσε να χρησιµοποιηθεί από την γραµµατεία ενός πανεπιστηµίου για την αποθήκευση και

Διαβάστε περισσότερα

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Γλώσσες Προγραμματισμού Μεταγλωττιστές Γλώσσες Προγραμματισμού Μεταγλωττιστές Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου Δομή Γλώσσες Προγραμματισμού Εισαγωγικά Γλώσσα Μηχανής Γλώσσες υψηλού επιπέδου Μεταγλωττιστές

Διαβάστε περισσότερα

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ Μ. Γρηγοριάδου Ρ. Γόγουλου Ενότητα: Η Διδασκαλία του Προγραμματισμού Περιεχόμενα Παρουσίασης

Διαβάστε περισσότερα

7. Βασικά στοιχεία προγραµµατισµού.

7. Βασικά στοιχεία προγραµµατισµού. 7. Βασικά στοιχεία προγραµµατισµού. ΗΜ01-Θ1Γ Δίνονται οι παρακάτω έννοιες: 1. Λογικός τύπος δεδοµένων 2. Επιλύσιµο 3. Ακέραιος τύπος δεδοµένων 4. Περατότητα 5. Μεταβλητή 6. Ηµιδοµηµένο 7. Πραγµατικός τύπος

Διαβάστε περισσότερα

ΑΣΦΑΛΕΙΑ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ (Μηχανισμοί Ελέγχου Προσπέλασης)

ΑΣΦΑΛΕΙΑ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ (Μηχανισμοί Ελέγχου Προσπέλασης) ΑΣΦΑΛΕΙΑ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ (Μηχανισμοί Ελέγχου Προσπέλασης) Καλλονιάτης Χρήστος Επίκουρος Καθηγητής Τμήμα Πολιτισμικής Τεχνολογίας και Επικοινωνίας, Πανεπιστήμιο Αιγαίου http://www.ct.aegean.gr/people/kalloniatis

Διαβάστε περισσότερα

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩN ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ι ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ: ΙΟΥΝΙΟΣ 2015 (10/7/2015) ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α 1. (3.5 μονάδες)

Διαβάστε περισσότερα

Παράλληλη Επεξεργασία

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στο OpenMP Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed Systems Group Τι είναι το OpenMP Πρότυπο Επέκταση στη C/C++ και τη Fortran

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Βιβλιογραφία "C Προγραμματισμός", Deitel & Deitel, Πέμπτη Έκδοση, Εκδόσεις

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΤΕΤΑΡΤΟ Insert, Update, Delete, Ένωση πινάκων Γιώργος Μαρκοµανώλης Περιεχόµενα Group By... 1 Having...1 Οrder By... 2 Εντολή Insert...

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND)

ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND) ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND) Ένωση Ξένων Συνόλων (Disjoint Sets with Union) S 1,, S k : ξένα υποσύνολα ενός συνόλου U δηλ., S i S j =, αν i j, και S 1 S k = U. Λειτουργίες που θέλουµε

Διαβάστε περισσότερα

Το Ηλεκτρονικό Ταχυδροµείο (e-mail) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο

Το Ηλεκτρονικό Ταχυδροµείο (e-mail) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο Το Ηλεκτρονικό Ταχυδροµείο (e-mail) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο χρήστη µέσω υπολογιστή άνετα γρήγορα και φτηνά. Για να

Διαβάστε περισσότερα

Εισαγωγή στις Συναρτήσεις

Εισαγωγή στις Συναρτήσεις Εισαγωγή στις Συναρτήσεις Η φιλοσοφία σχεδίασης της C βασίζεται στη χρήση των συναρτήσεων. Έχουμε ήδη δει και χρησιμοποιήσει πολλές συναρτήσεις που έχει το σύστημα, όπως είναι οι printf(), scanf(),αλλά

Διαβάστε περισσότερα