37
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Ι. Σαρρής, [email protected] , τηλ. 2421074090 Διάλεξη 2: Αντικείμενα και αντικειμενοστρεφής προγραμματισμός Εαρινό εξάμηνο 2008

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

  • Upload
    afric

  • View
    49

  • Download
    4

Embed Size (px)

DESCRIPTION

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ι. Σαρρής , [email protected] , τηλ . 2421074090. Διάλεξη 2: Αντικείμενα και αντικειμενοστρεφής προγραμματισμός. Εαρινό εξάμηνο 2008. Προηγούμενη παρουσίαση. Είδαμε τους δυναμικούς πίνακες και την χρήση τους - PowerPoint PPT Presentation

Citation preview

Page 1: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Ι. Σαρρής, [email protected], τηλ. 2421074090

Διάλεξη 2: Αντικείμενα και αντικειμενοστρεφής προγραμματισμός

Εαρινό εξάμηνο 2008

Page 2: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Προηγούμενη παρουσίαση...

• Είδαμε τους δυναμικούς πίνακες και την χρήση τους

• Επίσης, μελετήσαμε τους παράγωγους τύπους

δεδομένων

• Και τέλος, είδαμε τους δείκτες και την χρήση τους

Page 3: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Οργάνωση παρουσίασης

Θα δούμε:

• Τις εξωτερικές και τις εικονικές διαδικασίες,

• τη συσχέτιση και την εμβέλεια,

• τα αρθρώματα και τις πολλαπλές εισόδους,

• τη συσχέτιση μνήμης,

• και τέλος τον αντικειμενοστρεφή προγραμματισμό

Page 4: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Εξωτερικές διαδικασίες

• Ιστορικά οι εξωτερικές διαδικασίες ήταν το μόνο διαθέσιμο είδος διαδικασιών στην Fortran 77

• Η χρήση τους στην Fortran 90 περιορίζεται στην αυτόματη επίλυση ολοκληρωμένων υπο-προβλημάτων.

• Όπως και οι εσωτερικές διαδικασίες είναι και αυτές τύπου SUBROUTINE ή FUNCTION

• Δεν περιέχονται μέσα στην έκταση CONTAINS…END, αλλά είτε σε ένα άλλο αρχείο πηγαίου κώδικα (με την κατάληξη .F90) ή μετά από την πρόταση END PROGRAM

• Κάθε εξωτερική διαδικασία μεταγλωττίζεται ξεχωριστά, μπορεί να περιέχει εσωτερικές διαδικασίες και μπορούν να έχουν πολλαπλές εισόδους.

Page 5: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Εξωτερικές διαδικασίες (συνέχεια)

• Η κυριότερη διαφορά με τα άλλα είδη διαδικασιών είναι ότι οι εξωτερικές διαδικασίες δεν έχουν ρητή διεπιφάνεια. Πρακτικά αυτό σημαίνει ότι:1. Ο μεταγλωττιστής δεν ξέρει κατά την μεταγλώττιση τον τρόπο

κλίσης της διαδικασίας.2. Ο προγραμματιστής πρέπει να έχει φροντίσει ώστε να καλεί την

εξωτερική διαδικασία με τον σωστό τρόπο 3. Υπάρχει η δυνατότητα να δηλώσουμε ρητά την διεπιφάνεια των

εξωτερικών διαδικασιών χρησιμοποιώντας την δομή INTERFACE… END INTERFACE, πχ

INTERFACE [γενικός ορισμός][διεπιφάνειες][MODULE PROCEDURE λίστα διαδικασιών]

END INTERFACE

Όπου, [διεπιφάνειες] : Η αρχική και η τελική πρόταση μιας ή περισσότερων

διαδικασιών μαζί με το τμήμα δηλώσεων της διαδικασίας.

Page 6: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παραδείγματα

INTERFACE

REAL FUNCTION f(x,y) REAL, INTENT(IN)::x,y END FUNCTION f

SUBROUTINE fa(x,y,z) REAL, INTENT(IN)::x,y REAL, INTENT(OUT)::z END SUBROUTINE fa

END INTERFACE

PROGRAM Prog_interfaceIMPLICIT NONE INTERFACE INTEGER ELEMENTAL FUNCTION f(x) INTEGER, INTENT(IN)::x END FUNCTION f END INTERFACE

INTEGER::I INTEGER, DIMENTION(5)::a=(/(i,i=1,5)/)

PRINT*, f(a)

END PROGRAM Prog_interface

INTEGER ELEMENTAL FUNCTION f(x) INTEGER, INTENT(IN)::x f=x**2-1 END FUNCTION f

Page 7: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παρατηρήσεις

• Αν στο προηγούμενο παράδειγμα ξεχάσουμε την δομή INTERFACE, τότε θα δούμε ότι ο μεταγλωττιστής δεν θα μπορεί να επισημάνει το όνομα της διαδικασίας και θα βγάλει το μήνυμα λάθους:

Error: unresolved external

• Εναλλακτικά μπορούμε να κάνουμε γνωστή την ύπαρξη της διαδικασίας χρησιμοποιώντας την εντολή EXTERNAL, π.χ:

INTEGER, EXTERNAL:: f

• Γενικά, προτείνουμε την χρήση της δομής INTERFACE αφού γνωστοποιεί στο πρόγραμμα που την καλεί την ύπαρξη της εξωτερικής διαδικασίας και ταυτόχρονα διασφαλίζει την αντιστοίχηση των όρων των δύο ορισμάτων

Page 8: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παρατηρήσεις (συνέχεια)

Η χρήση ρητών διεπιφανειών είναι υποχρεωτική μόνο στις εξής περιπτώσεις:

1. Όταν χρησιμοποιούμε εικονικούς όρους που έχουν δηλωθεί ως OPTIONAL.2. Όταν το αποτέλεσμα μιας FUNCTION είναι πίνακας3. Όταν το αποτέλεσμα μιας FUNCTION είναι δείκτης4. Όταν το αποτέλεσμα μιας FUNCTION είναι αλφαριθμητικό με άγνωστο μήκος5. Όταν χρησιμοποιούμε πίνακα υποθετικής μορφής6. Όταν η διαδικασία έχει εικονικούς όρους με τις ιδιότητες POINTER ή TARGET.7. Όταν χρησιμοποιούμε λέξεις κλειδιά στο όρισμα κλήσης μιας διαδικασίας.8. Όταν η διαδικασία είναι γενική (όταν χρησιμοποιούμε το ίδιο όνομα για την

κλήση διαφορετικών διαδικασιών ανάλογα με το είδος των όρων του ορίσματος)

9. Όταν οι διαδικασίες είναι PURE, κλπ

Page 9: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Εικονικές διαδικασίες

Μια άλλη διαφορά των εξωτερικών διαδικασιών είναι ότι τα ορίσματά τους μπορούν να χρησιμοποιηθούν ως όροι του ορίσματος μιας άλλης διαδικασίας. Άρα, η διαδικασία – όρος περνάει στην διαδικασία που καλείται.

• Αυτό είναι πολύ βολικό για παράδειγμα στην περίπτωση που θέλουμε να κάνουμε έναν υπολογισμό σε μια συνάρτηση που δεν είναι εκ των προτέρων γνωστή, πχ: PROGRAM derivative

IMPLICIT NONE INTERFACE REAL FUNCTION df(f,z,dz)

INTERFACE REAL FUNCTION f(x) REAL, INTENT(IN)::x END FUNCTION f END INTERFACE REAL, INTENT(IN)::z,dz END FUNCTION df END INTERFACE

REAL::b=5; REAL, EXTERNAL::f PRINT*, f(a) , df(f,a,0.1)

END PROGRAM derivative

REAL FUNCTION df(f,z,dz) INTERFACE REAL FUNCTION f(x) REAL, INTENT(IN)::x END FUNCTION f END INTERFACE REAL, INTENT(IN)::z,dz df=f(z+dz)-f(z-dz)/(2.*dz)END FUNCTION df

REAL FUNCTION f(x) REAL, INTENT(IN)::x f=x*2-1END FUNCTION f

Page 10: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Σχόλια

• Και οι δύο εξωτερικές διαδικασίες γνωστοποιούνται στο κυρίως πρόγραμμα αφού χρειάζεται να τις χρησιμοποιήσει.

• Μόνο η διαδικασία f γνωστοποιείται στο υποπρόγραμμα που υπολογίζει την παράγωγο.

• Αν χρησιμοποιούσαμε εσωτερικές διαδικασίες η χρήση των διεπιφανειών θα ήταν περιττή,

• Αλλά, έχουμε πετύχει την πλήρη αυτονομία του υποπρογράμματος που υπολογίζει την παράγωγο, και άρα μπορούμε να το χρησιμοποιήσουμε οπουδήποτε.

Page 11: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Συσχέτιση και εμβέλεια

Εμβέλεια κάθε ονόματος ονομάζεται η έκταση στην οποία το όνομα είναι γνωστό. Έτσι έχουμε ονόματα γενικά και τοπικά.

• Η εικονική μεταβλητή είναι προφανώς τοπική μεταβλητή που ανταλλάσσει τιμή με κάποια που είναι τουλάχιστον τοπική της μονάδας που την καλεί.

• Πριν κληθεί η διαδικασία δεν σχετίζεται με κάποια θέση μνήμης

• Η συσχέτιση επιτρέπει σε διάφορες μονάδες προγράμματος να έχουν πρόσβαση στην ίδια θέση μνήμης.

• Στην Fortran 90 υπάρχουν τριών ειδών συσχετίσεις

Page 12: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Συσχέτιση (συνέχεια)

• Συσχέτιση ονόματος : γίνεται με τρεις τρόπους:• μέσω ορίσματος : όπως μέσω του ορίσματος των διαδικασιών• μέσω ξενιστή : ξενιστής λέγεται μια μονάδα κώδικα που φιλοξενεί

διαδικασίες. Τα ονόματα που έχουν υπόσταση και εμβέλεια στην μονάδα ξενιστή έχουν επίσης υπόσταση και σε όλες τις εσωτερικές της διαδικασίες.

• με USE : με την εντολή USE μπορούμε να κάνουμε διαθέσιμα τα δεδομένα ενός αρθρώματος σε μια άλλη

μονάδα κώδικα.• Συσχέτιση μνήμης :χρησιμοποιώντας τις εντολές COMMON,

EQUIVALENCE και NAMELIST.• Συσχέτιση δείκτη

Page 13: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παράδειγμα

REAL:: A=1, B= 2, C = 3 CALL ADDONE PRINT*,A,B,C! Τυπώνει 2 3 4

CONTAINS SUBROUTINE ADDONE A=A+1; B=B+1; C=C+1 END SUBROUTINEEND

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

• Πρόκειται για τις ίδιες μεταβλητές, χωρίς να χρησιμοποιούνται εικονικές μεταβλητές στην έκταση της διαδικασίας.

• Σε αυτή την περίπτωση, τα ονόματα της διαδικασίας συσχετίζονται μέσω ξενιστή με τα ονόματα του κυρίως προγράμματος.

Page 14: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Σχόλια (συνέχεια)

Οι προηγούμενες μεταβλητές ονομάζονται γενικές επειδή είναι γνωστές από όλες τις μονάδες του προγράμματος. Γενικά οι εσωτερικές διαδικασίες γνωρίζουν την τιμή:

• Των τοπικών τους μεταβλητών

• Των εικονικών μεταβλητών

• Των μεταβλητών που έχουν δηλωθεί στο πρόγραμμα που τις φιλοξενεί στην έκταση PROGRAM…CONTAINS

REAL:: A=1, B= 2, C = 3 CALL ADDONE PRINT*,A,B,C ! Τυπώνει 2.0 3.0 4.0 PRINT*,X ! Τυπώνει 0.0CONTAINS SUBROUTINE ADDONE REAL:: X=1 A=A+X; B=B+X; C=C+X END SUBROUTINEEND

Page 15: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Σχόλια (συνέχεια)

REAL:: A=1, B= 2, C = 3, X=1

CALL ADDONE(A,B,C,X) PRINT*,A,B,C ! Τυπώνει 2.0 3.0 4.0 PRINT*,X ! Τυπώνει 1.0CONTAINS SUBROUTINE ADDONE(A,B,C,X) REAL:: A,B,C,X A=A+X; B=B+X; C=C+X END SUBROUTINEEND

• Αντίθετα με τις εσωτερικές διαδικασίες, οι εξωτερικές δεν μπορούν να έχουν συσχέτιση μέσω ξενιστή με την μονάδα που τις καλεί.

Page 16: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Αρθρώματα

Ένα άρθρωμα δημιουργείται σε ένα ξεχωριστό αρχείο που περιέχει πηγαίο κώδικα με την παρακάτω σύνταξη:

MODULE όνομα[δηλώσεις]

[CONTAINS][διαδικασίες αρθρώματος]

END [MODULE [όνομα]]

• Όπου, στις δηλώσεις μπορεί να περιλαμβάνει δηλώσεις τύπου δεδομένων ή διαδικασιών, και τις εντολές: ALLOCATABLE, COMMON, EQUIVALENCE, DATA, DIMENSION, EXTERNAL, IMPLICIT, INTENT, INTERFACE…END INTERFACE, INTRINSIT, NAMELIST, OPTIONAL, PARAMETER, POINTER, PRIVATE, PUBLIC, SAVE,TARGET, USE.

• Δεν μπορεί να περιλαμβάνει εντολές FORMAT και ENTRY.

Page 17: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Αρθρώματα (συνέχεια)

• Το άρθρωμα δεν είναι εκτελέσιμο από μόνο του, αλλά μπορεί να έχει κομμάτια εκτελέσιμου κώδικα στην έκταση CONTAINS…END MODULE ως διαδικασίες του αρθρώματος.

• Οι διαδικασίες αρθρώματος μπορεί να είναι και πάλι τύπου SUBROUTINE ή FUNCTION και μπορεί να περιλαμβάνουν την εντολή ENTRY.

• Για να μπορέσουμε να χρησιμοποιήσουμε ένα άρθρωμα πρέπει να το δηλώσουμε με την εντολή USE:

USE όνομα αρθρώματος [, ONLY: λίστα ονομάτων]

Όπου, με τη λίστα ονομάτων περιορίζουμε την πρόσβαση μόνο στα δεδομένα και τις διαδικασίες που αναφέρονται στην λίστα.

Page 18: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παράδειγμα

PROGRAM modulexampleUSE procmod REAL:: Y=1 CALL pass(Y); PRINT*,Y CALL pass2; PRINT*,Y B=B+1; PRINT*,Y

CONTAINS SUBROUTINE pass2 Y=Y-B END SUBROUTINE pass2END PROGRAM modulexample

MODULE procmod REAL:: B=2.0

CONTAINS SUBROUTINE pass(X) REAL:: X X=X+B END SUBROUTINE passEND MODULE procmod!Τυπώνει: 3.000000

! 1.000000! 3.000000

Page 19: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παράδειγμα

PROGRAM modulexampleUSE procmod, ONLY:PASS REAL:: Y=1 CALL pass(Y); PRINT*,Y CALL pass2; PRINT*,Y B=B+1; PRINT*,Y

CONTAINS SUBROUTINE pass2 Y=Y-B END SUBROUTINE pass2END PROGRAM modulexample

!Τυπώνει: 3.000000! 3.000000! 1.000000

Όταν χρησιμοποιείται το χαρακτηριστικό ONLY μιλάμε για περιορισμό πρόσβασης στο χρήστη. Το πρόγραμμα στο παραπάνω παράδειγμα δεν ξέρει την τιμή του Β!

Page 20: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Αρθρώματα (συνέχεια)

• Οι γενικές μεταβλητές είναι καλό να χρησιμοποιούνται για δεδομένα που θέλουμε να μοιραστούμε με όλες τις μονάδες κώδικα. Σε κάθε άλλη περίπτωση είναι ευκολότερη η συσχέτιση με ορίσματα και εικονικές μεταβλητές.

• Ο περιορισμός πρόσβασης μπορεί να γίνει επίσης και στην πηγή, δηλαδή στο άρθρωμα, χρησιμοποιώντας τις εντολές / ιδιότητες PRIVATE και PUBLIC. Η σύνταξή τους είναι:

PUBLIC [[::] λίστα]ή δήλωση τύπου, PUBLIC:: λίστακαι

PRIVATE [[::] λίστα]ή δήλωση τύπου, PRIVATE:: λίστα

• Η λίστα περιλαμβάνει ονόματα δεδομένων και διαδικασιών

• Όλα τα ονόματα και οι διαδικασίες είναι καταρχήν PUBLIC (άρα προσβάσιμα από οποιαδήποτε ομάδα χρησιμοποιεί το άρθρωμα)

• Αν δηλωθούν PRIVATE είναι εσωτερικά του αρθρώματος και δεν επιτρέπεται η πρόσβαση από εξωτερικές μονάδες

• Χωρίς λίστα είναι είτε PUBLIC είτε PRIVATE

Page 21: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Διαφορές μεταξύ των διαδικασιών

Είδη διαδικασιών

Εσωτερική Εξωτερική Αρθρώματος Εγγενής

Μπορεί να είναι RECURSIVE ναι ναι ναι ναι

Μπορεί να περιέχει CONTAINS όχι ναι ναι ναι

Μπορεί να περιέχει ENTRY όχι ναι ναι ναι

Μπορεί να έχει όρους OPTIONAL ναι ναι ναι ναι

Μπορεί να είναι γενική όχι ναι ναι ναι

Μπορεί να είναι ELEMENTAL ναι ναι ναι ναι

Έχει ρητή διεπιφάνεια ναι όχι ναι ναι

Όροι με λέξεις κλειδιά ναι ναι ναι ναι

Χρήση σε INTERFACE όχι ναι όχι όχι

Χρήση για ορισμό τελεστών όχι ναι ναι όχι

Χρήση σαν όρος όχι ναι ναι ναι

Page 22: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παράδειγμα

PROGRAM exampleUSE procmodIMPLICIT NONE

REAL:: Y=1 CALL pass; PRINT*,Y CALL pass2(Y); PRINT*,Y CALL pass3; PRINT*,Y CONTAINS SUBROUTINE pass Y=Y-B END SUBROUTINE passEND PROGRAM example

MODULE procmodIMPLICIT NONE REAL:: B=2.0

CONTAINS SUBROUTINE pass2(X) EXTERNAL pass3 REAL:: X CALL pass3(X) X=add(X) CONTAINS REAL FUNCTION add(W) REAL, INTENT(IN)::W add=W+B END SUBROUTINE add END SUBROUTINE pass2END MODULE procmod

SUBROUTINE pass3USE procmod REAL:: Z Z=Z*f(Z) CONTAINS REAL FUNCTION f(U) REAL, INTENT(IN)::U f=U+B END FUNCTION f

END SUBROUTINE pass3

!Τυπώνει: -1.000000! 1.000000! 3.000000

Page 23: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Πολλαπλές είσοδοι

• Οι διαδικασίες αρθρώματος μπορούν να έχουν πολλαπλές εισόδους. Αυτό γίνεται με τη χρήση της εντολής ENTRY που έχει την παρακάτω σύνταξη:

ENTRY όνομα (όρισμα)

• Μια ή περισσότερες εντολές ENTRY μπορούν να τοποθετηθούν στην έκταση της διαδικασίας και να συνδεθούν με RETURN για να χωρίσουν μια διαδικασία σε πολλές.

• Στην ουσία με κάθε ENTRY δημιουργούμε μια καινούργια διαδικασία. (κάτι παρόμοιο θα μπορούσε να γίνει με την εντολή CASE αλλά η ENTRY επιτρέπει να καλούμε την διαδικασία με πολλαπλά

ορίσματα)

Page 24: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παράδειγμα

PROGRAM entryexampleUSE util

READ(*,*) A,B,C IF(A==0) THEN PRINT*,eval(B,C) ELSE PRINT*,evalb(A,B,C) END IFEND PROGRAM entryexample

MODULE util REAL:: A,B,CCONTAINS REAL FUNCTION eval(X,Y) REAL:: X,Y,Z eval=(X+Y)*(X+Y) RETURN ENTRY evalb(X,Y,Z) eval=(X+Y+Z)*(X+Y+Z) END FUNCTION evalEND MODULE util

PROGRAM entryexample2USE util

READ(*,*) A,B,C IF(A==0) THEN PRINT*,eval(B,C) ELSE PRINT*,eval(A,B,C) END IFEND PROGRAM entryexample2

MODULE util2 REAL:: A,B,CCONTAINS REAL FUNCTION eval(X,Y,Z) REAL, INTENT(IN):: X,Y REAL, OPTIONAL, INTENT(IN):: Z IF(PRESENT(Z)) THEN eval=(X+Y+Z)*(X+Y+Z) ELSE eval=(X+Y)*(X+Y) END IF END FUNCTION evalEND MODULE util2

Page 25: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Συσχέτιση μνήμης

COMMON: δηλώνει μια σειρά από μεταβλητές. Είναι ένας τρόπος για να μεταφέρουμε τιμές ανάμεσα σε διαφορετικές μονάδες κώδικα

EQUIVALENCE: δηλώνει ότι δύο ή περισσότερες μεταβλητές χρησιμοποιούν την ίδια διεύθυνση μνήμης.

NAMELIST: χρησιμοποιείται κυρίως για είσοδο και έξοδο.

COMMON [/[όνομα]/] λίστα[,][/όνομα2/λίστα2,...]

EQUIVALENCE (λίστα) [, (λίστα2),...]

πχ, COMMON /numbers/A,B,C,D,RESULT

πχ, EQUIVALENCE (A,RESULT)

Page 26: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Συσχέτιση μνήμης (συνέχεια)

• Το COMMON πρέπει να επαναλαμβάνεται στο τμήμα δηλώσεων μάθε μονάδας προγράμματος με την οποία θέλουμε να συσχετίσουμε τιμές.

• Το όνομά του πρέπει να είναι ίδιο, αλλά τα ονόματα στη λίστα μπορεί να είναι διαφορετικά. Σε αυτή τη περίπτωση υπάρχει αντιστοιχία ένα προς ένα ανάμεσα στα ονόματα.

• Ένα όνομα μεταβλητής δεν μπορεί να εμφανίζεται σε περισσότερα από ένα COMMON στην ίδια μονάδα κώδικα.

• Δεν μπορεί να περιέχει ονόματα εικονικών μεταβλητών, δυναμικών πινάκων, ονόματα FUNCTION και ονόματα ENTRY.

• Δεν μπορεί να περιέχει σταθερές που έχουν δηλωθεί με PARAMETER ή μεταβλητές που παίρνουν αρχική τιμή με DATA.

• Οι ίδιοι περιορισμοί ισχύουν για το EQUIVALENCE.

Page 27: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παράδειγμα

REAL:: A=1, B=2, C=3, D = 4, RESULTCOMMON /numbers/ A, B, C, D, RESULT CALL addnumbers; PRINT*, RESULT END

SUBROUTINE addnumbers REAL:: X, Y, W, W, ISON REAL:: ISON, KAI COMMON /numbers/ X, Y, Z, W, ISON EQUIVALENCE(ISON,KAI)

KAI=X+Y+Z+W

END SUBROUTINE ! Τυπώνει: 10.0 SUBROUTINE addnumbers

REAL:: X, Y, W, W, ISON! REAL:: ISON, KAI COMMON /numbers/ X, Y, Z, W, ISON EQUIVALENCE(ISON,KAI)

KAI=X+Y+Z+W

END SUBROUTINE

! Τυπώνει: 1.40125426E-44

Page 28: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

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

• Η ποιο μοντέρνα τάση στον προγραμματισμό.

• Πλησιάζει πολύ στην προσομοίωση φυσικών εννοιών

• Βοηθάει σημαντικά στην αύξηση της παραγωγικότητας:

1. Μέσω της αύξησης της επαναχρησιμοποίησης κομματιών κώδικα

2. Λόγω των δυνατοτήτων σταδιακής ή ομαδικής ανάπτυξης κώδικα

3. Λόγω των καθαρών εκφράσεων που βοηθούν στη στην κατανόηση

και την ευκολότερη επίλυση των προβλημάτων

Page 29: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

ΑΠ (συνέχεια)

Οι σύγχρονες γλώσσες ΑΠ διαθέτουν την δυνατότητα υλοποίησης τριών χαρακτηριστικών:

• Ενθυλάκωση : η δυνατότητα δημιουργίας κλάσεων, δηλαδή μονάδων με αυτόνομη χρησιμότητα.

•Κληρονομικότητα: η δυνατότητα δημιουργίας ιεραρχικών δομών δεδομένων.

•Πολυμορφισμός : η δυνατότητα δημιουργίας ενιαίων διεπιφανειών για διαφοροποιημένη χρήση ανάλογα με το είδος των δεδομένων.

Page 30: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

ΑΠ (συνέχεια)

Το αντικείμενο συνδυάζει τους βασικούς τύπους δεδομένων σε ένα σύνολο ορίζοντας ένα νέο είδος μεταβλητής. Υλοποιείται με την κατασκευή TYPE…

END TYPE

TYPE rectangle REAL:: Α,ΒEND TYPE

TYPE(rectangle):: ZZ%A=2.; Z%B=3.

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

Στην Fortran υλοποιείται με τις κατασκευές: INTERFACE OPERATOR() …END INTERFACE για τους νέους ή τους βασικούς τελεστές, και INTERFACE ASSIGNMENT(=) …END INTERFACE για τον τελεστή ορισμού ‘=’.

Page 31: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

ΑΠ (συνέχεια)

• Η κλάση ενσωματώνει τα αντικείμενα μαζί με προτάσεις που

καθορίζουν την κατάστασή τους, τους αναγκαίους τελεστές,

και διαδικασίες που υλοποιούν τους τελεστές, έχουν

πρόσβαση στα αντικείμενα και δυνατότητες μεταβολής τους. Η

κλάση υλοποιείται πλήρως στη fortran με τη χρήση της δομής

MODULE…END MODULE

• Η κλάση μπορεί να έχει την δυνατότητα απόκρυψης

δεδομένων από τις άλλες μονάδες προγράμματος (με χρήση

των εντολών PRIVATE και PUBLIC)

Page 32: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παράδειγμα

PROGRAM Rectangle1USE Class_ShapeIMPLICIT NONE

TYPE (rectangle) :: tetragono REAL :: area = 0.0

tetragono= Make_Shape(4.,2.)area= Shape_Area(tetragono)

WRITE(*,10) tetragono, area

10 FORMAT ('Area of',F5.2, ' by', F5.2,' & Rectangle is:', F6.2)

END PROGRAM Rectangle1! Τυπώνει: Area of 4.00 by 2.00 Rectangle is: 8.00

MODULE Class_ShapeIMPLICIT NONE

TYPE rectangle REAL:: base, heightEND TYPE rectangle

CONTAINSTYPE (rectangle) FUNCTION Make_Shape(x,y) RESULT(z) REAL, INTENT(IN):: x,y z = rectangle (x,y) END FUNCTION Make_Shape

FUNCTION Shape_Area(x) RESULT(area) TYPE (rectangle), INTENT(IN):: x REAL:: area area=x%base*x%height END FUNCTION Shape_AreaEND MODULE Class_Shape

PRINT*, X*YEND

Page 33: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παραδείγματα

Πολυμορφισμός : 10-18, σελ. 367

Υπερφόρτωση τελεστών : 10-19, σελ. 371

Κληρονομικότητα : 10-20, σελ. 373

Page 34: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παραδείγματα

Page 35: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παραδείγματα

Page 36: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Παραδείγματα

Page 37: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Επίλογος

Σε αυτή τη διάλεξη είδαμε:

• Τις εξωτερικές και τις εικονικές διαδικασίες,

•τη συσχέτιση και την εμβέλεια,

•τα αρθρώματα και τις πολλαπλές εισόδους,

•τη συσχέτιση μνήμης,

•και τέλος μια μικρή εισαγωγή στον αντικειμενοστρεφή

προγραμματισμό