ΚΕΦΑΛΑΙΟ 20 ΕΠΑΝΑΧΡΗΣΙΜΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ
Στόχοι Περιγραφή πλεονεκτηµάτων-µειονεκτηµάτων µειονεκτηµάτων επαναχρησιµοποίησης λογισµικού Ανάπτυξη για-µε επαναχρησιµοποίηση Χαρακτηριστικά γενικών επαναχρησιµοποιούµενων components Μέθοδοι ανάπτυξης φορητών συστηµάτων 2
Θέµατα ου καλύ τονται Ανάπτυξη λογισµικού µε επαναχρησιµοποίηση Ανάπτυξη λογισµικού για επαναχρησιµοποίηση Επαναχρησιµοποίηση µε χρήση γεννήτριας Φορητότητα Εφαρµογών 3
Πλεονεκτήµατα επαναχρησιµοποίησης λογισµικού Λιγότερο κόστος ανά τυξης λογισµικού Λιγότερος χρόνος ανά τυξης λογισµικού Αύξηση αξιο ιστίας λογισµικού 4
Επίπεδα επαναχρησιµοποίησης λογισµικού : Ε αναχρησιµο οίηση συστήµατος εφαρµογής Ολόκληρη η εφαρµογή µ ορεί να ε αναχρησιµο οιηθεί σε διαφορετικό µηχάνηµα Ε αναχρησιµο οίηση υ οσυστηµάτων Σηµαντικά υ ό-συστήµατα ό ως pattern-matching σύστηµα µ ορεί να ε αναχρησιµο οιηθεί Ε αναχρησιµο οίηση αντικειµένων ή Modules Το ε αναχρησιµο οιήσιµο συστατικό είναι µια συλλογή α ό συναρτήσεις ή διαδικασίες Ε αναχρησιµο οίηση συναρτήσεων Το ε αναχρησιµο οιήσιµο συστατικό είναι µια συνάρτηση 5
Ανά τυξη Λογισµικού µε Ε αναχρησιµο οίηση Μεγιστοποίηση της επαναχρησιµοποίησης ήδη υπαρχόντων µονάδων λογισµικού Μείωση συνολικού κόστους ανάπτυξης λογισµικού Λιγότερα συστατικά κοµµάτια χρειάζεται να σχεδιαστούν και να προγραµµατιστούν Ενσωµάτωση συστατικών κοµµατιών στο νέο πρόγραµµα 6
Πλεονεκτήµατα αυτής της προσέγγισης : Αύξηση αξιο ιστίας συστήµατος Μείωση του ρίσκου της όλης διαδικασίας Α οτελεσµατική χρήση α ό ειδικούς Ενσωµάτωση ροτύ ων του οργανισµού Μείωση χρόνου ανά τυξης λογισµικού 7
Ε αναχρησιµο οίηση σε µια τυ ική διαδικασία ανά τυξης ΣΧΕ ΙΑΣΜΟΣ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΣΥΣΤΗΜΑΤΟΣ ΠΡΟΣ ΙΟΡΙΣΜΟΣ ΣΥΣΤΑΤΙΚΩΝ ΚΟΜΜΑΤΙΩΝ ΑΝΑΖΗΤΗΣΗ ΕΠΑΝΑΧΡΗΣ. ΚΩΜΜΑΤΙΩΝ ΕΝΣΩΜΑΤΩΣΗ ΣΥΣΤΑΤΙΚΩΝ ΚΟΜΜΑΤΙΩΝ 8
Για ανάπτυξη λογισµικού µε επαναχρησιµοποίηση πρέπει να πληρούνται 3 συνθήκες : 1. Ύπαρξη επαναχρησιµοποιούµενων συστατικών κοµµατιών 2. Σιγουριά ότι τα επαναχρησιµοποιούµενα κοµµάτια θα λειτουργήσουν σωστά και αξιόπιστα 3. Ύπαρξη τεκµηρίωσης για κάθε επαναχρησιµοποιούµενο κοµµάτι 9
ιαδικασία Ανά τυξης Καθοδηγούµενη Α ό Ε αναχρησιµο οίηση ΑΝΑΓΝΩΡΙΣΗ ΠΡΟ ΙΑΓΡΑΦΩΝ ΣΥΣΤΗΜΑΤΟΣ ΑΝΑΖΗΤΗΣΗ ΕΠΑΝΑΧΡΗΣ. ΚΩΜΜΑΤΙΩΝ ΤΡΟΠΟΠΟΙΗΣΗ ΠΡΟ ΙΑΓΡΑΦΩΝ ΑΝΑΛΟΓΑ ΜΕ ΤΑ ΚΟΜΜΑΤΙΑ ΠΟΥ ΒΡΕΘΗΚΑΝ ΣΧΕ ΙΑΣΗ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΑΝΑΖΗΤΗΣΗ ΕΠΑΝΑΧΡΗΣ. ΚΩΜΜΑΤΙΩΝ ΠΡΟΣ ΙΟΡΙΣΜΟΣ ΣΥΣΤΑΤΙΚΩΝ ΣΥΣΤΗΜΑΤΟΣ ΜΕ ΒΑΣΗ ΤΑ ΕΠΑΝΑΧΡ. ΚΟΜΜΑΤΙΑ 10
υσκολίες που παρουσιάζονται µε την επαναχρησιµοποίηση : Υ ολογισµός µείωσης του κόστους εν υ οστηρίζετε η χρησιµο οίηση εργαλειοθηκών CASE Οι ερισσότεροι ρογραµµατιστές ροτιµούν να Ξαναγράφουν τα κοµµάτια κώδικα εν είναι σίγουρο αν θα βρεθούν τα κοµµάτια κώδικα Για ε αναχρησιµο οίηση 11
Ανά τυξη Λογισµικού Για Ε αναχρησιµο οίηση Είναι µια διαδικασία ανάπτυξης που επιλέγει ήδη υπάρχοντα συστατικά κοµµάτια λογισµικού και έχει σαν στόχο την γενίκευση τους και τεκµηρίωση τους για χρήση σε διάφορες εφαρµογές Το λογισµικό δεν µπορεί να χρησιµοποιηθεί άµεσα για επαναχρησιµοποίηση αλλά πρέπει να τροποποιηθεί για να χρησιµοποιηθεί σε διάφορες εφαρµογές 12
Αλλαγές που χρειάζονται για να γίνει ένα κοµµάτι του συστήµατος επαναχρησιµοποιήσιµο : Γενίκευση ονοµάτων Τα ονόµατα σε ένα component τρο ο οιούνται έτσι ώστε να µην αναφέρονται σε συγκεκριµένη εφαρµογή Γενίκευση λειτουργιών Προσθήκη λειτουργιών για ε ι λέον λειτουργικότητα και αφαίρεση λειτουργιών ου είναι συγκεκριµένες για µια εφαρµογή Γενίκευση εξαιρέσεων Χειρισµός εξαιρέσεων ου είναι συγκεκριµένος για µια εφαρµογή αφαιρείται και ροστίθεται διαχείριση εξαιρέσεων για αύξηση της ασφάλειας του component Πιστο οίηση Component 13
Ε αναχρησιµο οίηση για συγκεκριµένα Domain Τα components µπορούν να επαναχρησιµοποιηθούν σε εφαρµογές µε κοινά χαρακτηριστικά µε αυτή που αναπτύχθηκαν έτσι ώστε να υπάρχει αντιστοιχία µε τα στοιχεία της εφαρµογής 14
ADS Προσθήκη λειτουργιών σε ένα component για να καλύπτει όλο το Domain Απαιτούµενες λειτουργίες 1. Λειτουργίες Πρόσβασης 2. Λειτουργίες Κατασκευής 3. Ι/Ο λειτουργίες 4. Λειτουργίες σύγκρισης 5. Λειτουργίες Επανάληψης 15
Μοντέλο ε αναχρησιµο οιούµενου ADS ΕΞΑΓΩΜΕΝΑ ΟΝΟΜΑΤΑ ΤΥΠΩΝ ΛΕΙΤΟΥΡΓΙΕΣ Ι/Ο ΛΕΙΤΟΥΡΓΙΕΣ ΠΡΟΣΒΑΣΗΣ ADS ΛΕΙΤΟΥΡΓΙΕΣ ΕΠΑΝΑΛΗΨΗΣ ΛΕΙΤΟΥΡΓΙΕΣ ΚΑΤΑΣΚΕΥΑΣΤΗ ΛΕΙΤΟΥΡΓΙΕΣ ΣΥΓΚΡΙΣΗΣ 16
Πακέτο στην ADA για συνδεδεµένες Λίστες generic type ELEMENT is private ; package Linked is -- Exported type declarations type LIST is limited private ; type STATUS is range 1..10 ; type ITERATOR is private ; -- Comparison operations function Equals (L1, L2: LIST) return BOOLEAN ; function Equivalent (L1, L2: LIST) return BOOLEAN ; -- Access operations (Fig 20.6) -- Constructor operations (Fig. 20.7) -- I/O operations (Fig. 20.8) -- Iterator operations (Fig. 20.9) private type LIST_ELEM; type LIST is access LIST_ELEM ; type ITERATOR is access LIST_ELEM ; end Linked ; 17
Λειτουργίες Πρόσβασης -- true if the list has no elements function Is_empty (L: LIST) return BOOLEAN ; -- returns the number of elements in the list function Size_of (L: LIST ) return NATURAL ; -- true if a list element is the same as E function Contains (E: ELEMENT; L: LIST ) return BOOLEAN ; -- returns the first list element procedure Head (L: LIST; E: in out ELEMENT ; Error_level: out STATUS ) ; -- removes the first list element and returns the remaining list procedure Tail (L: LIST; Outlist: in out LIST ; Error_level: out STATUS ) ; 18
Λειτουργίες Κατασκευαστή -- Prune_to deletes the list up to and including -- the element matching E procedure Prune_to ( E: ELEMENT; Outlist: in out LIST ; Error_level: out STATUS ) ; -- Prune_from deletes list after element matching E procedure Prune_from( E: ELEMENT; Outlist: in out LIST ; Error_level: out STATUS ) ; -- Remove deletes the element which matches E procedure Remove ( E: ELEMENT; Outlist: in out LIST ; Error_level: out STATUS ) ; -- Remove_before and Remove_after delete the element before -- and after E respectively procedure Remove_before ( E: ELEMENT; Outlist: in out LIST; Error_level: out STATUS ) ; procedure Remove_after ( E: ELEMENT; Outlist: in out LIST ; Error_level: out STATUS ) ; 19
Λειτουργίες Ι/Ο -- print onto standard output procedure Print_list (L: LIST; Error_level: out STATUS ) ; procedure Write_list (F: TEXT_IO.FILE_TYPE ; L: LIST; Error_level: out STATUS ) ; procedure Read_list (F: TEXT_IO.FILE_TYPE ; Outlist: out LIST ; Error_level: out STATUS ) ; 20
Λειτουργίες Ε ανάληψης procedure Iterator_initialise (L: LIST; Iter: in out ITERATOR; Error_status: in out STATUS) ; procedure Go_next (L: LIST; Iter: in out ITERATOR; Error_status: in out STATUS) ; procedure Eval (L: List; Iter: in out ITERATOR; Val: out ELEMENT; Error_status: in out STATUS) ; function At_end (L: LIST; Iter: ITERATOR) return BOOLEAN ; 21
Ε αναχρησιµο οίηση και Κληρονοµικότητα Κληρονοµικότητα είναι η διαδικασία όπου µια κλάση κληρονοµεί γνωρίσµατα και λειτουργίες από µια άλλη κλάση Αντικειµενοστραφής γλώσσες Προγραµµατισµού Συνδυασµός κλάσεων για δηµιουργία νέων 22
ικτυωτή κλάση Peripheral Attributes and operations reused by inheritance down the hierarchy Storage Output Input Tape Disk Printer Screen Text input Position sensor Dot-matrix Laser Film Ink-jet 23
Μειονεκτήµατα της επαναχρησιµοποίησης µε κληρονοµικότητα ιασκορ ισµένος κώδικας σε ολλά σηµεία Περιττές λειτουργίες ύσκολη διαχείριση 24
Ε αναχρησιµο οίηση βασισµένη σε Γεννήτρια Πρόγραµµα υψηλού επιπέδου που συγκεντρώνει όλα τα κοµµάτια επαναχρησιµοποιούµενου κώδικα, τον τρόπο που συνδυάζονται και την παραµετροποίηση τους Γεννήτριες εφαρµογών για ε εξεργασία δεδοµένων ε ιχειρήσεων Γεννήτριες αναλυτών για ε εξεργασία γλωσσών Γεννήτριες κώδικα για εργαλειοθήκες CASE 25
Application description Program generator Generated program Application domain knowledge Database 26
Φορητότητα Εφαρµογής Ανάπτυξη λογισµικού που µπορεί να µεταφερθεί σε διάφορες πλατφόρµες Τεχνικές για επίτευξη : Εξοµοίωση µιας µηχανής σε άλλη Μετάφραση του ρογράµµατος σε µια γενική Γλώσσα µηχανής Χρησιµο οίηση ρο-ε εξεργαστή για µετάφραση Α ό µια γλώσσα ρογραµµατισµού σε άλλη 27
Η φορητότητα µιας εφαρµογής είναι ανάλογη µε την δουλεία που χρειάζεται για να λειτουργήσει σε άλλο περιβάλλον Μεταφερσιµότητα Η φυσική µετακίνηση του κώδικα ενός ρογράµµατος και των δεδοµένων του σε άλλο εριβάλλον Προσαρµοστικότητα Οι αλλαγές ου χρειάζονται για να λειτουργήσει ένα ρόγραµµα σε διαφορετικό εριβάλλον 28
ιεπαφές εφαρµογής ΒΙΒΛΙΟΘΗΚΕΣ ΣΥΣΤΗΜΑ ΠΡΑΓΜΑΤΙΚΟΥ ΧΡΟΝΟΥ ΕΦΑΡΜΟΓΗ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ ΜΝΗΜΗ & ΕΠΕΞΕΡΓΑΣΤΗΣ 29
Προβλήµατα Φορητότητας Αρχιτεκτονική Μηχανής Α εικόνιση ληροφοριών και οργάνωση τους Λειτουργικό σύστηµα Χαρακτηριστικά λειτουργικού συστήµατος Σύστηµα Πραγµατικού χρόνου Βιβλιοθήκες συστήµατος 30
ιε αφή φορητότητας Όλες οι διαδικασίες περνάνε µέσα από την διεπαφή φορητότητας και µετά παίρνουν πρόσβαση στο Λειτουργικό σύστηµα Αύξηση χρόνου α όκρισης 31
ΕΦΑΡΜΟΓΗ ΙΕΠΑΦΗ ΦΟΡΗΤΟΤΗΤΑΣ ΙΕΠΑΦΗ ΦΟΡΗΤΟΤΗΤΑΣ ΑΝΑΦΟΡΕΣ Ε ΟΜΕΝΩΝ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ & ΚΛΗΣΕΙΣ Ι/Ο Ι/Ο 32
Προβλήµατα φορητότητας εµφανίζονται όταν : Η εφαρµογή στηρίζετε σε συγκεκριµένες α εικονίσεις δεδοµένων Η εφαρµογή χρησιµο οιεί κλήσεις στο Λειτουργικό σύστηµα ου δεν υ άρχουν σε άλλα συστήµατα Η εφαρµογή εξαρτάτε α ό συγκεκριµένο σύστηµα Αρχειοθέτησης (FAT,NTFS,EXT, ) 33
Πρότυ α Υιοθέτηση προτύπων από τους κατασκευαστές λογισµικού για ανάπτυξη φορητών εφαρµογών Πρότυ α γλωσσών ρογραµµατισµού Πρότυ α Λειτουργικών συστηµάτων Πρότυ α δικτύων Πρότυ α συστηµάτων «αραθύρων» 34