Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων Αρχιτεκτονικός Σχεδιασμός Λεπτομερής Σχεδιασμός Κωδικοποίηση Έλεγχος Παράδοση Συστήματος Λειτουργία - Συντήρηση.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Βασικές έννοιες αλγορίθμων
Advertisements

Τι είναι ο προγραμματισμός
Κεφάλαιο Τμηματικός προγραμματισμός
Προγραμματισμός Ι (αποφύγετέ τον!) 3) Διακοπτόμενος βρόχος: (αποφύγετέ τον!) float energy;......while(TRUE){drink_water(); if(energy
7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
Προγραμματισμός Ι Προτάσεις ελέγχου ροής Ο πιο συνηθισμένος τρόπος εκτέλεσης είναι ο ακολουθιακός: δύο ή περισσότερες προτάσεις βρίσκονται διατεταγμένες.
7.5.2 Αντικειμενοστραφής προγραμματισμός
1 Α. Βαφειάδης Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Πρώτο Αρχιτεκτονική.
Τι είναι ο υπολογιστής; Τι είναι ο προγραμματισμός
Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων Αρχιτεκτονικός Σχεδιασμός Λεπτομερής Σχεδιασμός Κωδικοποίηση Έλεγχος Παράδοση Συστήματος Λειτουργία - Συντήρηση.
H διαδικασία ανάπτυξης λογισμικού. Tι θα γνωρίσουμε •Τις φάσεις ανάπτυξης του λογισμικού. •Γιατί χρειάζεται να γίνει ανάλυση του προβλήματος. •Τι θα πρέπει.
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
Γλώσσα Προγραμματισμού
ΗΥ-150 Προγραμματισμός Εντολές Ελέγχου Ροής.
Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων
Η αλληλουχία των ενεργειών δεν είναι πάντα μία και μοναδική!!!
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Σχεδίαση αλγορίθμων (2ο μέρος)
Κεφ.1 Εισαγωγη στην εννοια του Αλγοριθμου και στον Προγραμματισμο
ΣΥΝΑΡΤΗΣΕΙΣ.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
Σχεδίαση Αλγορίθμων. Διεργασίες (1/2) Μία διεργασία αλληλεπιδρά με το περιβάλλον της δεχόμενη είσοδο και παράγοντας έξοδο.
Κεφάλαιο 6: Εισαγωγή στον προγραμματισμό Φυσικές και τεχνητές γλώσσες.
2-1 Ανάλυση Αλγορίθμων Αλγόριθμος Πεπερασμένο σύνολο εντολών που, όταν εκτελεστούν, επιτυγχάνουν κάποιο επιθυμητό αποτέλεσμα –Δεδομένα εισόδου και εξόδου.
Αλγόριθμοι 2.1.1,
Για τη διεκπεραίωση ενός προβλήματος πρέπει να ακολουθηθεί η εξής διαδικασία:  να γραφεί ο αλγόριθμος να συνταχθεί το πρόγραμμα σε γλώσσα υψηλού επιπέδου.
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
Διδακτική της Πληροφορικής ΗΥ302 Εργασία :Παρουσίαση σχολικού βιβλίου Γ’ Λυκείου Τεχνολογικής Κατεύθυνσης «Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον»
Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων Αρχιτεκτονικός Σχεδιασμός Λεπτομερής Σχεδιασμός Κωδικοποίηση Έλεγχος Παράδοση Συστήματος Λειτουργία - Συντήρηση.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΟΝΤΕΣ: Κ. ΛΑΖΟΣ - Π. ΚΑΤΣΑΡΟΣ Τρίτη, 14 Απριλίου 2015Τρίτη, 14 Απριλίου 2015Τρίτη, 14 Απριλίου 2015Τρίτη, 14 Απριλίου 2015Τμ.
Κεφάλαιο 10 – Υποπρογράμματα
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
Προγραμματισμός Γιατι γραφουμε προγραμματα (προηγ. διαλεξη)
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 11: Βελτιστοποίηση Ενδιάμεσου Κώδικα Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΚΕΦΑΛΑΙΟ Τι είναι αλγόριθμος
1 Α. Βαφειάδης Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Πρώτο Αρχιτεκτονική.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
Τεχνολογία ΛογισμικούSlide 1 Τεχνολογία Απαιτήσεων u Καθορίζει τι θέλει ο πελάτης από ένα σύστημα λογισμικού.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 2: Συναρτήσεις Εισόδου ⁄ Εξόδου. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής.
Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό
ΕΝΟΤΗΤΑ 2 – Κεφάλαιο 5: Γνωριμία με το Λογισμικό
Μπόλαρη Αγγελικη(1451) Επιβλέπων Βολογιαννίδης Σταύρος ΑΤΕΙ ΣΕΡΡΩΝ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΕΠΙΚΟΙΝΩΝΙΩΝ Σέρρες 2013.
Πληροφορική 2 Γλώσσες Προγραμματισμού 1. Γλώσσες προγραμματσιμού  Επιτρέπουν την κωδικοποίηση των αλγορίθμων  Η εκτέλεση ενός προγράμματος θα πρέπει.
ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ Αντικειμενοστραφής προγραμματισμός Web Site: ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ.
Τεχνολογία και Προγραμματισμός Υπολογιστών
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΑΛΓΟΡΙΘΜΟΣ ΠΡΟΒΛΗΜΑ ΑΛΓΟΡΙΘΜΟΣ ΛΥΣΗ
Εφαρμογές Υπολογιστών
ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ
Τεχνολογία λογισμικού
Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ
Βασικές Έννοιες και Ορισμοί
ΦΑΣΕΙΣ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΟΣ – ΑΝΑΠΤΥΞΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ
Στοιχεία Δομημένου Προγραμματισμού
ΑΛΓΟΡΙΘΜΟΣ.
Ο ορισμός του επιχειρηματικού μοντέλου
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
ΠΛΗΡΟΦΟΡΙΚΗ Γ΄ Γυμνασίου Α΄ Τρίμηνο
Ιεραρχική σχεδίαση Καθορίζονται οι βασικές λειτουργίες σε ανώτερο επίπεδο και στη συνέχεια γίνεται διάσπαση σε όλο και μικρότερες λειτουργίες μέχρι το.
Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:
Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου
UNIT 1 Τα Πρώτα Προγράμματα.
Μεταγράφημα παρουσίασης:

Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων Αρχιτεκτονικός Σχεδιασμός Λεπτομερής Σχεδιασμός Κωδικοποίηση Έλεγχος Παράδοση Συστήματος Λειτουργία - Συντήρηση Ποιο το πρόβλημα ? Ποια η λύση ? Πώς θα υλοποιηθεί η λύση ? Κώδικας ??? Επιλύθηκε το πρόβλημα? Αξιοποιεί ο πελάτης τη λύση ? Παρουσιάζονται προβλήματα ?

Στη φάση αυτή το σχέδιο λογισμικού μεταφράζεται σε κώδικα. Είσοδοι: Απαιτήσεις από το σύστημα / λογισμικό Περιγραφή του σχεδίου λογισμικού Πρότυπα κωδικοποίησης Ταυτότητα γλώσσας προγραμματισμού Κωδικοποίηση

Παραγωγή ορθού κώδικα Ανάπτυξη κατανοητού κώδικα Παραγωγή καλής τεκμηρίωσης έτσι ώστε να υπάρχει : Σωστή λειτουργικότητα Εύκολος έλεγχος ορθότητας και εντοπισμός λαθών Εύκολη τροποποίηση Δυνατότητα επαναχρησιμοποίησης στο μέλλον Στόχοι

Δομημένη κωδικοποίηση Στόχος της δομημένης κωδικοποίησης είναι η ευθυγράμμιση της ροής του ελέγχου μέσα σε ένα πρόγραμμα, έτσι ώστε η σειρά εκτέλεσης να συμβαδίζει κατά το δυνατόν με τη σειρά που έχει γραφεί ο κώδικας. Με αυτό τον τρόπο η δυναμική δομή του προγράμματος κατά την εκτέλεση μοιάζει με τη στατική δομή του κώδικα ως κειμένου Συγγραφή κώδικα

Γραμμική Ροή Ελέγχου μπορεί να επιτευχθεί με τον περιορισμό των επιτρεπόμενων γλωσσικών δομών ελέγχου ροής σε αυτά που έχουν μία είσοδο και μία έξοδο Δομημένη Κωδικοποίηση

Το 1966 οι Bohm και Jacopini έθεσαν τα θεμέλια του δομημένου προγραμματισμού: απέδειξαν ότι κάθε αλγόριθμος : { αλγόριθμος: διαδικασία επίλυσης υπολογιστικών προβλημάτων η οποία: α) Δεν περιέχει λογικές αντιφάσεις β) Λύνει κάθε πρόβλημα για το οποίο έχει κατασκευαστεί γ) Τελειώνει μετά από πεπερασμένο αριθμό πράξεων δ)Δεν περιέχει εκφράσεις οι οποίες ερμηνεύονται με υποκειμενικό τρόπο } Δομημένη Κωδικοποίηση

απέδειξαν ότι κάθε αλγόριθμος : μπορεί να γραφεί χρησιμοποιώντας τρεις δομές ελέγχου ροής : την ακολουθία, την επιλογή και την επανάληψη Ακολουθία :S 1 ; S 2 ; S 3 ; Επιλογή:if (condition) then S 1 else S 2 ; Επανάληψη: while (condition) do S; Όλες οι ανωτέρω δομές ελέγχου έχουν μία είσοδο και μία έξοδο ……. Δομημένη Κωδικοποίηση

S1 S2 S3 cond S1 T S2 F cond S1 T F

Δομημένη Κωδικοποίηση Κάθε ένα από τα δομικά στοιχεία μιας γλώσσας προγραμματισμού (π.χ. C) μπορεί να εκφραστεί με τη βοήθεια των βασικών δομικών στοιχείων : C C Δομικό στοιχείο if (cond) S; if (cond) S; else; if (cond) then S1; else S2; for (i=0;i<N;i++) S1; i=0; while (i<N) { S1; i++; } while (cond) do S1;

Παραβίαση Δομημένης Κωδικοποίησης Στην πράξη, όταν αναφερόμαστε σε δομημένο προγραμματισμό, εννοούμε συγγραφή κώδικα χωρίς τη χρήση της εντολής GOTO Η εντολή GOTO παρέχει τη δυνατότητα άνευ όρων μεταφοράς της ροής ελέγχου και έτσι επιτρέπει παραβίαση του κανόνα της μιας εισόδου – μιας εξόδου Θεωρήθηκε η πηγή του κακού για την αποτυχία πολλών μεγάλων έργων λογισμικού Καταγγέλθηκε από τον Dijkstra το 1968

Παραβίαση Δομημένης Κωδικοποίησης Ο Wirth (1974) δίνει την ακόλουθη συμβουλή: ‘’Η εντολή GOTO πρέπει να χρησιμοποιείται μόνο σε σπάνιες ή ασυνήθιστες καταστάσεις, όπου πρέπει να σπάσει η φυσική δομή ενός αλγορίθμου. Ένας καλός κανόνας είναι η αποφυγή χρήσης αλμάτων για να εκφράσουμε επαναλήψεις, ή εκτέλεση εντολών υπό συνθήκη, γιατί αυτά τα άλματα καταστρέφουν την αντανάκλαση της δυναμικής δομής του προγράμματος επάνω στη στατική δομή. Αυτή η έλλειψη αντιστοιχίας μεταξύ στατικής και δυναμικής δομής καταστρέφει την καθαρότητα του προγράμματος και δυσχεραίνει την επαλήθευση’’

Καμιά καλή κουβέντα για το GOTO ? Αφαίρεση διαθέσιμων εργαλείων: Η εντολή goto ανήκει στο ‘’οπλοστάσιο’’ του προγραμματιστή. Η αφαίρεσή της ισοδυναμεί με μείωση των διαθέσιμων δυνατοτήτων Εξαιρέσεις (Exceptions): Συχνά απαιτείται από ένα πρόγραμμα η ανάληψη ειδικής ‘’δράσης’’ σε περίπτωση π.χ. λάθους, ανάγκη που συχνά ικανοποιείται με χρήση του goto (αν και πολλές γλώσσες διαθέτουν ειδικούς μηχανισμούς απόκρισης σε εξαιρέσεις) Απόδοση προγραμμάτων: Σε ορισμένες περιπτώσεις ένα πρόγραμμα με χρήση goto είναι ταχύτερο. Π.χ. αναζήτηση ενός στοιχείου x σε έναν πίνακα a.

Καμιά καλή κουβέντα για το GOTO ? for(i=1; i<=tablesize; i++) if(a[i] = x) goto found; not found : found: return; Το πλησιέστερο πρόγραμμα με χρήση δομημένου προγραμματισμού είναι: for(i=1; i<=tablesize; i++) if(a[i] = x) flag = 1; if (flag==0) else return; Που απαιτεί έναν επιπλέον έλεγχο !

Τελικά ?? Ένα καλά δομημένο πρόγραμμα είναι ουσιαστικά ένα πρόγραμμα εύκολα κατανοητό. Το πιο χρήσιμο εργαλείο στην κατανόηση είναι η απόκρυψη πληροφορίας (αφαίρεση). Η αφαίρεση συντελεί στον εντοπισμό των κυριοτέρων στοιχείων ενός προγράμματος και στην αγνόηση λεπτομερειών Αφαίρεση επιτυγχάνεται μόνο με τη συνεπή χρήση των βασικών δομών ελέγχου και αποφυγή του goto Έστω το ακόλουθο πρόγραμμα. Γύρω από κάθε δομή μπορούμε να τοποθετήσουμε ένα πλαίσιο

Αφαίρεση..... while … do if.... then else endif endWhile if then endif Σε ένα πλήρως δομημένο πρόγραμμα οι δομές δεν επικαλύπτονται Κάθε φορά που ‘’ανοίγουμε’’ ένα πλαίσιο, δεν προκύπτουν ξαφνικά συνδέσεις με άλλες δομές Αν όμως υπήρχαν goto ??

Αφαίρεση..... while … do if.... then goto label else endif endWhile label: if then endif Η δομικότητα καταστρέφεται

Τεχνοτροπία Κωδικοποίησης (Coding Style) Ο κώδικας είναι δυνατόν να γραφεί με πολλούς διαφορετικούς τρόπους Ισοδυναμία Κώδικα: συνεπάγεται ότι για τα ίδια δεδομένα ο κώδικας που αντιστοιχεί στον κάθε τρόπο, παράγει τα ίδια αποτελέσματα και αυτό για όλους τους δυνατούς συνδυασμούς δεδομένων Η χρησιμοποίηση των εντολών μιας γλώσσας με ένα ορισμένο τρόπο, που να είναι πάντοτε περίπου ο ίδιος (συνεπής) ονομάζεται τεχνοτροπία κωδικοποίησης (Google: Java coding Style)

Γενικές Συμβουλές (Fairley 1985) Χρήση περιορισμένων γλωσσικών δομικών στοιχείων ροής ελέγχου Συνετή χρήση της εντολής GOTO Ορισμός καινούριων τύπων δεδομένων για την ευχερέστερη διάκριση οντοτήτων (OOP principle) Απόκρυψη δομών δεδομένων πίσω από διαδικασίες πρόσβασης (information hiding principle) Απομόνωση των τμημάτων του κώδικα που εξαρτώνται από το μηχάνημα σε ξεχωριστές (λίγες) συναρτήσεις Χρήση τυποποιημένων περιγραφικών προλόγων στην αρχή κάθε υποπρογράμματος

Γενικές Συμβουλές (Fairley 1985) Προσεκτική εξέταση συναρτήσεων με λιγότερες από 5 ή περισσότερες από 25 εντολές Χρήση μεταβλητής στοίχισης, παρενθέσεων, κενών, κενών γραμμών και τετράγωνα περιοχών σχολίων Don’t be too smart (Ο κώδικας γίνεται δυσανάγνωστος) Χρήση shorthands int i=0; int x = i++; //x = 0

Γενικές Συμβουλές (Fairley 1985) Παράδειγμα smart programming: Χρήση macros #include #define max(a,b) ( (a) > (b) ? (a) : (b) ) void main() { int c=5,d=7; int x = max(++c, ++d); printf("%d",x); } Τι εκτυπώνει ? 9 !!! #include #define add(a,b) ( (a) + (b) ) void main() { int c=5,d=7; printf(“sum= %d",add(c,d)); }

Γενικές Συμβουλές (Fairley 1985) Αποφυγή χρήσης εντολών της μίας μέσα στην άλλη σε μεγάλο βάθος, π.χ. printf(“%d”, func1(s*3*func2(4*s))); Αποφυγή υπερβελτιστοποίησης (Καταβολή υπερβολικά μεγάλης προσπάθειας στο ραφινάρισμα ενός τμήματος κώδικα που έχει μικρό τμήμα στην όλη αποδοτικότητα του προγράμματος. Ούτως η άλλως η απόδοση περιορίζεται από το νόμο του Amdahl :

Νόμος του Amdahl Έστω ότι βελτίωση E επιταχύνει ένα ποσοστό F του συνολικού προγράμματος κατά S (Π.χ. σε ένα πρόγραμμα 100 γραμμών που εκτελείται σε 10 secs 10 γραμμές βελτιώνονται ώστε να τρέχουν x2 γρηγορότερα, S=2)

Νόμος του Amdahl

Έστω ότι βελτιώνουμε έναν επεξεργαστή έτσι ώστε οι εντολές floating point να εκτελούνται στο μισό χρόνο (επιτάχυνση 2x) Αλλά οι εντολές κινητής υποδιαστολής αποτελούν το 10% του συνόλου των εντολών σε ένα μέσο πρόγραμμα.