FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Σχετικά έγγραφα
FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

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

Οντοκεντρικός Προγραμματισμός

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

ηµιουργία νέου τύπου δεδοµένων από το χρήστη

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Outline. 4 Object-Oriented Programming

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

2.1 Αντικειµενοστρεφής προγραµµατισµός

Εισαγωγή στον Προγραμματισμό με C++

Αντικειμενοστρεφής προγραμματισμός Object Oriented Programming (OOP) Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

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

Οντοκεντρικός Προγραμματισμός

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ. Ι. Ψαρομήλιγκος Χ. Κυτάγιας

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 9ο Γλώσσες Προγραμματισμού

Wrapper Classes, Abstract Classes and Interfaces

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

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

Σχεδιασµός βασισµένος σε συνιστώσες

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

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

Είναι μια αλληλουχία κατάλληλων οδηγιών(εντολών) που εκτελεί ο υπολογιστής για την επίλυση ενός προβλήματος.

Κεφάλαιο 1: Εισαγωγή. Αρχές Γλωσσών και Προγραμματισμού και Μεταφραστών. Γιάννης Γαροφαλάκης ΤΜΗΥΠ - Πανεπιστήμιο Πατρών

Κεφάλαιο 6 ο. Διαχείριση στοιχείων λογισμικού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

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

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

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

Προγραµµατιστικές τεχνικές

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Προγραµµατισµός Η/Υ. Μέρος2

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #1 η : Εισαγωγή: Λογισμικό, Γλώσσες Προγραμματισμού, Java

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Εισαγωγή στον Προγραμματισμό Python Μάθημα 1: Μεταβλητές, τελεστές, είσοδος/έξοδος προγράμματος, συνθήκη ελέγχου if Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Μέρος Α. Λογισµικό & Προγράµµατα συστήµατος και εφαρµογών ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ. Το σηµερινό µάθηµα. Λογισµικό συστηµάτων & εφαρµογών

Εισαγωγή στον Προγραμματισμό Μάθημα 4: Αλγόριθμοι και Γλώσσες Προγραμματισμού Δεκέμβριος 2015 Χ. Αλεξανδράκη

Fortran και Αντικειμενοστραφής προγραμματισμός.

Από τον αλγόριθμο στην ανάπτυξη προγράμματος

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Διαγράμματα Αλληλεπίδρασης. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Βασικές Αρχές Προγραμματισμού

Λογισµικό (Software SW) Γλώσσες

Αντικειμενοστραφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή

Ελληνικό Ανοικτό Πανεπιστήµιο. Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας. ρ. Πάνος Φιτσιλής

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

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

Πληροφοριακά Συστήματα Διοίκησης Ενότητα 1: Βασικές Αρχές Αντικειμενοστραφούς Σχεδίασης Συστημάτων και Εφαρμογών (1ο Μέρος)

(derived data types) ...

Αντικειμενοστραφής Προγραμματισμός

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή

Π2 Το Σύστηµα Κανόνων CLIPS

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Με τι ασχολείται ο αντικειμενοστραφής προγραμματισμός

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

02 Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Τύποι δεδομένων, τελεστές, μεταβλητές

Γενικά (για τις γραπτές εξετάσεις)

Ηλεκτρονικοί Υπολογιστές

Κλάσεις στην Python. Δημιουργία κλάσεων

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

Μοντελοποίηση δεδομένων με UML Χρήση σε πολυμεσικές εφαρμογές

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Διαδικαστικά

Ενότητα 2 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Εργαστήριο 9 Συναρτήσεις στη PASCAL. Η έννοια του κατακερματισμού. Συναρτήσεις. Σκοπός

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

Διαγράμματα Κλάσεων στη Σχεδίαση

Το λειτουργικό σύστημα. Προγραμματισμός II 1

ΕΙΣΑΓΩΓΗ. Στόχοι του μαθήματος

Σύνθεση και Κληρονομικότητα

Transcript:

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017 M8 Αντικειμενοστραφής Προγραμματισμός Γεώργιος Παπαλάμπρου Επικ. Καθηγητής ΕΜΠ Εργαστήριο Ναυτικής Μηχανολογίας george.papalambrou@lme.ntua.gr ΕΜΠ/ΣΝΜΜ Εργαστήριο Ναυτικής Μηχανολογίας 1

Εισαγωγή Το αντικείμενο OOP είναι ευρύ και ειδικευμένο. Παρουσιάζονται εδώ οι βασικές αρχές με περιγραφικό τρόπο. Ο αναγνώστης μπορεί να βρεί περισσότερα στοιχεία στις εξής πηγές: 1. Metcalf et al., κεφ. 14. 2. Holcomb, K., SCIENTIFIC PROGRAMMING IN FORTRAN 2003, A tutorial Including Object-Oriented Programming, [https://wiki.uiowa.edu/download/attachments/109785161/fortran-novella- Holcomb.pdf, sec. 11] 3. Akin, E., Object Oriented Programming via Fortran 90/95 [pdf από web, sec. 3, 5, 6] - προτείνεται 4. FORTRAN Wiki: http://fortranwiki.org/fortran/show/objectoriented+programming 2

1.1 Οι Γλώσσες προγραμματισμού 3

Οι Γλώσσες προγραμματισμού PC Machine language Assembly language Procedure programming grosspay=basepay+overtimepay Object Oriented programming 4

Οι Γλώσσες προγραμματισμού Victor Berdonosov, Alena Zhivotova, THE EVOLUTION OF THE OBJECT-ORIENTED PROGRAMMING LANGUAGES, Article in Procedia Engineering June 2014 - internet 5

Οι Γλώσσες προγραμματισμού 6

1.2 Εξέλιξη Ο Αντικειμενοστραφής προγραμματισμός δεν είναι νέα τεχνική προγραμματισμού. Μία από τις πρώτες γλώσσες που μπορούσε να προσφέρει τέτοια υποστήριξη ήταν η Simula 67, μια γλώσσα σχεδιασμένη για προσομοίωση διακριτών συμβάντων (discrete events), στο Νορβηγικό Υπολογιστικό Κέντρο στο Όσλο το 1960. Μία από τις επόμενες σημαντικές εξελίξεις ήταν το 1970 στο Xerox Palo Alto, ΗΠΑ, όπου ερευνήθηκαν τρόποι όπου διαφορετικοί άνθρωποι θα μπορούσαν να χρησιμοποιήσουν αποτελεσματικά υπολογιστική ισχύ. Ένα από τα αποτελέσματα της εργασίας ήταν το περιβάλλον Smalltalk (1972), όπου τα αντικείμενα (objects) αποτελούν τον πυρήνα. 7

Εξέλιξη Κατά τις δεκαετίες του 1980 και του 1990, δημιουργήθηκε μία σειρά από αντικειμενοστραφείς γλώσσες προγραμματισμού. Οι πιο καταξιώμενες πλέον περιλαμβάνουν: Python, Guido van Rossum, Ολλανδία C ++, Bjarne Stroustrup στα Bell Labs Java, James Gosling, αρχικά Sun, τώρα Oracle 8

Γλώσσες προγραμματισμού Κατηγοριοποιώντας τις γλώσσες προγραμματισμού με βάση τον τρόπο οργάνωσης του προγράμματος έχουμε: Διαδικαστικές γλώσσες (procedural) όπου το πρόγραμμα είναι οργανωμένο σε διαδικασίες, που αποτελούνται από σειρές εντολών που περιγράφουν αλγορίθμους, πχ Fortran, Pascal, C. Αντικειμενοστραφείς γλώσσες (object-oriented) όπου το πρόγραμμα είναι οργανωμένο σε αντικείμενα (objects), πχ Java, C++. J. Akin, Rice U. 9

Γλώσσες προγραμματισμού Διαδικαστική γλώσσα (procedure-oriented programming): sequence εργασιών προς εκτέλεση: reading, calculating, printing. Δίνεται έμφαση σε Functions 10

Γλώσσες προγραμματισμού Αντικειμενοστραφής γλώσσα (object-oriented programming): αντιμετωπίζει τα δεδομένα ως κρίσιμο στοιχείο στην ανάπτυξη του προγράμματος. Συνδέει τα δεδομένα πιο στενά με τις λειτουργίες και τα προστατεύει από τυχαία τροποποίηση από εξωτερικές λειτουργίες. Το OOP επιτρέπει να αποσυνθέσουμε ένα πρόβλημα σε έναν αριθμό οντοτήτων που ονομάζονται αντικείμενα (objects) και μετά χτίζει δεδομένα και λειτουργίες γύρω από αυτές τις οντότητες. Δίνεται έμφαση σε data 11

1.3 Αντικειμενοστραφής Προγραμματισμός Οι γλώσσες FORTRAN, Pascal υποστηρίζουν το πρότυπο data-procedure, όπου ενεργές διαδικασίες επιδρούν σε παθητικά δεδομένα. Έτσι η function sqrt(x) λαμβάνει τον αριθμό x και επιστέφει την τετραγωνική του ρίζα. Οι γλώσσες OOP υλοποιούν προσέγγιση με κέντρο το αντικείμενο (object). Αντί τα δεδομένα να περνούν σε διαδικασίες, τα αντικείμενα (δεδομένα) εκτελούν λειτουργίες πάνω τους. 12

Αντικειμενοστραφής Προγραμματισμός Έτσι ένα αντικείμενο αποτελείται όχι μόνο από δεδομένα (που τα αποθηκεύει στην «ιδωτική» του μνήμη) αλλά έχει και την ικανότητα να αλλάξει την πληροφορία και να εκτελέσει διάφορες εργασίες (tasks). Οι εργασίες (tasks) ονομάζονται μέθοδοι (methods) του αντικειμένου. Οι μέθοδοι ενεργούν μέσω μηνύματος (message) στο αντικείμενο. 13

OOP Το αντικείμενο που λαμβάνει το μήνυμα λέγεται δέκτης (receiver). Το κάθε αντικείμενο γνωρίζει τα μηνύματα που καταλαβαίνει και για κάθε μήνυμα υπάρχει μία μέθοδος που περιγράφει πως το αντικείμενο απαντά/αντιδρά στο μήνυμα. Τα αντικείμενα (και μέθοδοι) και τα μηνύματα επιτρέπουν modular σχεδιασμό προγράμματος. Η υλοποίηση ενός αντικειμένου δεν βασίζεται στην εσωτερική δομή άλλων, παρά μόνο στον τρόπο απόκρισης στα μηνύματα. Έτσι η τετραγωνική ρίζα, σε μορφή OOP, θα γραφτεί ως x sqrt, όπου το αντικείμενο x θα εκτελέσει την πράξη sqrt στο ίδιο, δηλ. το x είναι o «δέκτης» του «μηνύματος» sqrt. 14

OOP Όταν εκτελείται ένα πρόγραμμα, τα αντικείμενα αλληλεπιδρούν με την αποστολή μηνυμάτων μεταξύ τους. Παράδειγμα: αν «πελάτης» και «λογαριασμός» είναι δύο αντικείμενα σε ένα πρόγραμμα, τότε το αντικείμενο πελάτης μπορεί να στείλει ένα μήνυμα στο αντικείμενο λογαριασμός που ζητάει το υπόλοιπο της τράπεζας. Κάθε αντικείμενο περιέχει δεδομένα και κώδικα για τον χειρισμό των δεδομένων. Τα αντικείμενα μπορούν να αλληλεπιδράσουν χωρίς να χρειάζεται να γνωρίζουν λεπτομέρειες σχετικά με τα δεδομένα ή τον κώδικα του άλλου. Αρκεί να γνωρίζουμε τον τύπο του αποδεκτού μηνύματος και τον τύπο απάντησης που επιστρέφουν τα αντικείμενα. 15

1.4 Κλάσεις και Αντικείμενα Τα βασικά δομικά στοιχεία σε μία γλώσσα OOP είναι η Κλάση (class) και το Αντικείμενο (object). Μια κλάση δρα ως πρότυπο για να δημιουργήσει τα αντικείμενα. Αυτό το πρότυπο περιγράφει την κατάσταση και τη συμπεριφορά για όλα τα αντικείμενα της κλάσης. Ένα αντικείμενο είναι μια μονάδα που αποτελείται από την περιγραφή κάποιων δεδομένων και την περιγραφή των αλγορίθμων που τα επεξεργάζονται. Ένα αντικειμενοστρεφές πρόγραμμα αποτελείται από διάφορα αντικείμενα που αλληλεπιδρούν μεταξύ τους. 16

Κλάσεις Η κλάση καθορίζει τα διαθέσιμα χαρακτηριστικά και η συμπεριφορά ενός συνόλου από παρόμοια αντικείμενα και ορίζεται από τον προγραμματιστή στο πρόγραμμα. Μια κλάση είναι μια αφηρημένη έννοια που γίνεται συγκεκριμένη κατά το χρόνο εκτέλεσης (run time), όταν τα αντικείμενα με βάση την κλάση ορίζονται και λαμβάνουν την συμπεριφορά της κλάσης. 17

Κλάσεις και Αντικείμενα-Παράδειγμα κλάση «όχημα» (car) Αντικείμενα κλάσσης Green Ford Mustang Gasoline Red Toyota Prius Electricity Blue VW Golf Diesel 18

Κλάσεις και Αντικείμενα-Παράδειγμα κλάση «όχημα» (vehicle) αντικείμενα ιδιότητες 19

Κλάσεις και Αντικείμενα-Παράδειγμα Ας εξετάσουμε την κλάση «όχημα» (vehicle). Η κλάση που αναπτύχθηκε από τον προγραμματιστή περιλαμβάνει μεθόδους όπως Steer(), Accelerate() και Brake(). Η κλάση περιλαμβάνει επίσης τις ιδιότητες όπως Color, NumberOfDoors, TopSpeed και NumberOfWheels. Η κλάση είναι μια αφηρημένη σχεδίαση που γίνεται πραγματικότητα όταν δημιουργούνται αντικείμενα, όπως Car, RacingCar, Tank, Tricycle, το καθένα με τη δική του εκδοχή των μεθόδων και των ιδιοτήτων της κλάσης. 20

Κλάσεις και Αντικείμενα-Παραδείγμα Η βασική κλάση 21

Κλάσεις και Αντικείμενα-Παραδείγματα Η βασική κλάση Η νέα κλάση 22

Κλάσεις και Αντικείμενα Τα αντικείμενα καταλαμβάνουν χώρο στη μνήμη. Τo κάθε αντικείμενο ορίζεται ως συγκεκριμένη περίπτωση (instance) μίας κλάσης. Όταν εκτελείται ένα πρόγραμμα, τα αντικείμενα αλληλεπιδρούν με την αποστολή μηνυμάτων μεταξύ τους. Κάθε αντικείμενο περιέχει δεδομένα και μεθόδους χειρισμού των δεδομένων. Τα αντικείμενα μπορούν να αλληλεπιδρούν χωρίς να γνωρίζουν λεπτομέρειες σχετικά με τα δεδομένα ή τις μεθόδους των υπολοίπων. 23

Κλάσεις και Αντικείμενα Στον επιστημονικό προγραμματισμό δεν είναι τόσο προφανής η αντιστοιχία εννοιών σε αντικείμενα. Συνηθως ο κώδικας μπορεί ακόμα να ομαδοποιηθεί σε λειτουργικές μονάδες. Για παράδειγμα, στην υπολογιστική μηχανική ένα πλέγμα (grid) θα μπορούσε να οριστεί ως ένα παράγωγο τύπου. Τα χαρακτηριστικά του θα μπορούσαν να περιλαμβάνουν τις τιμές x, y, z ενός συγκεκριμένου σημείου. Αν το πλέγμα έχει συμπεριφορές, όπως θα ήταν μία προσαρμοστική περίπτωση (adaptive mesh) τότε το πλέγμα θα πρέπει να αντιμετωπίζεται πλήρως ως αντικείμενο. 24

1.5 Βασικές Αρχές OOP Οι βασικές αρχές μίας γλώσσας OO είναι 4, ως ακολούθως: 1. encapsulation ή information hiding 2. data abstraction 3. inheritance και 4. polymorphism Θα δούμε παρακάτω αναλυτικότερα τις 4 ιδιότητες. 25

1.5 Βασικές Αρχές OOP 1. Encapsulation ή Information hiding Eνθυλάκωση ή απόκρυψη πληροφοριών, όπου η εφαρμογή των δεδομένων είναι κρυμμένη μέσα σε ένα αντικείμενο (object) και οι χρήστες των δεδομένων έχουν πρόσβαση σε μια αφηρημένη μόνο μορφή του. Μόνον οι μέθοδοι (functions) της κλάσσης (class) μπορούν να έχουν πρόσβαση και χειρισμό των δεδομένων. Παράδειγμα: η κλάση σχήμα μπορεί να έχει x και y θέση, και υπάρχουν μέθοδοι για να ληφθούν και να ορισθούν οι θέσεις x και y και να δημιουργηθεί και να μετακινηθεί το σχήμα. Υλοποιείται με χρήση τοπικών μεταβλητών (local variables), τύπου private. 26

1.5 Βασικές Αρχές OOP 2. Data abstraction Aφηρημένoς τύπος δεδομένων, όπου μπορούμε να δημιουργήσουμε πολλαπλές μεταβλητές αυτού του τύπου. Αυτό γίνεται με τον (αφηρημένο) τρόπο ορισμού του αντικειμένου. Η αφαίρεση αναφέρεται στην πράξη εκπροσώπησης βασικών χαρακτηριστικών χωρίς να συμπεριλαμβάνονται λεπτομέρειες ή εξηγήσεις. Οι κλάσεις χρησιμοποιούν την έννοια της αφαίρεσης και ορίζονται ως μια λίστα με αφηρημένα χαρακτηριστικά όπως μέγεθος, βάρος, κόστος και λειτουργίες που επενεργούν σε αυτά τα χαρακτηριστικά. Ενσωματώνουν όλες τις βασικές ιδιότητες των αντικειμένων που πρόκειται να δημιουργηθούν. 27

1.5 Βασικές Αρχές OOP 2. Data abstraction Aφηρημένoς τύπος δεδομένων 28

1.5 Βασικές Αρχές OOP 3. Inheritance Κληρονομικότητα, όπου ένας υπάρχων αφηρημένος τύπος δεδομένων μπορεί να επεκταθεί. Θα «κληρονομήσει» τα δεδομένα και τις μεθόδους από τον βασικό τύπο και θα προστεθούν επιπλέον δεδομένα και μέθοδοι. Ένα κλειδί στην κληρονομικότητα είναι ότι ο εκτεταμένος τύπος δεδομένων είναι συμβατός με τον βασικό τύπο. Οτιδήποτε λειτουργεί με αντικείμενα ή μεταβλητές του βασικού τύπου θα συνεργαστεί με τα αντικείμενα του εκτεταμένου τύπου. Για παράδειγμα ένας κύκλος θα έχει ακτίνα επιπλέον από την θέση x και y, ένα ορθογώνιο θα έχει πλάτος και ύψος. 29

1.5 Βασικές Αρχές OOP 3. Inheritance Κληρονομικότητα 30

1.5 Βασικές Αρχές OOP 3. Inheritance Κληρονομικότητα 31

1.5 Βασικές Αρχές OOP 3. Inheritance Κληρονομικότητα 32

1.5 Βασικές Αρχές OOP 3. Inheritance Κληρονομικότητα C#, Java, Ruby 33

1.5 Βασικές Αρχές OOP 3. Inheritance Κληρονομικότητα C++, Common Lisp, EuLisp, Curl, Dylan, Eiffel, Logtalk, Object REXX, Scala, OCaml, Perl, Perl 6, POP-11, Python, Tcl 34

1.5 Βασικές Αρχές OOP 4. Polymorphism Πολυμορφισμός, όπου οι μεταβλητές ή οι πράξεις μπορούν ως εκ τούτου να είναι πολυμορφικές, πχ Χρησιμοποιώντας το παράδειγμα σχήμα, μπορούμε να δημιουργήσουμε μια σειρά σχημάτων, όπου ένα σχήμα μπορεί να είναι ένας κύκλος και ένα άλλο σχήμα μπορεί να είναι ένα ορθογώνιο παραλληλόγραμμο, τρίγωνο, κλπ. Παράδειγμα: εξετάστε τη λειτουργία πρόσθεσης (addition). Για δύο αριθμούς, η λειτουργία θα δημιουργήσει ένα άθροισμα. Εάν οι τελεστές είναι συμβολοσειρές (strings), τότε η λειτουργία θα παράγει μια τρίτη συμβολοσειρά με concatenation. 35

1.5 Βασικές Αρχές OOP 4. Polymorphism - Πολυμορφισμός Η εικόνα απεικονίζει πως ένα μόνο όνομα function, DRAW(), μπορεί να χρησιμοποιηθεί για να χειριστεί διαφορετικό αριθμό και διαφορετικούς τύπους δεδομένων. Αυτό είναι κάτι παρόμοιο με μια συγκεκριμένη λέξη που έχει πολλές διαφορετικές έννοιες ανάλογα με το πλαίσιο. 36

1.6 Μονάδες προγράμματος (modules) Στις εφαρμογές OOP συνήθως γίνεται ευρεία χρήση των μονάδων προγράμματος (modules), οι οποίες καλούνται από το κυρίως πρόγραμμα. Τα modules επιτρέπουν την ενθυλάκωση των σχετικών μεταβλητών και διαδικασιών, παρέχουν μηχανισμό όπου ελέγχουν ποιές διαδικασίες έξω από τη μονάδα μπορούν να έχουν πρόσβαση σε ποιά δεδομένα και ενεργοποιούν την δημιουργία των αντικειμένων. Ένα module δεν μπορεί να λειτουργήσει μόνο του, θα πρέπει να περιλαμβάνεται σε πρόγραμμα, προκειμένου να έχει πρόσβαση στα στοιχεία που συνδέει. Θα πρέπει επίσης να γίνει compile πριν από το compile άλλου προγράμματος που το χρησιμοποιεί. 37

Μονάδες προγράμματος (modules) Δεν είναι απαραίτητο για ένα module να είναι στο δικό του αρχείο, αλλά αυτή είναι η συνήθης πρακτική, εκτός εάν η μονάδα είναι πολύ μικρή Ο compiler πρέπει να γνωρίζει την μονάδα πριν από οποιαδήποτε άλλο τμήμα του προγράμματος μπορεί να το χρησιμοποιήσει. Η χρήση στο κυρίως πρόγραμμα γίνεται μέσω της δήλωσης use: Πρόγραμμα circle_test.f95 program circle_test use class_circle implicit none... Πρόγραμμα class_circle.f95 module class_circle implicit none private real :: pii = 23.14!constant end module class_circle 38

1.7 Παραδείγματα Ο αναγνώστης μπορεί να βρεί ολοκληρωμένα προγράμματα στις εξής πηγές: Holcomb, K., SCIENTIFIC PROGRAMMING IN FORTRAN 2003, A tutorial Including Object- Oriented Programming [sec 11] Akin, E., Object Oriented Programming via Fortran 90/95 [pdf από web, sec. 3, 5, 6] - προτείνεται Α) Holcomb, K, U. Virginia Β) J. Akin, U. Rice 39

FTN-OOP Circle & Rectangle class, Akin (2003, p. 34): 40

FTN-OOP Circle class, Akin (2003, p. 34): 41