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);

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

public void printstatement() { System.out.println(Employee:  + name +  with salary:  + salary); Κληρονομικότητα Η κληρονομικότητα (inheritance) αποτελεί έναν από τους χαρακτηριστικότερους μηχανισμούς των αντικειμενοστρεφών γλωσσών προγραμματισμού. Επιτρέπει την δημιουργία μιας νέας κλάσης απορροφώντας

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

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 Θα

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

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?

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

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video ιάγραµµα κλάσεων [Class diagram] Εβδοµάδα 2: Υπο-τύποι και πολυµορφισµός [sub-typing and polymorphism] Database Music Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 1 Σχεδίαση-Ανάπτυξη

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

Ελληνικό Ανοικτό Πανεπιστήµιο. Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας. ρ. Πάνος Φιτσιλής

Ελληνικό Ανοικτό Πανεπιστήµιο. Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας. ρ. Πάνος Φιτσιλής 1 Ελληνικό Ανοικτό Πανεπιστήµιο Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας ρ. Πάνος Φιτσιλής Περιεχόµενα Βασικές έννοιες αντικειµενοστεφούς τρόπου ανάπτυξης Τι είναι κλάση Τι είναι αντικείµενο 2 Βασικές

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

(Διαφάνειες Νίκου Βιδάκη)

(Διαφάνειες Νίκου Βιδάκη) (Διαφάνειες Νίκου Βιδάκη) JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο? Ανάλυση αντικειμένων Πραγματικά αντικείμενα Καταστάσεις Συμπεριφορές Αντικείμενα στον προγραμματισμό

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

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

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

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Υπερφόρτωση (Overloading), Μεθόδων (Method Overloading), Τελεστών (Operator Overloading (C++, C#))

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα ΝΗΜΑΤΑ ΣΤΗ JAVA (1) Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα πρόγραµµα. Αιτία Η δυνατότητα αποµόνωσης (ή αυτονόµησης) κάποιων

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός

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

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων Μέθοδοι Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων Μέθοδοι Οιµέθοδοικαθορίζουντηνσυµπεριφοράενόςαντικειµένου. Τα βασικά µέρη από τα οποία αποτελείται µία µέθοδος είναι τα εξής: Το όνοµα της µεθόδου

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

J-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου

J-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου J-GANNO ΓΕΝΙΚΕΥΜΕΝΟ ΠΑΚΕΤΟ ΥΛΟΠΟΙΗΣΗΣ ΤΕΧΝΗΤΩΝ ΝΕΥΡΩΝΙΚΩΝ ΙΚΤΥΩΝ ΣΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ JAVA Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β,

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

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 7.1. Ανάπτυξη Προγράµµατος Τι είναι το Πρόγραµµα; Το Πρόγραµµα: Είναι ένα σύνολο εντολών για την εκτέλεση ορισµένων λειτουργιών από τον υπολογιστή.

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

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi ee.duth.

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth. Το πρόγραμμα HelloWorld.java Σχόλια στη Java HelloWorld Παύλος Εφραιμίδης pefraimi ee.duth.gr Java Το πρόγραμμα HelloWorld 1 Java Το πρόγραμμα HelloWorld 2 Σχόλια στη Java ΗγλώσσαJava υποστηρίζει

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

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

Εισαγωγή στον Προγ/μό Η/Υ Εισαγωγή στον Προγ/μό Η/Υ Ενότητα 7 2ο μέρος: Επιπλέον έννοιες σχετικά με αντικείμενα Διδάσκων: Μιχάλης Τίτσιας Περιεχόμενα Τι μπορεί να περιέχει μια τάξη Μέθοδοι τάξης και σταθερές τάξης Πολυμορφισμός

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

Προγραµµατισµός Η/Υ. Μέρος2

Προγραµµατισµός Η/Υ. Μέρος2 Προγραµµατισµός Η/Υ Μέρος2 Περιεχόμενα Επανάληψη Βασικών Σύμβολων Διαγραμμάτων Ροής Αλγόριθμος Ψευδοκώδικας Παραδείγματα Αλγορίθμων Γλώσσες προγραμματισμού 2 Επανάληψη Βασικών Σύμβολων Διαγραμμάτων Ροής

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

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

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

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

Σύνθεση και Κληρονομικότητα

Σύνθεση και Κληρονομικότητα Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση

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

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

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

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 2 ο Τύποι Δεδοµένων Δήλωση Μεταβλητών Έξοδος Δεδοµένων Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Μνήµη και Μεταβλητές Σχέση Μνήµης Υπολογιστή και Μεταβλητών Η µνήµη (RAM) ενός

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

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

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

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δρ. Κόννης Γιώργος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος και του Προγράμματος/Αλγορίθμου

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

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

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

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5 Περιεχόµενα 1 Εισαγωγή στις οµές εδοµένων 3 2 Στοίβα (Stack) 5 i ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ ii Πληροφορίες Εργαστηρίου Σκοπός του εργαστηρίου Το εργαστήριο οµές εδοµένων αποσκοπεί στην εφαρµογή των τεχνολογιών

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας

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

4 Συλλογές Αντικειμένων

4 Συλλογές Αντικειμένων 4 Συλλογές Αντικειμένων Πώς χειριζόμαστε αντικείμενα σε ομάδες με επανάληψη Η Απαίτηση Συλλογών Αντικειμένων Πολλές εφαρμογές χρειάζονται πλήθος αντικειμένων: Κατάλογος βιβλίων Φοιτητολόγιο Πελατολόγιο

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

ΕΠΛ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 κατά την εκτέλεσή του δημιουργεί αντικείμενα τα αντικείμενα αλληλεπιδρούν, στέλνοντας μηνύματα το ένα στο άλλο

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

2.2.3 Η εντολή Εκτύπωσε

2.2.3 Η εντολή Εκτύπωσε 2.2.3 Η εντολή Εκτύπωσε Η εντολή Εκτύπωσε χρησιµοποιείται προκειµένου να εµφανίσουµε κάτι στην οθόνη του υπολογιστή. Για τον λόγο αυτό ονοµάζεται και εντολή εξόδου. Ισοδύναµα µπορεί να χρησιµοποιηθεί και

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

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

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

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

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ 1ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Α ΑΝΑΚΕΦΑΛΑΙΩΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ Γ' ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΠΕΜΠΤΗ 26 ΑΠΡΙΛΙΟΥ 2012 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ

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

Ανάπτυξη Plugins για το AgentSheets

Ανάπτυξη Plugins για το AgentSheets Ανάπτυξη Plugins για το AgentSheets Thought Amplifier AgentSheets Ανάπτυξη Plugins AgentSheets 2.5 Συγγραφείς Τεκµηρίωσης: Alexander Repenning και Ronald Sudomo Εξελληνισµός Τεκµηρίωσης: Λίνος Βίγκλας,

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

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο 2015. Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο 2015. Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης Οικονοµικό Πανεπιστήµιο Αθηνών Τµήµα Πληροφορικής Φθινοπωρινό Εξάµηνο 2015 Δοµές Δεδοµένων - Εργασία 2 Διδάσκων: E. Μαρκάκης Ταξινόµηση και Ουρές Προτεραιότητας Σκοπός της 2 ης εργασίας είναι η εξοικείωση

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

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

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

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

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 5 ο Έλεγχος Προγράµµατος Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Η εντολή if (Ι) Η εντολή if είναι µία από τις βασικότερες δοµές ελέγχου ροής στη C, αλλά και στις περισσότερες

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

Υπολογιστικά Συστήματα

Υπολογιστικά Συστήματα Υπολογιστικά Συστήματα Ενότητα 3: Βασικά στοιχεία της γλώσσας προγραμματισμού Visual Basic for Applications (VBA) Σαπρίκης Ευάγγελος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) Άδειες Χρήσης Το παρόν εκπαιδευτικό

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

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

Αποµακρυσµένη κλήση διαδικασιών

Αποµακρυσµένη κλήση διαδικασιών Αποµακρυσµένηκλήση διαδικασιών Τοπική κλήση διαδικασιών Αποµακρυσµένη κλήση διαδικασιών Μεταβίβαση παραµέτρων Πρωτόκολλα επικοινωνίας Αντιγραφή µηνυµάτων Προδιαγραφές διαδικασιών RPC στο σύστηµα DCE Κατανεµηµένα

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

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι Λειτουργικά Συστήματα 1 Λογισμικό του Υπολογιστή Για να λειτουργήσει ένας Η/Υ εκτός από το υλικό του, είναι απαραίτητο και το λογισμικό Το σύνολο των προγραμμάτων που συντονίζουν τις λειτουργίες του υλικού

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

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

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

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

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

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

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

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

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

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

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

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

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

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

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

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

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

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη Επιλογή και επανάληψη Η ύλη που αναπτύσσεται σε αυτό το κεφάλαιο είναι συναφής µε την ύλη που αναπτύσσεται στο 2 ο κεφάλαιο. Όπου υπάρχουν διαφορές αναφέρονται ρητά. Προσέξτε ιδιαίτερα, πάντως, ότι στο

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

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 5: Κλάσεις και Αντικείμενα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Κλάσεις και Αντικείμενα - Κατασκευή, Πρόσβαση Αντικειμένων - Διαχείριση Μνήμης, Garbage

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

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA 1. Εισαγωγή Τι είναι Νήµα; Κάθε νήµα εκτέλεσης είναι ουσιαστικά

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

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

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΔΟΜΗ ΕΠΙΛΟΓΗΣ 1) Ποιοι είναι οι τελεστές σύγκρισης και

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

o AND o IF o SUMPRODUCT

o AND o IF o SUMPRODUCT Πληροφοριακά Εργαστήριο Management 1 Information Συστήματα Systems Διοίκησης ΤΕΙ Τμήμα Ελεγκτικής Ηπείρου Χρηματοοικονομικής (Παράρτημα Πρέβεζας) και Αντικείµενο: Μοντελοποίηση προβλήµατος Θέµατα που καλύπτονται:

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

Σχεδιασµός βασισµένος σε συνιστώσες

Σχεδιασµός βασισµένος σε συνιστώσες Σχεδιασµός βασισµένος σε συνιστώσες 1 Ενδεικτικά περιεχόµενα του κεφαλαίου Ποια είναι τα "άτοµα", από τα οποία κατασκευάζονται οι υπηρεσίες; Πώς οργανώνουµε τις συνιστώσες σε ένα αρµονικό σύνολο; Τι είναι

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

8. Μέθοδοι (Methods)

8. Μέθοδοι (Methods) 8. Μέθοδοι (Methods) Χειμερινό εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Μέθοδοι που παρέχονται από τη τάξη Math του Java API Χρήση στατικών μεθόδων και

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων Αντικείµενα ηµιουργία και χρησιµοποίηση αντικειµένων ηµιουργία αντικειµένων Για να δηµιουργήσω ένα νέο αντικείµενο χρησιµοποιώ τον τελεστή new µε τοόνοµατηςκλάσηςαπότηνοποίαθέλωναδηµιουργήσωένααντικείµενο,

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java III Το if-else statement Το if-else statement δουλεύει καλά όταν στο condition θέλουμε να περιγράψουμε μια επιλογή με δύο πιθανά ενδεχόμενα.

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

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

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

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

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

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

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

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

Εισαγωγή στην Πληροφορική Προγραμματισμός-Λειτουργικά

Εισαγωγή στην Πληροφορική Προγραμματισμός-Λειτουργικά Εισαγωγή στην Πληροφορική Προγραμματισμός-Λειτουργικά Ηλ. Γκρίνιας Τ. Ε. Ι. Σερρών Τμήμα Πληροφορικής και Επικοινωνιών Αλγόριθμοι Ορισμός: ο αλγόριθμος είναι μια σειρά από πεπερασμένα βήματα που καθορίζουν

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

4.3. Γραµµικοί ταξινοµητές

4.3. Γραµµικοί ταξινοµητές Γραµµικοί ταξινοµητές Γραµµικός ταξινοµητής είναι ένα σύστηµα ταξινόµησης που χρησιµοποιεί γραµµικές διακριτικές συναρτήσεις Οι ταξινοµητές αυτοί αναπαρίστανται συχνά µε οµάδες κόµβων εντός των οποίων

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

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string 12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string Aλφαριθµητικά της C int main() const int max=80; char str[max); //κάθε char δεσµεύει

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

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

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

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

Επανάληψη για τις Τελικές εξετάσεις

Επανάληψη για τις Τελικές εξετάσεις Επανάληψη για τις Τελικές εξετάσεις ( ιάλεξη 21) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Εισαγωγή Το µάθηµα EPL032 έχει ως βασικό στόχο την επίλυση προβληµάτων πληροφορικής µε την χρήση της γλώσσας προγραµµατισµού

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

Αδιέξοδα (Deadlocks)

Αδιέξοδα (Deadlocks) Αδιέξοδα (Deadlocks) Περίληψη Αδιέξοδα (deadlocks) Τύποι πόρων (preemptable non preemptable) Μοντελοποίηση αδιεξόδων Στρατηγικές Στρουθοκαµηλισµός (ostrich algorithm) Ανίχνευση και αποκατάσταση (detection

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

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

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

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

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

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

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

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

ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2013 ΕΚΦΩΝΗΣΕΙΣ

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

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

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 12-1 Ανασκόπηση οµής Προγράµµατος µε Συναρτήσεις #include 1 void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης (

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

Επιµέλεια Θοδωρής Πιερράτος

Επιµέλεια Θοδωρής Πιερράτος Εισαγωγή στον προγραµµατισµό Η έννοια του προγράµµατος Ο προγραµµατισµός ασχολείται µε τη δηµιουργία του προγράµµατος, δηλαδή του συνόλου εντολών που πρέπει να δοθούν στον υπολογιστή ώστε να υλοποιηθεί

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

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

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ 1) Πότε χρησιμοποιείται η δομή επανάληψης

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

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

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

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

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ B ΤΑΞΗΣ. χρησιμοποιήσουμε καθημερινά φαινόμενα όπως το θερμόμετρο, Θετικοί-Αρνητικοί αριθμοί.

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

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

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

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

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

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

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

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

ραστηριότητες στο Επίπεδο 1.

ραστηριότητες στο Επίπεδο 1. ραστηριότητες στο Επίπεδο 1. Στο επίπεδο 0, στις πρώτες τάξεις του δηµοτικού σχολείου, όπου στόχος είναι η οµαδοποίηση των γεωµετρικών σχηµάτων σε οµάδες µε κοινά χαρακτηριστικά στη µορφή τους, είδαµε

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

ΑΣΚΗΣΕΙΣ Ακολουθίας. Πίνακας τιµών µεταβλητών Χ Α Β α 5 20 8 10 23 15 15 23 8 β 3 18 4 8 17 13 13 17 4 γ

ΑΣΚΗΣΕΙΣ Ακολουθίας. Πίνακας τιµών µεταβλητών Χ Α Β α 5 20 8 10 23 15 15 23 8 β 3 18 4 8 17 13 13 17 4 γ ΑΣΚΗΣΕΙΣ Ακολουθίας Η δοµή Ακολουθίας είναι η πιο απλή δοµή του δοµηµένου προγραµµατισµού. Η κάθε εντολή ακολουθεί κάποια άλλη. Οι εντολές εκτελούνται ακριβώς µε τη σειρά όπως θα δοθούν στον αλγόριθµο

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

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

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

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

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

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

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

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

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

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

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

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

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

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΑΝΑΚΕΦΑΛΑΙΩΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ Γ' ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΠΕΜΠΤΗ 26 ΑΠΡΙΛΙΟΥ 2012 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΛΥΣΕΙΣ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: 7 Α1. Κάθε σωστή απάντηση

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

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ Σχεδιασμός και υλοποίηση υποδομής σημείωσης διεργασιών στον

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

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

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

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

Περιεχόμενα ΜΕΡΟΣ ΠΡΩΤΟ. Πρόλογος... 13

Περιεχόμενα ΜΕΡΟΣ ΠΡΩΤΟ. Πρόλογος... 13 Περιεχόμενα Πρόλογος... 13 ΜΕΡΟΣ ΠΡΩΤΟ Κεφ. 1 Περί προγραμματισμού και γλωσσών προγραμματισμού Προγράμματα και Λειτουργικά Συστήματα... 17 Γλώσσες προγραμματισμού και εργαλεία ανάπτυξης προγραμμάτων...

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

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

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

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

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

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

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

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

Προγραµµατισµός ΙΙ Java 2 Προγραµµατισµός ΙΙ Java 2 ηµιουργική Εργασία µε Κλάσεις κι Αντικείµενα Τι Θα Μελετήσουµε οµή µιας κλάσης και των µεθόδων της Επιθεώρηση των κλάσεων και των µεθόδων τους Μέθοδοι και this Υπερφόρτωση µεθόδων

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 6: Αφαιρετικότητα, Βιβλιοθήκες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αφαιρετικότητα -Βιβλιοθήκες (packages) Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός

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

ΗΥ 252: Αντικειµενοστρεφής Προγραµµατισµός

ΗΥ 252: Αντικειµενοστρεφής Προγραµµατισµός ΗΥ : Αντικειµενοστρεφής Προγραµµατισµός http://www.csd.uoc.gr/~hy Β. Χριστοφίδης christop@ics.forth.gr Τµήµα Επιστήµης Υπολογιστών, Πανεπιστήµιο Κρήτης Ηράκλειο Κρήτης Γενικές Πληροφορίες Ώρες ιδασκαλίας

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

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

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

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