31/1/2000epl-0321 Προγραμματισμός •Γιατι γραφουμε προγραμματα (προηγ. διαλεξη) •Πως γραφουμε προγραμματα –τι ειναι προγραμματισμος –μεθοδολογια –αφαιρετικοτητα (abstraction) •διαχωρισμος μεταξυ τι και πως(προγραμμα,δεδομενα...) •Παραδειγματα
31/1/2000epl-0322 Τι είναι προγραμματισμός •Ο σχεδιασμός αλγορίθμων και η υλοποίηση τους σε γλώσσες προγραμματισμού για την επίλυση προβλημάτων.
31/1/2000epl-0323 Μεθοδολογία 1. Ορισμος προβληματος 2. Αναλυσης προβληματος 3. Σχεδιαση αλγοριθμου 4. Υλοποίηση αλγόριθμου σε προγραμμα 5. Δοκιμή επαλήθευση του ολοκληρωμένου προγράμματος (5.1 Aποσφαλματωση ) 6. Συντήρηση ενημέρωση του προγράμματος
31/1/2000epl-0324 Aνάλυσης Προβλήματος •Ακριβης αναγνωρισης: –τι ειναι τα δεδομενα (inputs) –τι ειναι τα εξαγωμενα/αποτελεσμα (outputs) –τι χρειαζεται να γινει
31/1/2000epl-0325 Τι είναι αλγόριθμος? •Διατυπώση της διαδικασιας μετασχηματισμού του δεδομένου στο αποτέλεσμα •Εκφράζεται σε ψευδογλώσσα (pseudocode)
31/1/2000epl-0326 Σχεδιάσμος Αλγορίθμου •Σταδιακη Εκλέπτυνση (Stepwise Refinement) Πανω προς Κατω (top-down design) –Το πρόβλημα σταδιακά διασπάζεται σε ένα αριθμό απλούστερων υποπροβλημάτων –Η σταδιακή διάσπαση (εκλέπτυνση) συνεχίζεται μέχρις ότου φτάσουμε σε ατομικά υποπροβλήματα (υποπροβλήματα που δεν είναι λογικό/δυνατό να διασπασθούν περαιτέρω) –Επαληθευση/Αξιολογηση
31/1/2000epl-0327 Διάσπαση σε Υποπροβλήματα Π Π1 Π2 Π1,1 Π1,2 Π2,1Π2,2 Π2,3 Π1,2,1Π1,2,2 Π1,2,3
31/1/2000epl-0328 Διασπαση Διευκολυνει... •Aρθρωτός σχεδιασμός(modular design) •Αφαιρετικότητα (abstraction) –Διαχωρισμός ανάμεσα στο τι και το πως •Διατύπωση διεπαφών (interface) •Παράλληλη ανάπτυξη ( parallel development ) •Επαναχρησιμοποίηση (reuse) •Επαληθευση/Αξιολογηση
31/1/2000epl-0329 Διεπαφές/Διασυνδέσεις •Tι απαιτειται –παραμετρους που παιρνει/επιστρεφει –λειτουργικοτητα (τι κανει) –καθολικες μεταβλητες που επηρεαζονται (side- effects)
31/1/2000epl Αφαιρετικοτητα •Διακρίβωση του τι γίνεται χωρίς την γνώση του πως γίνεται •Η διαδικασια προγραμματισμου αποτελειται απο σχεδιασμο λύσεων σε διάφορα επίπεδα αφαιρετικότητας •Προσοχη: το τι καποτε συμπεριλαμβανει περιορισμους (πηγη λαθων)
31/1/2000epl Αφαιρετικότητα Μεθοδολογίας 1. Ορισμος προβληματος 2. Αναλυσης προβληματος 3. Σχεδιαση αλγοριθμου 4. Υλοποίηση αλγόριθμου σε προγραμμα 5. Δοκιμή επαλήθευση του ολοκληρωμένου προγράμματος (αποσφαλματωση ) 6. Συντήρηση ενημέρωση του προγράμματος Ανεξαρτητα Γλωσσας
31/1/2000epl Αφαιρετικοτητα Αλγοριθμου •Τι ειναι ο αλγοριθμος οχι πως θα υλοποιηθει... Αλγοριθμος JavaCFortran
31/1/2000epl Επιπεδα Αφαιρετικοτητας •Αφαιρετικοτητα Προγραμματος: Τι κανει ενα προγραμα οχι πως το κανει (διαδικασίες /συναρτήσεις) •Αφαιρετικοτητα Δεδομενων: Τι ειναι τα δεδομενα μιας δομης/τυπου οχι πως ειναι οργανωμενα (δομές/αφηρημένοι τύποι) •Αφαιρετικοτητα Εντολων: Τι κανει μια εντολη οχι πως το κανει
31/1/2000epl Τύποι Δεδομένων •Απλοι Τυποι: αριθμοι, χαρακτηρες •Συνθετοι Τυποι: πινακες, δομες, λιστες •Αφηρημενοι τυποι (abstract data types) –Αδιαφάνεια ως προς την υλοποίηση τους –Διεπαφή διαμέσου συναρτήσεων πρόσβασης •Συγκεκριμενοι: διαφανεια και αμεση προσβαση
31/1/2000epl Παράδειγμα •Γραψτε ενα προγραμμα που υπολογιζει το εμβαδο ενος ορθογωνιου. Το ορθογωνιο οριζεται με δυο αριθμους: το μηκος και το πλατος (σε μετρα). Το εμβαδο υπολογιζεται ως μηκος x πλατος. Π.χ. εαν το μηκος ειναι 10 μετρα και το πλατος 5 μετρα τοτε το εμβαδο ειναι 50 τετραγωνικα μετρα.
31/1/2000epl Αναλυσης •Δεδομενα ειναι δυο πραγματικοι αριθμοι (μηκος και πλατος) •Αποτελεσμα ειναι ενας πραγματικος αριθμος ( το εμβαδο τoυ ορθογωνιου που οριζεται απο τα δεδομενα )
31/1/2000epl Αλγοριθμος •Διαβασε τα δεδομενα •Υπολογισε το εμβαδο •Εξαγωγη αποτελεσματος
31/1/2000epl Διάβασε Δεδομένα •Διασυνδεση (Interface) –Διαβαζει δυο τιμες: μηκος και πλατος (μοναδα μετρησεως μετρο) •Λειτουργικοτητα (Functionality) –Διαβασε •μηκος •πλατος –ελεγξε αν ειναι θετικα
31/1/2000epl Υπολόγισε Εμβαδο •Interface –Παιρνει δυο παραμετρους (μηκος και πλατος) –Επιστρεφει εμβαδο •Functionality – υπολογιζει εμβαδο εμβαδο= μηκος x πλατος
31/1/2000epl Εξαγωγή Αποτελέσματος •Interface: –Παιρνει τρεις παραμετρους (μηκος, πλατος και εμβαδο) •Functionality: –εξαγει το εμβαδο για το καθορισμενο μηκος και πλατος
31/1/2000epl Αλγόριθμος Εισαγ. Υπολογ. Εξαγωγ. Προβλημα Εμβαδο = μηκος x πλατος Ελεγχος πλατος μηκος εμβαδοπλατος μηκος
31/1/2000epl Αλγοριθμος διαβασε_δεδομενα(μηκος,πλατος) υπολογισε_εμβαδο(μηκος,πλατος) εξαγωγη_αποτελεσματος(μηκος,πλατος εμβαδο)
31/1/2000epl Περαιτέρω Εκλέπτυνση Εισαγωγης get(μηκος) /*διαβασε μηκος*/ get(πλατος) /*διαβασε πλατος*/ /*ελεγχος μηκος*/ if (μηκος<=0) print(“λαθος μηκος”) exit /*ελεγχος πλατος*/ if (πλατος<=0)print(“λαθος πλατος”) exit
31/1/2000epl Υλοποίηση •Επιτυχης υλοποιηση εξυπακουει γνωση γλωσσας προγραμματισμου –συνταξη –σημασιολογια
31/1/2000epl /*program that computes the area of a rectangle (use of procedures) inputs: length, width in meters outputs: area in square meters*/ #include void get_data_check(float *length, float *width ) float compute_area(float length, float width ) void display_area(float length, float width, float area) void 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); }
31/1/2000epl /*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”); exit(0); }
31/1/2000epl /*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; }
31/1/2000epl /*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/2000epl Υλοποίηση •Χρησιμοποιηση ονοματων που βοηθουν στην ευκολη ερμηνεια του κωδικα •Ευκολοδιαβαστος κωδικας •Τεκμηρίωση: σχόλια στον κώδικα
31/1/2000epl Δοκιμή/Επαλήθευση •Μεταγλωτισμος π.χ. >cc foo.c -o foo αποτελεσμα: –τον αντικειμενικο κωδικα (μπορει ορθο) •εκτελεστε (τρεξτε) προγραμμα •εμπειρικη επαληθευση –λαθη (συντακτικα) •διορθωση κωδικα
31/1/2000epl Αποτέλεσμα Εκτέλεσης >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 >foo Enter length in meters -0.5 Enter width in meters 12 error: length should be positive >
31/1/2000epl Εκβαση Εκτέλεσης •Τρεχει “ορθα” –πολυ ωραια - αλλα με επαληθευση –Επαληθευση: εμπειρικα, αναλυτικα •Τρεχει μα παραγει λαθος αποτελεσματα ή τρεχει μερικως (crashes) –αποσφαλματωση (μπορει να σας βοηθησει να βελτιωσετε την λυση σας)
31/1/2000epl Αξιολόγηση Λύσεων •Ταχύτητα, ανάγκη σε μνήμη •Αναλυτικές/Εμπειρικές Μέθοδοι