Προγραμματισμός Γιατι γραφουμε προγραμματα (προηγ. διαλεξη) Πως γραφουμε προγραμματα τι ειναι προγραμματισμος μεθοδολογια αφαιρετικοτητα (abstraction) διαχωρισμος μεταξυ τι και πως(προγραμμα,δεδομενα...) Παραδειγματα 31/1/2000 epl-131
Τι είναι προγραμματισμός Ο σχεδιασμός αλγορίθμων και η υλοποίηση τους σε γλώσσες προγραμματισμού για την επίλυση προβλημάτων. 31/1/2000 epl-131
Μεθοδολογία 1. Ορισμος προβληματος 2. Αναλυσης προβληματος 3. Σχεδιαση αλγοριθμου 4. Υλοποίηση αλγόριθμου σε προγραμμα 5. Δοκιμή επαλήθευση του ολοκληρωμένου προγράμματος (5.1 Aποσφαλματωση 1-2-3-4) 6. Συντήρηση ενημέρωση του προγράμματος 31/1/2000 epl-131
Aνάλυσης Προβλήματος Ακριβης αναγνωρισης: τι ειναι τα δεδομενα (inputs) τι ειναι τα εξαγωμενα/αποτελεσμα (outputs) τι χρειαζεται να γινει 31/1/2000 epl-131
Τι είναι αλγόριθμος? Διατυπώση της διαδικασιας μετασχηματισμού του δεδομένου στο αποτέλεσμα Εκφράζεται σε ψευδογλώσσα (pseudocode) 31/1/2000 epl-131
Σχεδιάσμος Αλγορίθμου Σταδιακη Εκλέπτυνση (Stepwise Refinement) Πανω προς Κατω (top-down design) Το πρόβλημα σταδιακά διασπάζεται σε ένα αριθμό απλούστερων υποπροβλημάτων Η σταδιακή διάσπαση (εκλέπτυνση) συνεχίζεται μέχρις ότου φτάσουμε σε ατομικά υποπροβλήματα (υποπροβλήματα που δεν είναι λογικό/δυνατό να διασπασθούν περαιτέρω) Επαληθευση/Αξιολογηση 31/1/2000 epl-131
Διάσπαση σε Υποπροβλήματα Π Π1 Π2 Π1,1 Π1,2 Π2,1 Π2,2 Π2,3 Π1,2,1 Π1,2,2 Π1,2,3 31/1/2000 epl-131
Διασπαση Διευκολυνει... Aρθρωτός σχεδιασμός(modular design) Αφαιρετικότητα (abstraction) Διαχωρισμός ανάμεσα στο τι και το πως Διατύπωση διεπαφών (interface) Παράλληλη ανάπτυξη (parallel development) Επαναχρησιμοποίηση (reuse) Επαληθευση/Αξιολογηση 31/1/2000 epl-131
Διεπαφές/Διασυνδέσεις Απαιτειται ορισμος διεπαφης παραμετρους που παιρνει/επιστρεφει λειτουργικοτητα (τι κανει) σφαιρικες μεταβλητες που επηρεαζονται απο την διαδικασια (side-effects) 31/1/2000 epl-131
Αφαιρετικοτητα Διακρίβωση του τι γίνεται χωρίς την γνώση του πως γίνεται Η διαδικασια προγραμματισμου αποτελειται απο σχεδιασμο λύσεων σε διάφορα επίπεδα αφαιρετικότητας Προσοχη: το τι καποτε συμπεριλαμβανει περιορισμους (πηγη λαθων) 31/1/2000 epl-131
Αφαιρετικότητα Μεθοδολογίας 1. Ορισμος προβληματος 2. Αναλυσης προβληματος 3. Σχεδιαση αλγοριθμου 4. Υλοποίηση αλγόριθμου σε προγραμμα 5. Δοκιμή επαλήθευση του ολοκληρωμένου προγράμματος (αποσφαλματωση 1-2-3-4) 6. Συντήρηση ενημέρωση του προγράμματος Ανεξαρτητα Γλωσσας 31/1/2000 epl-131
Αφαιρετικοτητα Αλγοριθμου Τι ειναι ο αλγοριθμος οχι πως θα υλοποιηθει Αλγοριθμος ... Java C Fortran 31/1/2000 epl-131
Επιπεδα Αφαιρετικοτητας Αφαιρετικοτητα Προγραμματος: Τι κανει ενα προγραμα οχι πως το κανει (διαδικασίες /συναρτήσεις) Αφαιρετικοτητα Δεδομενων: Τι ειναι τα δεδομενα μιας δομης/τυπου οχι πως ειναι οργανωμενα (δομές/αφηρημένοι τύποι) Αφαιρετικοτητα Εντολων: Τι κανει μια εντολη οχι πως το κανει 31/1/2000 epl-131
Τύποι Δεδομένων Απλοι Τυποι: αριθμοι, χαρακτηρες Συνθετοι Τυποι: πινακες, δομες, λιστες Αφηρημενοι τυποι (abstract data types) Αδιαφάνεια ως προς την υλοποίηση τους Διεπαφή διαμέσου συναρτήσεων πρόσβασης Συγκεκριμενοι: διαφανεια και αμεση προσβαση 31/1/2000 epl-131
Παράδειγμα Γραψτε ενα προγραμμα που υπολογιζει το εμβαδο ενος ορθογωνιου. Το ορθογωνιο οριζεται με δυο αριθμους: το μηκος και το πλατος (σε μετρα). Το εμβαδο υπολογιζεται ως μηκος x πλατος. Π.χ. εαν το μηκος ειναι 10 μετρα και το πλατος 5 μετρα τοτε το εμβαδο ειναι 50 τετραγωνικα μετρα. 31/1/2000 epl-131
Αναλυσης Δεδομενα ειναι δυο πραγματικοι αριθμοι (μηκος και πλατος) Αποτελεσμα ειναι ενας πραγματικος αριθμος (το εμβαδο τoυ ορθογωνιου που οριζεται απο τα δεδομενα) 31/1/2000 epl-131
Αλγοριθμος Διαβασε τα δεδομενα Υπολογισε το εμβαδο Εξαγωγη αποτελεσματος 31/1/2000 epl-131
Αλγοριθμος διαβασε_δεδομενα(μηκος,πλατος) αθροισμα=υπολογισε_εμβαδο(μηκος,πλατος) εξαγωγη_αποτελεσματος(μηκος,πλατος εμβαδο) εξαγωγη αποτελεσματος διαβασε δεδομενα υπολογισε εμβαδο Προβλημα 31/1/2000 epl-131
Διάβασε Δεδομένα Interface Functionality Διαβαζει και επιστρεφει δυο τιμες: μηκος και πλατος (μοναδα μετρησεως μετρο) Functionality Διαβασε μηκος πλατος ελεγξε αν ειναι θετικα 31/1/2000 epl-131
Υπολόγισε Εμβαδο Interface Functionality Παιρνει δυο παραμετρους (μηκος και πλατος) Επιστρεφει εμβαδο Functionality υπολογιζει εμβαδο εμβαδο= μηκος x πλατος 31/1/2000 epl-131
Εξαγωγή Αποτελέσματος Interface: Παιρνει τρεις παραμετρους (μηκος, πλατος και εμβαδο) Functionality: εξαγει το αποτελεσμα 31/1/2000 epl-131
Αλγόριθμος Προβλημα Εισαγ. Εξαγωγ. Υπολογ. μηκος πλατος Ελεγχος εμβαδο Εμβαδο = μηκος x πλατος 31/1/2000 epl-131
Περαιτέρω Εκλέπτυνση Εισαγωγης get(μηκος) /*διαβασε μηκος*/ get(πλατος) /*διαβασε πλατος*/ /*ελεγχος μηκος*/ if (μηκος<=0) print(“λαθος μηκος”) exit /*ελεγχος πλατος*/ if (πλατος<=0)print(“λαθος πλατος”) exit 31/1/2000 epl-131
Υλοποίηση Επιτυχης υλοποιηση εξυπακουει γνωση γλωσσας προγραμματισμου συνταξη σημμασολογια 31/1/2000 epl-131
/*program that computes the area of a rectangle (use of procedures) inputs: length, width in meters outputs: area in square meters*/ #include <stdio.h> void get_data_check(float *length, float *width ) float compute_area(float length, float width ) void display_sum(float length, float width, float area) main() { /*orismos metavlitwn*/ float length, width; /*input variables*/ float area; /*holds area*/ /* diabase dedomena/elegxos*/ get_data_check(&length, &width ); /* ypologismos*/ area = compute_area(length, width ); /* ejagwgh*/ display_area(length, width , area); }
/*function that reads program input data*/ void get_data_check(float *length, float *width ){ printf(“Enter length in meters: ”); scanf(“%f”,length); printf(“Enter width in meters:”); scanf(“%f”,width); if (*length<=0) { printf(“error: length should be positive\n”); exit(0); } if (*width<=0) { printf(“error: width should be positive\n”);
/*function that computes the area of a rectanlge*/ float compute_area(float length, float width ){ float area; /*holds area*/ area = length * width; /*compute area*/ return area; }
/*function that displays the output of the program*/ void display_area(float length, float width, float area) { printf(“The area of a rectangle with %f m length and %f m width is %f sq. m.\n”, length, width, area); }
Υλοποίηση Χρησιμοποιηση ονοματων που βοηθουν στην ευκολη ερμηνεια του κωδικα Ευκολοδιαβαστος κωδικας Τεκμηρίωση: σχόλια στον κώδικα 31/1/2000 epl-131
Δοκιμή/Επαλήθευση Μεταγλωτισμος π.χ. >cc foo.c -o foo παραγει: τον αντικειμενικο κωδικα (μπορει ορθο) εκτελεστε (τρεξτε) προγραμμα εμπειρικη επαληθευση(μεγεθος: 1,0, λιγα αλλα) λαθη (συντακτικα) διορθωση κωδικα 31/1/2000 epl-131
Εκτέλεσης >foo > Enter length in meters 17 Enter width in meters 2 The area of a rectange with 17 m length and 2 m width is 34 sq.m Enter length in meters -0.5 Enter width in meters 12 error: length should be positive > 31/1/2000 epl-131
Εκβαση Εκτέλεσης Τρεχει “ορθα” Επαληθευση: εμπειρικα, αναλυτικα πολυ ωραια - αλλα με επαληθευση Επαληθευση: εμπειρικα, αναλυτικα Αξιολόγηση Λύσεων Ταχύτητα, ανάγκη σε μνήμη Αναλυτικές/Εμπειρικές Μέθοδοι 31/1/2000 epl-131
Εκβαση Εκτέλεσης Τρεχει μα παραγει λαθος αποτελεσματα ή τρεχει μερικως (crashes) αποσφαλματωση (μπορει να σας βοηθησει να βελτιωσετε την λυση σας) 31/1/2000 epl-131
Μοντέλα Προγραμματισμού Διαδικασιακό ή Προστακτικό – εντολή/ διαδικασία, π.χ. C, Pascal, Modula-2 Αντικειμενοστρεφές – αντικείμενο/ενδοπερίβλημα-κληρονομικότητα, π.χ. C++, Smalltalk, Java Συναρτησιακό – συνάρτηση/αποτίμηση εκφράσεων, π.χ. Miranda, ML Λογικό – σχέση/μηχανισμός συνεπαγωγής, π.χ. Prolog 31/1/2000 epl-131
Προστακτικές έναντι Δηλωτικές Γλώσσες Δηλωτικές γλώσσες έχουν υψηλότερη αφαιρετικότητα. Δεν υπάρχει η έννοια της αποθήκευσης σε σχέση με αυτές τις γλώσσες και επομένως του τελεστή ανάθεσης τιμών (assignment operator). Θα χρησιμοποιησουμε C (διαδικασιακη) 31/1/2000 epl-131
Διαδικασιακό Μοντέλο Κεντρική έννοια η εντολή ή προσταγή Η έννοια της διαδικασίας παρέχει το βασικό μηχανισμό για αφαιρετικότητα Η ροή ελέγχου (control flow) είναι ακολουθιακής μορφής Υπάρχει η έννοια της αποθήκευσης Μεταβλητές έχουν διεύθυνση (χώρο μνήμης), τύπο και τιμή π.χ. int x = 123456; 31/1/2000 epl-131
Διαδικασιακό Μοντέλο Υπάρχει η έννοια της αποθήκευσης Μεταβλητές έχουν διεύθυνση (χώρο μνήμης), τύπο και τιμή π.χ. int x = 123456; εοds 1 2 … ... 1021 123 err12 123456 τυπος διευθυνση (συμβολικη) τιμη 31/1/2000 epl-131