parametroi kai upoprogrammata

Ξεκίνησε από γιαννης, 06 Μαρ 2005, 06:47:44 ΜΜ

« προηγούμενο - επόμενο »

γιαννης

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

π.χ Διαδικασία Είσοδος_δεδομένων(αριθμός)
 και ΚΑΛΕΣΕ ΕΙΣΟΔΟΣ ΔΕΔΟΜΕΝΩΝ(αριθμος)
είναι λάθος??

Επισκέπτης

Αγαπητέ Γιάννη στην ερώτησή σου απαντά το παράδειγμα 1, σελίδα 100 του τετραδίου μαθητή σε συνδυασμό με το παράδειγμα στην παράγραφο 10.5 στο σχολικό βιβλίο. Τα ονόματα των παραμέτρων στα διαφορετικά τμήματα προγραμμάτων μπορεί να είναι διαφορετικά, αλλά μπορεί να είναι και ίδια.

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

gpapargi

Καλημέρα

Η απάντηση του επισκέπτη είναι αρκετή. Θα ήθελα όμως να δώσω μια απάντηση περισσότερο βασισμένη στη διαίσθηση που θα βοηθήσει στην καλύτερη κατανόηση. Θα το πω χωρίς αυστηρότητα.

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

Ας δούμε το εξής παράδειγμα: Ένας προϊστάμενος προγραμματιστής πρέπει να παραδώσει ένα πρόγραμμα σε κάποιο πελάτη. Το σπάει σε απλά υποπρογράμματα και δίνει το καθένα από αυτά σε ένα διαφορετικό υφιστάμενο του προγραμματιστή για να το υλοποιήσει. Στη συνέχεια θα τα πάρει έτοιμα, και θα τα χρησιμοποιήσει για να φτιάξει το τελικό πρόγραμμα. Ο προϊστάμενος δεν χρειάζεται να ξέρει τις λεπτομέρειες της υλοποίησης των υποπρογραμμάτων. Το μόνο που πρέπει να ξέρει είναι το τι κάνει το υποπρόγραμμα και ΠΩΣ ΤΟ ΚΑΛΕΙ από το δικό του πρόγραμμα.

Αν έπρεπε τα ονόματα των τυπικών και των πραγματικών παραμέτρων να είναι  υποχρεωτικά διαφορετικά, τότε θα έπρεπε αυτός που καλεί το υποπρόγραμμα (ο προϊστάμενος) να ξέρει πως το έχει υλοποιήσει αυτός που το έγραψε (ο υφιστάμενος) ΕΤΣΙ ΩΣΤΕ ΝΑ ΑΠΟΦΥΓΕΙ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΣΕΙ ΤΟ ΙΔΙΟ ΟΝΟΜΑ ΓΙΑ ΤΗΝ ΠΑΡΑΜΕΤΡΟ.
Αυτό όμως σημαίνει ότι θα έπρεπε ο προϊστάμενος να ξέρει τις λεπτομέρειες της υλοποίησης και άρα τα υποπρογράμματα δε θα ήταν ανεξάρτητα μεταξύ τους. Πάντα θα υπήρχε η περίπτωση να έχουμε μια «κακή» σύμπτωση και να έχουν χρησιμοποιήσει και οι 2 το ίδιο όνομα για την παράμετρο.  Σε αυτή την περίπτωση το πρόγραμμα δε θα δούλευε.  

Για να παραμείνουν τα υποπρογράμματα ανεξάρτητα μεταξύ τους λοιπόν θα πρέπει οι τυπικές και οι πραγματικές παράμετροι να είναι διαφορετικές οντότητες. Και αυτό ακριβώς συμβαίνει! Οι τυπικές και οι πραγματικές παράμετροι είναι μεταβλητές σε διαφορετικά «τμήματα» προγράμματος (καταλαμβάνοντας διαφορετικό χώρο στη μνήμη) και άρα ακόμα κι αν φέρουν το ίδιο όνομα πρόκειται για απλή συνωνυμία.  

Νομίζω ότι μια ματιά στις εκτός ύλης παραγράφους 10.5.3 και 10.6 είναι χρήσιμη για την κατανόηση της ΓΛΩΣΣΑΣ.

Προσωπικά σκοπεύω να διδάξω την παραπάνω λεπτομέρεια καθώς επίσης και το θέμα της τοπικότητας των μεταβλητών στη ΓΛΩΣΣΑ αδιαφορώντας για το αν είναι μέσα ή έξω από την ύλη. Θα μου πάρει λίγα λεπτά αλλά θα αποφύγω δυσάρεστες παρεξηγήσεις.