Τρίτη, 9 Απριλίου 2019

Αντικειμενοστραφής Προγραμματισμός στην Ιστορία της Πληροφορικής (Ι)



Ένα από τα προγραμματιστικά παραδείγματα (τρόπος προγραμματισμού) είναι ο αντικειμενοστραφής προγραμματισμός. Σημασία εδώ θα δώσουμε στο τι είναι αυτό το παράδειγμα, μέσω της ιστορίας της πληροφορικής, με ιστορικές στάσεις. Πρώτη στάση είναι το πρόγραμμα που έθεσε τις βάσεις για το σχεδιασμό μέσω γραφικού περιβάλλοντος με εξειδικευμένα χειριστήρια για διαδραστική επεξεργασία σχεδίων.

Το 1962 δημιουργήθηκε το πρόγραμμα Scetchpad, από το καθηγητή του MIT Ivan Sutherland, ηλεκτρολόγο μηχανολόγο, υπό την εποπτεία του καθηγητή Claude Shannon. Σκοπός του προγράμματος ήταν να μπορεί κάποιος να δημιουργεί γραφήματα με γραμμές και τόξα, να ομαδοποιεί κάποια από αυτά και να τα αντιγράφει σε νέες θέσεις πάνω σε έναν νοητό καμβά. Μπορούσε κάποιος να αλλάξει την ομάδα και αυτόματα να αλλάξει και όπου αλλού χρησιμοποιείται. Το πρόγραμμα έτρεχε σε έναν υπολογιστή με 64k μνήμης των 36 bit. Ο σχεδιασμός γίνονταν με ένα lighpen (εφεύρεση του 1955), μια πένα που διαβίβαζε την θέση της στην οθόνη όταν κάποιος έφερνε την πένα πάνω στην οθόνη. Ο μηχανισμός της πένας ήταν ένας συνδυασμός ενός αισθητήρα και ενός προγράμματος. Η στιγμή που ο αισθητήρας έπαιρνε σήμα, καταγράφονταν, όπως και η στιγμή που το πρώτο εικονοστοιχείο εκπέμπονταν, έτσι με τη διαφορά του χρόνου και βάσει του χρονισμού της οθόνης, υπολογίζονταν με ακρίβεια η θέση του εικονοστοιχείου κάτω από την πένα.

Το πρόγραμμα Scetchpad έπρεπε να τρέχει διαδραστικά, δηλαδή την στιγμή της εκτέλεσης να γίνεται και ο χειρισμός με την πένα. Εκείνη την εποχή τα προγράμματα έτρεχαν με το σύστημα της "φουρνιάς" ή batch, δηλαδή γίνονταν εισαγωγή δεδομένων ξεχωριστά από την εκτέλεση του προγράμματος, και κατά την εκτέλεση υπήρχε η εξαγωγή του αποτελέσματος. Ο Sutherland αναγκάστηκε να φτιάξει και δεύτερη έκδοση για επεξεργασία τύπου κατά φουρνιές (batch mode), εκτός από το διαδραστικό (interactive mode). Το πρόγραμμα αποτελούσε την θέση του Sutherland για το διδακτορικό του, με τίτλο "SKETCHPAD, A MAN-MACHINE GRAPHICAL COMMUNICATION SYSTEM", Ιανουάριος 1963. Ο δημιουργός του εστίαζε στο τρόπο επικοινωνίας ανθρώπου και μηχανής. Στην περίληψη στην αρχή της θέσης του, παρουσιάζει την εφαρμογή ως αυτό που περιέχει τα προγράμματα εισαγωγής εξαγωγής και υπολογισμών, όπου δίνεται η δυνατότητα διερμηνείας πληροφορίας όπου άμεσα σχεδιάζεται στην οθόνη του υπολογιστή. Αναφέρει ότι είχε ήδη χρησιμοποιηθεί για σχέδια ηλεκτρολογικά, μηχανικά, επιστημονικά, μαθηματικά, και κινούμενου σχεδίου, συνεπώς όπως το έθετε ήταν γενικής χρήσεως σύστημα. Επιγραμματικά μας λέει ότι με την βοήθεια του προγράμματος μπορούσε κανείς να μετακινήσει σύμβολα (μικρότερα σχέδια μέσα στο σχέδιο), με την δυνατότητα να τραβάει μαζί και συνδέσεις με άλλα σύμβολα. Με αυτό το τρόπο μπορούσε κανείς να φτιάχνει την εισαγωγή σχεδίου για έναν εξομοιωτή κυκλωμάτων (circuit simulator). Για να φτιάξει κανείς μια γραμμή απαιτούνταν ελάχιστους χειρισμούς, δηλαδή να δείξει το πρώτο σημείο, το δεύτερο και με το πάτημα ενός κουμπιού να δει τη γραμμή ακριβώς εκεί που θέλει. Το ενδιαφέρον δεν ήταν μόνο να εμφανίζεται το σχέδιο στην οθόνη, αλλά τα δεδομένα που συστήνουν το γράφημα να μπορούν να αξιοποιηθούν από άλλα προγράμματα, τα οποία θα μοιράζονταν αυτό που ο ίδιος ονόμαζε δομή ring structure. Είναι σημαντικό εδώ να αντιληφθεί ο αναγνώστης ότι όταν μια νέα τεχνολογία μπαίνει στο προσκήνιο τότε εμφανίζονται νέες έννοιες και παίρνουν ονόματα όπως θέλει ο σχεδιαστής της. Όπως γράφει στις ευχαριστίες, πριν την ανάπτυξη της θέσης του, βοηθήθηκε από ξεχωριστές ομάδες CAD, που ασχολούνταν με την μέσω υπολογιστή σχεδίαση. Επίσης ευχαριστεί για την υποστήριξη που είχε με την παροχή χρήσης του υπολογιστή (δεν υπήρχαν τότε οικιακοί υπολογιστές). Επίσης δεν υπήρχαν τα σημερινού τύπου πληκτρολόγια, και τα πλήκτρα και περιστροφικοί διακόπτες ήταν κάποια στην οθόνη παρακείμενα και άλλα σε ξεχωριστή κονσόλα χειριστηρίων. Η οθόνη σχεδιασμού ήταν 7Χ7 ίντσες (1024Χ1024 σημεία). Η εξαγωγή των σχεδίων μπορούσε να γίνει σε plotter, σχεδιαστή πενών, είτε απευθείας από το πρόγραμμα ή με χρήση διάτρητων καρτών!

Διαβάζοντας τη θέση του Sutherland, καθώς περιγράφει το τρόπο χειρισμού του Scetchpad, βλέπουμε την αναφορά στο subpicture, κάνοντας μια αρχική εικόνα ενός εξάγωνου, αποθηκεύοντας την, και σε νέο σχέδιο εφαρμόζοντας τα εξάγωνα σε διάφορες θέσεις, σαν αντικείμενα σχεδίασης. Το σχέδιο με τα πολλά εξάγωνα μπορούσε να αποθηκευτεί και να γίνει έναν νέο subpicture για άλλο σχέδιο. Μας επεξηγεί λοιπόν τα βασικά "αντικείμενα" (δεν τα λέει αντικείμενα, αλλά δυνατότητες του συστήματος - capabilities of the system): subpicture, constraint, definition copying.

Το πρώτο "αντικείμενο" έχει τα στοιχεία, τόξα και ευθύγραμμα τμήματα, που απαρτίζουν το σχέδιο που βλέπουμε. Θα μπορούσε να ήταν ένα εξάγωνο, ή μια πτέρυγα αεροπλάνου, ή έναν γράμμα, ή ό,τι μπορεί να σχεδιαστεί.

Το δεύτερο "αντικείμενο" δείχνει πως τα subpictures μπορούν να συσχετισθούν μεταξύ τους, ορίζοντας σημεία ενώσεων, περιστροφή, μέγεθος. Όπως γράφει σε δυο μέρες από πέντε αρχικούς τύπους constraint έφτιαξε δεκαεφτά, και εύκολα μπορούσε κανείς να φτιάξει και άλλους.

Το τρίτο αντικείμενο, το definition copying εφαρμόζεται πάνω στα δυο πρώτα, και έτσι μπορεί κανείς εύκολα να βάζει πάνω σε ένα σχέδιο δευτερεύοντα σχέδια που ακολουθούν τις αλλαγές των αρχικών, όπως για παράδειγμα τις γραμμές διαστασιολόγησης με βελάκια και με αριθμούς.

Μας δίνει ένα παράδειγμα ενός εξαγώνου, που έχει οριστεί να είναι εντός ενός κύκλου. Το πρόγραμμα δεν μας αφήνει να βγάλουμε το εξάγωνο από το κύκλο. Δηλαδή έχουμε πληροφορία για το κάθε σχέδιο και σχέσεις μεταξύ τους. Εδώ αρχίζει να αναφέρεται σε ιδιότητες (properties), όπου μια γραμμή μπορεί να είναι με σημεία (dotted line). Επίσης έχουμε την δυνατότητα να αλλάξουμε το σχέδιο μιας subpicture με ένα άλλο και αυτό θα γίνει αυτόματα όπου το χρησιμοποιούμε. Αυτό το χαρακτηριστικό δηλώνει και κάτι άλλο. Ότι στο αρχείο μας δεν έχουμε τυχαίες γραμμές αλλά ξεκάθαρα αντικείμενα. Έτσι το αρχείο μπορεί να χρησιμοποιηθεί όχι μόνο για να εμφανίζεται αλλά για να κρατάει σχέσεις μεταξύ τους, για άλλη χρήση. Σε ένα ηλεκτρικό κύκλωμα, τα στοιχεία του, που τα είδαμε ως subpictures, είναι διακριτά στοιχεία με ιδιότητες που μπορούν να δώσουν υπολογισμούς, ή να χρησιμοποιηθούν για εξομοιώσεις "πραγματικών αντικειμένων".

Συνοψίζοντας ο Sutherland πάνω στη χρήση του προγράμματος, αναφέρει τέσσερα ιδιαίτερα χαρακτηριστικά:
  1. Μικρές αλλαγές σε υπάρχοντα σχέδια. Μια μικρή αλλαγή σε ένα subpicture φαίνεται ως μεγάλη αλλαγή σε σχέδιο που το χρησιμοποιεί σε πολλά σημεία. Για την εποχή εκείνη, όπου το σχέδιο γράφονταν σε μαγνητική ταινία, αυτό σήμαινε μικρό χρόνο για την αλλαγή (δεν άλλαζε όλο το αρχείο).
  2. Κέρδος επιστημονικό ή μηχανολογικό από την κατανόηση των χειρισμών που μπορούν να περιγραφούν γραφικά. Μετακινώντας μέρη του σχεδίου, κάποιες γραμμές "σύνδεσης" αλλάζουν μήκος και θέση ανάλογα με το τύπο τους (constrain) και δίνουν οπτικά την αλλαγή. Σε αυτό συμβάλλει η δυνατότητα να βάλουμε "δηλώσεις" περί των τρόπων αλλαγών.
  3. Εισαγωγή τοπογραφικών δεδομένων, δηλαδή δεδομένα που συνδέονται γραφικά μεταξύ τους, για να περαστούν σε προγράμματα εξομοίωσης.
  4. Σχεδιασμό αναδρομικών σχεδίων. Ένα σχέδιο το οποίο αναπαράγεται εσωτερικά στο ίδιο σχέδιο πολλές φορές. (Χρησιμοποιήθηκε στην κατασκευή μνημών)


Αξίζει εδώ να αναφερθεί και ο τρόπος που ο Sutherland μπήκε στην ιδέα του να φτιάξει το Sketchpad. (το περιγράφει στο κεφάλαιο ΙΙ της θέσης του). Το 1960 ο Jack I. Raffel του λέει ότι υπάρχει μεγάλο ενδιαφέρον στο εργαστήριο Lincoln στο να γίνει ο υπολογιστής περισσότερο προσβάσιμος με την χρήση των οθονών (dispays). Κατά το διάστημα 1960-1961, καταπιάνεται πάνω στην οθόνη και την πένα (lightpen), και συνειδητοποιεί ότι αυτά θα είναι χρήσιμα για παραγωγή σχεδίων. Οπότε προσεγγίζει τον Wesley A. Clark, της ομάδας 51 στο Lincoln Laboratory, με την πρόταση να χρησιμοποιήσει έναν TX-2 υπολογιστή για την έρευνα πάνω σε τεχνικές σχεδίασης σε υπολογιστή. Πραγματικά ο Clark είχε βάλει πολλά χαρακτηριστικά σχεδίασης στον TX-2, στα οποία δεν είχε ιδέα κατά την προσέγγιση, αλλά ταίριαζαν σε αυτό που ήθελε. Κατά το φθινόπωρο το 1961, δέχεται ο καθηγητής Claude E. Shannon (θεωρείται ο πατέρας της θεωρίας της πληροφορικής), να τον επιβλέψει, σε αυτό που ήθελε ως διδακτορική θέση. Από εκείνο το σημείο κατάλαβε ότι δεν ήταν ο μόνος που επιδίωκε τους ίδιους σκοπούς, πολλά άτομα στο ΜΙΤ συζητούσαν πάνω σε αυτό. Υπήρχε ήδη το APT, (Automatically Programmed Tool) με το οποίο ένας υπολογιστής παρήγαγε μεταλλικά εξαρτήματα χρησιμοποιώντας χρήσιμες γεωμετρικές τεχνικές χειρισμού. Διαπίστωσε όμως ότι ελάχιστα δείγματα εργασίας υπήρχαν πάνω στο σχεδιασμό γραμμών, ειδικά όταν υπήρχαν ήδη οθόνες και πένες (lightpen). Έτσι φάνηκε άμεσα ότι είχε μοναδική ευκαιρία να κυνηγήσει το ενδιαφέρον του. Ο υπολογιστής ΤΧ-2, ένας πειραματικός μηχανισμός, είχε την δυνατότητα να ανταποκριθεί σε αυτά που ήθελε, καθώς μπορούσε να τροποποιηθεί ανάλογα με τις ανάγκες. Όπως δηλώνει, όταν έμαθε τι είναι η σχεδίαση σε έναν υπολογιστή μπορούσαν και μικρότερες μηχανές να δουλέψουν για πρακτικά ζητήματα.

Τα πρώτα ζητήματα που έλυσε ήταν το πώς θα δουλεύει με την πένα (lightpen), γράφοντας το πρόγραμμα για την ανίχνευσή της (tracking) καθώς και πώς θα εμφανίζει όχι μόνο γραμμές αλλά και μέρη  ενός μεγαλύτερου σχεδίου στην οθόνη. Κατά τον Δεκέμβριο του 1961 τον επισκέφθηκε ο καθηγητής Sannon, και του υπέδειξε να βάλει τον κύκλο (μέχρι τότε μόνο με γραμμές είχε ασχοληθεί). Δούλεψε το κύκλο, με δύσκολο θέμα το πώς να γίνεται η ανίχνευση ακμής, edge detection, σε αυτόν), στο πρώτο πρόγραμμα. Μετά πέρασε σε ένα δεύτερο, όπου εφάρμοσε διασταυρώσεις (intersections) μεταξύ γραμμών και κύκλων. Στην θέση του, για το ντοκτορά, περιγράφει τις δυσκολίες και τα λογικά λάθη που υπέπεσε, για να καταλήξει σε ένα σωστό πρόγραμμα, μετά από πολλές δοκιμές. Το πρόγραμμα στη στιγμή εκείνη έκανε ελάχιστα πράγματα, σε σχέση με το τελικό πρόγραμμα. Έβγαλε μια ταινία που έδειχνε τη χρήση του (δεν υπήρχαν βιντεοκάμερες) και φωτογραφίες που τις έδειχνε σε διάφορα άλλα άτομα για να πάρει ιδέες και να προσθέσει δυνατότητες. Από εκεί βγήκε η ιδέα ότι μια γενική δομή θα ήταν καλύτερη για να μπορεί το πρόγραμμα να επεκταθεί. Τον Ιούνιο του 1962, όλη η νέα πληροφόρηση που άντλησε έδωσε την αρχή ενός εντελώς νέου συστήματος όπου με λίγες αλλαγές έγινε αυτό που λέμε Scetchpad.

Στο τελικό πρόγραμμα επιλέχθηκε μια γενική δομή, διαχωρισμός των υποπρογραμμάτων (subroutines), σε γενικού σκοπού που εφαρμόζονται σε όλους τους τύπους μερών σχεδίων, και σε εκείνους που εφαρμόζονται σε ξεχωριστούς τύπους, καθώς και απεριόριστη χρήση συναρτήσεων. (Την εποχή εκείνη δεν υπήρχαν προγραμματιστές, ο προγραμματισμός ήταν επικουρικός άλλων επιστημών). Το καλοκαίρι του 1962, το πρόγραμμα έδειχνε αξιοσημείωτη δύναμη. Ο Leonard M. Hantman κοίταξε το πρόγραμμα από θέμα σφαλμάτων, και πρόσθεσε συναρτήσεις για χρήση μαγνητικών ταινιών, και σύνδεση με το plotter (αυτόματο σχεδιαστή με πένες). Με το καιρό λιγότερη αποσφαλμάτωση γίνονταν, και περισσότερες εφαρμογές του προγράμματος πραγματοποιούνταν. Φτιάχτηκε εγχειρίδιο χρήσης οδηγιών και μια ομάδα που χρησιμοποιούσε το πρόγραμμα για εργασίες τρίτων. Δηλαδή το πρόγραμμα απέκτησε χρήστες. Από την δουλειά αυτών προέκυψε και το αλφάβητο που χρησιμοποιεί το Scetchpad για να εμφανίζει γράμματα στα σχέδια. Σχέδια για γέφυρες δεν ήταν αναμενόμενες, ως δουλειά του Scetchpad.

Προγραμματιστικά βάσει της σημερινής εποχής, έχουμε να κάνουμε με ένα πρόγραμμα σε assembly (για τον συγκεκριμένο υπολογιστή), και με δεδομένα που ήταν μια σειρά πινάκων, στην μνήμη, όπου εντός αυτών υπήρχαν στοιχεία όπως ο τύπος του δεδομένου (πχ γραμμή), συνδεδεμένα δεδομένα με αριθμούς που δήλωναν την σχετική θέση του πίνακα του κάθε συνδεδεμένου δεδομένου, οι οποίοι ήταν διπλοί, δηλαδή το συνδεδεμένο δεδομένο είχε και αυτό σχετικό δείκτη προς τα πίσω (έτσι δυο πίνακες δεδομένων Α και Β ήταν συνδεδεμένοι όταν είχε και ο Α δείκτη προς τον Β και ο Β προς το Α). Στοιχεία που αντιστοιχούσαν σε μια ομάδα στοιχείων μπορούσαν να μετακινηθούν εύκολα, αν αυτή είχε σύνδεση με δυο άλλες, γιατί μόνο σε τρεις πίνακες χρειάζονταν να αλλαχθούν οι σχετικοί δείκτες. Παρόλο που το πρόγραμμα δεν ήταν φτιαγμένο με όρους αντικειμενοστραφή προγραμματισμού, τα δεδομένα έδειχναν ότι αποτελούν στοιχεία αντικειμένου. Επειδή κάθε πίνακας δεδομένων (μια περιοχή στην μνήμη του συστήματος) είχε σαν πρώτο στοιχείο το τύπο του τμήματος, μπορούσε η δομή να εμπλουτιστεί με περισσότερους τύπους, χωρίς να αλλάξουν βασικά μέρη του προγράμματος που δούλευαν για κάθε τύπο.

Η οθόνη του υπολογιστή που χρησιμοποιούταν τότε, δεν δούλευε όπως οι σημερινές οθόνες. Έπαιρνε πρόγραμμα που οδηγούσε την εκπομπή ηλεκτρονίων στο σημείο της οθόνης που θέλαμε, με απόδοση εκατό χιλιάδων σημείων το δευτερόλεπτο. Θα μπορούσαμε να το δούμε ως χίλια ευθύγραμμα τμήματα των εκατό σημείων. Οι μικροϋπολογιστές της δεκαετίας του 80, είχαν 320Χ256 σημεία, τα οποία τα πρόβαλλαν σε δυο πλαίσια των 320Χ128 σημείων 50 φορές το δευτερόλεπτο, με χρήση οκτώ χρωμάτων (με το άσπρο και το μαύρο σε αυτά). Η διαφορά βέβαια ήταν στο παλιό σύστημα ότι ο φώσφορος αργούσε να σβήσει αφού δεν ήταν ο σκοπός να δείξει 50 πλαίσια το δευτερόλεπτο, αλλά έναν αριθμό σημείων το δευτερόλεπτο. Για να δουλέψει το lightpen, έπρεπε να εμφανίζεται ένας σταυρός και την ώρα της εμφάνισης να γίνεται έλεγχος του αισθητήρα της πένας. Αυτό το έκανε το πρόγραμμα που έδειχνε τα σημεία στην οθόνη. Στην αρχική έκδοση το πρόγραμμα διάβαζε την ίδια δομή που δημιουργούσαμε για το σχέδιο και είχε προβλήματα, όταν σβήναμε ή αλλάζαμε ένα στοιχείο ενώ εκείνη τη στιγμή το στοιχείο προβαλλόταν! Για το λόγο αυτό φτιάχτηκε ξεχωριστός πίνακας σημείων (spots). Επίσης για λόγους συγχρονισμού μπήκε ένας διακόπτης που άλλαζε το τρόπο προβολής από κανονικός σε διαχωριζόμενο (interlace). Ο διαχωρισμός έκανε την εμφάνιση των στοιχείων να γίνεται ανά οκτώ σημεία, με συνέπεια σε ορισμένα σχέδια να φαίνεται ότι το σχέδιο χορεύει, και έτσι να απαιτείται η αλλαγή προβολής! Κάθε σημείο γράφονταν στην μνήμη των 36bit, σε μια θέση, ώστε τα 20bit να δηλώνουν στην θέση στην οθόνη και τα υπόλοιπα 16 να δηλώνουν σε ποιο στοιχείο στην μνήμη των στοιχείων αφορά. Έτσι όταν σημαδεύουμε ένα σημείο με την πένα να βρίσκει το πρόγραμμα άμεσα το στοιχείο.


Το sketchpad εκτός από το να σχεδιάζει, προγραμματίζει, δηλαδή δημιουργεί σχέδια τα οποία αν τα μετακινήσουμε ή αλλάξουμε κάποιες τιμές κάνει υπολογισμούς και εμφανίζει νέες τιμές. Αυτός ο τρόπος εκτέλεσης προγράμματος λέγεται μη διαδικαστικός, αφού στην ουσία φτιάχνουμε το γράφημα που δίνει την λύση. Επειδή τα μέρη του προγράμματος είναι αντικείμενα, ο προγραμματισμός του λέγεται αντικειμενοστραφής. Το ότι φτιάχνουμε το βασικό ή Master αντικείμενο, και από αυτό φτιάχνουμε παρουσίες (instances) έχουμε το ανάλογο της κλάσης ή πρωτοτύπου και των παρουσιών του. Τα χαρακτηριστικά του αντικειμένου, όπως ο τύπος της γραμμής ή ο τύπος των άκρων της γραμμής είναι ιδιότητες του αντικειμένου.


Κάποτε ρώτησαν τον Sutherland, "Πώς είναι δυνατόν να έχει κάποιος φτιάξει το πρώτο διαδραστικό πρόγραμμα γραφικών, την πρώτη μη διαδικαστική γλώσσα προγραμματισμού, τη πρώτη αντικειμενοστραφή εφαρμογή, και όλα αυτά σε έναν χρόνο". Η απάντηση ήταν "Λοιπόν, δεν ήξερα ότι ήταν δύσκολο!"

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου