ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΤΕΧΝΟΛΟΓΙΚΗΣ ΕΚΠΑΙ ΕΥΣΗΣ ΓΡΑΠΤΗ ΕΞΕΤΑΣΗ ΣΤΟ ΜΑΘΗΜΑ "ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕ ΙΑΣΜΟΣ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ" ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2001-2002 ιδάσκων: Β.Βεσκούκης ΕΝ ΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ ΤΩΝ ΘΕΜΑΤΩΝ ΘΕΜΑ 1 (Μονάδες 3) Η ψηφιακή διαδραστική (interactive) τηλεόραση βασίζεται στη δορυφορική µετάδοση ψηφιακά κωδικοποιηµένου τηλεοπτικού σήµατος το οποίο λαµβάνεται και αποκωδικοποιείται από πλευράς των συνδροµητών µε τη βοήθεια κατάλληλου εξοπλισµού (set top box). Ένα από τα σηµαντικότερα πλεονεκτήµατά της είναι η δυνατότητα χρέωσης των συνδροµητών όχι µε βάση κάποια µηνιαία συνδροµή, αλλά µε βάση τα προγράµµατα που παρακολουθούν (pay-per-view). Επίσης, υπάρχει η δυνατότητα ετεροχρονισµένης παρακολούθησης των εκποµπών, µε τη βοήθεια αποκωδικοποιητή που περιλαµβάνει σκληρό δίσκο στον οποίο "κατεβαίνει" το επιθυµητό πρόγραµµα είτε κατά την ώρα που προβάλλεται, είτε σε άλλη ώρα που καθορίζεται από τον πελάτη και το κανάλι. Ένα σενάριο λειτουργίας του σχήµατος "pay-per-view" είναι το ακόλουθο: Ο πελάτης ανοίγει ένα λογαριασµό στην εταιρία συνδροµητικής διαδραστικής τηλεόρασης (κανάλι) και εγκαθιστά τον απαραίτητο εξοπλισµό. Μία φορά το µήνα ή όσο συχνά απαιτείται, το κανάλι ανακοινώνει στη σελίδα του στο Internet τις εκποµπές που πρόκειται να προβληθούν από τις διαθέσιµες δορυφορικές συχνότητες, καθώς και το κόστος κάθε εκποµπής. Το κόστος αυτό µπορεί να είναι µικρότερο για ετεροχρονισµένη παρακολούθηση. Ο πελάτης συνδέεται στο δικτυακό τόπο του καναλιού µε χρήση είτε του προσωπικού του υπολογιστή είτε του αποκωδικοποιητή του και παραγγέλλει τα προγράµµατα που θέλει να παρακολουθήσει δίνοντας όλες τις κατά περίπτωση αναγκαίες πληροφορίες (ώρα προβολής, ετεροχρονισµένη προβολή κλπ). Η παραγγελία δύναται να ακυρωθεί από τον πελάτη το αργότερο 30 λεπτά πριν την προβολή και από το κανάλι σε οποιαδήποτε στιγµή. Σε περίπτωση µη ακύρωσης της παραγγελίας από τον πελάτη, ο αποκωδικοποιητής προγραµµατίζεται και "ξεκλειδώνεται" για το συγκεκριµένο πρόγραµµα, ενώ γίνεται η ανάλογη χρέωση στο λογαριασµό του. Σε περίπτωση ακύρωσης της προβολής από το κανάλι, ο πελάτης ενηµερώνεται µέσω e-mail καθώς και µε µήνυµα στην οθόνη της τηλεόρασης µέσω του αποκωδικοποιητή του, δεν γίνεται καµία χρέωση και η παραγγελία πρέπει να επαναληφθεί. Στο τέλος κάθε µήνα το κανάλι εκδίδει λογαριασµούς πελατών οι οποίοι εξοφλούνται είτε αυτόµατα µέσω πιστωτικής κάρτας, είτε µε on-line εντολή του πελάτη στο δικτυακό τόπο της εταιρίας, είτε µε πάγια εντολή τράπεζας, είτε, τέλος, µε ταχυδροµική επιταγή. Η εξόφληση των λογαριασµών παρακολουθείται από το κανάλι έτσι ώστε να µην είναι δυνατή η παραγγελία εκποµπών από πελάτες οι οποίοι δεν τακτοποιούν εγκαίρως τους λογαριασµούς τους. Επίσης, στο τέλος κάθε µήνα παράγονται συγκεντρωτικά δεδοµένα που αφορούν την κατά παραγγελία τηλεθέαση. Τέτοια δεδοµένα υπολογίζονται ανά εκποµπή, ανά κινηµατογραφικό στούντιο, ανά εταιρία διανοµής, ανά κατηγορία εκποµπής (ενηµερωτική, ντοκιµαντέρ, ταινία, σειρά, κλπ), ανά ζώνη τηλεθέασης, ανά ηµέρα, ανά γεωγραφική θέση τηλεθεατών και, τέλος, ανά αιτία ακύρωσης εκποµπής. Στο τέλος κάθε τηλεοπτικής περιόδου παράγονται στατιστικά στοιχεία µε βάση τα παραπάνω συγκεντρωτικά δεδοµένα, τα οποία ανακοινώνονται στο δικτυακό τόπο του καναλιού. Καλείστε να αναλάβετε το ρόλο του µηχανικού λογισµικού ο οποίος κατασκευάζει µια εφαρµογή για την υποστήριξη των εργασιών που περιγράφηκαν παραπάνω, βασισµένοι στην αντικειµενοστρεφή τεχνολογία και ακολουθώντας την Ενοποιηµένη Προσέγγιση Ανάπτυξης Λογισµικού. Συγκεκριµένα, καλείστε: 1
Α. Να κατασκευάσετε ένα διάγραµµα δραστηριοτήτων UML (activity diagram) για τη διαδικασία παραγγελίας προβολής που αναφέρεται στις τρεις πρώτες παραγράφους της ανωτέρω περιγραφής [0,9]. UML activity diagram για τη διαδικασία παραγγελίας Ο πελάτης ανοίγει ένα λογαριασµό στην εταιρία συνδροµητικής διαδραστικής τηλεόρασης (κανάλι) και εγκαθιστά τον απαραίτητο εξοπλισµό ΑΡΧΗ το κανάλι ανακοινώνει στη σελίδα του στο Internet τις εκποµπές που πρόκειται να προβληθούν από τις διαθέσιµες δορυφορικές συχνότητες 1. ΑΝΟΙΓΜΑ ΛΟΓΑΡΙΑΣΜΟΥ 2. ΕΓΚΑΤΑΣΤΑΣΗ ΕΞΟΠΛΙΣΜΟΥ 3. ΑΝΑΚΟΙΝΩΣΗ ΕΚΠΟΜΠΩΝ 3. ΕΠΙΛΟΓΗ ΕΚΠΟΜΠΩΝ ΤΕΛΟΣ ΝΑΙ ΕΠΙΛΟΓΩΝ ΟΧΙ ΤΕΛΟΣ Ο πελάτης συνδέεται στο δικτυακό τόπο του καναλιού µε χρήση είτε του προσωπικού του υπολογιστή είτε του αποκωδικοποιητή του και παραγγέλλει τα προγράµµατα που θέλει να παρακολουθήσει Σε περίπτωση ακύρωσης της προβολής από το κανάλι, ο πελάτης ενηµερώνεται µέσω e-mail καθώς και µε µήνυµα στην οθόνη της τηλεόρασης µέσω του αποκωδικοποιητ ή του, δεν γίνεται καµία χρέωση και η παραγγελία πρέπει να επαναληφθεί. 6. ΑΚΥΡΩΣΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 10. ΑΚΥΡΩΣΗ ΧΡΕΩΣΗΣ 9. ΕΜΦΑΝΙΣΗ ΜΗΝΥΜΑΤΟΣ 8. ΑΠΟΣΤΟΛΗ E-MAIL ΝΑΙ 4. ΠΑΡΑΓΓΕΛΙΑ ΕΚΠΟΜΠΩΝ ΑΚΥΡΩΣΗ ΑΠΟ ΠΕΛΑΤΗ ΟΧΙ 5. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ STB ΝΑΙ 7. ΧΡΕΩΣΗ ΑΚΥΡΩΣΗ ΑΠΟ ΚΑΝΑΛΙ ΟΧΙ Η παραγγελία δύναται να ακυρωθεί από τον πελάτη το αργότερο 30 λεπτά πριν την προβολή Σε περίπτωση µη ακύρωσης της παραγγελίας από τον πελάτη, ο αποκωδικοποιητής προγραµµατίζεται και "ξεκλειδώνεται" για το συγκεκριµένο πρόγραµµα, ενώ γίνεται η ανάλογη χρέωση στο λογαριασµό του 11. ΠΡΟΒΟΛΗ και από το κανάλι σε οποιαδήποτε στιγµή 2
Β. Από την περιγραφή που δόθηκε, να διακρίνετε τρεις περιπτώσεις χρήσης και για κάθε µία να αναφέρετε τον τίτλο της µαζί µε µια συνοπτική περιγραφή που δεν θα ξεπερνά τις 3 γραµµές [0,9]. Περιπτώσεις χρήσης του λογισµικού που χρησιµοποιεί το κανάλι για τη διαχείριση των δραστηριοτήτων του (Ενδεικτική αναφορά όλων των περιπτώσεων χρήσης που µπορούν να συναχθούν από τον ορισµό του προβλήµατος - δεν ζητείται και δεν είναι απαραίτητη) 1. ηµιουργία - µεταβολές λογαριασµών πελατών 2. ιαχείριση αρχείου ταινιών 3. Προγραµµατισµός προβολής ταινιών 4. Κοστολόγηση προβολής ταινιών 5. Ανακοίνωση προγράµµατος στο Internet 6. Λήψη παραγγελιών εκποµπών 7. Μεταβολές παραγγελιών από πελάτες 8. Ακύρωση προβολής εκποµπής 9. Προγραµµατισµός αποκωδικοποιητή 10. Χρέωση λογαριασµών πελατών 11. Ενηµέρωση πελατών για ακύρωση προβολής 12. Ακύρωση χρέωσης πελατών 13. Εκδοση µηνιαίων λογαριασµών 14. Εξοφλήσεις λογαριασµών πελατών 15. Υπολογισµός συγκεντρωτικών στοιχείων ανά τηλεοπτικό στούντιο 16. Υπολογισµός συγκεντρωτικών στοιχείων ανά εταιρία διανοµής 17. Υπολογισµός συγκεντρωτικών στοιχείων ανά κατηγορία εκποµπής 18. Υπολογισµός συγκεντρωτικών στοιχείων ανά ζώνη τηλεθέασης 19. Υπολογισµός συγκεντρωτικών στοιχείων ανά ηµέρα 20. Υπολογισµός συγκεντρωτικών στοιχείων ανά γεωγραφική θέση πελάτη 21. Υπολογισµός συγκεντρωτικών στοιχείων ανά αιτία ακύρωσης εκποµπής 22. ιαχείριση τηλεοπτικών περιόδων 23. Παραγωγή στατιστικών στοιχείων τηλεοπτικής περιόδου ανά 24. Παραγωγή στατιστικών στοιχείων τηλεοπτικής περιόδου ανά εταιρία διανοµής 25. Παραγωγή στατιστικών στοιχείων τηλεοπτικής περιόδου ανά κατηγορία εκποµπής 26. Παραγωγή στατιστικών στοιχείων τηλεοπτικής περιόδου ανά ζώνη τηλεθέασης 27. Παραγωγή στατιστικών στοιχείων τηλεοπτικής περιόδου ανά ηµέρα 28. Παραγωγή στατιστικών στοιχείων τηλεοπτικής περιόδου ανά γεωγραφική θέση πελάτη 29. Παραγωγή στατιστικών στοιχείων τηλεοπτικής περιόδου ανά αιτία ακύρωσης εκποµπής 30. Ανακοίνωση στατιστικών στοιχείων στο web Περιγραφή επιλεγµένων περιπτώσεων χρήσης (Ζητείται για τρεις περιπτώσεις χρήσης. Ακολούθως δίνεται ενδεικτικά για πέντε περιπτώσεις χρήσης) 1. ιαχείριση αρχείου ταινιών Η εφαρµογή δέχεται από το πληκτρολόγιο και αρχειοθετεί τα στοιχεία νέων ταινιών (τίτλος, διάρκεια συντελεστές, στούντιο, κατηγορία, εταιρία διανοµής, χρονολογία παραγωγής, κ.ά.), καθώς και τις µεταβολές τους. 2. Προγραµµατισµός προβολής ταινιών Η εφαρµογή εµφανίζει πίνακα µε ηµεροµηνίες (σε στήλες) και ώρες (σε γραµµές) στα κελιά του οποίου τοποθετούνται από τον χρήστη οι ταινίες των οποίων η προβολή προγραµµατίζεται ή τροποποιείται, για διάστηµα ενός µηνός από την τρέχουσα ηµεροµηνία. 3
3. Ακύρωση χρέωσης πελατών Ο χρήστης δίνει την ηµεροµηνία και την ώρα εκποµπής και το λογισµικό εντοπίζει όλους τους πελάτες που την έχουν παραγγείλει και σε κάθε πελάτη ακυρώνει τη χρέωση που αφορά την εκποµπή που έχει προγραµµατιστεί για τη δεδοµένη ηµεροµηνία και ώρα. 4. Υπολογισµός συγκεντρωτικών στοιχείων ανά κατηγορία εκποµπής Η εφαρµογή υπολογίζει το σύνολο των παραγγελιών και των ακυρώσεων για κάθε κατηγορία εκποµπής, για ένα χρονικό διάστηµα που δίνεται σε παράθυρο διαλόγου. 5. Παραγωγή στατιστικών στοιχείων τηλεοπτικής περιόδου ανά κατηγορία εκποµπής Εµφανίζεται κάποιο παράθυρο στο οποίο επιλέγεται από το χρήστη η τηλεοπτική περίοδος. Για την επιλεγµένη περίοδο, ανοίγει το αρχείο συγκεντρωτικών στοιχείων ανά κατηγορία εκποµπής και υπολογίζονται στατιστικά στοιχεία που αφορούν την επιλεγµένη τηλεοπτική περίοδο, όπως η µέση τιµή και η τυπική απόκλιση τηλεθεάσεων εκποµπών κάθε κατηγορίας ανά εβδοµάδα. Γ. Να κατασκευάσετε ένα διάγραµµα συνεργασίας UML (collaboration diagram) για κάθε µία από τις περιπτώσεις χρήσης που διακρίνατε [1,2]. ιαγράµµατα συνεργασίας (Για τις τρεις πρώτες από τις περιπτώσεις χρήσεις που αναφέρθηκαν στο Β) Σηµείωση: Τα διαγράµµατα δεν είναι δεσµευτικά και εξαρτώνται από την σύλληψη για τη ροή γεγονότων σε κάθε περίπτωση χρήσης. Απαιτείται µόνο η τήρηση των κανόνων σχετικά µε τα αντικείµενα που συνεργάζονται, οι οποίοι αναφέρονται στις σηµειώσεις (ενότητα 2.5.2, σελ 53-56, παραδείγµατα και ασκήσεις) 1. ιαχείριση αρχείου ταινιών 2: Νέα ταινία 1: Καταχώρηση νέας ταινίας : Παράθυρο καρτέλας ταινίας : ιαχείριση αρχείου ταινιών : Χειριστής εφαρµογής διαχείρισης ppv 3: Νέα ταινία : Interface ταινιών 4: Νέα ταινία : Ταινίες 4
2. Προγραµµατισµός προβολής ταινιών : Χειριστής εφαρµογής διαχείρισης ppv 1: Ενηµέρωση προγράµµατος 5: Προγραµµατισµός 2: Ετοιµασία προγραµµατισµού 3: ιαθέσιµες ταινίες : Παράθυρο προγραµµατισµού : Προγραµµατισµός προβολών 6: Νέα εγγραφή : Interface ταινιών : Interface προγράµµατος 4: ιαθέσιµες ταινίες 7: Νέα εγγραφή : Ταινίες : Πρόγραµµα προβολής 3. Ακύρωση χρέωσης πελατών 1: Αναζήτηση εκποµπής 5: Ακύρωση χρέωσης 2: Επιλογή εκποµπών : Χειριστής εφαρµογής διαχείρισης ppv : Παράθυρο ακύρωσης χρέωσης : Ακύρωση χρέωσης 6: ιαγραφή εγγραφής χρέωσης 3: Μελλοντικές εκποµπές : Interface χρεώσεων πελατών 7: ιαγραφή εγγραφής χρέωσης : Interface προγράµµατος : Χρεώσεις πελατών 4: Μελλοντικές εκποµπές : Πρόγραµµα προβολής 5
ΘΕΜΑ 2 (Μονάδες 2) Στο δικτυακό τόπο του καναλιού του θέµατος 1, στη σελίδα που χρησιµοποιείται για την παραγγελία εκποµπής για λήψη, τρέχει ένα java applet µε αναγνωριστικό PayPerViewProg. Με το που φορτώνεται η σελίδα δηµιουργείται µια λίστα µε τις εκποµπές που προβάλλονται από την τρέχουσα ηµεροµηνία και για τις επόµενες επτά ηµέρες, µε χρήση της κλήσης [α] NextShowsList=broadcasts.NextWeek(system.date()). Η λίστα αυτή εµφανίζεται στην οθόνη µέσα στο χώρο που χρησιµοποιεί το applet µε χρήση της κλήσης [β] this.displayshows(), ενώ η επιλογή και η παραγγελία εκποµπών γίνεται µε τις κλήσεις [γ] SelectedShows=this.SelectShows()και [δ] OrderedShows=this.OrderShows(), αντίστοιχα. Όταν ο χρήστης εγκαταλείψει τη σελίδα οι επιλογές που έχει κάνει µέχρι εκείνη τη στιγµή, διατηρούνται µε χρήση της κλήσης [ε] this.saveselections(), ενώ όταν κλείσει τον browser απελευθερώνεται η δεσµευµένη µνήµη µε την κλήση [στ] this.releasememory(). Α. Να δώσετε τον ορισµό της κλάσης PayPerViewProg στον οποίο να περιέχονται ονοµαστικά τα πεδία και οι µέθοδοι που πρέπει να οριστούν µε βάση τα προααναφερθέντα και τα ισχύοντα [1,0]. Πρόκειται για applet, οπότε πρέπει υποχρεωτικά να κάνει extend την κλάση Applet και να ορίζει τις µεθόδους init(), start(), stop(), και destroy() (σηµειώσεις σελ 99, διαφάνειες σελ 23). Οι κλήσεις α, γ και δ είναι αναθέσεις οι οποίες απαιτούν την ύπαρξη των πεδίων NextShowList, SelectedShows και OrderedShows. Οι αναφορές this.* (β, γ, δ, ε, στ) υπονοούν όλες µεθόδους που ανήκουν στην τρέχουσα κλάση, οπότε έχουµε επιπλέον τις µεθόδους DisplayShows(), SelectShows(), OrderShows(), SaveSelections() και ReleaseMemory(). Η κλήση broadcasts.nextweek(system.date()) αναφέρεται στη µέθοδο NextWeek() ενός αντικειµένου broadcasts η οποία ΕΝ ανήκει στη δική µας κλάση (αν ανήκε θα καλείτο είτε µε σκέτο το όνοµά της, είτε µε "this"). Κατόπιν τούτων, ο ορισµός της ζητούµενης κλάσης είναι ο ακόλουθος: class PayPerViewProg extends Applet { /* αναφέρονται µόνο τα ονόµατα των πεδίων και των µεθόδων που συνάγονται από την εκφώνηση */ /***************************** ΠΕ ΙΑ *****************************/ private NextShowList; private SelectedShows; private OrderedShows; /**************************** ΜΕΘΟ ΟΙ ****************************/ /* 1. Υποχρεωτικές σε όλα τα applets init: εκτελείται µε το φόρτωµα της σελίδας start: κάθε φορά που ο χρήστης επανέρχεται στη σελίδα stop: όταν ο χρήστης εγκαταλείπει τη σελίδα destroy: όταν κλείνει ο browser */ public void init() { public void start() { public void stop() { public void destroy() { /* 2. Στο συγκεκριµένο applet, συναγόµενες από τον ορισµό */ public void DisplayShows() { public void SelectShows() { public void OrderShows() { public void SaveSelections() { public void ReleaseMemory() { 6
Β. Να τοποθετήσετε κατάλληλα τις κλήσεις [α] - [στ] µέσα στις µεθόδους που αναφέρατε στον ορισµό της κλάσης PayPerViewProg [1,0]. Σύµφωνα µε τις συνθήκες κλήσης των init(), start(), stop(), και destroy() (σηµειώσεις σελ 99, διαφάνειες σελ 23), καθώς και την εκφώνηση, οι κλήσεις [α] - [στ] τοποθετούνται µέσα σε αυτές, ως ακολούθως: public void init() { NextShowsList=broadcasts.NextWeek(system.date()); // διότι γίνεται αρχικοποίηση public void start() { this.displayshows(); SelectedShows=this.SelectShows(); OrderedShows=this.OrderShows(); // διότι πρόκειται για τι κύριο µέρος της δουλειάς του applet public void stop() { this.saveselections(); // διότι οι επιλογές πρέπει να αποθηκεύονται // όταν ο χρήστης φεύγει από τη σελιδα public void destroy() { this.releasememory(); // διότι υποδηλώνει το τέλος χρησιµότητας του applet, // εφόσον κλείνει ο browser 7
ΘΕΜΑ 3 (Μονάδες 2) Κατά την επεξεργασία των δεδοµένων των εκποµπών δηµιουργείται ένα αντικείµενο της κλάσης BroadcastTotals, η οποία ορίζεται ως εξής: class BroadcastTotals { private int showsnumber; // ο αριθµός των εκποµπών private String[] shownames; // οι τίτλοι των εκποµπών private int[] showorders; // το πλήθος παραγγελιών για κάθε εκποµπή public BroadcastTotals() { // δίνει τιµές στο πεδίο showsnumber // γεµίζει µε δεδοµένα τα πεδία-πίνακες shownames[showsnumber] // και showorders[showsnumber] // θεωρείται γνωστή public int BestShow() { // επιστρέφει τον κωδικό της εκποµπής (θέση στον πίνακα shownames/showorders) // µε τον µεγαλύτερο αριθµό παραγγελιών (ζητείται) // τέλος ορισµού της κλάσης Εκδοχή 1: Να δώσετε τον πηγαίο κώδικα της µεθόδου BestShow() σε Java, που επιστρέφει τη θέση του πίνακα shownames/showorders στην οποία βρίσκεται η εκποµπή µε το µεγαλύτερο αριθµό παραγγελιών. Στην ουσία, µας ζητά να επιστρέψουµε τη θέση του µέγιστου στοιχείου του πίνακα showorders. public int BestShow() { int i, tmpmaxdata=integer.min_value, tmpmaxpos=0; for (i=0; i<showsnumber; i++) { if (showorders[i] > tmpmaxdata) { tmpmaxdata=showorders[i]; tmpmaxpos=i; return (tmpmaxpos); Εκδοχή 2: Να δώσετε τον πηγαίο κώδικα της µεθόδου WorseShow() σε Java, που επιστρέφει τη θέση του πίνακα shownames/showorders στην οποία βρίσκεται η εκποµπή µε το µικρότερο αριθµό παραγγελιών. Στην ουσία, µας ζητά να επιστρέψουµε τη θέση του ελαχίστου στοιχείου του πίνακα showorders. public int WorseShow() { int i, tmpmindata=integer.max_value, tmpminpos=0; for (i=0; i<showsnumber; i++) { if (showorders[i] < tmpmindata) { tmpmindata=showorders[i]; tmpminpos=i; return (tmpminpos); 8