ΕΙΣΑΓΩΓΗ ΔΥΟ ΔΙΑΦΟΡΕΤΙΚΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΡΟΤΥΠΑ. Από τις προστακτικές στις δηλωτικές γλώσσες. Από την λίστα στο αντικείμενο

Σχετικά έγγραφα
ΑΕΠΠ Ερωτήσεις θεωρίας

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Μαλούτα Θεανώ Σελίδα 1

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

Επιµέλεια Θοδωρής Πιερράτος

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.

Α. Ερωτήσεις Ανάπτυξης

Εισαγωγή στις Αρχές της επιστήμης των ΗΥ

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΥΠΟΛΟΓΙΣΤΩΝ

Περί της Ταξινόμησης των Ειδών

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ ΚΕΦΑΛΑΙΟ 2 ο ΚΕΦΑΛΑΙΟ 7 ο ΕΡΩΤΗΣΕΙΣ ΓΕΝΙΚΑ ΠΕΡΙ ΑΛΓΟΡΙΘΜΩΝ

Πληροφορική 2. Γλώσσες Προγραμματισμού

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Πρόβλημα 29 / σελίδα 28

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 03/01/09 Χαράλαμπος Τζόκας 1

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΜΑΘΗΜΑ: Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ. 1 η ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ: ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

6. Εισαγωγή στον προγραµµατισµό

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ

κεφάλαιο Βασικές Έννοιες Επιστήμη των Υπολογιστών

Οπτική αντίληψη. Μετά?..

Κεφάλαιο 9 Συναρτησιακός προγραμματισμός Υπολογισμός με συναρτήσεις

Αρχιτεκτονική σχεδίαση με ηλεκτρονικό υπολογιστή

Κεφάλαιο 7. ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης

Αρχές Προγραμματισμού Υπολογιστών

Παιδαγωγικές δραστηριότητες μοντελοποίησης με χρήση ανοικτών υπολογιστικών περιβαλλόντων

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ

Αρχές Προγραμματισμού Η/Υ Μέθοδοι παρουσίασης του αλγόριθμου και Βασικές έννοιες

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων ΙΙ Σύνολο- Περιεχόμενο Μαθήματος

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

6. 1 Η έννοια του προγράμματος

Πρόβλημα 37 / σελίδα 207

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

K15 Ψηφιακή Λογική Σχεδίαση 7-8: Ανάλυση και σύνθεση συνδυαστικών λογικών κυκλωμάτων

Περιεχόμενα. 2 Αριθμητικά συστήματα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Στέφανος Ουγιάρογλου

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2. Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία εξίσου σημαντικά στάδια.

O μετασχηματισμός μιας «διαθεματικής» δραστηριότητας σε μαθηματική. Δέσποινα Πόταρη Πανεπιστήμιο Πατρών

Γράφοντας ένα σχολικό βιβλίο για τα Μαθηματικά. Μαριάννα Τζεκάκη Αν. Καθηγήτρια Α.Π.Θ. Μ. Καλδρυμίδου Αν. Καθηγήτρια Πανεπιστημίου Ιωαννίνων

Π ρ ο γ ρ α μ μ α τ ι σ μ ό ς Β α σ ι κ έ ς έ ν ν ο ι ε ς Ι σ τ ο ρ ι κ ή α ν α δ ρ ο μ ή Η έννοια του προγράμματος Ιστορική αναδρομή

ΔΙΑΧΕΙΡΙΣΗ ΥΔΑΤΙΚΩΝ ΠΟΡΩΝ

Υπολογιστικό Πρόβληµα

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

Μ Ε Ρ Ο Σ Γ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Εισαγωγή στην Πληροφορική

Σχεδιασμός Οικολογικού Διαμεσολαβητή για την εποπτεία και διαχείριση δικτύου διανομής ηλεκτρικής ενέργειας

Περιεχόμενο του μαθήματος

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

ΒΕΛΤΙΣΤΟΣ ΣΧΕΔΙΑΣΜΟΣ ΤΩΝ ΚΑΤΑΣΚΕΥΩΝ. Δρ. Πολ. Μηχ. Κόκκινος Οδυσσέας

Θεωρητικές Ασκήσεις. ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο Μέρος

Διδάσκων:Μ.Χατζόπουλος, Παραδόσεις:Τρίτη 4-6, Τετάρτη 1-3; (Αμφιθέατρο Α15) Πληροφορίες στην ιστοσελίδα του μαθήματος

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΜΑΘΗΜΑΤΙΚΑ ΚΑΙ ΑΡΧΙΤΕΚΤΟΝΙΚΟΣ ΣΧΕΔΙΑΣΜΟΣ

Αλγόριθμος. Αλγόριθμο ονομάζουμε τη σαφή και ακριβή περιγραφή μιας σειράς ξεχωριστών οδηγιών βημάτων με σκοπό την επίλυση ενός προβλήματος.

ΠΕΡΙΕΧΟΜΕΝΑ 1 ΚΕΦΑΛΑΙΟ ΟΙ ΥΠΟΛΟΓΙΣΤΕΣ ΑΠΟ ΤΗΝ ΑΡΧΑΙΟΤΗΤΑ ΜΕΧΡΙ ΣΗΜΕΡΑ Ιστορική αναδρομή Υπολογιστικές μηχανές

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 2 ο. Επικοινωνία:

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ

Πρόβλημα είναι μια κατάσταση η οποία χρήζει αντιμετώπισης, απαιτεί λύση, η δε λύση της δεν είναι γνωστή, ούτε προφανής.

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΠΛΗΡΟΦΟΡΙΚΗ, Γ ΤΑΞΗ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ

Εισαγωγικές Έννοιες. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

Υποδείγματα Ανάπτυξης

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ

Εισαγωγή στην επιστήμη των υπολογιστών

Επιστήμη της Πληροφορικής. Εργασία του μαθητή Δημήτρη Τσιαμπά του τμήματος Α4

Σύνοψη Θεωρίας ΟΡΙΣΜΟΣ ΚΑΙ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΑΛΓΟΡΙΘΜΩΝ

1. Η σκοπιμότητα της ένταξης εργαλείων ψηφιακής τεχνολογίας στη Μαθηματική Εκπαίδευση

Η ΝΟΗΤΙΚΗ ΔΙΕΡΓΑΣΙΑ: Η Σχετικότητα και ο Χρονισμός της Πληροφορίας Σελ. 1

Κεφάλαιο 3. Διδακτικοί Στόχοι

Transcript:

ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ 1 ΕΙΣΑΓΩΓΗ 3 ΔΥΟ ΔΙΑΦΟΡΕΤΙΚΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΡΟΤΥΠΑ 7 Από τις προστακτικές στις δηλωτικές γλώσσες 7 Από την λίστα στο αντικείμενο 12 Από το διάγραμα στην ακολουθία 19 Δομή και υφή 22 [ΑΝΑ]ΔΙΑΤΥΠΩΝΟΝΤΑΣ ΤΗΝ ΜΗΧΑΝΗ 27 Προς μια διαλεκτική των συμβόλων 28 Από τις Καθολικές στις Αφηρημένες Μηχανές 34 Η ΚΑΤΑΣΚΕΥΗ ΕΝΟΣ ΔΙΠΟΛΟΥ 51 Ποσότητα και Διάταξη: από την μέτρηση στον υπολογισμό 53 Διακριτότητα και Συνέχεια: από την διασύνδεση στην ενθυλάκωση 60 Ταυτότητα και Ομοιότητα: το ζήτημα της αλήθειας 64 Γενεαλογίες και Γενέσεις 68

2 Υπερβατικότητα και Εμμένεια: το ζήτημα του ελέγχου 73 ΑΠΟ ΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΜΗΧΑΝΗ ΣΤΙΣ ΜΗΧΑΝΕΣ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ 79 ΕΠΙΛΟΓΟΣ 89 ΒΙΒΛΙΟΓΡΑΦΙΑ 93

ΕΙΣΑΓΩΓΗ Σύμφωνα με τον Mario Carpo,1 η σύγχρονη εικόνα του Αρχιτέκτονα, ως πνευματικός δημιουργός σχεδιαστής, αποδίδεται στον Leon Battista Alberti, καθώς εκείνος ουσιαστικά εισήγαγε τον 15 ο αιώνα, το διαχωρισμό μεταξύ σχεδίου και κτιρίου, δηλαδή μεταξύ προδιαγραφής και αντικειμένου, και αποδέσμευσε την διαδικασία σχεδιασμού, ως πνευματική εργασία, από την φυσική, χειρωνακτική κατασκευή. Ταυτόχρονα, μέσα από την ευρύτερη ουμανιστική προσέγγιση της αναδιατύπωσης της έννοιας της πνευματικής δημιουργίας, στα πλαίσια κυρίως της συγγραφικής εργασίας, ο ρόλος του συντάκτη ενός πνευματικού έργου λάμβανε διαστάσεις ιδιοκτησίας και κυριαρχίας επί του έργου αυτού, σε αντίθεση με την πρότερη μεσαιωνική αντίληψη όπου ο κάτοχος, με την έννοια του ιδιοκτήτη, θεωρούταν ο χρηματοδότης του έργου, ο πνευματικός προστάτης. Το γεγονός αυτό αναδεικνύεται και οφείλεται, με έναν αμφίδρομο τρόπο, και στην σταδιακή αλλαγή στάσης προς την διαδικασία της τροποποίησης και της μεταβολής των λόγιων κειμένων κατά την διαδικασία της αντιγραφής τους με το χέρι: «[...] κατά τον όψιμο Μεσαίωνα η αποδοχή της τεχνικής ποικιλότητας [...] των χειροποίητων αντιγράφων κατέδειξε νέους τρόπους κειμενικής αλληλεπίδρασης, όπου οι διαφοροποιήσεις ήταν όχι μόνο ανεκτές, αλλά [ήταν] ουσιαστικά αναμενόμενες, ενθαρρύνονταν, και μερικές φορές αξιοποιούνταν.» 2 Η ουμανιστική εφεύρεση της σύγχρονης πνευματικής ιδιοκτησίας, 1 2 Mario Carpo, The alphabet and the algorithm, MIT Press, Cambridge MA: 2011. Στο ίδιο, σελ. 24 (μετάφραση δική μου).

4 κατέστειλε αυτήν την διαδικασία τροποποίησης, παρεμβολής και μεταβολής, και επεδίωξε την μετατροπή του έργου σε ένα κλειστό, πεπερασμένο αντικείμενο μέσω της λεγόμενης αποκατάστασης του πρωτότυπου: πλέον, η πνευματική εργασία κατά την ολοκλήρωσή της παρήγαγε ένα οριοθετημένο, διακριτό προιόν, κάθε αναφορά στο οποίο θα έπρεπε να γίνεται με απόλυτη συνέπεια ως προς την ταυτότητα του αρχικού. Σε αυτό, συνέβαλε προφανώς και η επινόηση της τυπογραφίας και της μηχανικής αναπαραγωγής, αναδεικνύοντας σταδιακά, κατά τις περιόδους που ακολούθησαν, την έννοια της πνευματικής ιδιοκτησίας στην υπόσταση την οποία γνωρίζουμε σήμερα. Σε αυτό το πεδίο, εντάχθηκε και η Αρχιτεκτονική ως πνευματική, πλέον, και όχι ως χειρωνακτική πρακτική, και ταυτόχρονα διαμόρφωσε την σχέση μεταξύ αντικειμένου και προδιαγραφής, που τόσο αναδείχθηκε κατά την περίοδο της βιομηχανοποίησης, και κυρίως κατά το Μοντέρνο κίνημα των αρχών του 20ου αιώνα: κατά τον Carpo, και σε απόλυτη συμφωνία με το Αλμπερτιανό παράδειγμα, κατά την βιομηχανική περίοδο, ο Αρχιτέκτονας αποτελεί τον πνευματικό άρχοντα (author) του αρχιτεκτονήματος ως προϊόν πνευματικής εργασίας, όπου το σχέδιο κατέχει το κυρίαρχο ρόλο του Πρωτοτύπου, και το οικοδόμημα είναι το μηχανικό του Aντίγραφο.3 Ο διαχωρισμός μεταξύ πνευματικής και χειρωνακτικής εργασίας στο πεδίο της αρχιτεκτονικής, όπως αναφέρθηκε παραπάνω, αποδέσμευσε παράλληλα την διαδικασία της προδιαγραφής του αντικειμένου ως μια αυτόνομη και κατά ένα τρόπο αυτοτελή εργασία, ανεξάρτητη από την διαδικασία κατασκευής ή υλοποίησής του. Αυτή η αυτονόμηση της προδιαγραφής γίνεται ακόμη εντονότερη τα τελευταία χρόνια, με την άνοδο των ψηφιακών, αλγοριθμικών διαδικασιών σχεδιασμού, όπου σε αρκετά παραδείγματα το αντικείμενο-κτίριο, ως στόχος της διαδικασίας προδιαγραφής, αποτελεί όρο που χρησιμοποιείται συμβατικά, καθώς δεν περιγράφει πλέον μια αναπαριστούμενη μοναδιαία οντότητα, αλλά μια πολλαπλότητα μορφών συναρτημένη από ένα πλήθος παραμετρικών συνθηκών. Ταυτόχρονα, μέσα σε αυτό το πλαίσιο όπου ο κώδικας και ο αλγόριθμος αναλαμβάνουν πλέον κύριο ρόλο στο εννοιολογικό σύστημα του αρχιτεκτονικού πεδίου, η ώσμωση με τις θεωρίες και τις εξελίξεις στις επιστήμες 3 Στο ίδιο, σελ. 26.

ΕΙΣΑΓΩΓΗ 5 της Πληροφορικής, και η διείσδυση εννοιών όπως εκείνες του ανοικτού λογισμικού (open-source) και των δικτύων ομότιμης παραγωγής (peer-to-peer networks) είναι αναπόφευκτες. Ωστόσο, για να γίνουν κατανοητές οι δυνατότητες, οι μετασχηματισμοί, αλλά και οι επιπτώσεις που επιφέρει η διείσδυση αυτή, είναι αναγκαίο να κατανοηθεί πρώτα η έννοια του πηγαίου κώδικα, η προδιαγραφή-περιγραφή του ψηφιακού πλέον αντικειμένου. Στο πεδίο της πληροφορικής, η έννοια του πηγαίου κώδικα είναι λίγο έως πολύ σαφής και άμεση. Κάθε ψηφιακή δραστηριότητα, είτε αποτελεί λειτουργικό σύστημα, είτε εφαρμογή, είτε ιστοσελίδα, είτε αποθετήριο γνώσης και πληροφορίας, λειτουργεί βάσει ενός κώδικα, ενός συμβολικού κειμένου, γραμμένου σε μια τεχνητή γλώσσα, κατανοητή από τον άνθρωπο, που προδιαγράφει και περιγράφει τη λειτουργία και τη συμπεριφορά της μηχανής κατά την εκτέλεση της δραστηριότητας αυτής. Τόσο οι θεωρίες του ανοικτού λογισμικού, όσο και εκείνες των δικτύων ομότιμης παραγωγής αφορούν με τον ένα ή τον άλλο τρόπο μεθόδους ανάπτυξης, διαχείρισης, και κατανομής αυτού του πηγαίου κώδικα. Ωστόσο, η συζήτηση περιπλέκεται όταν καλούμαστε να μιλήσουμε με τους ίδιους όρους πάνω στο αρχιτεκτονικό αντικείμενο, κυρίως όταν αυτό αποτελεί προϊόν ψηφιακής προδιαγραφής. Εκ πρώτης όψεως, και σύμφωνα με ερμηνείες όπως εκείνη του Nelson Goodman (βλ. παρακάτω), το διάγραμμα και το σχέδιο αποτελούν τμήματα ενός οπτικού κώδικα συμβόλων, μια τεχνητή γλώσσα επικοινωνίας. Μπορεί ωστόσο, σε μια «1-1» αντιστοιχία να θεωρηθεί ότι το σχέδιο και το διάγραμμα, ως τα βασικά αρχιτεκτονικά αναλυτικά εργαλεία αποτελούν τον πηγαίο κώδικα του κτιρίου; Μπορεί να θεωρηθεί ότι μεταξύ σχεδίου και κτιρίου, δηλαδή μεταξύ αντικειμένου και αναπαράστασης, συνίσταται η ίδια σχέση που υπάρχει μεταξύ κώδικα και προγράμματος, δηλαδή μεταξύ οδηγίας και εκτέλεσης; Στην παρούσα διερεύνηση, σε μια γενικότερη διάθεση απάντησης σε ερωτήματα όπως αυτά, θα εξεταστούν διαφορετικές προσεγγίσεις του ψηφιακού συστήματος: εάν μπορούμε να αποφανθούμε για το τι είδους δομή αποτελεί το κτίριο ως σύστημα πληροφορίας, τότε θα είμαστε σε θέση να κατανοήσουμε τι είδος συμβολικού λεξιλογίου, ποιας φύσης εννοιολογικό πεδίο το προδιαγράφει. Εάν μπορούμε να αποφανθούμε για το δομικό status του αλγοριθμικού κώδικα, για την αρ-

6 χιτεκτονική συγκρότηση της πληροφορίας εν γένει, τότε θα μπορέσουμε να καταστήσουμε αυτήν την αναπόφευκτη ώσμωση μεταξύ πληροφορικής και αρχιτεκτονικής πιο ομαλή και γόνιμη. Οι δύο βασικές έννοιες με τις οποίες θα ασχοληθούμε είναι εκείνες της οντοστρέφειας και της αναδρομικότητας, όπως διαμορφώνονται στο πεδίο της πληροφορικής, ως οι δύο κυρίαρχες διαφορετικές προσεγγίσεις της πληροφορίας και της δομικής συγκρότησης του ψηφιακού. Αν η μελέτη δομικών συστημάτων αποτελεί τον στενό πυρήνα της αρχιτεκτονικής πρακτικής, τότε αυτό που παρουσιάζει ενδιαφέρον είναι ότι κάθε ένας από τους δύο όρους προσφέρει μια διαφορετική ερμηνεία της έννοιας της «δομής» και της σχέσης της με εκείνη του «συστήματος». Η διερεύνηση θα ξεκινήσει από το στενότερο πεδίο της πληροφορικής και της εξέλιξης των γλωσσών προγραμματισμού, όπου θα αναδειχθεί η πορεία διαμόρφωσης και διατύπωσης των δύο όρων, και θα συνεχίσει σε μια σύντομη ανάγνωση των φιλοσοφικών συστημάτων του Leibniz, του Spinoza, των Gilles Deleuze και Felix Guattari, υπό το πλαίσιο αυτών των δύο υπολογιστικών εννοιών. Καθώς θα αναδεικνύεται μια αντίθεση μεταξύ τους, θα γίνει η απόπειρα κατασκευής ενός διπόλου, δύο αντικρουόμενων δομικών προσεγγίσεων, η κάθε μία από τις οποίες προϋποθέτει διαφορετικές παραδοχές και αποκομίζει διαφορετικές πληροφορίες από την ανάλυση των φυσικών και τεχνητών συστημάτων. Η διερεύνηση θα καταλήξει εκεί από όπου ξεκίνησε: στην ψηφιακή υπολογιστική αναδιατύπωση του αρχιτεκτονικού σχεδιασμού, και τις μεταβολές που έχει επιφέρει τόσο στις μεθόδους αναπαράστασης και προδιαγραφής, όσο και στην προσέγγιση του οικοδομήματος ως αρχιτεκτονικό αντικείμενο εν γένει.

ΔΥΟ ΔΙΑΦΟΡΕΤΙΚΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΡΟΤΥΠΑ Τον Φεβρουάριο του 1947, σε μία ομιλία ενώπιον της Μαθηματικής Εταιρείας του Λονδίνου, ο Alan Turing διερωτόμενος «κατά πόσο είναι κατ' αρχήν δυνατό μια υπολογιστική μηχανή να παρουσιάζει ανθρώπινες δραστηριότητες»4 ίδρυε ουσιαστικά τα πεδία της τεχνητής νοημοσύνης και της υπολογιστικής ανάλυσης. Ήδη από την πρώιμη περίοδο εμφάνισης των αυτόματων υπολογιστικών μηχανών, απέβλεπε σε μια χρήση τους ως ολοκληρωμένα συστήματα που θα μπορούσαν να αναπτύξουν νοημοσύνη, να βελτιστοποιήσουν αλγεβρικές διαδικασίες, ακόμη και να υπολογίσουν σκακιστικές στρατηγικές ανάπτυξης και επίλυσης προβλημάτων, και όχι μόνο ως ενδιάμεσες μηχανές εκτέλεσης πολυάριθμων υπολογιστικών πράξεων, όπως ενδεχομένως ήταν η προβλεπόμενη χρήση τους κατά τις δεκαετίες του '40 '50. Από τις προστακτικές στις δηλωτικές γλώσσες Ωστόσο, τα πεδία χρήσης των πρώτων ηλεκτρονικών υπολογιστών που εμφανίστηκαν στα εργαστήρια των Αμερικάνικων και Αγγλικών πανεπιστημίων ήταν ακόμη μακρυά από το όραμα του Turing. Οι εφαρμογές τους ήταν καθαρά επιτελικές, επιταχύνοντας υπολογιστικές διαδικασίες, όπως στατιστικές εκτιμήσεις και υπολογισμός πι4 Martin Davis, Μηχανές της Λογικής: Η συνεισφορά των μαθηματικών στην ανάπτυξη των υπολογιστών, μτφρ. Στάθης Ζάχος, Εκδόσεις Εκκρεμές, Αθήνα: 2007, σελ.294.

8 θανοτήτων. Οι οδηγίες που λάμβαναν ήταν κατευθείαν σε κώδικα μηχανής που μεταφράζονταν από τον χρήστη, ψηφίο προς ψηφίο, και μεταφέρονταν σε διάτρητες καρτέλες, τις οποίες εισήγαγαν με ακολουθιακό τρόπο στο μηχάνημα. Με αυτόν τον τρόπο, ο προγραμματισμός συστημάτων, στις πρώτες περιόδους της ανάπτυξής του, βασιζόταν στην αποτύπωση μιας ακολουθίας συγκεκριμένων οδηγιών τις οποίες βήμα-βήμα εκτελούσε το μηχάνημα παράγοντας το επιθυμητό αποτέλεσμα. Ως εκ τούτου, η δομή του προγράμματος συγκροτείτο και χαρακτηριζόταν από αυτήν την ακολουθιακή ανάθεση εκτελεστικών εντολών. Έτσι, ακόμη και σήμερα οι γλώσσες που βασίζονται σε αυτή την αλληλουχία εντολών, αποκαλούνται προστακτικές (imperative) γλώσσες. Η Fortran (Formula Translator), η πρώτη συντακτικά οργανωμένη και τυποποιημένη γλώσσα προγραμματισμού που εμφανίστηκε το 1954 ανάγεται σε αυτήν την κατηγορία. Ωστόσο, το όραμα που συνόδευε πάντοτε τις υπολογιστικές μηχανές, ήδη από την εποχή του Leibniz, ήταν η κατασκευή μιας τεχνητής, οικουμενικής μαθηματικής γλώσσας, σύμφωνα με την οποία οι συλλογισμοί και η εξαγωγή συμπερασμάτων θα γίνονταν με μηχανιστικό τρόπο, περιορίζοντας τα περιθώρια αμφισβήτησης ή αμφιβολίας του τελικού αποτελέσματος. Τόσο, οι ιδέες του Leibniz, του Boole, του Hilbert, αλλά κυρίως οι ιδέες του Frege (όπως θα δούμε παρακάτω) ήταν αυτές που έστρεψαν σιγά σιγά το ενδιαφέρον από τις στοιχειώδεις αλγεβρικές πράξεις σε μια συμβολοποιημένη Τυπική Λογική. Ο Turing επινόησε έναν τρόπο να αυτοματοποιηθούν με πολυμορφικό και ευέλικτο τρόπο οι στοιχειώδεις αριθμητικές πράξεις (πρόσθεση, αφαίρεση, πολ/μος, διαίρεση) ωστόσο απώτερος στόχος του, όπως δήλωνε και ο ίδιος, ήταν πάνω σε αυτές τις στοιχειώδεις πράξεις να δομηθούν ανώτερες μαθηματικές κατασκευές, όπως ο προτασιακός λογισμός και η πρωτοβάθμια λογική. Σύμφωνα με αυτήν την προσέγγιση, το πρόγραμμα θα έπρεπε να δηλώνει στη μηχανή την δομή των λογικών προτάσεων που θα πρέπει να εκτιμήσει, το τι είδους αποτελέσματα θα πρέπει να εξάγει, και όχι την ακολουθία εντολών που θα πρέπει να εκτελέσει. Αυτές, θα πρέπει να αποτελούν μηχανιστική διαδικασία μεταγλώττισης χαμηλότερου επιπέδου (ως εγγύτητα προς τη μηχανή) από εκείνη της δόμησης τυπικών (formal) λογικών εκφράσεων. Το γεγονός αυτό, όπως έλεγε, θα καθιστούσε τον προγραμματισμό

ΔΥΟ ΔΙΑΦΟΡΕΤΙΚΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΡΟΤΥΠΑ 9 μια εργασία υψηλού επιπέδου μαθηματικής διανόησης και θα τον διαχώριζε από την μηχανιστική και ανιαρή διαδικασία της κωδικοποίησης.5 Η πρώτη προδιαγραφή της LISP (LISt Processor) εμφανίστηκε το 1958, φανερά επηρεασμένη από τον λ-λογισμό (lambda Calculus) που είχε αναπτυχθεί νωρίτερα από τον Alonso Church περίπου την δεκαετία του '30. Αρχικά είχε κυρίως θεωρητική εφαρμογή, αντιμετωπίζοντας δυσκολίες στην υλοποίησή της λόγω της υψηλής πολυπλοκότητας μαθηματικών κατασκευών που μπορούσε να αναπαραστήσει. Ενδεικτικά, ο πρώτος ολοκληρωμένος μεταγλωττιστής για Lisp εμφανίστηκε το 1962, ενώ δεν σταθεροποιήθηκε ως υλοποίηση (μεταγλώττιση και τυποποίηση) μέχρι και την δεκαετία του '90. 6 Ως συναρτησιακή γλώσσα βασιζόταν, τουλάχιστον κατά τις πρώτες της υλοποιήσεις, σε δύο τύπους δεδομένων: το άτομο (atom) και η λίστα (list). Ενώ το πρώτο αφορούσε πρωτογενή σύμβολα (ψηφία, γράμματα, τελεστές κτλ.), το δεύτερο έδινε τη δυνατότητα να συγκροτηθούν ακολουθίες από σύμβολα και καθιστούσε δυνατή την συγκρότηση μαθηματικών παραστάσεων (expressions), που κατά την αποτίμησή 5 6 Έχει ενδιαφέρον η αντίθεση των απόψεων του John von Neumann σε σχέση με εκείνη του Turing για την διαδικασία του προγραμματισμού. Ο von Neumann αναφερόταν στη διαδικασία, ως κωδικοποίηση και δήλωνε σαφώς πως το θεωρούσε μια απλή γραφειοκρατική εργασία που δεν απαιτούσε ιδιαίτερη νοημοσύνη. Συνεπώς, ήταν κάτι που επιβάρυνε τους φοιτητές οι οποίοι μετέφραζαν με το χέρι σε γλώσσα μηχανής εντολές που είχαν γραφτεί σε μια αναγνώσιμη μνημονική γλώσσα. Μια ιστορία αναφέρει ότι ένας νεαρός προγραμματιστής, περίπου στα τέλη της δεκαετίας του '40, πρότεινε να γράψουν ένα μεταφραστικό πρόγραμμα που θα έκανε αυτή τη μετάφραση αυτόματα. Λέγεται πως ο von Neumann απάντησε με οργή πως το να χρησιμοποιήσει κανείς ένα πολύτιμο επιστημονικό εργαλείο για να πραγματοποιήσει μια απλή γραφειοκρατική διαδικασία θα ήταν αλόγιστη σπατάλη. Ωστόσο, ο Turing ήδη από το 1945 δήλωνε ότι η διαδικασία του προγραμματισμού δεν χρειάζεται να είναι μια ανιαρή, μηχανιστική διαδικασία, αφού τα μηχανιστικά τμήματα της δουλείας μπορούν να ανατεθούν στην ίδια την μηχανή, αλλά μπορεί να αναχθεί σε μια συναρπαστική διεργασία, μια διαδικασία καθαρής δομικής μαθηματικολογικής σκέψης. Πηγή: Davis, ο.π., σελ. 298. Τυποποιήθηκε από το Αμερικάνικο Ινστιτούτο Εθνικών Τυποποιήσεων (ANSI) μόλις το 1994.

10 (evaluation) τους παρήγαγαν το ζητούμενο υπολογιστικό αποτέλεσμα. Αυτό που αποτελούσε θεμελιώδους σημασίας χαρακτηριστικό της συγκεκριμένης γλώσσας προγραμματισμού, ήταν η αυτο-αναφορική δυνατότητα της δομής της λίστας να εσωκλείει άλλες λίστες, εκτός από πρωτογενή σύμβολα, δηλαδή να συνθέτει πολύπλοκες μαθηματικές παραστάσεις από συνδυασμούς απλούστερων. 7 Επιπλεόν, η δομή της γλώσσας δεν βασιζόταν πλέον στην ανάθεση εντολών που εκτελούνται με τη σειρά που εμφανίζονται, αλλά στην δήλωση παραστάσεων που αποτιμούνται με βάση την προτεραιότητα των μαθηματικών τελεστών και των παραστάσεων που εσωκλείουν. Κατ' αυτόν τον τρόπο, αυτή η δομική προσέγγιση, που εξαρχής προϋπέθετε ένα υψηλότερο επίπεδο αφαίρεσης σε σχέση με τον πρωτογενή κώδικα οδηγιών που εκτελεί ένα υπολογιστικό μηχάνημα, ονομάστηκε δηλωτική (declarative). Προφανώς, οι πρώτες εφαρμογές της Lisp ήταν στο πεδίο της μαθηματικής λογικής και του πρωτοεμφανιζόμενου τότε πεδίου της τεχνητής νοημοσύνης, ενώ ακόμη και στις μέρες μας αποτελεί την κατεξοχήν γλώσσα μελέτης αναδρομικών συναρτήσεων και τυπικής λογικής.8 7 Είναι εμφανές ότι, ήδη από τον τρόπο ορισμού της δομής της ως ακολουθίες από άτομα και λίστες, η Lisp εμπεριέχει μια ισχυρά αναδρομική αναπαραστατική δομή. Για παράδειγμα, η λίστα (Α (1 Β (Γ 2))) παρ' όλη την πληθώρα συμβόλων που παρουσιάζει, εσωκλείει μονάχα δύο στοιχεία: το σύμβολο (άτομο) Α και την λίστα (1 Β (Γ 2)). Αντίστοιχα, αυτή η λίστα περιλαμβάνει τρία στοιχεία: τα σύμβολα '1' και 'Β' και τη λίστα (Γ 2), η οποία με τη σειρά της εσωκλείει δύο σύμβολα. Το επίσημο εγχειρίδιο που εκδόθηκε συνοδεύοντας την πρώτη ολοκληρωμένη υλοποίηση της γλώσσας το 1962, είχε ένα ξεχωριστό παράρτημα για την αναδρομικότητα. Βλ, John McCarthy, Paul W. Abrahams, Daniel J. Edwards, Timothy P. Hart, Michael I. Levin (επιμ.) Lisp Programmer's manual, M.I.T. Press, Cambridge MA: 1985, 2η έκδοση, σελ. 91. 8 Κατά συνθήκη, το γράμμα 'λ' έχει επικρατήσει όχι μόνο ως σύμβολο του συναρτησιακού λογισμού και του λ-λογισμού, αλλά και της θεωρίας αναδρομικότητας (recursion theory) και υπολογιστικότητας που σχετίζεται άμεσα με τα παραπάνω. Στις σύγχρονες υλοποιήσεις (διαλέκτους) της Lisp (όπως η Scheme), η λέξη lambda εκφράζει μια αφηρημένη (χωρίς σύμβολο) συνάρτηση, δηλαδή μια έκφραση που μπορεί να ενσωματωθεί σε άλλες εκφράσεις χωρίς να χρειάζεται να ονοματιστεί, χαρακτηριστικό που φαίνεται να αποτελεί θεμελιακό γνώρισμα του λογισμού-λ.

ΔΥΟ ΔΙΑΦΟΡΕΤΙΚΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΡΟΤΥΠΑ 11 Ωστόσο, από τις πρώτες περιόδους εφαρμογής της, στα εργαστήρια του M.I.T., το τι ακριβώς αντιπροσώπευαν τα άτομα, αδιαίρετα, πρωτογενή σύμβολα της Lisp αποτελούσε πεδίο συζητήσεων. Για αρκετό καιρό, η λέξη «αντικείμενο» (object), αποτελούσε συνώνυμο της λέξης «άτομο»9, «σύμβολο», ή «μεταβλητή», πολύ σύντομα όμως αναπτύχθηκε η ανάγκη για μια βαθύτερη διερεύνηση της έννοιας αυτής, καθώς μια τέτοια μονομερής θεώρηση των συμβολισμών δεν επαρκούσε για να αποδώσει την ολοένα αυξανόμενη πολυμορφία της πληροφορίας που χειρίζονταν οι υπολογιστικές μηχανές. Σταδιακά, τον όρο αντικείμενο άρχισαν να συνοδεύουν όροι όπως «ιδιότητα» (property), «χαρακτηριστικό» (attribute), «μέθοδος» (method) και «κλάση» (class). Ως εκ τούτου, τα μαθηματικά σύμβολα των υπολογιστικών παραστάσεων, που μέχρι τώρα αντιπροσώπευαν μεταβλητές με αριθμητικές ή αλφαριθμητικές τιμές, απέκτησαν μια πιο σύνθετη δομή, επιμερισμένη σε μικρότερες σφαίρες πληροφορίας και οργανωμένη κατά οικογένειες ιδιοτήτων. Η Simula 67 ήταν η πρώτη γλώσσα που τυποποίησε τις έννοιες «αντικείμενο» και «κλάση». Αναπτύχθηκε κυρίως για εφαρμογές εξομοίωσης συστημάτων διακριτών γεγονότων (discrete event simulation). Η προσέγγισή της, επέφερε μια στροφή στη δομική ανάλυση των προγραμμάτων. Μέχρι τότε, η πληροφορία ενυπήρχε οικουμενικά μέσα στον κώδικα, αποθηκευμένη σε πολλαπλές μεμονωμένες μεταβλητές, τις οποίες διαχειρίζονταν αλγοριθμικές διαδικασίες υπό τη μορφή συναρτήσεων. Με την στροφή αυτή, το πρόγραμμα θεωρήθηκε ως ένα σύστημα από αλληλοσυνεργαζόμενα αντικείμενα (αρθρώματα) στα οποία βρίσκονται εσώκλειστα τα δεδομένα που μέχρι πριν θεωρούνταν οικουμενικά. Έτσι τόσο η πληροφορία, όσο και οι αλγόριθμοι που τη διαχειρίζονταν, αντιμετωπίζονταν πλέον από τη σκοπιά ενός αντικειμένου υποκειμένου: η ελεύθερη (ανεξάρτητη) μεταβλητή έγινε «ιδιότητα» του αντικειμένου στο οποίο θεωρήθηκε ότι ανήκει, ενώ η ελεύθερη συνάρτηση έγινε «μέθοδος» του αντικει- 9 McCarthy et al., ο.π., σελ. 105.

12 μένου το οποίο θεωρήθηκε ότι διαχειρίζεται. Από αυτήν την άποψη, η Simula 67 θεωρείται η πρώτη οντοστρεφής (object-oriented)10 γλώσσα προγραμματισμού. Από την λίστα στο αντικείμενο Παρά την καινοτομική προσέγγισή του, οι τεχνικές του αντικειμενοστρεφή προγραμματισμού άργησαν να επικρατήσουν στην μαζική παραγωγή λογισμικού που έμελλε να ακολουθήσει. Ήδη, από τα μέσα του '70 και καθ' όλη την δεκαετία του '80, η επικράτηση της γλώσσας C, ως γενικής χρήσης εκτελεστική - διαδικασιακή (imperative-procedural) γλώσσα προγραμματισμού ήταν δεδομένη, τόσο σε επίπεδο λογισμικού ειδικής χρήσης, όσο σε επίπεδο λογισμικού γενικής κατανάλωσης που παρουσιάστηκε με την εμφάνιση των πρώτων προσωπικών οικιακών υπολογιστών. Ωστόσο, από τις αρχές της δεκαετίας του '90 όπου η χρήση των υπολογιστών επεκτάθηκε στο σύνολο των καθημερινών δραστηριοτήτων, ο οντοστρεφής προγραμματισμός κατέστη η κυρίαρχη μέθοδος συγγραφής προγραμμάτων, γεγονός που ισχύει και στις μέρες μας. Σε όλες τις σύγχρονες γλώσσες προγραμματισμού, ξεκινώντας από την C++ που αναπτύχθηκε στις αρχές του '80, ως μια υβριδική μορφή της C, επιτρέποντας τόσο το αντικειμενοστραφές όσο και το συναρτησιακό πρότυπο, και με αποκορύφωμα την Java, η οποία εμφανίζεται ως αμιγώς οντοστρεφής, η θεώρηση του προγράμματος ως ένα σύστημα από συνεργαζόμενα αυτόνομα αντικείμενα είναι η δεσπόζουσα προσέγγιση στην αντιμετώπιση της διαδικασίας συγγραφής λογισμικού. Σε αυτό συνέβαλλε καταλυτικά η σταδιακή καθιέρωση των γραφικών περιβαλλόντων χει10 Ο όρος object-oriented programming, συνήθως στα ελληνικά αποδίδεται ως αντικειμενοστραφής προγραμματισμός. Ωστόσο, πρόσφατα προτάθηκε μια απόδοσή του ως οντοστρεφής προγραμματισμός, που ετυμολογικά συμφωνεί με το κύριο επιχείρημα του παρόντος κειμένου, αλλά και ως όρος είναι πιο εύηχος. Στο εξής θα χρησιμοποιούνται και οι δύο ως συ νώνυμοι, με μια προτίμηση κυρίως στον δεύτερο και με την επιφύλαξη ότι είναι σχετικά πρωτοεμφανιζόμενος. Για περισσότερα, βλ. Adam Brooks Webber, Σύγχρονες Γλώσσες Προγραμματισμού, επιμ-μτφρ. Γεώργιος Φρ. Γεωργακόπουλος, Ιωάννης Παπαδόγγονας, Πανεπιστημιακές Εκδόσεις Κρήτης, Ηράκλειο: 2009.

ΔΥΟ ΔΙΑΦΟΡΕΤΙΚΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΡΟΤΥΠΑ 13 ρισμού (Graphical User Interfaces) τόσο σε επίπεδο μεμονωμένων εφαρμογών όσο και σε επίπεδο λειτουργικών συστημάτων, καθώς η χρήση του υπολογιστή από μη εξειδικευμένο προσωπικό γινόταν με αυτόν τον τρόπο ευκολότερη και ταχύτερη. Επιπλέον, η μετάβαση αυτή από το εκτελεστικό διαδικασιακό παράδειγμα, στο οντοστρεφές είναι ιδιαίτερα εμφανής και στην σταδιακή εξέλιξη του αρχιτεκτονικού και οικοδομικού λογισμικού. Από την σχεδίαση του συστήματος ως σύνολο γραμμών και σχημάτων, όπως για παράδειγμα συμβαίνει στις συμβατικές εκδόσεις των AutoCAD και MicroStation, έχουμε μεταβεί στην συναρμολόγηση του οικοδομικού συστήματος ως σύνολο από αρχιτεκτονικά και οικοδομικά αντικείμενα, όπως συμβαίνει σε εφαρμογές τύπου Revit και ArchiCAD. Και πράγματι, το να μεταφράσει κανείς το οντοστρεφές πρόγραμμα ως ένα σύστημα από αλληλοσυνδεόμενα αρθρώματα, σε μια οπτική γλώσσα διαγραμμάτων και συμβόλων, αλλά και το αντίστροφο, αποτελεί μια διαδικασία σχετικά άμεση και ευθύγραμμη, γεγονός που δεν ισχύει με τα συναρτησιακά παραδείγματα όπου η δομή του προγράμματος είναι περισσότερο σειριακή ακολουθιακή. Κατακόρυφος (Στύλος) Τοιχείο Κολόνα Φορέας Οριζόντιος (Δοκός) Εικόνα 1: Η γενεαλογική ιεραρχία του Φορέα Όπως αναφέρθηκε, βασικό χαρακτηριστικό της οντοστρεφούς ανάλυσης είναι η προσέγγιση του συστήματος ως μηχανή, ως δίκτυο συνεργαζόμενων στοιχείων. Για να οριστούν αυτοτελώς τα πρωτογενή στοιχεία του συστήματος, θα πρέπει να αναχθούν σε ιδεατές κατηγορίες αντικειμένων (κλάσεις) ανάλογα με τις ιδιότητές τους. Για παράδειγμα, σε μια θεώρηση του Κτηρίου ως μηχανή που φέρει φορτία, τόσο η Δοκός, όσο και το Υποστύλωμα είναι φέροντα στοιχεία, αφού και τα δύο μοιράζονται την ίδια ιδιότητα του να μεταφέρουν φορτία στο έδαφος. Οπότε, η Δοκός και το Υποστύλωμα ορίζονται ως δυο

14 υποκατηγορίες του Φορέα ως ιδεατή κλάση αντικειμένων, με τον ίδιο τρόπο που η Κολόνα και το Τοιχείο μπορούν να οριστούν ως δυο υποκατηγορίες του Υποστηλώματος αντίστοιχα. Με αυτόν τον τρόπο χτίζονται γενεαλογίες κλάσεων, με την κάθε μια να ανάγεται στην γονική της ανάλογα με τις ιδιότητες και τη συμπεριφορά που εμφανίζει στο σύστημα. Στην ίδια κατεύθυνση, όλη η πληροφορία αναδιοργανώνεται με βάση το υποκείμενο στο οποίο εμπίπτει. Σε ένα τέτοιο κτιριακό μοντέλο, δεν έχει νόημα να μιλήσει κανείς για Φόρτιση και Όριο Αστοχίας γενικά, αλλά για αυτά τα δύο ως χαρακτηριστικά ενός Φορέα. Με αυτόν τον τρόπο, αποδίδονται στην κλάση Φορέας οι ιδιότητες του Αναλαμβανόμενου Φορτίου και του Ορίου Φόρτισης/Αστοχίας αντίστοιχα. Έτσι, ως υποκατηγορίες του Φορέα, η Δοκός και το Υποστύλωμα αποκτούν (κληρονομούν) τις ίδιες ιδιότητες, ερμηνεύνοντάς τις ανάλογα με τον τρόπο που αφορά την δική τους σφαίρα ορισμού. Για παράδειγμα, το Όριο Φόρτισης στην περίπτωση του Υποστυλώματος ενδεχομένως νοείται ως Όριο Θλίψης/Λυγισμού ενώ στην περίπτωση του Δοκαριού νοείται ως Όριο Κάμψης. Όπως προαναφέρθηκε, μεταξύ κλάσεων δημιουργούνται σχέσεις ιεραρχικής γενεαλογίας που συγκροτούνται στα πλαίσια σχέσεων τύπου «ἐστί» (is-a), δηλαδή αναγωγής - καταγωγής. Για να ερμηνευθεί ή να οριστεί η συμπεριφορά και οι ιδιότητες μιας κλάσης αντικειμένων ανάγεται σε μια άλλη που ορίζεται με μεγαλύτερο βαθμό αφαίρεσης. Στο παραπάνω παράδειγμα, οι γενεαλογικές σχέσεις μπορούν να διατυπωθούν ως εξής: το Δοκάρι και το Υποστύλωμα είναι (ανήκουν στην κατηγορία) Φορείς, όπως επίσης η Κολόνα και το Τοιχείο είναι Υποστυλώματα, όπως επίσης (ανεβαίνοντας δύο κλάσεις στην ιεραρχία) είναι και Φορείς. Επιπρόσθετα, μεταξύ κλάσεων μπορούν, εκτός από κατακόρυφες γενεαλογικές σχέσεις, να χτιστούν και οριζόντιες σχέσεις που αντιπροσωπεύουν σύνθεση, συνάθροιση ή διασύνδεση. Έτσι, εάν το Κτίριο είναι ένα σύστημα από Φέροντα και Φερόμενα στοιχεία, τότε μπορούμε να πούμε ότι συντίθεται από Φορείς (Δοκούς, Υποστυλώματα κτλ.) ή ότι αποτελεί μια χωρική διασύνδεση μεταξύ Φορέων, με τις δύο προτάσεις να είναι λογικά ισοδύναμες. Με αυτόν το δεύτερο τύπο σχέσεων, σε αντίθεση με την κατακόρυφη γε-

ΔΥΟ ΔΙΑΦΟΡΕΤΙΚΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΡΟΤΥΠΑ 15 νεαλογική ιεραρχία, συγκροτούνται μεταξύ κλάσεων οριζόντια κατανεμημένες δικτυακές σχέσεις που εμπλουτίζουν το οντοστρεφές σύστημα. Substance Material Immaterial Body Animate Spirit Inanimate Living Sensitive Mineral Insensitive Animal Rational Irrational Human Socrates Plato Plant Aristotle Beast etc. Εικόνα 2: Το δέντρο του Πορφύριου, χαρακτηριστικό παράδειγμα ουσιοκρατικής γενεαλογίας. Είναι σημαντικό να σημειωθεί ότι υπάρχει θεμελιακή διαφορά μεταξύ κλάσης αντικειμένων και περίπτωσης αντικείμενου (class vs instance). Η κλάση αποτελεί μια προδιαγραφή των ιδιοτήτων που θα έχει κάθε μέλος μιας οικογένειας αντικειμένων όταν αυτό υλοποιηθεί, δηλαδή αποτελεί το «καλούπι» από το οποίο προκύπτει το αντικείμενο κάθε φορά που «κατασκευάζεται». Αντίθετα, το ίδιο το αντικείμενο είναι η πραγμάτωση μιας συγκεκριμένης κλάσης, έχει φυσική υπόσταση, καταλαμβάνει μια έκταση (μνήμης), και αποτελεί υπολογιστική οντότητα που λειτουργεί και συνδιαλέγεται με τις υπόλοιπες οντότητες του συστήματος, εσωκλείοντας την πληροφορία που την περι-

16 γράφει (ιδιότητες), και προσφέροντας διαβαθμισμένους τρόπους πρόσβασης και διαχείρισης της πληροφορίας αυτής (interface).11 Κάθε μεταβολή του αντικειμένου-οντότητα μεταφράζεται ως ποσοτική μεταβολή μιας ή περισσότερων ιδιοτήτων του. Για κάθε μία από αυτές τις οντότητες η έκταση που καταλαμβάνει είναι το άθροισμα της έκτασης κάθε μίας από τις ιδιότητές της, κάθε πεδίο της.12 Υπό αυτούς τους όρους, το αντικείμενο αποτελεί φυσικό, μετρήσιμο μέγεθος. Γίνεται αντιληπτό ότι η όλη προσέγγιση αποπνέει μια χωρικότητα στη συγκρότηση της: έννοιες όπως πεδίο, διάγραμμα, οντότητα, διασύνδεση παραπέμπουν σε μια γεωμετρική-υπεργεωμετρική αντίληψη του οντοστρεφούς συστήματος, σε μια ανάλυσή του με όρους τοπολογικούς. Και πράγματι, αυτή η συγκεκριμένη θεώρηση των υπολογιστικών δεδομένων συνέβαλε σε μια απομαθηματικοποίη11 Οι γλώσσες που ακολουθούν το αντικειμενοστρεφές παράδειγμα είναι πάρα πολλές και με διαφορετικό προσανατολισμό η κάθε μία, και παρόλο που ένας μεγάλος όγκος βιβλιογραφίας προσπαθεί να εδραιώσει μια καθολική θεωρητική τυποποίηση όρων όπως κλάση, αντικείμενο, και ιδιότητα, κάτι τέτοιο προς το παρόν δεν υφίσταται. Έτσι, σε κάποιες περιπτώσεις (Delphi, Pascal with Objects) ο όρος «αντικείμενο» (object) παραπέμπει στην κλάση αντικειμένων, σε άλλες (Javascript) παραπέμπει στην υλοποίηση (instance), ενώ αλλού (π.χ. C++) δεν εμφανίζεται καθόλου ως προγραμματιστικός όρος (συντακτικό στοιχείο) αλλά χρησιμοποιείται κατά συνθήκη για να περιγράψει το προκύπτον σχήμα. Στο παρόν κείμενο, ο διαχωρισμός Αντικείμενο και Κλάση αντιστοιχεί στον διαχωρισμό Οντότητας και Οικογένειας οντοτήτων, αντίστοιχα. 12 Είναι γεγονός ότι η οντοστρεφής ανάλυση εμφανίζει πολλές ομοιότητες με τις δομές βάσεων δεδομένων όπου έχουμε προδιαγραφές πινάκων (πεδία) και αλληλοσυνδεόμενες καταχωρήσεις. Πράγματι, σε μια αντιστοίχιση, μια κλάση αντικειμένων θα μπορούσε να παρομοιαστεί με ένα πίνακα όπου κάθε ιδιότητα είναι μία στήλη, ενώ τα μεμονωμένα αντικείμενα θα αντιστοιχούσαν στις καταχωρήσεις (γραμμές) του πίνακα που η κάθε μία συμπληρώνει τις στήλες του με τις τιμές που αντιστοιχούν στη δική της περίπτωση. Ωστόσο, η διαφορά μεταξύ τους είναι ότι οι βάσεις δεδομένων αποτελούν έναν τρόπο οργάνωσης και ανάκτησης αποθηκευμένης πληροφορίας, ενώ οι κλάσεις και τα αντικείμενα ενσωματώνουν τόσο την πληροφορία που τα αφορά (ορίζει) όσο και τις μεθόδους πρόσβασης και διαχείρισης της, δημιουργώντας μικρούς μηχανισμούς αυτόνομων οντότητων.

ΔΥΟ ΔΙΑΦΟΡΕΤΙΚΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΡΟΤΥΠΑ 17 ση της υπολογιστικής ανάλυσης, και διοχέτευσε σε αυτήν εργαλεία και μεθοδολογίες που είχαν περισσότερο πρακτική / εμπειρική προέλευση. Οι μαθηματικές κατασκευές των γλωσσών της τυπικής λογικής σταδιακά μετετράπησαν σε δραστήρια συστήματα αυτόνομων πυρήνων που συνδιαλέγονται και αλληλοσυνεργάζονται, καθιστώντας ουσιαστικά το σύστημα μια αρθρωματική δυναμική μηχανή, που δεν αναπτύσσεται με τον τρόπο που θα αναπτυσσόταν μια μαθηματική πρόταση, αλλά σχεδιάζεται, χτίζεται και συναρμολογείται. Δεν είναι τυχαίο, ότι η σύγχρονη ανάλυση λογισμικού χρησιμοποιεί όρους μηχανικούς, όπως αρχιτεκτονική, σχέδιο και σχεδιασμός. «Η επιστήμη προχώρησε στη μελέτη του συγκεκριμένου, το χώρισε στα συστατικά στοιχεία του κι έτσι αναζήτησε την ενότητα σ' ένα βαθύτερο επίπεδο, σε μια έκφραση όπου το γενικό και το ειδικό συνδέονται με συγκεκριμένες σχέσεις.»13 Η εν λόγω υπολογιστική προσέγγιση διαμορφώθηκε από μια ανάγκη να εντοπιστεί τι υπάρχει μέσα στα άτομα (atoms), στα τερματικά σύμβολα της συνεχούς εσώκλεισης: προσεγγίσθηκαν ως οντότητες, ως ουσίες. Και ο τρόπος για να προσδιοριστούν οι οντότητες αυτές ήταν μέσω της υποκειμενοποίησης της συνεχούς και αμφίδρομης ροής πληροφορίας. Ουσιαστικά προσαρτήθηκαν σε ένα σχεσιακό σημείο αναφοράς: έναν εαυτό (self - this)14. Έτσι από την οικουμενική θεώρηση των δεδομένων ως πληροφορία/γνώση, μεταβαίνουμε στην τοπική τους σήμανση ως ιδιότητες και χαρακτηριστικά, ιδωμένα μέσα από την προοπτική ενός πλαισίου (context), μέσα από την σκοπιά ενός υποκειμένου. Μέσα στη δική της σφαίρα επιρροής, κάθε οντότητα έχει πρόσβαση μόνο στο δικό της πεδίο ιδιοτήτων, ενώ στο υπόλοιπο σύστημα τις καθιστά προσβάσιμες μέσω προκαθορισμένων διαβαθμισμένων διαύλων επικοινωνίας (interface). Θα μπορούσε κανείς να την αφαιρέσει εξολοκλήρου ή να την αντικαταστήσει με μία άλλη, αρκεί 13 Ευτύχης Μπιτσάκης, Το είναι και το γίγνεσθαι, Εκδόσεις Δαίδαλος, Αθήνα: 2003, 6η έκδοση, σελ. 86. 14 Οι λέξεις self, this αποτελούν συχνά εμφανιζόμενα συντακτικά στοιχεία (keywords) στις οντοστρεφείς γλώσσες. Συνήθως χρησιμοποιούνται στα πλαίσια ενός αλγόριθμου που εσωκλείεται σε ένα αντικείμενο, ώστε να προσδιορίσει ότι στόχος των διεργασιών και των μεταβολών που προδιαγράφει αποτελεί το ίδιο το αντικείμενο, δηλαδή ότι επενεργεί στον εαυτό του.