Προστακτικός προγραμματισμός

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση

Στην πληροφορική καλούμε προστακτικό προγραμματισμό (Αγγλικά: Imperative programming), σε αντίθεση με το δηλωτικό προγραμματισμό, ένα προγραμματιστικό υπόδειγμα όπου το ζητούμενο κατασκευάζεται / υπολογίζεται αλλάζοντας την κατάσταση του υπολογιστή μέσω εντολών. Η ιδέα είναι ότι έχουμε εντολές/statements που συνήθως μοιράζονται κοινές μεταβλητές. [1]

Το υπόδειγμα αυτό ακολουθούν οι διαδικαστικές γλώσσες προγραμματισμού, όπως η Pascal, η C , η Fortran, κ.α., αλλά και πολλές αντικειμενοστρεφείς γλώσσες όπως η Java, η C++, η C#, κ.α. Η ιδέα του προστακτικού προγραμματισμού απορρέει από την αρχιτεκτονική φον Νόιμαν η οποία σχεδιάστηκε την δεκαετία 1940. Κατά την αρχιτεκτονική αυτή η κάθε εντολή (γλώσσας μηχανής) εκτελείται διαδοχικά (σε κάθε κύκλο λειτουργίας του επεξεργαστή). Η μετέπειτα ανάπτυξη των γλωσσών προγραμματισμού υψηλού επιπέδου (όπως για παράδειγμα η Pascal ή η C) βασίστηκαν στην αρχιτεκτονική φον Νόιμαν και υλοποίησαν το υπόδειγμα του προστατικού προγραμματισμό όπου ο προγραμματισμός γίνεται σε γλώσσα υψηλού επιπέδου. [2]

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

Παράδειγμα[Επεξεργασία | επεξεργασία κώδικα]

Αν θέλουμε να υπολογίσουμε το άθροισμα ακέραιων αριθμών από το 1 μέχρι ένα αριθμό n σε κάποια προστακτική γλώσσα προγραμματισμού θα χρησιμοποιούσαμε 2 μεταβλητές οι οποίες θα αλλάζανε τιμές κατά την εκτέλεση του προγράμματος [4] όπως φαίνεται στο παρακάτω ψευδοκώδικα:

count := 0
total := 0 
repeat
   count := count + 1
   total := total + count
until
   count = n

ή υλοποιημένο στην γλώσσα C++:

int count=0;
int total=0;
do {
   count++;
   total+=count;
} while (count!=n);

Στο παράδειγμα αυτό οι τιμές των μεταβλητών count και total κατά την διάρκεια εκτέλεσης του κώδικα αλλάζουν τιμές μέχρι να υπολογιστεί το άθροισμα και αυτό ο τύπος προγραμματισμού λέγεται προστακτικός. Το πρόβλημα αυτό θα μπορούσε να λυθεί με μια αναδρομική συνάρτηση πάνω σε μια λίστα με τιμές 1..n μεθοδολογία η οποία δεν συνηθίζεται στον προστακτικό προγραμματισμό αλλά στον δηλωτικό προγραμματισμό όπως φαίνεται στην αναδρομική κλίση λίστας με 3 αριθμούς:

   sum [1,2,3]
= 1 + sum[2,3]
= 1 + (2 + sum[3])
= 1 + (2 + (3 + sum[]))
= 1 + (2 + (3 + 0))
= 6

Δείτε επίσης[Επεξεργασία | επεξεργασία κώδικα]

Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]

  1. Haridi, Peter Van Roy; Seif (2004). Concepts, techniques, and models of computer programming. Cambridge, Mass. [u.a.]: MIT Press. σελ. 406. ISBN 0-262-22069-5. http://books.google.gr/books?id=_bmyEnUnfTsC&pg=PA406#v=onepage&q&f=false. 
  2. Tucker, editor-in-chief, Allen B. (2004). Computer science handbook (2nd ed. έκδοση). Boca Raton, Flor.: Chapman & Hall/CRC. σελ. 90-1, 90-2. ISBN 158488360X. http://books.google.gr/books?id=9IFMCsQJyscC&pg=SA90-PA#v=onepage&q&f=false. 
  3. Σαγώνας, Κωστής. «Γλώσσες Συναρτησιακού Προγραμματισμού». Σημειώσεις από μάθημα πληροφορικής στο Εθνικό Μετσόβιο Πολυτεχνείο. http://www.arnos.gr/2011/dmdocuments/emp/hmmy/glwsses.program1/shm3.glwsses.progr1.hmmy.emp.pdf. Ανακτήθηκε στις 1 Δεκεμβρίου 2014. 
  4. Hutton, Graham (2007). Programming in Haskell (5. print. έκδοση). Cambridge [u.a.]: Cambridge Univ. Press. σελ. 3. ISBN 978-0-521-69269-4. http://books.google.gr/books?id=olp7lAtpRX0C&lpg=PP3&hl=el&pg=PA3#v=onepage&q&f=false.