Περιγραφή Άσκηση 21 Εξοµοιωτής Κυκλωµάτων Λογικών Πυλών () Στα πλαίσια της άσκησης LogicGateSimulator 1 θα αναπτύξετε ένα πρόγραµµα σύµφωνα µε το οποίο το σύστηµα θα σας επιτρέπει: 1. να ορίζετε ένα κύκλωµα λογικών πυλών πάνω σε ένα breadboard, 2. να δίνετε τιµές στις εισόδους του κυκλώµατος, 3. να ζητάτε την εκτέλεση του κυκλώµατος και αυτό θα σας δίνει τις τιµές των εξόδων του. Επιπλέον θα έχετε τις παρακάτω δυνατότητες: 1. Αποθήκευση του κυκλώµατος σε αρχείο 2. Φόρτωση κυκλώµατος από αρχείο 3. ηµιουργία breadboar επιλεγµένου µεγέθους 4. Τροποποίηση κυκλώµατος 5. Αλλαγών στις εισόδους του κυκλώµατος 6. Χρησιµοποίησης probes. Η λειτουργία της τροποποίησης θα πρέπει να επιτρέπει στον χρήστη: 1. Προσθήκη νέας λογικής πύλης στο κύκλωµα 2. Αλλαγή θέσης και συνδεσµολογίας υπάρχουσας πύλης του κυκλώµατος 3. ιαγραφή υπάρχουσας πύλης του κυκλώµατος To σχήµα 1 εµφανίζει το breadboard ενώ το σχήµα 2 εµφανίζει ένα κύκλωµα λογικών πυλών τοποθετηµένο πάνω σε αυτό. Σχήµα 1. Η προτυπωµένη πλακέτα (breadboard) της άσκησης. 1 Η άσκηση αναπτύχθηκε στα πλαίσια του προγράµµατος ΕΠΕΑΕΚ Αναβάθµιση Προγράµµατος Σπουδών του τµήµατος ΗΜ&ΤΥ από τους Γ. ούκα και Κ. Θραµπουλίδη. Αντικειµενοστρεφής Προγραµµατισµός-Java 1/35
Σχήµα 2. Κύκλωµα λογικών πυλών τοποθετηµένο πάνω στο breadboard. Στόχος Στόχος της άσκησης είναι η εξοικείωση µε την διαδικασία ανάπτυξης εφαρµογής αξιοποιώντας την αντικειµενοστρεφή Τεχνολογία (Object Technology). Πιο συγκεκριµένα η εξοικείωση µε: 1. τη δόµηση προγράµµατος ως συνάθροιση αντικειµένων, 2. τη αξιοποίηση τεχνικών για την αναγνώριση των αντικειµένων που συνθέτουν την εφαρµογή 3. την αξιοποίηση τεχνικών για τον προσδιορισµό της συνεργασίας των αντικειµένων που συνθέτουν την εφαρµογή. 4. την αξιοποίηση του διαγράµµατος κλάσεων για την αναπαράσταση της δοµής της εφαρµογής. 5. την αξιοποίηση αντικειµένων που υποστηρίζουν την επικοινωνία µε τον χρήστη 6. την αξιοποίηση και ενσωµάτωση στην εφαρµογή σας κλάσης που σας δίνεται σε bytecodes. 7. να συγκρίνετε άµεσα το διαδικαστικό µε το αντικειµενοστρεφές παράδειγµα προγραµµατισµού ραστηριότητες Η άσκηση δίνεται ως ένα σύνολο από δραστηριότητες που πρέπει να εκτελέσετε µόνοι σας. Σε κάθε δραστηριότητα σας δίνονται οδηγίες και βοήθεια ώστε να ξεπεράσετε τα δύσκολα σηµεία. Στο τέλος της άσκησης σας δίνονται ενδεικτικές απαντήσεις τις οποίες σας συνιστώ να αξιοποιείται µόνο µετά από την δική σας προσπάθεια. Αντικειµενοστρεφής Προγραµµατισµός-Java 2/35
ραστηριότητα 1 Στόχος της δραστηριότητας είναι η αναγνώριση και καταγραφή των αντικειµένων που κατά την γνώµη σας πρέπει να απαρτίζουν το πρόγραµµα σας για να ικανοποιεί τις απαιτήσεις όπως αυτές περιγράφηκαν παραπάνω. Αξιοποιήστε την γνώσεις σας από την αντίστοιχη εφαρµογή που αναπτύξατε αξιοποιώντας τον διαδικαστικό προγραµµατισµό και την C και δώστε µια πρώτη λίστα µε τα αντικείµενα που εκτιµάτε πως πρέπει να συνθέτουν το πρόγραµµα σας. Παρατήρηση. Για να απλοποιηθεί η διαδικασία ανάπτυξης του προγράµµατος θα αναπτύξουµε την εφαρµογή σε δύο εκδόσεις: 1 η έκδοση ( ραστηριότητες 1-8). Η έκδοση αυτή δεν θα δίνει τη δυνατότητα στο χρήστη να ορίζει το κύκλωµα. Το κύκλωµα θα είναι hardcoded µέσα στον κώδικα. 2 η έκδοση ( ραστηριότητες 9-10). Στην δραστηριότητα 9 θα αντιµετωπίσουµε µια πιο γενική έκδοση που θα δίνει στο χρήστη και τη δυνατότητα ορισµού κυκλώµατος. ραστηριότητα 2 Περιγράψτε την δοµή και συµπεριφορά των αντικειµένων της λίστας που δηµιουργήσατε στα πλαίσια της παραπάνω δραστηριότητας. Χρησιµοποιήστε δοµηµένα Ελληνικά για να δώσετε την δοµή και συµπεριφορά επιλεγµένων αντικειµένων. ραστηριότητα 3 Στόχος της δραστηριότητας είναι η εξοικείωση µε ένα έτοιµο πρόγραµµα CircuitSimulator ώστε να αποκτήσετε την επιπλέον γνώση που είναι απαραίτητη για να αναπτύξετε τον δικό σας circuitsimulator. Οδηγίες Το πρόγραµµα CircuitSimulator σας δίνεται σε ένα.zip αρχείο το οποίο πρέπει να αποσυµπιέσετε και να εκτελέσετε χρησιµοποιώντας τον διερµηνευτή της Java (Java interpreter). Ο Java interpreter περιλαµβάνεται στην Java 2 Platform, Standard Edition (J2SE) http://java.sun.com/j2se/. Μπορείτε να κατεβάσετε την παραπάνω έκδοση της Java και να την εγκαταστήσετε επιλέγοντας το λειτουργικό σύστηµα του µηχανήµατος σας από την διεύθυνση http://java.sun.com/j2se/1.4.2/download.html. (Ο Java interpreter είναι εγκατεστηµένος στους σταθµούς εργασίας του ΥΚ). Στο αρχείο CircuitSimulator.zip περιλαµβάνονται και ορισµένα αρχεία.cs τα οποία περιέχουν περιγραφές διαφόρων κυκλωµάτων που µπορείτε να φορτώσετε στο πρόγραµµα µε την επιλογή LoadCircuit. Αντικειµενοστρεφής Προγραµµατισµός-Java 3/35
Το πρόγραµµα CircuitSimulator πρέπει να εκτελεστεί από την γραµµή διαταγών του Windows CMD prompt. Για την ρύθµιση των παραµέτρων του Windows CMD prompt µπορείτε να ανατρέξετε στο δικτυακό τόπο µε τίτλο «Setting Windows CMD prompt properties» στην διεύθυνση http://www.unixwiz.net/techtips/cmd-window.html Συγκεκριµένα για την εκτέλεση του προγράµµατος δώστε στην γραµµή διαταγών του Windows CMD prompt την εντολή: >java jar CircuitSimulator.jar αν το αρχείο CircuitSimulator είναι.jar ή >java CircuitSimulator αν το αρχείο CircuitSimulator είναι.class Στην οθόνη θα εµφανισθεί η γραφική διεπαφή του προγράµµατος που σας δίνεται (σχήµα 3). Σχήµα 3. Η γραφική διεπαφή του ενδεικτικού προγράµµατος εξοµοιωτή κυκλωµάτων λογικών πυλών. Χρησιµοποιείστε τo πρόγραµµα ώστε να κατανοήσετε πλήρως την λειτουργικότητα του. Επιλέξτε Load Circuit για να φορτώσετε ένα έτοιµο κύκλωµα. Από το παράθυρο επιλογής αρχείου επιλέξτε το αρχείο «Figure2Circuit.cs» που περιέχει την περιγραφή του κυκλώµατος του σχήµατος 2. Μια τέτοια περιγραφή µπορείτε να δηµιουργήσετε µε έναν editor της επιλογής σας ακολουθώντας τον τρόπο αναπαράστασης που έχουµε υιοθετήσει στα πλαίσια της άσκησης. Στην οθόνη θα Αντικειµενοστρεφής Προγραµµατισµός-Java 4/35
εµφανισθεί η εικόνα του σχήµατος 4. Εναλλακτικά µπορείτε να φορτώσετε το αρχείο «ExampleCircuit.cs». Ορίστε τις εισόδους πιέζοντας τους αντίστοιχους διακόπτες και επιλέξτε Run Circuit για να δείτε την έξοδο του κυκλώµατος σας. Το σχήµα 5 δίνει την περιγραφή του κυκλώµατος του σχήµατος 2 σύµφωνα µε την αναπαράσταση που υιοθετήσαµε. Στο τέλος της άσκησης µπορείτε να βρείτε επιπλέον οδηγίες για την δραστηριότητα αυτή. Σχήµα 4. Το κύκλωµα του σχήµατος 2 στον Circuit Simulator. Σχήµα 5. Το αρχείο Figure2Circuit.cs Αντικειµενοστρεφής Προγραµµατισµός-Java 5/35
Περιγραφή κυκλώµατος Για την περιγραφή του λογικού κυκλώµατος σε ένα αρχείο cs ακολουθήσαµε την παρακάτω σύµβαση. Κάθε γραµµή του αρχείου αντιστοιχεί σε ένα δοµικό στοιχείο του κυκλώµατος (BOARD, Gate (π.χ. AND, OR, NAND, κ.λ.π.), SWITCH, και LED). Περιορισµός: Η πρόταση BOARD θα πρέπει να είναι η πρώτη γραµµή στην περιγραφή µορφής κειµένου. H γραµµή που αντιστοιχεί σε µία πύλη του κυκλώµατος και έχει την παρακάτω µορφή: <είδος πύλης>, < στήλη στην οποία ανήκει>, < γραµµή στην οποία ανήκει>, <θέση εισόδου 1>, <θέση εισόδου 2>, <θέση εξόδου> Ως παράδειγµα θεωρείστε την πλακέτα του σχήµατος 4 και την ακόλουθη γραµµή AND,0,1,0,1,1 Η γραµµή αυτή δηλώνει ότι θα τοποθετηθεί µια πύλη AND στην δεύτερη θέση (γραµµή) της πρώτη στήλης της πλακέτας. Η µία είσοδος της πύλης θα βρίσκεται στην υποδοχή 0 της πρώτης στήλης της πλακέτας, η άλλη είσοδος θα βρίσκεται στην υποδοχή 1 της πρώτης στήλης της πλακέτας, ενώ η έξοδος θα βρίσκεται στην υποδοχή 1 της επόµενης στήλης, δηλαδή της δεύτερης στήλης της πλακέτας. ραστηριότητα 4 Στόχος της δραστηριότητας είναι η αναγνώριση και καταγραφή των αντικειµένων που πρέπει να απαρτίζουν ένα πρόγραµµα σαν και αυτό που χρησιµοποιήσατε στην παραπάνω δραστηριότητα. ραστηριότητα 5 Στη δραστηριότητα αυτή όπως και τις επόµενες θα παραβλέψουµε την γραφική διεπαφή και θα ασχοληθούµε µε την ανάπτυξη ενός προγράµµατος που δεν θα διαθέτει γραφική διεπαφή. Ενέργεια 5.1 Αναγνωρίσατε και ορίσατε τα αντικείµενα που αναπαριστούν τις βασικές πύλες που χρησιµοποιούµε για την δηµιουργία των κυκλωµάτων µας. Στη φάση αυτή δεν θα αξιοποιήσουµε τον µηχανισµό της κληρονοµικότητας. Αντικειµενοστρεφής Προγραµµατισµός-Java 6/35
Ενέργεια 5.2 Περιγράψτε δοµή και συµπεριφορά των αντικειµένων που αναπαριστούν τις βασικές πύλες. Υπάρχουν ορισµένα χαρακτηριστικά που προσδιορίζουν την συγκεκριµένη πύλη όπως ένας αριθµός που θα τις αποδίδουµε (identifier) για να την διακρίνουµε από τις υπόλοιπες πύλες, το όνοµα της πύλης και ο αριθµός των εισόδων της. Ένα άλλο σύνολο χαρακτηριστικών προσδιορίζει την θέση της πύλης σε σχέση µε το συγκεκριµένο κύκλωµα όπως οι υποδοχές στις οποίες συνδέονται οι είσοδοι και έξοδοι της πύλης. Τα χαρακτηριστικά αυτά θα µπορούσαν να αποτελέσουν χαρακτηριστικά µιας άλλης κλάσης π.χ. της GatePosition. Ενέργεια 5.3 Αξιοποιήστε τη σχέση γενίκευσης-εξειδίκευσης και καταγράψτε την κοινή δοµή και συµπεριφορά που έχουν οι κλάσεις που αναπαριστούν τις βασικές πύλες. Ορίστε µε τον τρόπο αυτό την κλάση που αποτελεί γενίκευση των κλάσεων που αναπαριστούν τις βασικές πύλες. Ενέργεια 5.4 Αξιοποιήστε τον µηχανισµό της κληρονοµικότητας και υλοποιήσετε τις σχέσεις γενίκευσης/εξειδίκευσης που καταγράψατε στην παραπάνω ενέργεια. ραστηριότητα 6 Ενέργεια 6.1 ώστε την δοµή της κλάσης που αναπαριστά το breadboard. Ενέργεια 6.2 ώστε την συµπεριφορά της κλάσης που αναπαριστά το breadboard θεωρώντας σαν δοµή την ενδεικτική που σας σώσαµε στα πλαίσια της παραπάνω ενέργειας. Ενέργεια 6.3 ώστε τον κώδικα του δηµιουργού της κλάσης BreadBoard όπως αυτή ορίσθηκε στην παραπάνω ενέργεια. Αντικειµενοστρεφής Προγραµµατισµός-Java 7/35
ραστηριότητα 7 Ενέργεια 7.1 ώστε την δοµή της κλάσης που αναπαριστά το κύκλωµα. Ενέργεια 7.2 ώστε την συµπεριφορά της κλάσης που αναπαριστά το κύκλωµα θεωρώντας ως δοµή αυτή που δώσατε στα πλαίσια της παραπάνω ενέργειας. Ενέργεια 7.3 ώστε τον κώδικα του δηµιουργού της κλάσης Circuit όπως αυτή ορίσθηκε στην παραπάνω ενέργεια. Ενέργεια 7.4 ώστε τον κώδικα της µεθόδου run της κλάσης Circuit όπως αυτή ορίσθηκε στην παραπάνω ενέργεια. Ενέργεια 7.5 Τροποποιήστε την εφαρµογή σας Logic Gates Simulator ώστε να δίνει τη δυνατότητα στο χρήστη να φορτώσει κύκλωµα λογικών κύκλωµα από αρχείο στο διαδίκτυο χρησιµοποιώντας το πρωτόκολλο http. Για να ελέγξετε τη λειτουργικότητα του προγράµµατος σας, δοκιµάστε να διαβάσετε τα αρχεία ExampleCircuit.cs και Figure2Circuit.cs που βρίσκονται στο ευρετήριο (directory) Courses/OT/ του internet web site µε όνοµα seg.ece.upatras.gr ραστηριότητα 8 Γράψτε ένα πρόγραµµα που αξιοποιεί τις κλάσεις που ορίσατε στις παραπάνω δραστηριότητες. Το πρόγραµµα σας θα πρέπει να ορίζει ένα κύκλωµα, στη συνέχεια να ορίζει τις εισόδους του και να το τρέχει και τέλος να σας εµφανίζει τις εξόδους του στην οθόνη. Αντικειµενοστρεφής Προγραµµατισµός-Java 8/35
ραστηριότητα 9 Στη συνέχεια θα πρέπει να δώσετε µια έκδοση του προγράµµατος που θα είναι πιο γενική. Θα επιτρέπει στον χρήστη να ορίσει και τρέξει το κύκλωµα της επιλογής του. Στην προσπάθεια αυτή θα αξιοποιήσετε µια έτοιµη γραφική διεπαφή, την CircuitSimGui η οποία σας δίνεται σε πρώτη φάση σε µορφή bytecodes και στη συνέχεια σε µορφή πηγαίου κώδικα. Ενέργεια 9.1 Σας δίνεται ο δηµιουργός της κλάσης που αναπαριστά την γραφική διεπαφή. public CircuitSimGui(Circuit circuit) Αναπτύξατε ένα πρόγραµµα που θα δηµιουργεί µια γραφική διεπαφή αξιοποιώντας την κλάση που σας δόθηκε. Ενέργεια 9.2 Περιγράψατε τον τρόπο λειτουργίας του προγράµµατος που αναπτύξατε. ραστηριότητα 10 Αναπτύξτε την δική σας γραφική διεπαφή. Για την κατασκευή του Gui µπορείτε να χρησιµοποιήσετε έναν Gui Builder όπως για παράδειγµα τον WindowBuilder Pro Αντικειµενοστρεφής Προγραµµατισµός-Java 9/35
Ενδεικτικές απαντήσεις των δραστηριοτήτων της άσκησης ραστηριότητα 3 Ενδεικτική απάντηση Πιο συγκεκριµένα έχετε τις παρακάτω δυνατότητες: 1. Να ορίσετε νέο breadboard ορίζοντας τον αριθµό των στηλών και τον αριθµό των υποδοχών ανά στήλη. 2. Να δηµιουργήσετε το δικό σας κύκλωµα, πάνω στο breadboard που δηµιουργήσατε ή στο προσχεδιασµένο, συνδέοντας και αποσυνδέοντας πύλες, διακόπτες και λαµπτήρες. 3. Να τοποθετήσετε στο breadboard την λογική πύλη της αρεσκείας. Για την προσθήκη λογικής πύλης στο κύκλωµα επιλέξτε το κατάλληλο εικονίδιο (δες σχήµα 1) και συµπληρώστε τις παραµέτρους του παραθύρου του σχήµατος 2 που προσδιορίζουν την θέση της πύλης πάνω στο breadboard. Η αρίθµηση στηλών κ.λ.π. αρχίζει από το 0. Μετά τον ορισµό των παραµέτρων η πύλη εµφανίζεται στο breadboard (δες σχήµα 3). Το ζεύγος (0,1) δίνει την θέση της πύλης στο breadboard. Σχήµα 1. Περιοχή επιλογής δοµικού στοιχείου κυκλώµατος. Σχήµα 2. Παράθυρο ορισµού παραµέτρων θέσης πύλης στο breadboard. Σχήµα 3. Η κάθε πύλη αναγράφει την θέση της στο breadboard. Αντικειµενοστρεφής Προγραµµατισµός-Java 10/35
4. Να τοποθετήσετε διακόπτες στις υποδοχές της πρώτης (0) στήλης υποδοχών. Επιλέξτε το εικονίδιο του διακόπτη και προσδιορίστε την υποδοχή στην οποία θέλετε να συνδεθεί. Το σχήµα 4 δείχνει τον διακόπτη στην δεύτερη υποδοχή. Πιέστε τον διακόπτη για την αλλαγή της κατάστασης του από ΟΝ σε OFF και αντίστροφα. Σχήµα 4. Αλλαγή κατάστασης διακόπτη τροφοδοσίας υποδοχής. 5. Να τοποθετήσετε λαµπτήρα στις υποδοχές της τελευταίας στήλης υποδοχών. Επιλέξτε το εικονίδιο του led και προσδιορίστε την υποδοχή στην οποία θέλετε να συνδεθεί. Το σχήµα 5 δείχνει τον ενδεικτικό λαµπτήρα στην δεύτερη υποδοχή. Σχήµα 5. Τοποθέτηση λαµπτήρα (led) στην δεύτερη (1) υποδοχή. 6. Να τοποθετήσετε probe σε συγκεκριµένη υποδοχή. Επιλέξτε το εικονίδιο του probe και προσδιορίστε την υποδοχή στην οποία θέλετε να συνδεθεί. Το σχήµα 6 δείχνει τον probe που τοποθετήθηκε στην 2 η υποδοχή της 2 ης στήλης. Αντικειµενοστρεφής Προγραµµατισµός-Java 11/35
Σχήµα 6. Τοποθέτηση probe στην 2 η υποδοχή της 2 ης στήλης. 7. Να προσδιορίσετε τις εισόδους του κυκλώµατος. 8. Να τρέχετε το κύκλωµα. 9. Να σώσετε το κύκλωµα σε αρχείο για µελλοντική χρήση. 10. Να φορτώσετε νέο κύκλωµα από αρχείο. Αντικειµενοστρεφής Προγραµµατισµός-Java 12/35