ΑΡΧΕΣ ΣΧΕΔΙΑΣΗΣ. 5.1 Εισαγωγή
|
|
- Λουκανός Δαγκλής
- 8 χρόνια πριν
- Προβολές:
Transcript
1 ΑΡΧΕΣ ΣΧΕΔΙΑΣΗΣ 5.1 Εισαγωγή Κατά τη διάρκεια της σχεδίασης οποιουδήποτε τεχνικού έργου, επιδιώκεται η αποσύνθεση του συστήματος σε τμήματα, η ανάθεση αρμοδιοτήτων σε κάθε τμήμα και η επικύρωση ότι όλα τα τμήματα μαζί επιτυγχάνουν τους σκοπούς του συστήματος. Στα πλαίσια του λογισμικού, η σχεδίαση είναι μια διαδικασία επίλυσης, της οποίας στόχος είναι η περιγραφή του τρόπου υλοποίησης των λειτουργικών απαιτήσεων, υπό τους περιορισμούς που θέτουν οι μή-λειτουργικές απαιτήσεις (συμπεριλαμβανομένων των περιορισμών κόστους και χρόνου) και η οποία συμμορφώνεται με συγκεκριμένες αρχές καλής ποιότητας. Η διαδικασία αυτή περιλαμβάνει συνήθως ένα πλήθος σχεδιαστικών προβλημάτων, σε κάθε ένα από τα οποία μπορούν να δοθούν πολλές εναλλακτικές λύσεις. Ο λόγος για τον οποίο η σχεδίαση συνδέεται συνήθως με την έννοια της γραφικής αναπαράστασης του συστήματος υπό τύπο διαγράμματος (αρχιτεκτονικό σχέδιο, ηλεκτρολογικό σχέδιο, διαγράμματα UML), είναι ότι σε μια γραφική αναπαράσταση οι διάφορες εναλλακτικές εξετάζονται και μπορούν να εναλλαχθούν χωρίς σημαντικό κόστος. Ένα αντικειμενοστρεφές σύστημα λογισμικού, μπορεί προφανώς να δομηθεί με πάρα πολλούς τρόπους, αν αναλογιστεί κανείς τον αριθμό των δυνατών κλάσεων, των λειτουργιών που μπορούν να περιλαμβάνουν καθώς και των δυνατών συσχετίσεων μεταξύ τους. Το κόστος της σχεδίασης στον κύκλο ζωής ενός προϊόντος λογισμικού είναι σημαντικό και εξαρτάται κυρίως από το μέγεθος του συστήματος και κατ' επέκταση από το πλήθος και είδος των απαιτήσεων. Ωστόσο, αυτό που καθιστά τη σχεδίαση ιδιαιτέρως σημαντική από πλευράς κόστους, είναι το ότι καθορίζει σε εξαιρετικά μεγάλο βαθμό, την ευκολία με την οποία μπορούν να πραγματοποιηθούν αλλαγές στο σύστημα. Επειδή δε το κόστος συντήρησης ενός μεγάλου έργου λογισμικού είναι συνήθως πολλαπλάσιο του κόστους ανάπτυξής του, γίνεται εύκολα κατανοητό, ότι όσο μεγαλύτερη πρόνοια ληφθεί κατά τη διάρκεια της σχεδίασης ώστε το σύστημα να επεκτείνεται και να τροποποιείται με μικρή προσπάθεια, τόσο οικονομικότερη γίνεται η εξέλιξη του λογισμικού. Παρόλο που είναι σχετικά δύσκολο να οριστεί τι συνιστά "καλή" αντικειμενοστρεφή σχεδίαση (χρησιμοποιώντας πρότυπα όπως το ISO 9001 και ISO 9126), είναι αρκετά ευ- 97
2 98 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕΔΙΑΣΗ κολότερο να διατυπωθούν τα συμπτώματα μιας σχεδίασης "κακής" ποιότητας. Τα συμπτώματα που μπορεί να παρουσιαστούν είτε κατά την αρχική ανάπτυξη του λογισμικού, είτε πολύ περισσότερο κατά την εξέλιξη που υφίσταται στη διάρκεια ζωής του είναι τα εξής (Martin, 2003): 1. Δυσκαμψία (Rigidity): Το σύστημα είναι δύσκολο να τροποποιηθεί διότι κάθε αλλαγή σε κάποια μονάδα λογισμικού οδηγεί σε πληθώρα αλλαγών σε άλλες μονάδες του συστήματος. Με το πρόβλημα αυτό έρχονται πολύ συχνά αντιμέτωποι οι προγραμματιστές όταν, για μια φαινομενικά απλή αλλαγή αδυνατούν να εκτιμήσουν ορθά την απαιτούμενη προσπάθεια. Συνήθως πρόκειται για αλλαγές που πρέπει να γίνουν σε αλληλοεξαρτώμενες μονάδες λογισμικού, οι οποίες για να λειτουργήσουν ορθά, πρέπει να τροποποιηθούν καταλλήλως. 2. Ευθραυστότητα (Fragility): Οι αλλαγές που πραγματοποιούνται στο λογισμικό προκαλούν σφάλματα σε διάφορα σημεία. Συχνά, τα νέα προβλήματα ανακύπτουν σε περιοχές φαινομενικά άσχετες προς αυτήν στην οποία πραγματοποιήθηκε η αλλαγή. Η διόρθωση των νέων προβλημάτων δημιουργεί με τη σειρά της νέα προβλήματα και αποτυχίες του λογισμικού. Όσο το λογισμικό γίνεται πιο εύθραυστο, τόσο η πιθανότητα εμφάνισης νέων προβλημάτων πλησιάζει τη βεβαιότητα, με άλλα λόγια η λίστα των bugs δεν αδειάζει ποτέ. 3. Ακινησία (Immobility): Υπάρχει δυσκολία διαχωρισμού του συστήματος σε συστατικά τα οποία μπορούν να επαναχρησιμοποιηθούν σε άλλες εφαρμογές. Μια σχεδίαση χαρακτηρίζεται από ακινησία, αν περιλαμβάνει τμήματα που θα μπορούσαν να χρησιμοποιηθούν σε άλλες περιπτώσεις, αλλά η προσπάθεια και το ρίσκο που εμπλέκονται στο διαχωρισμό αυτών των τμημάτων είναι πολύ μεγάλα. 4. Έλλειψη ρευστότητας (Viscosity): Η πραγματοποίηση τροποποιήσεων με λάθος τρόπο είναι ευκολότερη από την πραγματοποίησή τους με τον ορθό τρόπο. Οι αλλαγές που μπορούν να γίνουν στο λογισμικό είναι εν γένει δυνατό να διατηρήσουν τη σχεδίαση του συστήματος (design preserving changes), ενώ άλλες αλλοιώνουν το σχέδιο υπό μορφή "τρυκ". Αν οι πρώτες αλλαγές πραγματοποιούνται δυσκολότερα από ότι οι δεύτερες, το λογισμικό παρουσιάζει μεγάλη έλλειψη ρευστότητας. 5. Περιττή Πολυπλοκότητα (Needless Complexity): Το λογισμικό περιλαμβάνει στοιχεία που δεν είναι (ούτε πρόκειται να γίνουν) χρήσιμα. Η ύπαρξη περίπλοκων δομών κώδικα, είτε λόγω αδυναμίας εύρεσης αποδοτικότερων δομών, είτε λόγω ενσωμάτωσης πιθανών μελλοντικών απαιτήσεων χρήστη, οδηγεί συνήθως σε εκφυλισμό της αρχικής σχεδίασης και σε δυσκολία κατανόησης του συστήματος. 6. Περιττή Επανάληψη (Needless Repetition): Η σχεδίαση περιλαμβάνει επαναλαμβανόμενες δομές που θα μπορούσαν να ενοποιηθούν υπό μία κοινή αφαίρεση. Οι λειτουργίες αντιγραφής και επικόλλησης (copy-paste) μπορεί να είναι χρήσιμες σε επίπεδο επεξεργασίας κειμένου ή κώδικα, αλλά έχουν συχνά καταστροφικές συνέπειες για το σύστημα. Όταν το ίδιο τμήμα κώδικα εμφανίζεται σε διάφορα σημεία με ελαφρά διαφοροποιημένες εκδόσεις, η ομάδα ανάπτυξης παραβλέπει συχνά την υπερκεί-
3 5 Αρχές σχεδίασης 99 μενη αφαίρεση και οι ενδεχόμενες αλλαγές πρέπει να πραγματοποιούνται σε κάθε σημείο ξεχωριστά. Η εύρεση όλων των επαναλαμβανόμενων τμημάτων και η εξάλειψή τους χρησιμοποιώντας μια κατάλληλη αφαίρεση, βελτιώνει αισθητά την ποιότητα του σχεδίου. 7. Αδιαφάνεια (Opacity): Δυσκολία κατανόησης μιας μονάδας (σε επίπεδο σχεδίου ή κώδικα). Ο κώδικας μπορεί να γραφεί με ξεκάθαρο και εκφραστικό τρόπο, είτε μπορεί να γραφεί με περίπλοκο και αδιαφανή τρόπο (υπάρχουν μάλιστα και παγκόσμιοι διαγωνισμοί όπου σκοπός είναι η συγγραφή κώδικα με τον πλέον "αδιαφανή" και δύσκολο να κατανοηθεί τρόπο!). Ο κώδικας που εξελίσσεται με την πάροδο του χρόνου, συνήθως γίνεται ολοένα και πιο αδιαφανής. Για την αποφυγή αυτού του χαρακτηριστικού απαιτείται συστηματική προσπάθεια συγγραφής κώδικα, έτσι ώστε αυτός να γίνεται εύκολα κατανοητός από τρίτους και ταυτοχρόνως συχνή επισκόπηση από άλλους προγραμματιστές. Όπως χιουμοριστικά αναφέρει ο Roberts (Roberts, 2004), Τεχνολογία Λογισμικού είναι "η δραστηριότητα συγγραφής προγραμμάτων τα οποία μπορούν να κατανοηθούν και να συντηρηθούν από άλλους", σε αντίθεση με τον προγραμματισμό που είναι "η δραστηριότητα συγγραφής προγραμμάτων τα οποία δεν μπορούν να κατανοηθούν και συντηρηθούν από κανέναν άλλο πλην του συγγραφέα". Στη συνέχεια αυτής της ενότητας θα αναλυθούν αρχές (principles) που πρέπει να διέπουν την αντικειμενοστρεφή σχεδίαση ενός συστήματος λογισμικού. Η παραβίαση μιας ή περισσοτέρων από αυτές τις αρχές οδηγεί σχεδόν με βεβαιότητα σε ένα ή περισσότερα από τα ανωτέρω συμπτώματα. Οι αρχές αυτές είναι: 1. Αρχή της Ανοικτής-Κλειστής Σχεδίασης 2. Αρχή της Ενσωμάτωσης 3. Αρχή της Χαμηλής Σύζευξης 4. Αρχή της Μοναδικής Αρμοδιότητας 5. Αρχή της Υποκατάστασης της Liskov 6. Αρχή της Αντιστροφής των Εξαρτήσεων 7. Αρχή του Διαχωρισμού των Διασυνδέσεων Οι ανωτέρω αρχές είναι προϊόν εμπειρίας δεκαετιών στην τεχνολογία λογισμικού. Δεν είναι το αποτέλεσμα της σκέψης ενός μοναδικού προγραμματιστή, αλλά αναπαριστούν την ολοκλήρωση των ιδεών και συστάσεων μεγάλου αριθμού ατόμων. Παρόλο που εδώ εμφανίζονται ως αρχές αντικειμενοστρεφούς σχεδίασης, στην ουσία πρόκειται για ειδικές περιπτώσεις καθιερωμένων αρχών της τεχνολογίας λογισμικού. Οι αρχές της Ενσωμάτωσης και της Χαμηλής Σύζευξης είναι γενικές και καταγράφονται με διαφορετικούς τρόπους στη βιβλιογραφία. Οι υπόλοιπες πέντε έχουν καταγραφεί συστηματικά από τον Martin (Martin, 2003). Αξίζει να σημειωθεί ότι η εφαρμογή των ανωτέρω αρχών δεν πραγματοποιείται διαρκώς και χωρίς λόγο: Είναι λάθος να εφαρμόζεται μια αρχή μόνο γιατί υπάρχει. Οι αρχές
4 100 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕΔΙΑΣΗ εφαρμόζονται όταν παρατηρηθούν κάποια από τα συμπτώματα, ως τρόπος "θεραπείας" τους. 5.2 Αρχή της Ανοικτής-Κλειστής Σχεδίασης "Όλα τα συστήματα λογισμικού αλλάζουν κατά τη διάρκεια ζωής τους". Η φράση αυτή, που έχει διατυπωθεί από πολλούς γνωστούς μηχανικούς λογισμικού, εμπεριέχει τη μεγαλύτερη ίσως αλήθεια της Τεχνολογίας Λογισμικού. Πώς μπορούμε να δημιουργούμε συστήματα τα οποία θα παραμένουν σταθερά ενόψει των επερχόμενων αλλαγών; Με άλλα λόγια, με ποια τεχνική μπορούμε αφενός να υλοποιούμε τις τρέχουσες απαιτήσεις με ευκολία και αφετέρου να προετοιμάζουμε το έδαφος για τις μελλοντικές απαιτήσεις; Πολύ συχνά, μία μοναδική αλλαγή σε ένα πρόγραμμα καταλήγει σε αλυσιδωτές αλλαγές (ripple effects) σε διάφορες εξαρτώμενες μονάδες, με αποτέλεσμα η σχεδίαση να χαρακτηρίζεται από ακαμψία και ευθραυστότητα. Το ζητούμενο είναι αν το σύστημα μπορεί να υποστεί αναδόμηση (refactoring), έτσι ώστε περαιτέρω αλλαγές του ιδίου τύπου να μην προκαλέσουν περαιτέρω τροποποιήσεις. O Bertrand Meyer το 1988 διατύπωσε προς αυτή την κατεύθυνση τη διάσημη αρχή της Ανοικτής-Κλειστής Σχεδίασης (Open-Closed Principle): Αρχή της Ανοικτής-Κλειστής Σχεδίασης: Οι οντότητες λογισμικού (κλάσεις, μονάδες, συναρτήσεις κλπ), θα πρέπει να είναι ανοικτές για επέκταση, αλλά κλειστές σε τροποποίηση. Η αρχή αυτή χαρακτηρίζει οποιοδήποτε "καλά σχεδιασμένο" σύστημα λογισμικού. Οι έννοιες "ανοικτή" και "κλειστή" σχεδίαση προσδιορίζουν ότι οι μονάδες λογισμικού (κλάσεις για αντικειμενοστρεφή συστήματα) που ικανοποιούν την αρχή, θα πρέπει να έχουν δύο κύριες ιδιότητες: "Ανοικτές για επέκταση". Η ιδιότητα αυτή σημαίνει ότι η συμπεριφορά της μονάδας μπορεί να επεκταθεί, προσθέτοντας νέες λειτουργίες που ικανοποιούν τις καινούργιες απαιτήσεις. "Κλειστές για τροποποίηση". Η επέκταση της συμπεριφοράς δεν οδηγεί σε αλλαγές του πηγαίου ή αντικείμενου κώδικα της μονάδας. Με άλλα λόγια, προστίθεται νέα λειτουργικότητα χωρίς να τροποποιηθεί η εκτελέσιμη εκδοχή της μονάδας, (βιβλιοθήκη, DLL, ή.jar αρχείο). Ουσιαστικά, αν η αρχή εφαρμοστεί ορθά, τότε η υλοποίηση περαιτέρω αλλαγών του ιδίου τύπου επιτυγχάνεται με την προσθήκη νέου κώδικα, όχι με την τροποποίηση υπάρχοντος κώδικα που ήδη λειτουργεί. Κάτι τέτοιο μπορεί να φαίνεται οξύμωρο: Ο λογικότερος τρόπος για να επεκταθεί η λειτουργικότητα μιας μονάδας είναι να τροποποιηθεί ο πηγαίος κώδικας της μονάδας. Κατά συνέπεια, το ερώτημα που προκύπτει είναι, πώς μπορούμε να αλλάξουμε το τι κάνει μια μονάδα, χωρίς να τροποποιήσουμε τη μονάδα; Ωστόσο, στην πράξη υπάρχουν σχετικά απλές και αποτελεσματικές στρατηγικές για την προσέγγιση αυτού του ιδανικού.
5 5 Αρχές σχεδίασης 101 Μια από τις θεμελιώδεις έννοιες σε όλες τις αντικειμενοστρεφείς γλώσσες προγραμματισμού, είναι η έννοια της αφαίρεσης (abstraction). Αφαίρεση ονομάζεται η σκόπιμη σύμπτυξη ή απόκρυψη πληροφορίας που αφορά μια διαδικασία ή ένα κατασκεύασμα, με σκοπό την καλύτερη κατανόηση άλλων απόψεων, λεπτομερειών ή δομής. Η εφαρμογή αφαίρεσης σε ένα σύστημα συμβάλλει στην απόκρυψη πληροφορίας (information hiding), μια τεχνική σύμφωνα με την οποία ορίζουμε σε κάποιο επίπεδο (π.χ. σε μια βασική κλάση) τις σημαντικές μόνο πλευρές μιας λειτουργίας ή μιας οντότητας και αγνοούμε τις υπόλοιπες λεπτομέρειες οι οποίες ορίζονται σε κάποιο χαμηλότερο επίπεδο (π.χ. σε μια παράγωγη κλάση). Η τεχνική της αφαίρεσης κατανοείται εύκολα εξετάζοντας έναν παγκόσμιο γεωγραφικό άτλαντα. Σε ένα πρώτο επίπεδο παρουσιάζεται μια απεικόνιση ολόκληρης της υφηλίου. Η απεικόνιση αυτή θα δείχνει τα σημαντικότερα στοιχεία, όπως τους ωκεανούς και τις ηπείρους. Η υπόλοιπη πληροφορία αποκρύπτεται σκοπίμως. Σε ένα χαμηλότερο επίπεδο, άλλοι χάρτες καλύπτουν μικρότερες σε έκταση γεωγραφικές περιοχές και περιλαμβάνουν περισσότερες λεπτομέρειες. Για παράδειγμα, ο χάρτης μιας ηπείρου θα δείχνει τα σύνορα των κρατών και ενδεχομένως ορισμένες μεγάλες πόλεις, ενώ δεν θα περιλαμβάνει λεπτομέρειες όπως ονόματα βουνών ή μικρότερων πόλεων που περιλαμβάνονται σε ακόμη ειδικότερους χάρτες (Σχήμα 5.2.1). Σχήμα 5.2.1: Τεχνική της αφαίρεσης σε ένα γεωγραφικό χάρτη Είναι προφανές ότι σε κάθε επίπεδο αυτού του παραδείγματος, ορισμένη ποσότητα πληροφορίας παρουσιάζεται ενώ συγκεκριμένες λεπτομέρειες αποκρύπτονται σκοπίμως, για λόγους εύκολης κατανόησης και διαχείρισης της συνολικής πληροφορίας. Η κάθοδος σε χαμηλότερο επίπεδο παρέχει μεγαλύτερη λεπτομέρεια. Η έννοια της αφαίρεσης μπορεί να θεωρηθεί ως η εισαγωγή δομής σε ένα σύστημα και μπορεί να υποδιαιρεθεί σε δύο υποκατηγορίες. Η πλέον συνήθης τεχνική αφαίρεσης είναι ο διαμερισμός ενός συνόλου στα τμήματα που το αποτελούν. Η τεχνική αυτή δεν διαφέρει από την κλασσική στρατηγική του "διαίρει και βασίλευε" (divide and conquer). Η άλλη τεχνική αφαίρεσης βασίζεται στην εξειδίκευση του γενικού, προσέγγιση που υλοποιείται στις αντικειμενοστρεφείς γλώσσες με τις αρχές της κληρονομικότητας. Οι τεχνικές του διαμερισμού σε τμήματα και του διαχωρισμού σε ειδικότερες κατηγορίες αντιστοιχούν στις δύο πιο σημαντικές μορφές αφαίρεσης στον αντικειμενοστρεφή προγραμματισμό, όπου είναι συνήθως γνωστές ως αφαίρεση τύπου "έχει" (has-a abstraction) και ως αφαίρεση τύπου "είναι" (is-a abstraction) αντίστοιχα. Κατά το διαμερισμό σε
6 102 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕΔΙΑΣΗ τμήματα για παράδειγμα, ένα αυτοκίνητο "έχει" μία μηχανή και "έχει" ένα σύστημα μετάδοσης. Στο διαχωρισμό σε ειδικότερες κατηγορίες, ένα ποδήλατο "είναι" ένα όχημα, ή "είναι" ένα δίκυκλο για παράδειγμα. Οι δύο αυτές μορφές αφαίρεσης συνδέονται στενά με συγκεκριμένες προγραμματιστικές έννοιες σε διάφορες αντικειμενοστρεφείς γλώσσες προγραμματισμού. Στη C++, Java ή οποιαδήποτε άλλη αντικειμενοστρεφή γλώσσα προγραμματισμού, είναι δυνατόν να κατασκευαστούν αφαιρέσεις οι οποίες είναι μεν σταθερές και καθορισμένες, αναπαριστούν δε ένα απεριόριστο πλήθος δυνατών συμπεριφορών. Στο υπόλοιπο αυτού του βιβλίου, μια αφαίρεση θα αντιστοιχεί σε μια αφηρημένη (χωρίς υλοποίηση) βασική κλάση ή διασύνδεση στη Java και οι απεριόριστες συμπεριφορές αναπαρίστανται από όλες τις δυνατές κλάσεις απογόνους. Αυτό που είναι σημαντικό να κατανοηθεί είναι ότι μια μονάδα λογισμικού είναι δυνατό να "χειρίζεται" μια αφαίρεση. Μια τέτοια μονάδα μπορεί να είναι κλειστή για τροποποιήσεις καθώς εξαρτάται από την αφαίρεση που είναι σταθερή. Ωστόσο, η συμπεριφορά της μονάδας μπορεί να επεκταθεί δημιουργώντας νέες παράγωγες κλάσεις της αφαίρεσης. Στο Σχήμα φαίνεται ένα απλό σχέδιο που δεν συμβαδίζει με την αρχή Ανοικτής- Κλειστής Σχεδίασης. Οι κλάσεις Πελάτης (Client) και Εξυπηρετητής (Server) είναι συγκεκριμένες, έχουν δηλαδή υλοποίηση και από αυτές μπορούν να δημιουργηθούν στιγμιότυπα. Η κλάση Πελάτης χρησιμοποιεί (uses) την κλάση Εξυπηρετητής για τη διεκπεραίωση κάποιας λειτουργίας. Αν ένα αντικείμενο της κλάσης Πελάτης θελήσει να χρησιμοποιήσει ένα εξυπηρετητή διαφορετικού τύπου, τότε η κλάση Πελάτης πρέπει να τροποποιηθεί, ώστε να ενημερώσει τη συσχέτιση μεταξύ των δύο κλάσεων. Πελάτης Εξυπηρετητής Σχήμα 5.2.2: O Πελάτης (Client) δεν είναι κλειστός σε τροποποιήσεις Το σχέδιο που συμμορφώνεται με την αρχή Ανοικτής-Κλειστής Σχεδίασης είναι αυτό που φαίνεται στο Σχήμα και συνιστά το πρότυπο "Στρατηγική" που θα εξεταστεί σε επόμενο κεφάλαιο. H κλάση ΔιασύνδεσηΠελάτη είναι μια αφηρημένη κλάση με αφηρημένες μεθόδους (είτε μια διασύνδεση στη Java). Το όνομα ΔιασύνδεσηΠελάτη (και όχι ΔιασύνδεσηΕξυπηρετητή) επιλέγεται καθώς οι αφηρημένες κλάσεις σχετίζονται στενότερα με τις κλάσεις-πελάτες που τις χρησιμοποιούν, παρά με τις κλάσεις που τις υλοποιούν. Η κλάση Πελάτης χρησιμοποιεί αυτή την αφαίρεση, όμως κατά τη διάρκεια εκτέλεσης, τα αντικείμενα της κλάσης Πελάτης θα χρησιμοποιούν αντικείμενα της παράγωγης κλάσης Εξυπηρετητής. Αν τα αντικείμενα-πελάτες απαιτηθεί να χρησιμοποιήσουν μια διαφορετική κλάση εξυπηρετητή, τότε αρκεί η δημιουργία μιας νέας παράγωγης κλάσης της ΔιασύνδεσηΠελάτη και το "πέρασμα" της ως δείκτη (ή αναφοράς) στο αντικείμενο-πελάτη. Η κλάση Πελάτης θα παραμείνει αμετάβλητη.
7 5 Αρχές σχεδίασης 103 Πελάτης «interface» ΔιασύνδεσηΠελάτη Εξυπηρετητής Σχήμα 5.2.3: Πρότυπο "Στρατηγική" (Strategy Pattern): Ο Πελάτης είναι ανοικτός για επέκταση και κλειστός σε τροποποίηση Το παράδειγμα που ακολουθεί χρησιμοποιείται σε πολλά βιβλία Αντικειμενοστρεφούς Ανάλυσης και Σχεδίασης για να παρουσιάσει τον τρόπο με τον οποίο λειτουργεί ο πολυμορφισμός (π.χ. Meyer, 1997). Στη συνέχεια θα χρησιμοποιηθεί για να παρουσιαστεί μια περίπτωση παραβίασης και μια περίπτωση συμμόρφωσης με την αρχή της Ανοικτής- Κλειστής Σχεδίασης. Θεωρούμε μια εφαρμογή η οποία πρέπει να μπορεί να λαμβάνει ως είσοδο μια λίστα από κύκλους και τετράγωνα (που έχουν ήδη δημιουργηθεί), να διατρέξει τη λίστα και να σχεδιάζει τα αντίστοιχα σχήματα στην οθόνη. Παραβίαση της αρχής Ανοικτής-Κλειστής Σχεδίασης Η σχεδίαση του συστήματος που παραβιάζει την αρχή, φαίνεται στο διάγραμμα κλάσεων του Σχήματος Η μέθοδος σχεδίασης της κλάσης Painter διατρέχει μια λίστα από αναφορές προς αντικείμενα-σχήματα, εξετάζει τον τύπο κάθε αντικειμένου κατά τη διάρκεια της εκτέλεσης και εκτελεί τις αντίστοιχες σχεδιαστικές ενέργειες, αντλώντας στοιχεία από τα αντίστοιχα αντικείμενα. Ο κώδικας Java για την εφαρμογή αυτή δίνεται στη συνέχεια. Κλάση - Πελάτης: Δημιουργεί διάφορα σχήματα και εν συνεχεία δημιουργεί ένα αντικείμενο Painter, στο οποίο περνά τα σχήματα ως παράμετρο Κλάση σχεδίασης σχημάτων. Παραβιάζει την αρχή Ανοικτής-Κλειστής Σχεδίασης Square ShapeApplication <<δημιουργεί>> Painter Circle <<δημιουργεί>> <<δημιουργεί>> Σχήμα 5.2.4: Εφαρμογή Σχεδίασης Σχημάτων: Παραβίαση της αρχής Ανοικτής-Κλειστής Σχεδίασης
8 104 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕΔΙΑΣΗ import javax.swing.*; import java.awt.*; import java.util.arraylist; public class ShapeApplication extends JFrame{ private Painter canvas; public ShapeApplication() { Square S1 = new Square(50, 50, 50); Circle C1 = new Circle(100, 100, 40); Circle C2 = new Circle(200, 100, 20); ArrayList shapes = new ArrayList(); shapes.add(s1); shapes.add(c1); shapes.add(c2); canvas = new Painter(shapes); setcontentpane(canvas); setdefaultcloseoperation(jframe.exit_on_close); setsize(300, 300); setvisible(true); public static void main(string[] args) { ShapeApplication app1 = new ShapeApplication(); class Painter extends JPanel{ private ArrayList shapes; public Painter(ArrayList shapestodraw) { shapes = shapestodraw; public void paintcomponent(graphics g) { super.paintcomponent(g); for(int i=0; i<shapes.size(); i++) { if(shapes.get(i).getclass().getname() == "Square") { Square s = (Square)shapes.get(i); g.drawrect(s.gettopleftx(), s.gettoplefty(),
9 5 Αρχές σχεδίασης 105 s.getwidth(), s.getwidth()); else if(shapes.get(i).getclass().getname() == "Circle") { Circle c = (Circle)shapes.get(i); g.drawarc(c.getcenterx()-c.getradius(), c.getcentery()-c.getradius(), c.getradius()*2, c.getradius()*2, 0, 360); class Square { private int topleftx; private int toplefty; private int width; public Square(int x, int y, int itswidth) { topleftx = x; toplefty = y; width = itswidth; public int gettopleftx() { return topleftx; public int gettoplefty() { return toplefty; public int getwidth() { return width; class Circle { private int centerx; private int centery; private int radius; public Circle(int x, int y, int itsradius) { centerx = x; centery = y; radius = itsradius;
10 106 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕΔΙΑΣΗ public int getcenterx() { return centerx; public int getcentery() { return centery; public int getradius() { return radius; Η κλάση Painter δεν συμμορφώνεται με την αρχή της Ανοικτής-Κλειστής Σχεδίασης, γιατί δεν μπορεί να "κλειστεί" έναντι νέων τύπων σχημάτων. Αν θέλαμε να επεκτείνουμε την κλάση ώστε να μπορεί να σχεδιάζει μια λίστα σχημάτων η οποία θα περιελάμβανε και τρίγωνα, θα έπρεπε να τροποποιήσουμε τον κώδικα της κλάσης. Στην πραγματικότητα, η κλάση πρέπει να τροποποιείται για κάθε νέο τύπο σχήματος που μπορεί να χρειαστεί να σχεδιαστεί στο μέλλον. Πέραν των άλλων σχεδιαστικών προβλημάτων, η κλάση Painter αναλαμβάνει επίσης αρμοδιότητες (την ίδια τη σχεδίαση του κάθε σχήματος), που κανονικά θα έπρεπε να κατανείμει μέσω διαβίβασης μηνυμάτων στα αντικείμενα κάθε σχήματος (delegation). Οι συνέπειες από την ανωτέρω επιλογή των σχεδιαστών του συστήματος θα ήταν πολύ πιο έντονες σε ένα πραγματικό σύστημα. Δομές όπως οι αλυσιδωτές εντολές if/else στη μέθοδο paintcomponent() της κλάσης Painter, θα εμφανίζονταν διαρκώς και σε διάφορα σημεία της εφαρμογής, η κάθε μία για διαφορετικούς σκοπούς. Η μια μέθοδος μπορεί να είχε ως σκοπό την μετακίνηση σχημάτων, η άλλη την αλλαγή των διαστάσεων ή χρωμάτων, διαγραφή τους κ.ο.κ. Η προσθήκη ενός νέου σχήματος θα επέβαλλε την αναζήτηση όλων των θέσεων όπου μπορεί να υπήρχαν αλυσιδωτές εντολές if/else ή εντολές switch. Πολλές από αυτές τις εντολές ελέγχου μπορεί να συνδυάζονταν απλοποιώντας τη λογική, εκτελώντας για παράδειγμα ορισμένες κοινές ενέργειες για κύκλους και τετράγωνα. Κατά συνέπεια, ο εντοπισμός, η κατανόηση και τροποποίηση όλων των σημείων κώδικα όπου πρέπει να προστεθεί το νέο σχήμα θα ήταν εξαιρετικά δύσκολες και δαπανηρές από πλευράς χρόνου, ενέργειες. Το σχέδιο κατά συνέπεια είναι εύθραυστο καθώς όλες αυτές οι αλλαγές ενδέχεται να εισάγουν σφάλματα. Αυτό που πρέπει επίσης να επισημανθεί, είναι ότι σε γλώσσες όπως η C++, όλες οι μονάδες λογισμικού που εξαρτώνται (μέσω οδηγιών include) από την κλάση Painter, θα έπρεπε να μεταγλωττιστούν εκ νέου σε περίπτωση αλλαγής της Painter. Τροποποίηση των αντικείμενων αρχείων μπορεί να σημαίνει εκ νέου εγκατάσταση βιβλιοθηκών και DLL σε ένα σύστημα. Η απλή ενέργεια της προσθήκης ενός μόνο νέου σχήματος στην εφαρμογή, προκαλεί μια αλυσίδα αλλαγών σε αρχεία πηγαίου κώδικα και σε πολύ περισσότερα αρχεία αντικείμενου κώδικα. Είναι εμφανές ότι η επίδραση της προσθήκης ενός μόνο νέου σχήματος είναι πολύ μεγάλη και μπορεί να προκαλέσει δυσκαμψία. Τέλος, η μονάδα λογισμικού Painter δεν είναι επαναχρησιμοποιήσιμη και το σύστημα εμφανίζει το σύμπτωμα της ακινησίας. Καθώς η μέθοδος paintcomponent() της κλάσης χρησιμοποιεί αναφορές προς τις συγκεκριμένες κλάσεις Square και Circle, σε κάθε νέο περιβάλλον όπου απαιτείται η επαναχρησιμοποίηση της κλάσης Painter, επιβάλλεται και η μεταφορά των αρχείων πηγαίου κώδικα ή των αντίστοιχων μεταγλωττισμένων αρχείων αυτών των κλάσεων.
11 5 Αρχές σχεδίασης 107 Συμμόρφωση με την Αρχή της Ανοικτής-Κλειστής Σχεδίασης Η βελτίωση του προγράμματος επιτυγχάνεται με εξαιρετικά κομψό τρόπο αξιοποιώντας τις δυνατότητες του πολυμορφισμού. Μια νέα αφηρημένη κλάση Shape προστίθεται στο σύστημα και ενσωματώνει οτιδήποτε μπορεί να μεταβληθεί, δηλαδή τη μέθοδο σχεδίασης οποιουδήποτε σχήματος. Η αφηρημένη κλάση ορίζει μια αφηρημένη μέθοδο draw(), ενώ οποιοδήποτε σχήμα είναι παράγωγη κλάση της Shape και υλοποιεί ανάλογα τη μέθοδο draw(). Το διάγραμμα κλάσεων παρουσιάζεται στο Σχήμα και ο κώδικας σε Java στη συνέχεια. ShapeApplication <<δημιουργεί>> Painter Shape + draw() <<δημιουργεί>> <<δημιουργεί>> Circle +draw() Square +draw() Σχήμα 5.2.5: Εφαρμογή Σχεδίασης Σχημάτων: Συμμόρφωση με την αρχή Ανοικτής-Κλειστής Σχεδίασης import javax.swing.*; import java.awt.*; import java.util.arraylist; public class ShapeApplication extends JFrame{ private Painter canvas; public ShapeApplication() { Square S1 = new Square(50, 50, 50); Circle C1 = new Circle(100, 100, 40); Circle C2 = new Circle(200, 100, 20); ArrayList shapes = new ArrayList(); shapes.add(s1); shapes.add(c1); shapes.add(c2); canvas = new Painter(shapes); setcontentpane(canvas);
12 108 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕΔΙΑΣΗ setdefaultcloseoperation(jframe.exit_on_close); setsize(300, 300); setvisible(true); public static void main(string[] args) { ShapeApplication app1 = new ShapeApplication(); class Painter extends JPanel{ private ArrayList shapes; public Painter(ArrayList shapestodraw) { shapes = shapestodraw; public void paintcomponent(graphics g) { super.paintcomponent(g); for(int i=0; i<shapes.size(); i++) { Shape shape = (Shape)shapes.get(i); shape.draw(g); abstract class Shape extends JComponent { abstract void draw(graphics g); class Square extends Shape { private int topleftx; private int toplefty; private int width; public Square(int x, int y, int itswidth) { topleftx = x; toplefty = y; width = itswidth; public void draw(graphics g) { g.drawrect(topleftx, toplefty, width, width);
13 5 Αρχές σχεδίασης 109 class Circle extends Shape { private int centerx; private int centery; private int radius; public Circle(int x, int y, int itsradius) { centerx = x; centery = y; radius = itsradius; public void draw(graphics g) { g.drawarc(centerx-radius, centery-radius, radius*2, radius*2, 0, 360); Η κλάση Painter είναι πλέον ανοικτή για αλλαγές και κλειστή σε τροποποιήσεις. Αν πλέον θελήσουμε να επεκτείνουμε τη συμπεριφορά της μεθόδου paintcomponent() έτσι ώστε να σχεδιάζουμε ένα νέο τύπο σχήματος, το μόνο που χρειάζεται είναι να προσθέσουμε μία νέα παράγωγη κλάση της κλάσης Shape. Η κλάση Painter δεν χρειάζεται να τροποποιηθεί και κατά συνέπεια συμμορφώνεται με την αρχή της Ανοικτής- Κλειστής Σχεδίασης. Το πρόγραμμα τροποποιείται προσθέτοντας νέο κώδικα και όχι αλλάζοντας κώδικα σε υπάρχουσες κλάσεις. Για την ακρίβεια, η προσθήκη ενός νέου σχήματος (π.χ. ενός Τριγώνου) δεν έχει απολύτως καμία επίδραση σε καμία από τις κλάσεις που φαίνονται παραπάνω, εκτός φυσικά από τον πελάτη της εφαρμογής που είναι υπεύθυνος για τη δημιουργία ενός τριγώνου στο σύστημα. Το σύμπτωμα της ευθραυστότητας εξαλείφθηκε αφού δεν απαιτείται ο εντοπισμός σημείων που χρήζουν αλλαγών. Επιπλέον δεν χρειάζεται να μεταγλωττιστούν άλλα αρχεία αντικείμενου κώδικα που είναι ήδη σε λειτουργία και το πρόγραμμα παύει να είναι δύσκαμπτο. Η μοναδική μονάδα που πρέπει να τροποποιηθεί και μεταγλωττιστεί είναι η μονάδα που δημιουργεί στιγμιότυπα της νέας παράγωγης κλάσης της Shape. Συνήθως αυτό γίνεται είτε στη συνάρτηση main(), είτε σε κάποια συνάρτηση που καλείται από τη main() ή σε κάποια μέθοδο αντικειμένου που δημιουργείται στη main() (τέτοια αντικείμενα είναι γνωστά ως εργοστάσια). Το τελευταίο σύμπτωμα που εξαλείφθηκε είναι η ακινησία. Η κλάση Painter μπορεί να επαναχρησιμοποιηθεί από οποιαδήποτε εφαρμογή απαιτεί τη σχεδίαση σχημάτων που περιλαμβάνονται σε μια λίστα χωρίς να πρέπει να μεταφερθούν και οι κλάσεις Circle ή Square. Η τεχνική που χρησιμοποιήθηκε στο συγκεκριμένο παράδειγμα υλοποιεί το πρότυπο "Στρατηγική" που παρουσιάστηκε διαγραμματικά στο Σχήμα Στο Σχήμα παρουσιάζεται μια εναλλακτική δομή που αντιστοιχεί στο πρότυπο σχεδίασης "Μέθοδος
14 110 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕΔΙΑΣΗ Υπόδειγμα". Η αφηρημένη βασική κλάση Στρατηγική έχει ένα σύνολο συγκεκριμένων δημόσιων μεθόδων, οι οποίες υλοποιούν μια στρατηγική κάποιου τύπου, αντίστοιχα με τις μεθόδους των πελατών στην προηγούμενη περίπτωση. Όπως και πριν, αυτές οι μέθοδοι περιγράφουν κάποια εργασία που πρέπει να γίνει υπό όρους ορισμένων αφηρημένων διασυνδέσεων. Ωστόσο, σε αυτή την περίπτωση, η αφηρημένη διασύνδεση είναι μέρος της ίδιας της κλάσης Στρατηγική. Στη C++, η αφαίρεση θα επρόκειτο για αμιγώς υπερβατές μεθόδους, ενώ στη Java θα ήταν abstract μέθοδοι. Αυτές οι αφηρημένες μέθοδοι υλοποιούνται στις παράγωγες κλάσεις της κλάσης Στρατηγική. Επομένως, η συμπεριφορά που προσδιορίζεται μέσα στην κλάση Στρατηγική μπορεί να επεκταθεί δημιουργώντας νέες υποκλάσεις της, χωρίς να απαιτείται τροποποίηση του πηγαίου κώδικα της κλάσης Στρατηγική και φυσικά ούτε των κλάσεων που τη χρησιμοποιούν, προστατεύοντας το υπόλοιπο σύστημα από τη "διάδοση" των αλλαγών. Στην εφαρμογή της σχεδίασης σχημάτων, το πρότυπο "Μέθοδος Υπόδειγμα" θα μπορούσε να υλοποιηθεί με την μεταφορά των λειτουργιών σάρωσης των σχημάτων της λίστας μέσα στην κλάση Shape, η οποία θα διατηρούσε την αφηρημένη μέθοδο σχεδίασης draw() (και θα μπορούσε πλέον να δηλώνεται ως ιδιωτική). Στρατηγική +ΜέθοδοςΣτρατηγικής() -ΜέθοδοςΥλοποίησης() Υλοποίηση -ΜέθοδοςΥλοποίησης() Σχήμα 5.2.6: Πρότυπο "Μέθοδος Υπόδειγμα" (Template Method Pattern): Η βασική κλάση είναι ανοικτή για επέκταση και κλειστή σε τροποποίηση Συμπερασματικά Ο αντικειμενοστρεφής προγραμματισμός προσφέρει σημαντικά πλεονεκτήματα στην περίπτωση ανάπτυξης συστημάτων που πρόκειται να εξελιχθούν λόγω αλλαγών στις απαιτήσεις. Αν υποθέσουμε ότι ένα σύστημα πρόκειται να κατασκευασθεί και να παραμείνει ως έχει για ολόκληρο τον κύκλο ζωής του, τότε ο αντικειμενοστρεφής όχι μόνο δεν υπερέχει έναντι άλλων μοντέλων, αλλά ίσως να προσθέτει περιττή πολυπλοκότητα. Αν όμως, όπως συμβαίνει στην πραγματικότητα, οι αλλαγές στις απαιτήσεις επιβάλλουν την τροποποίηση του λογισμικού, τότε η αρχή της Ανοικτής-Κλειστής Σχεδίασης εξασφαλίζει ότι οι αλλαγές θα πραγματοποιηθούν με την μικρότερη δυνατή προσπάθεια, χρόνο και κόστος.
15 5 Αρχές σχεδίασης Αρχή της Ενσωμάτωσης Η αρχή της ενσωμάτωσης ή αρχή της ενθυλάκωσης (Encapsulation Principle) αποτελεί έναν από τους θεμελιώδεις κανόνες αντικειμενοστρεφούς προγραμματισμού και από τα πρώτα στοιχεία που μαθαίνει κάποιος να εφαρμόζει στις αντικειμενοστρεφείς γλώσσες, ανεξαρτήτως του αν δεν συνειδητοποιεί πάντοτε τη χρησιμότητά του. Η αρχή διατυπώνεται ως εξής: Αρχή της Ενσωμάτωσης: Η εσωτερική κατάσταση ενός αντικειμένου πρέπει να είναι τροποποιήσιμη μόνο μέσω της δημόσιας διασύνδεσης του. Με τον ορισμό μιας κλάσης επιτυγχάνεται ομαδοποίηση της συμπεριφοράς και της κατάστασης: Κάθε αντικείμενο στιγμιότυπο μιας κλάσης περιλαμβάνει μέλη δεδομένων (ιδιότητες) που συνιστούν την εσωτερική κατάσταση του αντικειμένου και μεθόδους (που δηλώνονται σε επίπεδο κλάσης) και καθορίζουν τη συμπεριφορά μιας οικογένειας αντικειμένων. Σύμφωνα με την ανωτέρω αρχή, οι ιδιότητες πρέπει να μην είναι προσπελάσιμες εκτός της κλάσης, δηλαδή η τροποποίηση των τιμών των ιδιοτήτων θα πρέπει να επιτρέπεται μόνο μέσω της πρόσβασης που παρέχουν οι δημόσια διαθέσιμες μέθοδοι (Σχήμα 5.3.1). κατάσταση συμπεριφορά { { Αντικείμενο1 : Λογαριασμός - όνομα_κατόχου - αριθμός - υποκατάστημα_τράπεζας - υπόλοιπο + υπολογισμός_τόκων( ) + εκτύπωση_υπολοίπου( ) + κατάθεση( ) + ανάληψη( ) πρόσβαση στις ιδιότητες μόνο μέσω των δημόσιων μεθόδων Σχήμα 5.3.1: Αρχή της Ενσωμάτωσης σε ένα αντικείμενο τύπου Λογαριασμός Κατ' αυτόν τον τρόπο, ο σχεδιαστής της κλάσης, επιβάλλοντας στον "έξω κόσμο" να προσπελάσει τις ιδιότητες μέσω των δημόσια διαθέσιμων μεθόδων, έχει τη δυνατότητα να καθορίσει τους κανόνες και τα δικαιώματα πρόσβασης. Πρακτικά, η αρχή της ενσωμάτωσης υλοποιείται απλά, θέτοντας την ορατότητα όλων των ιδιοτήτων ως ιδιωτική (private). Τα ιδιωτικά μέλη δεδομένων αποκρύπτονται κατά συνέπεια από τους προγραμματιστές άλλων κλάσεων ή άλλων συστημάτων (παραμένει ωστόσο η δυνατότητα προσπέλασής τους από άλλα αντικείμενα της ίδιας κλάσης). Το πλεονέκτημα που προκύπτει από την εφαρμογή της αρχής της ενσωμάτωσης σχετίζεται με τη δυνατότητα διατήρησης της εγκυρότητας και συνέπειας της κατάστασης ενός αντικειμένου. Για την καλύτερη κατανόηση της έννοιας της εγκυρότητας ενός αντικειμέ-
16 112 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕΔΙΑΣΗ νου θεωρούμε μια κλάση TimeStamp που αφορά χρονικά στιγμιότυπα, τα οποία περιλαμβάνουν την ώρα, λεπτά και δευτερόλεπτα μιας δεδομένης χρονικής στιγμής: class TimeStamp { public: TimeStamp(); TimeStamp(int hr, int min, int sec); void printtimestamp(); ; int hour; //μέλη δεδομένων με δημόσια ορατότητα!!! int minute; int second; Στην ανωτέρω κλάση οι προγραμματιστές έχουν αφήσει περιθώρια για την εμφάνιση σφαλμάτων θέτοντας την ορατότητα των μελών δεδομένων ως δημόσια (public). Έστω ένα συγκεκριμένο αντικείμενο αυτής της κλάσης όπως δημιουργείται από την κλήση του κατασκευαστή: TimeStamp T1(23, 45, 17); Αν κάποια κλάση πελάτης της κλάσης TimeStamp θελήσει να αυξήσει κατά δύο ώρες την χρονική στιγμή επιχειρώντας να τροποποιήσει απευθείας την ιδιότητα hour του αντικείμενου T1 ως εξής: //κώδικας κλάσης πελάτη... Τ1.hour++; T1.hour++; θα προκύψει ένα αντικείμενο (το Τ1), του οποίου η κατάσταση δεν θα είναι έγκυρη καθώς η χρονική στιγμή στην οποία θα αναφέρεται θα είναι 25:45:17 (!!). Με άλλα λόγια, η ορθότητα του αντικειμένου θα έχει πάψει να ισχύει, καθώς μια από τις αναλλοίωτες ενός αντικειμένου TimeStamp δεν θα είναι πλέον αληθής (όπου αναλλοίωτη είναι μια λογική πρόταση που πρέπει να είναι πάντοτε αληθής). Αν από την άλλη, η πρόσβαση στα μέλη δεδομένων επιτυγχάνεται μόνο μέσω των δημόσια διαθέσιμων μεθόδων, τότε ο σχεδιαστής της κλάσης μπορεί να εγγυηθεί την εγκυρότητα των αντικειμένων σε όλες τις χρονικές στιγμές. Σχεδιάζοντας τον κατασκευαστή ώστε να παράγει μόνο έγκυρα αντικείμενα της κλάσης TimeStamp (τα οποία για παράδειγμα έχουν τιμές ιδιοτήτων που πληρούν προκαθορισμένες συνθήκες π.χ. 0 hour 23 ) και τις μεθόδους, ώστε να μην καταργούν την ισχύ των αναλλοίωτων, ε- ξασφαλίζεται ότι ο κώδικας καμιας άλλης κλάσης δεν μπορεί να αλλοιώσει την ορθότητα ενός αντικειμένου. Στο ανωτέρω παράδειγμα, η δυνατότητα αύξησης της ώρας κατά ένα, μπορεί και πρέπει να παρέχεται μόνο μέσω κατάλληλης μεθόδου incrementhour(), η οποία θα ελέγχει την περίπτωση υπέρβασης των ορίων. Ταυτοχρόνως, όλα τα δεδομένα πρέπει να είναι ιδιωτικά. Για παράδειγμα:
17 5 Αρχές σχεδίασης 113 class TimeStamp {... public: void incrementhour(); private: int hour; int minute; int second;... ; void TimeStamp::incrementHour() { hour++; if(hour == 24) hour = 0; Συμπερασματικά Η παραβίαση της αρχής της ενσωμάτωσης είναι δυνατόν να προκαλέσει ορισμένα από τα πιο σημαντικά προβλήματα συντήρησης αντικειμενοστρεφούς λογισμικού. Επιτρέποντας την τροποποίηση ιδιοτήτων ενός αντικειμένου μέσα από μεθόδους άλλων κλάσεων, στην ουσία καταργείται η ομαδοποίηση δεδομένων και συμπεριφοράς, στοιχείο που είναι υπεύθυνο για τα περισσότερα πλεονεκτήματα του αντικειμενοστρεφούς μοντέλου. Αν τα δεδομένα είναι δημόσια, είναι πολύ δύσκολο να καθοριστεί ποιο τμήμα του κώδικα του συστήματος εξαρτάται από αυτά τα δεδομένα χρησιμοποιώντας τα. Το πρόβλημα αυτό, είναι ακριβώς ένα από τα μειονεκτήματα των διαδικασιακών γλωσσών. Αν λόγω μελλοντικών απαιτήσεων αλλάξει η αναπαράσταση των δεδομένων, τότε όλα τα τμήματα κώδικα που τα χρησιμοποιούν πρέπει να ενημερωθούν, ενώ ο εντοπισμός αυτών των τμημάτων είναι εξαιρετικά επίπονη διαδικασία. Το λογισμικό αποκτά επομένως δυσκαμψία, ευθραυστότητα και ακινησία. Αν όμως ισχύει η αρχή της ενσωμάτωσης, τότε σε περίπτωση αλλαγών στα δεδομένα, απαιτείται η ενημέρωση του κώδικα μόνο της κλάσης που περιέχει και προσπελαύνει τα δεδομένα, ενώ οι κλάσεις-πελάτες που χρησιμοποιούν τα δεδομένα μέσω της δημόσιας διασύνδεσης, παραμένουν αναλλοίωτες. 5.4 Αρχή της Χαμηλής Σύζευξης Στο στάδιο της αρχιτεκτονικής σχεδίασης κάθε συστήματος λογισμικού στόχος είναι η αποσύνθεση σε μονάδες (modules) που αναλαμβάνουν την υλοποίηση τμημάτων της συνολικής λειτουργικότητας. Μια μονάδα είναι ένα ανεξάρτητο συστατικό λογισμικού (το οποίο μπορεί συνήθως να μεταγλωττίζεται ανεξάρτητα) με σαφώς καθορισμένη λειτουργικότητα και σαφώς καθορισμένο σύνολο εισόδων και εξόδων. Η έννοια της μονάδας διαφέρει ανάλογα με το μοντέλο και τη γλώσσα προγραμματισμού, ενώ στα αντικειμενοστρεφή συστήματα ως μονάδες θεωρούνται οι κλάσεις. Η σχεδίαση συνίσταται στον
18 114 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕΔΙΑΣΗ προσδιορισμό του συνόλου των συστατικών και των μεταξύ τους διασυνδέσεων, ώστε να ικανοποιείται ένα συγκεκριμένο σύνολο απαιτήσεων. Ωστόσο, οι τρόποι με τους οποίους οι απαιτήσεις μπορούν να μεταφραστούν σε αρχιτεκτονικά σχέδια είναι πάρα πολλοί, χωρίς να είναι εύκολη η διάκριση μεταξύ καλής και κακής σχεδίασης και χωρίς να υπάρχουν αυστηροί κανόνες. Υπάρχουν όμως ορισμένα επιθυμητά χαρακτηριστικά για ένα σχέδιο καλής ποιότητας, με βάση τα οποία μπορεί να καθοδηγηθεί η διαδικασία σχεδίασης. Για παράδειγμα, βασικός στόχος της σχεδίασης είναι να καταστήσει όσο το δυνατόν πιο ανεξάρτητα τα συστατικά λογισμικού. Δύο έννοιες πολύ μεγάλης σημασίας για την Τεχνολογία Λογισμικού που σχετίζονται με το βαθμό α- νεξαρτησίας των συστατικών, είναι η σύζευξη και η συνεκτικότητα. Η σύζευξη (coupling) αναφέρεται στο βαθμό εξάρτησης μεταξύ δύο συστατικών λογισμικού. Η εξάρτηση μπορεί να οφείλεται σε πολλούς λόγους, όπως η κλήση μεθόδων (συναρτήσεων) του ενός συστατικού από το άλλο, το "πέρασμα" δεδομένων από το ένα συστατικό στο άλλο ή η χρήση συστατικών ενός τύπου ως ιδιότητες (μεταβλητές) σε κάποιο άλλο. Δύο μονάδες λογισμικού που εξαρτώνται σε μεγάλο βαθμό μεταξύ τους λέγεται ότι έχουν ισχυρή σύζευξη, ενώ αν η εξάρτηση είναι ασθενής πρόκειται για χαλαρή σύζευξη. Δύο μονάδες μπορεί να έχουν μηδενική σύζευξη εάν δεν υπάρχει καμία συσχέτιση μεταξύ τους. Η συνεκτικότητα (cohesion) αναφέρεται στο βαθμό "εσωτερικής" λειτουργικής συνάφειας μεταξύ των τμημάτων ενός συστατικού. Όσο πιο συνεκτικό είναι ένα συστατικό, τόσο πιο πολύ τα επιμέρους τμήματά του σχετίζονται μεταξύ τους και συνεργάζονται για την επίτευξη ενός κοινού σκοπού. Αν για παράδειγμα σε μια μονάδα λογισμικού, έχουν τοποθετηθεί άσχετες λειτουργίες ή δεδομένα (π.χ. μια λειτουργία υπολογισμού τόκων και μια λειτουργία κρυπτογράφησης κειμένου), τότε η συνεκτικότητα είναι χαμηλή (συμπτωματική συνεκτικότητα). Στην ιδανική περίπτωση, μια μονάδα περιλαμβάνει πλήρως συσχετισμένα τμήματα που όλα είναι απαραίτητα για την εκτέλεση της ίδιας μοναδικής λειτουργίας (λειτουργική συνεκτικότητα). Η συνεκτικότητα θα εξεταστεί στα πλαίσια μιας άλλης αρχής που έχει ως στόχο την αύξηση της, την αρχή της Μοναδικής Αρμοδιότητας. Η σύζευξη και η συνεκτικότητα μπορούν να ποσοτικοποιηθούν και να μετρηθούν τόσο στον διαδικασιακό όσο και στον αντικειμενοστρεφή προγραμματισμό. Σε οποιοδήποτε σύστημα λογισμικού, κύριο μέλημα της διαδικασίας σχεδίασης είναι η ικανοποίηση της ακόλουθης αρχής: Αρχή της Χαμηλής Σύζευξης: Σε ένα σχέδιο λογισμικού πρέπει να επιδιώκεται η επίτευξη της μικρότερης δυνατής σύζευξης μεταξύ των συστατικών του. Η επιδίωξη χαμηλής σύζευξης, κυρίως αξιοποιώντας τις τεχνικές της αφαίρεσης και της απόκρυψης πληροφορίας, εξασφαλίζει ανεξαρτησία μεταξύ των συστατικών του σχεδίου. Με αυτό τον τρόπο γίνεται ευκολότερη η υλοποίηση, ο έλεγχος και η συντήρηση του λογισμικού. Αν δύο ή περισσότερες μονάδες είναι σχετικά ανεξάρτητες, η κατανομή του έργου ανάπτυξης κάθε μονάδας σε διαφορετικούς προγραμματιστές είναι απλούστερη, καθώς δεν απαιτείται συχνή αλληλεπίδραση για την κατανόηση τους. Επιπρόσθετα, η διόρθωση του λογισμικού κατά τη διάρκεια του ελέγχου απλοποιείται, καθώς είναι ευκολότερος ο εντοπισμός των σφαλμάτων εντός των ορίων κάθε μονάδας. Τέλος, κατά την τρο-
19 5 Αρχές σχεδίασης 115 ποποίηση απαιτήσεων διευκολύνεται ο καθορισμός των μονάδων που πρέπει να προσαρμοστούν και φυσικά όσο πιο ανεξάρτητες είναι οι μονάδες, τόσο απλούστερη είναι η διόρθωση και μεταβολή του κώδικα. Για να γίνουν κατανοητά τα ανωτέρω, θεωρούμε ως παράδειγμα κακής σχεδίασης, το αντικειμενοστρεφές μοντέλο ενός φούρνου μικροκυμάτων. Κάθε τμήμα του φούρνου μοντελοποιείται ως ξεχωριστή μονάδα (κλάση). Το διάγραμμα κλάσεων της UML παρουσιάζεται στο επόμενο σχήμα: ΠλήκτροΑκύρωσης ΣωλήναςΜικροκυμάτων Κουδούνι Χρονόμετρο Πόρτα ΠλήκτροΛειτουργίας Λαμπτήρας Σχήμα 5.4.1: Αντικειμενοστρεφές μοντέλο φούρνου μικροκυμάτων με υψηλή σύζευξη Η υψηλή σύζευξη στο ανωτέρω σχέδιο είναι προφανής, καθώς σχεδόν κάθε κλάση διατηρεί συσχετίσεις προς πολλές άλλες, ώστε να μπορεί να αποστέλλει μηνύματα σε αυτές. Η λειτουργικότητα του συστήματος έχει διαμοιραστεί ορθά μεταξύ των κλάσεων, ωστόσο η υψηλή σύζευξη μεταξύ τους δυσχεραίνει τη συντήρηση και την επαναχρησιμοποίηση κάθε μονάδας. Θεωρούμε για παράδειγμα μια νέα απαίτηση, η οποία επιτρέπει στο χρονόμετρο να σταματήσει και να συνεχίσει από το σημείο που διεκόπη η λειτουργία του φούρνου. Ακόμα και αν η τροποποίηση του κώδικα της κλάσης Χρονόμετρο είναι απλή, η υψηλή σύζευξη θα επιβάλλει αλλαγές στις συσχετιζόμενες κλάσεις ΠλήκτροΑκύρωσης, ΠλήκτροΛειτουργίας και Πόρτα. Σε κάθε περίπτωση, οι συσχετιζόμενες κλάσεις πρέπει να ελεγχθούν εκ νέου για την ορθή συμπεριφορά τους και σε ορισμένες γλώσσες προγραμματισμού να επαναμεταγλωττιστούν. Επιπλέον, η κλάση Χρονόμετρο, ενδεχομένως να αποτελεί κατάλληλη κλάση για επαναχρησιμοποίηση σε διαφορετικές εφαρμογές όπου απαιτείται μέτρηση του χρόνου. Ωστόσο, σε οποιοδήποτε νέο σύστημα χρησιμοποιηθεί θα πρέπει να "μεταφερθούν" και οι αναφορές προς τις κλάσεις Κουδούνι, ΣωλήναςΜικροκυμάτων και Λαμπτήρας και στην περίπτωση που δεν απαιτούνται να
20 116 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕΔΙΑΣΗ λάβουν την τιμή null, ελέγχοντας αν δημιουργούνται προβλήματα στις σχετικές μεθόδους της κλάσης. Η μείωση της σύζευξης δεν επιτυγχάνεται με την απλή εφαρμογή κάποιας τεχνικής. Ο περιορισμός του βαθμού σύζευξης πρέπει να αποτελεί προτεραιότητα των σχεδιαστών καθ'όλα τα στάδια ανάπτυξης ενός έργου λογισμικού. Πολλά από τα πρότυπα σχεδίασης που θα αναφερθούν στο επόμενο κεφάλαιο έχουν ως στόχο την αποσύνδεση τμημάτων λογισμικού, ωστόσο δεν αποτελούν πανάκεια και βεβαίως δεν μπορούν να βελτιώσουν σημαντικά ένα σχέδιο όπου οι περισσότερες μονάδες έχουν εξαρτήσεις μεταξύ τους. Είναι όμως εύκολο να μετράται ο βαθμός σύζευξης σε ένα σύστημα, καθώς έχουν προταθεί πολλές μετρικές για την ποσοτικοποίησή της και πολλές από αυτές τις μετρικές έχουν ενσωματωθεί σε λογισμικό υποστήριξης της διαδικασίας ανάπτυξης. Για παράδειγμα, η μετρική "Σύζευξη μεταξύ Αντικειμένων" ή μετρική CBO (Coupling Between Objects) που προτάθηκε από τους Chidamber και Kemerer (Chidamber, 1994), ποσοτικοποιεί το βαθμό σύζευξης μεταξύ κλάσεων. Η τιμή της μετρικής για μια κλάση C ισούται με τον αριθμό άλλων κλάσεων με τις οποίες υπάρχει σύζευξη (εξαιρώντας σύζευξη λόγω κληρονομικότητας). Ως σύζευξη μεταξύ δύο κλάσεων νοείται η χρήση μεθόδων της μιας κλάσης από την άλλη ή η απευθείας πρόσβαση σε μέλη δεδομένων. Στη βιβλιογραφία έχει προταθεί πληθώρα άλλων μετρικών σύζευξης, που λαμβάνουν όλους τους τύπους εξάρτησης μεταξύ κλάσεων, όπως η χρήση τύπων μιας κλάσης ως παραμέτρους σε μεθόδους της άλλης κλάσης, η δημιουργία αντικειμένων, ύπαρξη φιλικών κλάσεων, αποστολή μηνυμάτων κατά τη διάρκεια εκτέλεσης κλπ. Αυτό που είναι σημαντικό ωστόσο, είναι από τη στιγμή καθορισμού της έννοιας της σύζευξης με οποιονδήποτε τρόπο, να α- ποτελεί διαρκή στόχο η μείωση της σε όλες τις φάσεις ανάπτυξης. Συμπερασματικά Δύο μονάδες που εξαρτώνται η μία από την άλλη υλοποιούνται, ελέγχονται και συντηρούνται δυσκολότερα, καθώς για την κατανόηση της μιας κλάσης απαιτείται και η πλήρης κατανόηση της άλλης. Η έννοια της σύζευξης αναφέρεται στις σχέσεις εξάρτησης μεταξύ κλάσεων και για το λόγο αυτό, σε κάθε σύστημα λογισμικού, η σύζευξη μεταξύ συστατικών πρέπει να είναι όσο το δυνατόν μικρότερη. 5.5 Αρχή της Μοναδικής Αρμοδιότητας Η αρχή της Μοναδικής Αρμοδιότητας (Single-Responsibility Principle) ουσιαστικά εξασφαλίζει υψηλή συνεκτικότητα για τα συστατικά ενός συστήματος λογισμικού. Περιγράφηκε αρχικά στην εργασία του Tom DeMarco (1979) και διατυπώνεται ως εξής: Αρχή της Μοναδικής Αρμοδιότητας: Μια κλάση πρέπει να έχει μόνο ένα λόγο να αλλάξει. Μια κλάση δεν πρέπει να έχει περισσότερες από μία αρμοδιότητες. Κάθε αρμοδιότητα συνιστά έναν εν δυνάμει άξονα αλλαγών (axis of change) όπως αναφέρθηκε στο παράδειγμα της Εισαγωγής. Όταν αλλάξουν οι απαιτήσεις του συστήματος, οι αλλαγές εμφανί-
ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης
ΠΟΛΥΜΟΡΦΙΣΜΟΣ Λόγω της θεμελιώδους σημασίας της έννοιας του πολυμορφισμού (polymorphism) στην αντικειμενοστρεφή σχεδίαση, κρίνεται σκόπιμο στο σημείο αυτό του βιβλίου να αναλυθεί εκτενέστερα. Ο πολυμορφισμός
Διαβάστε περισσότεραpublic void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);
Κληρονομικότητα Η κληρονομικότητα (inheritance) αποτελεί έναν από τους χαρακτηριστικότερους μηχανισμούς των αντικειμενοστρεφών γλωσσών προγραμματισμού. Επιτρέπει την δημιουργία μιας νέας κλάσης απορροφώντας
Διαβάστε περισσότεραΕισαγωγή στη Σχεδίαση Λογισμικού
Εισαγωγή στη Σχεδίαση Λογισμικού περιεχόμενα παρουσίασης Τι είναι η σχεδίαση λογισμικού Έννοιες σχεδίασης Δραστηριότητες σχεδίασης Σχεδίαση και υποδείγματα ανάπτυξης λογισμικού σχεδίαση Η σχεδίαση του
Διαβάστε περισσότεραΑνάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)
Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420) Διάλεξη 8: Σχεδίαση Συστήματος Σχεδίαση Συστήματος 2 Διεργασία μετατροπής του προβλήματος σε λύση. Από το Τί στο Πώς. Σχέδιο: Λεπτομερής περιγραφή της λύσης. Λύση:
Διαβάστε περισσότεραΔιαγράμματα Κλάσεων στη Σχεδίαση
Διαγράμματα Κλάσεων στη Σχεδίαση περιεχόμενα παρουσίασης Αφηρημένες κλάσεις Ιδιότητες Λειτουργίες Απλοί τύποι Συσχετίσεις Εξάρτηση Διεπαφές αφηρημένες κλάσεις Οι αφηρημένες κλάσεις δεν μπορούν να δημιουργήσουν
Διαβάστε περισσότεραΣχεδίαση Κλάσεων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:
Σχεδίαση Κλάσεων Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Έκδοση: 2010.11.19 Εισαγωγή 2 ιαρκής συντήρηση και επέκταση λογισµικού Οι εταιρίες συνήθως συντηρούν, επεκτείνουν
Διαβάστε περισσότερα3 Αλληλεπίδραση Αντικειμένων
Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή
Διαβάστε περισσότεραΈλεγχος Συνένωσης και Διασφάλιση Ποιότητας
Έλεγχος Συνένωσης και Διασφάλιση Ποιότητας περιεχόμενα παρουσίασης Έλεγχος συνένωσης Συνένωση και οικοδόμηση Ημερήσια οικοδόμηση Συνεχής συνένωση Σχετικές επιδόσεις μεθόδων διασφάλισης ποιότητας Μετρικές
Διαβάστε περισσότεραΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Πρότυπα Σχεδίασης. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Πρότυπα Σχεδίασης Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική Θεσσαλονίκη, Σεπτέμβριος 2013 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.
Διαβάστε περισσότεραΚλάσεις και Αντικείµενα
Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν
Διαβάστε περισσότεραΔιαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση
Διαδικασίες παραγωγής λογισμικού Περιεχόμενα Παρουσίαση μοντέλων διεργασίας ανάπτυξης λογισμικού Περιγραφή τριών γενικών μοντέλων διεργασίας ανάπτυξης λογισμικού Γενική περιγραφή των διαδικασιών που περιλαμβάνονται
Διαβάστε περισσότεραΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών
44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.
Διαβάστε περισσότεραΑρχιτεκτονική Λογισμικού
Αρχιτεκτονική Λογισμικού περιεχόμενα παρουσίασης Τι είναι η αρχιτεκτονική λογισμικού Αρχιτεκτονική και απαιτήσεις Σενάρια ποιότητας Βήματα αρχιτεκτονικής σχεδίασης Αρχιτεκτονικά πρότυπα Διαστρωματωμένη
Διαβάστε περισσότεραΕισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13
Wrapper Classes, Abstract Classes and Interfaces Διάλεξη #13: Μεταβλητές/μέθοδοι κλάσης, αφηρημένες κλάσεις και διαπροσωπείες Μεταβλητές /πεδία κλάσης [class variables] Τα αντικείμενα ανήκουν σε κλάσεις
Διαβάστε περισσότεραΑντικειμενοστρεφής Προγραμματισμός
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 6: Σχεδίαση Κλάσεων Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαβάστε περισσότερα2.1 Αντικειµενοστρεφής προγραµµατισµός
2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί
Διαβάστε περισσότεραΠίνακας Περιεχομένων. μέρος A 1 Εισαγωγή στην Τεχνολογία Λογισμικού
Πρόλογος...21 μέρος A Εισαγωγή στην Τεχνολογία Λογισμικού 1 Εισαγωγή στην Τεχνολογία Λογισμικού 1.1 Το λογισμικό...25 1.1.1 Ο ρόλος και η σημασία του λογισμικού...26 1.1.2 Οικονομική σημασία του λογισμικού...28
Διαβάστε περισσότεραΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ
ΚΕΦΑΛΑΙΟ 10 Όπως είδαμε και σε προηγούμενο κεφάλαιο μια από τις βασικότερες τεχνικές στον Δομημένο Προγραμματισμό είναι ο Τμηματικός Προγραμματισμός. Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης
Διαβάστε περισσότεραΚλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων
Κλάσεις Τροποποιητές, ιασυνδέσεις, Πακέτα Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων Υπάρχουν 4τροποποιητές: default, public, private, protected. Default: εν προηγείται τροποποιητής του ονόµατος
Διαβάστε περισσότεραΑντικειμενοστρεφής Προγραμματισμός
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 15: Σχεδίαση Εφαρμογών Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαβάστε περισσότεραΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα
Διαβάστε περισσότεραΤι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;
Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class
Διαβάστε περισσότεραΕΡΓΟ: Συγκριτική Μελέτη Λογισμικού Βιβλιοθηκών, Λογισμικού Εφαρμογών Ανοικτού Κώδικα και Βιομηχανικού Λογισμικού MIS:
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ, ΔΙΑ ΒΙΟΥ ΜΑΘΗΣΗΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ΕΙΔΙΚΗ ΥΠΗΡΕΣΙΑ ΔΙΑΧΕΙΡΙΣΗΣ ΕΠΙΧΕΙΡΗΣΙΑΚΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΕΚΠΑΙΔΕΥΣΗ ΚΑΙ ΔΙΑ ΒΙΟΥ ΜΑΘΗΣΗ ΕΠΙΧΕΙΡΗΣΙΑΚΟ ΠΡΟΓΡΑΜΜΑ «ΕΚΠΑΙΔΕΥΣΗ ΚΑΙ
Διαβάστε περισσότεραΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ
ΥΠΟΥΡΓΕΙΟ ΕΘΝΙΚΗΣ ΠΑΙΔΕΙΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ΠΑΙΔΑΓΩΓΙΚΟ ΙΝΣΤΙΤΟΥΤΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ Κ Υ Κ Λ Ο Υ Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ Κ Α Ι Υ Π Η Ρ Ε Σ Ι Ω Ν Τ Ε Χ Ν Ο Λ Ο Γ Ι Κ Η
Διαβάστε περισσότεραΠροβλήματα, αλγόριθμοι, ψευδοκώδικας
Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι
Διαβάστε περισσότεραΗ κατασκευή αντικειμένων της κλάσης Student μπορεί να πραγματοποιηθεί είτε στη main είτε σε οποιαδήποτε μέθοδο κλάσης:
Αντικειμενοστρεφής Προγραμματισμός Τμήμα Εφαρμοσμένης Πληροφορικής Δημιουργία Κλάσεων/Αντικειμένων/Συσχετίσεων/Συνδέσεων Δημιουργία κλάσεων και αντικειμένων Θεωρούμε ένα υποθετικό σύστημα που αναφέρεται
Διαβάστε περισσότεραΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΠΡΟΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΜΑΘΗΜΑ: ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ ΜΟΝΤΕΛΑ ΣΥΣΤΗΜΑΤΟΣ Διδάσκων: Γ. Χαραλαμπίδης, Επ. Καθηγητής
Διαβάστε περισσότεραΑντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES
Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES Κων. Κόκκινος Αντικειμενοστραφής Προγραμματισμός Η ιδέα του αντικειμενοστραφούς προγραμματισμού Αυτόνομες οντότητες Στιγμιότυπα οντοτήτων Παράδειγμα
Διαβάστε περισσότεραΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07
Πρώτοι αριθμοί ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Ένας ακέραιος μεγαλύτερος του 1 είναι πρώτος αν έχει ακριβώς δύο διαιρέτες (τη μονάδα και τον εαυτό του). Πρόβλημα: έλεγχος
Διαβάστε περισσότεραΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 Αλγόριθμος: Βήμα προς βήμα διαδικασία για την επίλυση κάποιου προβλήματος. Το πλήθος των βημάτων πρέπει να είναι πεπερασμένο. Αλλιώς: Πεπερασμένη
Διαβάστε περισσότεραΕαρινό. Ύλη εργαστηρίου, Ασκήσεις Java
Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 5 ο Α. Ύλη εργαστηρίου 5.1 Έννοιες αντικειμενοστραφούς προγραμματισμού,
Διαβάστε περισσότεραWrapper Classes, Abstract Classes and Interfaces
Wrapper Classes, Abstract Classes and Interfaces Εβδοµάδα 3: Κλάσεις συσκευαστές, αφηρηµένες κλάσεις και διαπροσωπείες Αντικείµενα και µη-αντικείµενα Η Java παρέχει τύπους αντικειµένων και απλούς τύπους
Διαβάστε περισσότεραI (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.
I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)
Διαβάστε περισσότερα2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008
Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει
Διαβάστε περισσότεραΑντικειµενοστρεφής Προγραµµατισµός
16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη
Διαβάστε περισσότερα1 Ανάλυση Προβλήματος
1 Ανάλυση Προβλήματος 1.1 Η Έννοια Πρόβλημα Τι είναι δεδομένο; Δεδομένο είναι οτιδήποτε μπορεί να γίνει αντιληπτό από έναν τουλάχιστον παρατηρητή, με μία από τις πέντε αισθήσεις του. Τι είναι επεξεργασία
Διαβάστε περισσότεραΠληροφορική 2. Γλώσσες Προγραμματισμού
Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου Μεγάλο παράδειγμα Θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα πανεπιστημίου. Το τμήμα έχει 4
Διαβάστε περισσότεραΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΠΡΟΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΜΑΘΗΜΑ: ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ ΔΙΑΔΙΚΑΣΙΕΣ ΠΑΡΑΓΩΓΗΣ ΛΟΓΙΣΜΙΚΟΥ Διδάσκων: Γ. Χαραλαμπίδης,
Διαβάστε περισσότεραΤο πρόγραμμα 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 υποστηρίζει
Διαβάστε περισσότεραΔιαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση
Διαδικασίες παραγωγής λογισμικού Περιεχόμενα Παρουσίαση μοντέλων διεργασίας ανάπτυξης λογισμικού Περιγραφή τριών γενικών μοντέλων διεργασίας ανάπτυξης λογισμικού Γενική περιγραφή των διαδικασιών που περιλαμβάνονται
Διαβάστε περισσότεραΚεφάλαιο 10 ο Υποπρογράµµατα
Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,
Διαβάστε περισσότεραI (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.
I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)
Διαβάστε περισσότεραΑνάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής
Ανάλυση Πληροφοριακών Συστημάτων Εαρινό Εξάμηνο 2018-2019 Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής Διαγράμματα Κλάσεων Τα βασικά στοιχεία Διαλέξεις παρουσιάσεις Το υλικό του μαθήματος στηρίζεται
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
Διαβάστε περισσότεραJ-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου
J-GANNO ΓΕΝΙΚΕΥΜΕΝΟ ΠΑΚΕΤΟ ΥΛΟΠΟΙΗΣΗΣ ΤΕΧΝΗΤΩΝ ΝΕΥΡΩΝΙΚΩΝ ΙΚΤΥΩΝ ΣΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ JAVA Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β,
Διαβάστε περισσότεραΚωδικός: <Κωδ.Αρ.Εγγράφου/ΚωδικόΌνομαΈργου/Αρ. Έκδοσης> <Company Name> <Όνομα - Κωδικό Όνομα Έργου> Έγγραφο Περιγραφής Σχεδίου Λογισμικού
Ιστορικό Ημερομηνία Έκδοση Περιγραφή Συγγραφέας Σελ. 2 Πίνακας Περιεχομένων 1. Εισαγωγή xx
Διαβάστε περισσότεραΔιαδικασίες παραγωγής λογισμικού. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 4
Διαδικασίες παραγωγής λογισμικού Περιεχόμενα Παρουσίαση μοντέλων διεργασίας ανάπτυξης λογισμικού Περιγραφή τριών γενικών μοντέλων διεργασίας ανάπτυξης λογισμικού Γενική περιγραφή των διαδικασιών που περιλαμβάνονται
Διαβάστε περισσότεραΔιαδικασίες παραγωγής λογισμικού. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 4
Διαδικασίες παραγωγής λογισμικού Στόχοι Παρουσίαση μοντέλων παραγωγής λογισμικού Περιγραφή τριών γενικών μοντέλων παραγωγής λογισμικού και πότε μπορούν να χρησιμοποιούνται Γενική περιγραφή των μοντέλων
Διαβάστε περισσότερα8 Τεχνικός Εφαρμογών Πληροφορικής με Πολυμέσα
Περιεχόμενα Πρόλογος... 9 Κεφάλαιο 1: Δομή και λειτουργία του υπολογιστή... 11 Κεφάλαιο 2: Χρήση Λ.Σ. DOS και Windows... 19 Κεφάλαιο 3: Δίκτυα Υπολογιστών και Επικοινωνίας... 27 Κεφάλαιο 4: Unix... 37
Διαβάστε περισσότεραΟντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA
Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Πώς υλοποιούμε συσχετίσεις μεταξύ κλάσεων απλές και πολλαπλές συσχετίσεις κληρονομικότητα Static, final Overloading Overriding Hiding
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
Διαβάστε περισσότεραΑντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου
Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής
Διαβάστε περισσότερα1 Συστήματα Αυτοματισμού Βιβλιοθηκών
1 Συστήματα Αυτοματισμού Βιβλιοθηκών Τα Συστήματα Αυτοματισμού Βιβλιοθηκών χρησιμοποιούνται για τη διαχείριση καταχωρήσεων βιβλιοθηκών. Τα περιεχόμενα των βιβλιοθηκών αυτών είναι έντυπα έγγραφα, όπως βιβλία
Διαβάστε περισσότεραΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA
Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA 2 «Μονάδα Μετάφρασης» 2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit)
Διαβάστε περισσότεραΔομημένος Προγραμματισμός
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 1: Εισαγωγή Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο
Διαβάστε περισσότεραΣχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας
ΕΡΓΑΣΙΑ 2 Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας Εισαγωγή Ημερομηνία Ανάρτησης: 16/02/2017 Ημερομηνία Παράδοσης: 06/03/2017,
Διαβάστε περισσότεραΣχεδιασµός βασισµένος σε συνιστώσες
Σχεδιασµός βασισµένος σε συνιστώσες 1 Ενδεικτικά περιεχόµενα του κεφαλαίου Ποια είναι τα "άτοµα", από τα οποία κατασκευάζονται οι υπηρεσίες; Πώς οργανώνουµε τις συνιστώσες σε ένα αρµονικό σύνολο; Τι είναι
Διαβάστε περισσότεραΣΧΕ ΙΑΣΗ ΑΝΤΙΚΕΙΜΕΝΩΝ ΜΕ ΑΡΜΟ ΙΟΤΗΤΕΣ. Ορισµός σχεδιαστικών προτύπων Εφαρµογή των 9 GRASP προτύπων
ΣΧΕ ΙΑΣΗ ΑΝΤΙΚΕΙΜΕΝΩΝ ΜΕ ΑΡΜΟ ΙΟΤΗΤΕΣ Ορισµός σχεδιαστικών προτύπων Εφαρµογή των 9 GRASP προτύπων 1 Γενικά Εξαιρετικά σηµαντικά: η απόφαση για το που ανήκουν οι µέθοδοι, και πως αλληλεπιδρούν τα αντικείµενα
Διαβάστε περισσότεραΤεχνολογία Λογισμικού
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα #9: Η σχεδίαση του συστήματος Σταμέλος Ιωάννης Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.
Διαβάστε περισσότερα02 Αντικειμενοστρεφής Προγραμματισμός
02 Αντικειμενοστρεφής Προγραμματισμός Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Αντικειμενοστρέφεια Στον προγραμματισμό object
Διαβάστε περισσότεραΚεφάλαιο 2ο. Κατανοώντας την αντικειμενοστρέφεια
Περιεχόμενα Πρόλογος... 11 Κεφάλαιο 1ο. Εισαγωγή στη γλώσσα UML 1.1 Προσθέτοντας μια νέα μέθοδο...13 1.2 Πως αναπτύχθηκε η UML...14 1.3 Κατανοώντας την UML...15 1.4 Αναγνωρίζοντας τα επί μέρους τμήματα
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Μεγάλο παράδειγμα Θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα πανεπιστημίου. Το τμήμα έχει 4 φοιτητές οπού ο καθένας έχει ένα
Διαβάστε περισσότεραΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 10 ΟΥ ΚΕΦΑΛΑΙΟΥ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ 1. Πως ορίζεται ο τμηματικός προγραμματισμός; Τμηματικός προγραμματισμός
Διαβάστε περισσότεραΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ ανάλυση απαιτήσεων Σε αυτό το μάθημα θα ασχοληθούμε με : Δημιουργία μοντέλων
ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ Οι Μηχανικοί Λογισμικού παράγουν μοντέλα που βοηθούν στη διατύπωση των απαιτήσεων με τη μορφή προδιαγραφών. Η εργασία της παραγωγής μοντέλων περιγράφεται ως ανάλυση απαιτήσεων. Η ανάλυση
Διαβάστε περισσότεραΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ Αντικειμενοστραφής προγραμματισμός Web Sites:
Διαβάστε περισσότεραΜοντελοποίηση Πεδίου
Μοντελοποίηση Πεδίου περιεχόμενα παρουσίασης Εννοιολογικές κλάσεις Συσχετίσεις εννοιολογικών κλάσεων Τύποι ιδιοτήτων Γενίκευση Συχνά σφάλματα μοντελοποίησης πεδίου Εννοιολογικές κλάσεις και κλάσεις λογισμικού
Διαβάστε περισσότεραΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης και ανάπτυξης των προγραμμάτων ως ένα σύνολο από απλούστερα τμήματα προγραμμάτων. Όταν ένα τμήμα προγράμματος επιτελεί ένα αυτόνομο
Διαβάστε περισσότεραΒάσεις Δεδομένων. Εισαγωγή Ανάλυση Απαιτήσεων. Φροντιστήριο 1 ο
Βάσεις Δεδομένων Εισαγωγή Ανάλυση Απαιτήσεων Φροντιστήριο 1 ο 16-10-2008 Εισαγωγή - Ορισμοί Βάση Δεδομένων είναι μία συλλογή από σχετιζόμενα αντικείμενα Ένα σύστημα διαχείρισης βάσεων δεδομένων (ΣΔΒΔ)
Διαβάστε περισσότεραΣου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.
AeppAcademy.com facebook.com/aeppacademy Γεια. Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. Καλή Ανάγνωση & Καλή Επιτυχία
Διαβάστε περισσότεραΚεφάλαιο 4 Σχεδίαση Βάσεων Δεδομένων
Βάσεις Δεδομένων Επαγγελματικού Λυκείου Κεφάλαιο 4 Σχεδίαση Βάσεων Δεδομένων Εισηγητής Δελησταύρου Κωνσταντίνος Καθηγητής Πληροφορικής ΠΕ20 Μηχανικός Πληροφορικής Τ.Ε. M.Sc. στα Συστήματα Υπολογιστών Περιεχόμενα
Διαβάστε περισσότεραΕφαρμογή Μεθοδολογίας ICONIX
Πρόγραμμα Μεταπτυχιακών Σπουδών στην Εφαρμοσμένη Πληροφορική Προηγμένη Τεχνολογία Λογισμικού, 2016 Α. Χατζηγεωργίου Εφαρμογή Μεθοδολογίας ICONIX Παράδειγμα: Εγγραφή Φοιτητή σε Μάθημα Θέμα Θεωρείστε ότι
Διαβάστε περισσότεραΑρχιτεκτονική σχεδίαση με ηλεκτρονικό υπολογιστή
Γ Αρχιτεκτονική σχεδίαση με ηλεκτρονικό υπολογιστή Η χρήση των ηλεκτρονικών υπολογιστών στο τεχνικό σχέδιο, και ιδιαίτερα στο αρχιτεκτονικό, αποτελεί πλέον μία πραγματικότητα σε διαρκή εξέλιξη, που επηρεάζει
Διαβάστε περισσότεραΟι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Μια δομή δεδομένων στην πληροφορική, συχνά αναπαριστά οντότητες του φυσικού κόσμου στον υπολογιστή. Για την αναπαράσταση αυτή, δημιουργούμε πρώτα ένα αφηρημένο μοντέλο στο οποίο προσδιορίζονται
Διαβάστε περισσότεραΕισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#
Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων ΠΑΡΑΔΕΙΓΜΑ ΣΥΝΘΕΣΗΣ Μεγάλο παράδειγμα Θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα πανεπιστημίου. Το τμήμα έχει 4 φοιτητές οπού
Διαβάστε περισσότεραΜεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1
Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα Προγραμματισμός II 1 lalis@inf.uth.gr Χρήση λογισμικού που ήδη υπάρχει Τα πολύπλοκα συστήματα αναπτύσσονται σταδιακά, «χτίζοντας» πάνω σε υπάρχουσα λειτουργικότητα
Διαβάστε περισσότεραAbstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA
Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες
Διαβάστε περισσότεραΔοκιμή και Αποσφαλμάτωση Testing and Debugging
Δοκιμή και Αποσφαλμάτωση Testing and Debugging XVI-1 Ο μεταγλωττιστής εντοπίζει τα συντακτικά λάθη ενός προγράμματος. Δεν είναι όμως σε θέση να εντοπίσει λάθη στη λογική του προγράμματος. δεδομένα πρόγραμμα
Διαβάστε περισσότερα2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων
2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει
Διαβάστε περισσότεραΕισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15
Οι βασικές έννοιες που θα καλύψουμε Ομαδοποίηση αντικειμένων Εισαγωγή στις συλλογές Γενικές κλάσεις Iterators Συλλογές (ειδικά την ArrayList) Συνεχίζουμε την αναφορά στο θέμα της αφαίρεσης (abstraction)
Διαβάστε περισσότεραΟδηγίες Συγγραφής και Αξιολόγησης Εργασιών του μαθήματος
ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Αντικειμενοστρεφής Προγραμματισμός Η/Υ Οδηγίες Συγγραφής και Αξιολόγησης Εργασιών του μαθήματος Το κείμενο αυτό γράφεται με σκοπό να βοηθήσει τους φοιτητές του μαθήματος
Διαβάστε περισσότεραΟντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Κληρονομικότητα ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ
Διαβάστε περισσότεραΔιδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 6: Αφαιρετικότητα, Βιβλιοθήκες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αφαιρετικότητα -Βιβλιοθήκες (packages) Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός
Διαβάστε περισσότεραTRAVIS TRAFFIC VIOLATION INFORMATION SYSTEM ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΗΣΗΣ ΠΑΡΑΒΑΣΕΩΝ ΦΩΤΟΕΠΙΣΗΜΑΝΣΗΣ
TRAFFIC VIOLATION INFORMATION SYSTEM ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΗΣΗΣ ΠΑΡΑΒΑΣΕΩΝ ΦΩΤΟΕΠΙΣΗΜΑΝΣΗΣ TRAVIS-V1-2012 TRAVIS Λογισμικό Διαχείρισης Παραβάσεων Φωτοεπισήμανσης Το σύστημα διαχείρισης παραβάσεων φωτοεπισήμανσης
Διαβάστε περισσότεραΕ Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.
Κεφάλαιο 6 6.1 Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία σημαντικά στάδια : Σον ακριβή προσδιορισμό του προβλήματος Σην ανάπτυξη του αντίστοιχου αλγορίθμου
Διαβάστε περισσότεραΤεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα
Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Ενότητες βιβλίου: 6.4, 6.7 Ώρες διδασκαλίας: 1 Τεχνικές σχεδίασης προγραμμάτων Στο βιβλίο γίνεται αναφορά σε μία τεχνική για την ανάπτυξη
Διαβάστε περισσότεραΚΥΚΛΟΣ ΖΩΗΣ ΛΟΓΙΣΜΙΚΟΥ και ΔΙΑΓΡΑΜΜΑΤΑ ΡΟΗΣ ΔΕΔΟΜΕΝΩΝ
ΚΥΚΛΟΣ ΖΩΗΣ ΛΟΓΙΣΜΙΚΟΥ και ΔΙΑΓΡΑΜΜΑΤΑ ΡΟΗΣ ΔΕΔΟΜΕΝΩΝ Ο κύκλος ζωής λογισµικού (συνοπτικά) Η παραδοσιακή φάση ανάπτυξης του κύκλου ζωής λογισµικού Φάση καθορισµού απαιτήσεων (1/2) ΤΙ πρέπει να κάνει το
Διαβάστε περισσότερα5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ
5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος
Διαβάστε περισσότεραΠληροφοριακά Συστήματα Διοίκησης Ενότητα 1: Βασικές Αρχές Αντικειμενοστραφούς Σχεδίασης Συστημάτων και Εφαρμογών (1ο Μέρος)
Πληροφοριακά Συστήματα Διοίκησης Ενότητα 1: Βασικές Αρχές Αντικειμενοστραφούς Σχεδίασης Συστημάτων και Εφαρμογών (1ο Μέρος) Γρηγόριος Μπεληγιάννης Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης
Διαβάστε περισσότεραΥποδείγματα Ανάπτυξης
Υποδείγματα Ανάπτυξης περιεχόμενα παρουσίασης Αποσύνθεση Αφαίρεση Μοντελοποίηση Η δεδομένο λειτουργική προσέγγιση Η αντικειμενοστρεφής προσέγγιση αποσύνθεση Όταν επιχειρούμε τη λύση ενός προβλήματος, πρώτα
Διαβάστε περισσότεραΑπό τη UML στον Κώδικα. Μέρος Α
Από τη UML στον Κώδικα Μέρος Α περιεχόμενα παρουσίασης Κλάσεις Ισότητα αντικειμένων Μονόδρομες συσχετίσεις με πολλαπλότητα «ένα» Μονόδρομες συσχετίσεις με πολλαπλότητα «πολλά» Συλλογές από το σχέδιο στον
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργία Κλάσεων και Αντικειμένων Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων με κοινά χαρακτηριστικά και κοινή συμπεριφορά. Ένα καλούπι/πρότυπο
Διαβάστε περισσότεραΟντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA
Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Πώς υλοποιούμε συσχετίσεις μεταξύ κλάσεων απλές και πολλαπλές συσχετίσεις κληρονομικότητα Static, final Overloading Overriding Hiding
Διαβάστε περισσότεραΠληροφορική 2. Τεχνολογία Λογισμικού
Πληροφορική 2 Τεχνολογία Λογισμικού 1 2 Κρίση Λογισμικού (1968) Στην δεκαετία του 1970 παρατηρήθηκαν μαζικά: Μεγάλες καθυστερήσεις στην ολοκλήρωση κατασκευής λογισμικών Μεγαλύτερα κόστη ανάπτυξης λογισμικού
Διαβάστε περισσότεραΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Επιχειρηματική Μοντελοποίηση. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Επιχειρηματική Μοντελοποίηση Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική Θεσσαλονίκη, Σεπτέμβριος 2013 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης
Διαβάστε περισσότεραΕργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο -
ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ 3 ο ΕΞΑΜΗΝΟ Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο - ΕΠΙΜΕΛΕΙΑ ΜΑΘΗΜΑΤΟΣ: Πρέντζα Ανδριάννα ΕΠΙΜΕΛΕΙΑ ΕΡΓΑΣΤΗΡΙΟΥ: Στουγιάννου
Διαβάστε περισσότεραΠρογραμματισμός Η/Υ. Συναρτήσεις & Υποπρογράμματα. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος
Προγραμματισμός Η/Υ Συναρτήσεις & Υποπρογράμματα ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος Τμηματικός Προγραμματισμός Η επίλυση ενός προβλήματος διευκολύνεται
Διαβάστε περισσότερα<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1
ΚΕΦΑΛΑΙΟ 7 ο ΠΡΟΓΡΑΜΜΑ : Το πρόγραμμα αποτελείται από μια σειρά οδηγιών, που ονομάζονται εντολές, για την εκτέλεση τέτοιου είδους πράξεων, καθώς επίσης και από ένα σύνολο πρόσθετων οδηγιών ελέγχου, που
Διαβάστε περισσότεραΟντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Βασικά Δομικά Στοιχεία ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΟΜΙΚΑ ΣΤΟΙΧΕΙΑ ΔΟΜΙΚΑ
Διαβάστε περισσότερα