1 Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Κεφάλαιο 6 Παπαγιάννη Νάσια Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών ΕΜΠ
2 6.1 Η έννοια του προγράμματος Επίλυση 1. Ακριβή προσδιορισμό προβλήματος δηλ. Κατανόηση + Ανάλυση Προβλήματος 2. Ανάπτυξη Αλγορίθμου 3. Ανάπτυξη Προγράμματος Πρόγραμμα είναι οι εντολές που πρέπει να δοθούν στον Η/Υ, ώστε να υλοποιηθεί ο αλγόριθμος για την επίλυση του προβλήματος. ΠΡΟΓΡΑΜΜΑ = ΑΛΓΟΡΙΘΜΟΣ + ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ περιλαμβάνει: Παρατηρήσεις: 1.Οι γλώσσες προγραμματισμού αναπτύχθηκαν με σκοπό την επικοινωνία του ανθρώπου (προγραμματιστή) με την μηχανή (υπολογιστή). 2.Ο υπολογιστής καταλαβαίνει μόνο δύο καταστάσεις, οι οποίες αντιπροσωπεύονται από δύο αριθμούς: το μηδέν και το ένα. 3.(Κεφ.1, σελ.19) Ο υπολογιστής εκτελεί μόνο τρεις λειτουργίες: μεταφορά δεδομένων, πρόσθεση και σύγκριση). Αυτές τις ενέργειες όμως, τις εκτελεί με ασύλληπτη ταχύτητα.
3 6.2 Ιστορική Αναδρομή ΥΛΙΚΟ (Hardware) Πρώτοι Υπολογιστές Σήμερα ΜέγεθοςΔυνατότητες Τεράστιοι Μικροί Λίγες Τεράστιες ΛΟΓΙΣΜΙΚΟ Βασικές Αρχές Λειτουργίας (1945, von Neumann) + Γλώσσες Προγραμματισμού Μεγάλη Εξέλιξη Πρακτικά καμία Εξέλιξη
Γλώσσες Μηχανής Οι εντολές σε γλώσσα μηχανής είναι κατάλληλες ακολουθίες από 0 και 1 Χαρακτηριστικά (μειονεκτήματα) των γλωσσών μηχανής: 1.Ο προγραμματισμός είναι εξαιρετικά επίπονος και χρονοβόρος. 2.Ο προγραμματισμός θέλει βαθιά γνώση του υλικού και της αρχιτεκτονικής του Η/Υ Υπάρχουν ελάχιστοι προγραμματιστές Ένα πρόγραμμα σε γλώσσα μηχανής είναι μία ακολουθία δυαδικών ψηφίων (0 και 1), που αποτελούν εντολές προς τον επεξεργαστή, για στοιχειώδεις λειτουργίες. Άλλες παρατηρήσεις: 1.Ο πρώτος υπολογιστής ήταν ο ENIAC, με εκατοντάδες διακόπτες και καλωδιώσεις. Ο προγραμματισμός σε αυτόν τον υπολογιστή, ήταν ουσιαστικά μία αναδιάρθρωση των διακοπτών και των καλωδιώσεών του. 2.Και σήμερα, οι εντολές ενός προγράμματος, μετατρέπονται τελικά σε ακολουθίες από 0 και 1, δηλαδή σε εντολές σε γλώσσα μηχανής.
Συμβολικές Γλώσσες ή Γλώσσες Χαμηλού Επιπέδου Οι εντολές σε συμβολική γλώσσα αποτελούνται από συμβολικά ονόματα που αντιστοιχούν σε εντολές της γλώσσας μηχανής. Χαρακτηριστικά (μειονεκτήματα) των συμβολικών γλωσσών: 1.Δεν διέθεταν εντολές σύνθετων λειτουργιών μακροσκελή προγράμματα: δύσκολο να φτιαχτούν και δύσκολο να συντηρηθούν 2.Είναι στενά συνδεδεμένες με την αρχιτεκτονική του κάθε υπολογιστή τα προγράμματα δεν μπορούν να μεταφερθούν σε άλλον Η/Υ, ακόμα και του ίδιου κατασκευαστή Οι εντολές σε συμβολική γλώσσα μεταφράζονται σε γλώσσα μηχανής από ειδικό πρόγραμμα, τον συμβολομεταφραστή (assembler). Γιατί αναπτύχθηκαν οι Συμβολικές Γλώσσες; Διότι παρουσιάστηκε αμέσως η ανάγκη, η γλώσσα να έχει έννοια για τον άνθρωπο, να είναι δηλαδή πιο κατανοητή και να απομνημονεύεται σχετικά εύκολα
Γλώσσες Υψηλού Επιπέδου ή 3 ης γενιάς (1/3) Οι γλώσσες υψηλού επιπέδου χρησιμοποιούν ως εντολές απλές λέξεις της αγγλικής γλώσσας, ακολουθώντας αυστηρούς κανόνες σύνταξης Οι εντολές σε γλώσσες υψηλού επιπέδου μεταφράζονται από τον ίδιο τον υπολογιστή σε εντολές σε γλώσσα μηχανής Παρατηρήσεις: 1.Καμία γλώσσα προγραμματισμού δεν μπόρεσε και δεν μπορεί να καλύψει όλους τους τομείς δραστηριοτήτων. Γι’ αυτό, αναπτύχθηκαν και αναπτύσσονται πολλές γλώσσες προγραμματισμού για διάφορες περιοχές δραστηριοτήτων. Γιατί αναπτύχθηκαν οι Γλώσσες Υψηλού Επιπέδου; Για να καλύψουν τις ανεπάρκειες των συμβολικών γλωσσών, δηλαδή: Να μην είναι στενά συνδεδεμένες με την αρχιτεκτονική του κάθε υπολογιστή Να διαθέτουν εντολές για πιο σύνθετες λειτουργίες
Γλώσσες Υψηλού Επιπέδου ή 3 ης γενιάς (2/3) … ΒASIC Beginner’s All Purpose Symbolic Instruction Code πολύ πετυχημένη γλώσσα αναπτύχθηκε για εκπαίδευση στον προγραμματισμό γλώσσα-πρότυπο για ανάπτυξη εφαρμογών σε προσωπικούς υπολογιστές Εκδόσεις: QuickBasic και VisualBasic της Microsoft ( 1964 ) F OR T RAN Formula Translation Μαθηματικά κ Επιστημονικά Προβλήματα C O B OL COmmon Business Oriented Language Εμπορικές κ Διαχειριστικές Εφαρμογές μεταγλωττιστής A L G OL ALgorithmic Language από τις σημαντικότερες γλώσσες ελάχιστη πρακτική εφαρμογή επηρέασε ιδιαίτερα τον προγραμματισμό σκοπός της: δημιουργία γενικής φύσεως προγραμμάτων που να μη συνδέονται με συγκεκριμένες εφαρμογές διερμηνευτής PASCAL δημιούργημα του Wirth στηρίχθηκε στην ALGOL γλώσσα Γενικής Χρήσης κατάλληλη για: εκπαίδευση δημιουργία ισχυρών προγραμμάτων κάθε τύπου κατάλληλη για δημιουργία δομημένων προγραμμάτων έχει τεράστια εξάπλωση αποτέλεσε τη βάση για ανάπτυξη άλλων ισχυρότερων γλωσσών (πχ. ADA, Modula-2) LISPLISP LIst Processor γλώσσα τεχνητής νοημοσύνης χειρισμός λιστών από σύμβολα (μέσα του 60) PL/1 Programming Language 1 προσπάθησε να καλύψει όλους τους τομείς προγραμματισμού ανεπιτυχής προσπάθεια P RO L OG Programming LOgic γλώσσα τεχνητής νοημοσύνης C αναπτύχθηκε στα εργαστήρια της Bell χρησιμοποιήθηκε για την ανάπτυξη του λειτουργικού συστήματος Unix έχει πολύ ισχυρά χαρακτηριστικά κατάλληλη για την ανάπτυξη δομημένων εφαρμογών έχει επίσης πολλές δυνατότητες χαμηλού επιπέδου C++ αντικειμενοστραφής προγρ/μός Visual C++ αντικειμενοστραφής προγρ/μός οπτικός προγραμματισμός Java ειδικά για προγραμματισμό στο Διαδίκτυο αναπτύχθηκε από την SUN σκοπός της: ανάπτυξη κατανεμημένων εφαρμογών … dBASE διαχείριση αρχείων δεδομένων LOGO γλώσσα για μαθητές μικρής ηλικίας
Γλώσσες Υψηλού Επιπέδου ή 3 ης γενιάς (3/3) Πλεονεκτήματα των γλωσσών υψηλού επιπέδου: 1.Φυσικότερος και πιο «ανθρώπινος» τρόπος έκφρασης των προγραμμάτων. 2.Μεταφερσιμότητα των προγραμμάτων (ανεξαρτησία από τον τύπο του υπολογιστή) 3.Ευκολία εκμάθησης και εκπαίδευσης 4.Ευκολία διόρθωσης λαθών και συντήρησης προγραμμάτων Ελάττωση Χρόνου και Κόστους Παραγωγής νέων προγραμμάτων
Γλώσσες 4 ης Γενιάς Παρατηρήσεις: 1.Οι γλώσσες υψηλού επιπέδου ή 3ης γενιάς, απευθύνονται μόνο σε προγραμματιστές. Υπάρχει όμως η ανάγκη, οι χρήστες να μπορούν να κάνουν μόνοι τους αλλαγές σε κάποιο πρόγραμμα για να ικανοποιήσουν νέες ανάγκες τους. 2.Οπότε, υπάρχει αυξανόμενη τάση απόκρυψης αρχιτεκτονικής υλικού απόκρυψης τεχνικής προγραμματισμού 3.Στις γλώσσες 4ης γενιάς, ο χρήστης έχει τη δυνατότητα: να υποβάλλει -σχετικά εύκολα- ερωτήσεις στο σύστημα να αναπτύσσει εφαρμογές που ανακτούν πληροφορίες από βάσεις δεδομένων να καθορίζει τον ακριβή τρόπο εμφάνισης των πληροφοριών αυτών 4.Παράδειγμα Γλώσσας 4ης γενιάς: SQL
10 Ταξινόμηση Γλωσσών Προγραμματισμού Διαδικασιακές (ή Αλγοριθμικές) Αντικειμενοστραφείς Συναρτησιακές Μη διαδικασιακές (ή Πολύ υψηλού επιπέδου) Γλώσσες Ερωταπαντήσεων C++ LISP Prolog SQL Α. Κατηγοριοποίηση με βάση ιδέες πάνω στον προγραμματισμό πλειοψηφία Γενικής Χρήσης Προγραμματισμού Συστημάτων Τεχνητής Νοημοσύνης Ειδικής Χρήσης (σε ειδικές περιοχές εφαρμογών) πχ. γραφικά με Η/Υ, ρομποτική, εκπαίδευση μέσω Η/Υ, σχεδίαση ολοκληρωμένων κυκλωμάτων, συστήματα διαχείρισης Βάσεων Δεδομένων, κ.α. C LISP, Prolog Β. Κατηγοριοποίηση με βάση τη περιοχή χρήσης Pascal, Basic Επιστημονικής Κατεύθυνσης Fortran Εμπορικής Κατεύθυνσης Cobol
11 Ποια είναι η Καλύτερη Γλώσσα Προγραμματισμού; ΔΕΝ Υπάρχει ούτε πρόκειται να Υπάρξει Καλύτερη Γλώσσα Προγραμματισμού Η επιλογή της γλώσσας για την ανάπτυξη μίας εφαρμογής, εξαρτάται από: το είδος της εφαρμογής το υπολογιστικό περιβάλλον στο οποίο θα εκτελεστεί τα προγραμματιστικά περιβάλλοντα που διαθέτουμε τις γνώσεις του προγραμματιστή
Φυσικές και Τεχνητές Γλώσσες Φυσικές γλώσσες: επικοινωνία μεταξύ ανθρώπων Τεχνητές γλώσσες: επικοινωνία ανθρώπου – μηχανής Vs. Μία γλώσσα προσδιορίζεται από: 1. Αλφάβητο 2. Λεξιλόγιο 3. Γραμματική 4. Σημασιολογία καλείται το σύνολο των στοιχείων που χρησιμοποιείται από τη γλώσσα αποτελείται από ένα υποσύνολο όλων των ακολουθιών που δημιουργούνται από τα στοιχεία του αλφαβήτου, δηλ. τις λέξεις που είναι δεκτές από τη γλώσσα σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μία λέξη είναι αποδεκτή σύνολο των κανόνων που ορίζει τη νομιμότητα της διάταξης και της σύνδεσης των λέξεων της γλώσσας για τη δημιουργία προτάσεων Φυσικές γλώσσες: σωστές προτάσεις Τεχνητές γλώσσες: σωστές εντολές τυπικό ή τυπολογικό συντακτικό σύνολο των κανόνων που καθορίζει το νόημα των λέξεων και κατ’ επέκταση των εκφράσεων και των προτάσεων που χρησιμοποιούνται σε μία γλώσσα *Στις γλώσσες προγραμματισμού (τεχνητές γλώσσες), ο δημιουργός της γλώσσας αποφασίζει τη σημασιολογία των λέξεων της γλώσσας
Φυσικές και Τεχνητές Γλώσσες - διαφορές Φυσικές γλώσσες: δυνατότητα εξέλιξης Τεχνητές γλώσσες: εξελίσσονται συνεχώς χαρακτηρίζονται από στασιμότητα, δεν εξελίσσονται σχεδόν καθόλου συχνά βελτιώνονται και μεταβάλλονται από τους δημιουργούς τους με σκοπό: − να διορθωθούν αδυναμίες − να καλύψουν μεγαλύτερο εύρος εφαρμογών, ή − να ακολουθήσουν νέες εξελίξεις αλλά: Παρατηρήσεις: 1.Οι γλώσσες προγραμματισμού αλλάζουν σε επίπεδο διαλέκτου (πχ. GW-Basic και QuickBasic) ή σε επίπεδο επέκτασης (πχ. Basic και Visual Basic).
14 Τεχνικές Σχεδίασης Προγραμμάτων 1. Ιεραρχική Σχεδίαση διαδικασία σχεδίασης «από επάνω προς τα κάτω» διάσπαση του προβλήματος σε σειρά από απλούστερα χρησιμοποιούνται συνήθως διαγραμματικές τεχνικές 2. Τμηματικός Προγραμματισμός υλοποίηση της ιεραρχικής σχεδίασης κάθε υποπρόβλημα αποτελεί ξεχωριστή ενότητα προγράμματος πλεονεκτήματα τμηματικού προγραμματισμού: § Δομημένος Προγραμματισμός (σήμερα περιέχει την ιεραρχική σχεδίαση και τον τμηματικό προγραμματισμό, διότι ενθαρρύνει την ανάλυση του προγράμματος σε επιμέρους τμήματα) είναι μεθοδολογία σύνταξης προγραμμάτων και σήμερα αποτελεί τη βασική μεθοδολογία προγραμματισμού θεωρητικές αρχές διατυπώθηκαν το 1964 και ο Dijkstra το 1968 δημοσίευσε μελέτη “σταθμό” που τον θεμελίωσε αναπτύχθηκε από την ανάγκη: (α) να υπάρχει κοινή μεθοδολογία ανάπτυξης προγραμμάτων (β) και τη μείωση των εντολών GOTO ο δομημένος προγραμματισμός στηρίζεται στα εξής: (1) στη χρήση μόνο 3 στοιχειωδών λογικών δομών: - δομή ακολουθίας - δομή επιλογής - δομή επανάληψης (2) όλα τα προγράμματα μπορούν να γραφούν χρησιμοποιώντας αυτές τις 3 δομές καθώς και συνδυασμό τους (3) κάθε πρόγραμμα και κάθε ενότητα προγράμματος έχει μόνο 1 είσοδο και μόνο 1 έξοδο Πλεονεκτήματα: (1) Δημιουργία απλούστερων προγραμμάτων (2) Άμεση μεταφορά των αλγορίθμων σε προγράμματα (3) Διευκόλυνση ανάλυσης του προγράμματος σε τμήματα (4) Περιορισμός λαθών κατά την ανάπτυξη του προγ/τος (5) Διευκόλυνση στην ανάγνωση και κατανόηση του προγ/τος από τρίτους (6) Ευκολότερη Διόρθωση και Συντήρηση 4. Αντικειμενοστραφής Προγραμματισμός (χρησιμοποιεί ιεραρχική σχεδίαση, τμηματικό προγραμματισμό και ακολουθεί τις αρχές του δομημένου προγραμματισμού) Βασική ιδέα: ένα πρόγραμμα περιγράφει “ενέργειες” (επεξεργασία) που εφαρμόζονται στα δεδομένα Πρωτεύοντα δομικά στοιχεία: δεδομένα (και όχι οι ενέργειες) Από τα δεδομένα δημιουργούνται τα αντικείμενα τα προγράμματα είναι πιο ευέλικτα και επαναχρησιμοποιήσιμα 5. Παράλληλος Προγραμματισμός για την υλοποίηση του παράλληλου προγ/μού, ο υπολογιστής πρέπει να διαθέτει περισσότερους από έναν επεξεργαστές οι επεξεργαστές μοιράζονται την ίδια μνήμη και λειτουργούν παράλληλα εκτελώντας διαφορετικές εντολές του ίδιου προγ/τος το πρόβλημα διαιρείται σε τμήματα που εκτελούνται παράλληλα ο παράλληλος προγραμματισμός υλοποιείται σε κατάλληλο υπολογιστικό περιβάλλον (πχ. OCCAM) * Eμφάνιση Γραφικών Περιβάλλοντων Εργασίας (ΓΠΕ): Προγραμματισμός οδηγούμενος από το γεγονός σελ Δυνατότητα να ενεργοποιούνται λειτουργίες προγράμματος με την εκτέλεση ενός γεγονότος (πχ. κλικ του ποντικιού) Οπτικός Προγραμματισμός σελ Δυνατότητα δημιουργίας γραφικού περιβάλλοντος της εφαρμογής (πχ. πλαίσια διαλόγου ή μενού) Πχ. γλωσσών προγ/μού σε ΓΠΕ: Visual Basic, Visual C++, Java
Προγραμματιστικά Περιβάλλοντα Η μετατροπή επιτυγχάνεται με τη χρήση ειδικών μεταφραστικών προγραμμάτων Κάθε πρόγραμμα (οποιασδήποτε γλώσσας προγ/μού) μετατρέπεται σε εντολές γλώσσας μηχανής Είσοδος Έξοδος Πρόγραμμα σε γλώσσα υψηλού επιπέδου Ισοδύναμο Πρόγραμμα σε γλώσσα μηχανής Μία-προς-μία οι εντολές του αρχικού προγράμματος (σε γλώσσα υψηλού επιπέδου) Για κάθε μία εντολή, εκτελεί αμέσως μία ισοδύναμη ακολουθία εντολών μηχανής Το ισοδύναμο πρόγραμμα σε γλώσσα μηχανής: − είναι τελείως ανεξάρτητο από το αρχικό − εκτελείται οποτεδήποτε ΜεταγλωττιστέςΔιερμηνευτές Vs. Παρατηρήσεις: 1.Στην περίπτωση των μεταγλωττιστών, η έξοδός του -που είναι το ισοδύναμο πρόγραμμα σε γλώσσα μηχανής- συνήθως δεν μπορεί να εκτελεστεί, αλλά χρειάζεται περαιτέρω διαδικασία Δες συνέχεια…..
Μεταγλώττιση + Σύνδεση Μεταγλωττιστής Παρατηρήσεις: 1.Η συνολική διαδικασία στην περίπτωση που χρησιμοποιείται μεταγλωττιστής, ονομάζεται μεταγλώττιση και σύνδεση. Είσοδος Αρχικό Πρόγραμμα σε γλώσσα υψηλού επιπέδου Πηγαίο πρόγραμμα Έξοδος Ισοδύναμο Πρόγραμμα σε γλώσσα μηχανής Αντικείμενο πρόγραμμα 1ο στάδιο Συνδέτης – Φορτωτής Είσοδος Αντικείμενο πρόγραμμα 2ο στάδιο συνήθως, δεν μπορεί να εκτελεστεί, διότι χρειάζεται να συμπληρωθεί και να συνδεθεί με άλλα τμήματα προγράμματος, απαραίτητα για την εκτέλεσή του, τα οποία είτε τα γράφει ο προγραμματιστής, είτε βρίσκονται στις βιβλιοθήκες της γλώσσας Έξοδος Εκτελέσιμο πρόγραμμα Πρόγραμμα που επιτρέπει τη σύνδεση του αντικειμένου προγράμματος με άλλα τμήματα προγράμματος Το τελικό πρόγραμμα που εκτελείται από τον υπολογιστή
Τελειώσαμε ή μήπως έχουμε λάθη;;; Για να εκτελεστεί σωστά ένα πρόγραμμα που μεταφράστηκε σε γλώσσα μηχανής πρέπει να μην περιέχει λάθη. Εμφανίζονται στο στάδιο της μεταγλώττισης, και πρέπει απαραίτητα να διορθωθούν για να παραχθεί το τελικό εκτελέσιμο Εμφανίζονται μόνο κατά την εκτέλεση του τελικού προγράμματος Συντακτικά ΛάθηΛογικά Λάθη Παρατηρήσεις: 1.Και οι μεταγλωττιστές και οι διερμηνευτές ανιχνεύουν τα συντακτικά λάθη και εμφανίζουν κατάλληλα μηνύματα. 2.Όταν βρίσκουμε λάθη, πρέπει να τα διορθώσουμε. Το διορθωμένο πρόγραμμα ξαναϋποβάλλεται σε όλο τον κύκλο της μεταγλώττισης και η όλη διαδικασία επαναλαμβάνεται, μέχρι να εξαλειφθούν όλα τα λάθη. Πότε ανιχνεύονται; Τι είναι; Που οφείλονται; οφείλονται σε - αναγραμματισμούς ονομάτων εντολών - παράληψη δήλωσης μεταβλητών Οφείλονται σε λογικά σφάλματα κατά την υλοποίηση του αλγορίθμου Είναι τα πλέον σοβαρά και δύσκολα στη διόρθωσή τους
Μεταγλωττιστές vs. Διερμηνευτές ΚΑΙ Σύγχρονα Προγραμματιστικά Περιβάλλοντα ΜεταγλωττιστέςΔιερμηνευτές Vs. Πολύ πιο γρήγορη εκτέλεση του προγράμματος Για να εκτελεστεί, πρέπει όλο να μεταγλωττιστεί και να συνδεθεί Άμεση εκτέλεση κάθε εντολής και συνεπώς και άμεση διόρθωση Σημαντικά πιο αργή εκτέλεση του προγράμματος Παρατηρήσεις: 1.Στα σύγχρονα προγραμματιστικά περιβάλλοντα παρουσιάζονται συνήθως μεικτές υλοποιήσεις: χρησιμοποιείται διερμηνευτής κατά τη φάση δημιουργίας του προγράμματος χρησιμοποιείται μεταγλωττιστής για την τελική έκδοση και εκμετάλλευση του προγράμματος 2.Για την αρχική σύνταξη των προγραμμάτων και στη συνέχεια τη διόρθωσή τους, χρησιμοποιείται ένα ειδικό πρόγραμμα που λέγεται συντάκτης. Ο συντάκτης είναι ένας επεξεργαστής κειμένου, με δυνατότητες όμως που διευκολύνουν τη γρήγορη γραφή των εντολών των προγραμμάτων. 3.Τα σύγχρονα προγραμματιστικά περιβάλλοντα δεν παρέχουν απλώς έναν μεταφραστή μίας γλώσσας προγραμματισμού, αλλά παρέχουν όλα τα προγράμματα και εργαλεία που απαιτούνται και βοηθούν τη συγγραφή, την εκτέλεση και κυρίως την διόρθωση των προγραμμάτων. Το κάθε προγραμματιστικό περιβάλλον έχει τα δικά του εργαλεία. Πχ. ένα περιβάλλον οπτικού προγραμματισμού, χρειάζεται και ειδικό συντάκτη για δημιουργία γραφικών αντικειμένων.