Ενότητα 2 -...

Post on 28-Jan-2020

2 views 0 download

Transcript of Ενότητα 2 -...

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Ενότητα 2

ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΩΝ ΜΕ ΥΠΟΛΟΓΙΣΤΗ:

Στάδιο 1: Ακριβής Προσδιορισμός του Προβλήματος

Στάδιο 2: Ανάπτυξη του Αντίστοιχου Αλγόριθμου

Στάδιο 3: Διατύπωση του αλγόριθμου με μορφή που μπορεί να γίνει

κατανοητή από τον υπολογιστή

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΠΡΟΓΡΑΜΜΑ:

Υλοποίηση Αλγορίθμου

+ Δεδομένα

+ Δομές Δεδομένων

Ο προγραμματισμός είναι αυτός που δίνει την ψευδαίσθηση ότι ο

υπολογιστής είναι ευφυής. Στην πραγματικότητα ακολουθεί πιστά τις

εντολές που ο άνθρωπος-προγραμματιστής έχει δώσει.

Οι βασικές αρχές λειτουργίας των υπολογιστών δεν έχουν αλλάξει πρακτικά

καθόλου από το 1945 που τις διατύπωσε ο Φον Νόυμαν.

Έτσι και οι γλώσσες προγραμματισμού, αν και εξελίσσονται συνεχώς και

εμπλουτίζονται με νέες ιδιότητες, τα χαρακτηριστικά τους και οι βασικές

ιδιότητες παραμένουν ίδια μέσα στο χρόνο

Γλώσσες μηχανής

Γλώσσα μηχανής ονομάζουμε τη γλώσσα προγραμματισμού που

μπορεί άμεσα να γίνει κατανοητή από τον υπολογιστή και ουσιαστικά

πρόκειται για ακολουθίες από 0 και 1, τα μόνα σύμβολα που μπορεί

να αντιληφθεί ο υπολογιστής.

Οι γλώσσες μηχανής απαιτούν απόλυτη γνώση του υλικού και της

αρχιτεκτονικής του υπολογιστή και ελάχιστοι μπορούσαν να

προγραμματίσουν με αυτό τον τρόπο, η δε διαδικασία ήταν ιδιαίτερα

επίπονη.

Οι πρώτοι υπολογιστές όπως ο ENIAC ουσιαστικά

προγραμματίζονταν με καλωδιώσεις και διακόπτες που έπρεπε να

ρυθμιστούν διαφορετικά για κάθε πρόγραμμα

Συμβολικές Γλώσσες ή γλώσσες χαμηλού επιπέδου

Αποτελούν ένα βήμα εξέλιξης από τις γλώσσες μηχανής. Υποστηρίζουν ένα

μικρό σύνολο από απλές εντολές (π.χ. ADD) που είναι πιο εύκολα κατανοητές

και χρησιμοποιήσιμες από τον άνθρωπο

Συμβολική Γλώσσα Συμβολομεταφραστής

Assembler Γλώσσα μηχανής

Οι συμβολικές γλώσσες έχουν 2 σοβαρά μειονεκτήματα:

- Είναι «δεμένες» με έναν συγκεκριμένο υπολογιστή και προγράμματα δε μπορούν

να μεταφερθούν αυτούσια σε διαφορετικό υπολογιστή

- Υποστηρίζουν λίγες και βασικές εντολές με αποτέλεσμα να προκύπτουν μακροσκελή

προγράμματα.

Γλώσσες Υψηλού Επιπέδου

Δυσκολίες και Μειονεκτήματα των γλωσσών μηχανής και των συμβολικών γλωσσών

Προσπάθειες για πιο «φιλική»

επικοινωνία ανθρώπου - μηχανής

Γλώσσες Υψηλού Επιπέδου

Γλώσσες Υψηλού Επιπέδου

Γλώσσα Υψηλού Επιπέδου

Μεταγλωττιστής Compiler

Γλώσσα μηχανής H/Y 1

Μεταγλωττιστής Compiler

Γλώσσα μηχανής H/Y 2

Γράφοντας ένα πρόγραμμα σε μια γλώσσα υψηλού επιπέδου μπορεί να

μεταφερθεί σε διαφορετικούς υπολογιστές. Αρκεί να περάσει από τον compiler

κάθε συγκεκριμένου υπολογιστή. Στην πραγματικότητα ακόμα και στα

προγράμματα γλωσσών υψηλού επιπέδου οι μικρο-αλλαγές είναι αναπόφευκτες

καθώς κάθε υλοποίηση compiler μπορεί να διαφέρει σε κάποια σημεία.

Fortran

•1957: H IBM αναπτύσσει την 1η γλώσσα προγραμματισμού υψηλού

επιπέδου και την ονομάζει FORTAN (FORmula TRANslation)

•Η FORTAN προορίζονταν για την επίλυση επιστημονικών και μαθηματικών

προβλημάτων με χρήση υπολογιστή.

•Μέσα στο χρόνο εξελίχθηκε και επεκτάθηκε. Ακόμη και σήμερα

χρησιμοποιείται σε επιστημονικές εφαρμογές λόγω του πλήθους σχετικών

βιβλιοθηκών που υπάρχουν.

COBOL

Οι αδυναμίες της FORTRAN να καλύψει όλο το φάσμα των

απαιτούμενων προγραμμάτων (π.χ. Εμπορικές εφαρμογές) οδήγησαν

στη δημιουργία νέων γλωσσών υψηλού επιπέδου

1960: COBOL (COmmon Business Oriented Language). Αναπτύχθηκε

κυρίως για να καλύψει εμπορικές εφαρμογές και γενικά εφαρμογές

διαχείρισης. Γνώρισε τεράστια διάδοση και υπάρχουν ακόμη και σήμερα

πολλές εφαρμογές που λειτουργούν και έχουν γραφτεί σε αυτή τη

γλώσσα.

Ξεχώριζε για την καλή υποστήριξη αρχείων σειριακής και τυχαίας

προσπέλασης.

ALGOL: αναπτύχθηκε από Ευρωπαίους επιστήμονες το 1960 με σκοπό να

καλύψει κάθε είδος εφαρμογών. Δε γνώρισε ιδιαίτερη επιτυχία αλλά επηρέασε

σημαντικά μεταγενέστερες γλώσσες

PL1: Αναπτύχθηκε στα μέσα της δεκαετίας ’60 ως γλώσσα γενικής χρήσης.

Ούτε αυτή γνώρισε επιτυχία

LISP (μέσα του ’60) και PROLOG (Αρχές ’70): Δύο γλώσσες που αναπτύχθηκαν

για εφαρμογές τεχνητής νοημοσύνης και χρησιμοποιούνται ακόμα και σήμερα

(έμπειρα συστήματα, παιχνίδια, επεξεργασία φυσικών γλωσσών κλπ)

ALGOL, PL1, LISP, PROLOG

BASIC: Beginner's All Purpose Symbolic Instruction Code. Αναπτύχθηκε ως μια

εύκολη γλώσσα γενικής χρήσης για εκπαίδευση και εξοικείωση με τον

προγραμματισμό. Προοριζόταν για συγγραφή μικρών και απλών

προγραμμάτων για εκπαιδευτικούς σκοπούς αλλά η διαρκής της εξέλιξη

(Quick Basic, Visual Basic) την καθιέρωσε δα μια από τις πιο διαδομένες

γλώσσες στο χώρο των PCs

PASCAL: Παρουσιάστηκε το 1970 (Wirth) και στηρίχθηκε στην ALGOL. Μια

ισχυρή γενικής χρήσης γλώσσα κατάλληλη για εκπαίδευση και για ανάπτυξη

πολύπλοκων δομημένων προγραμμάτων. Σε αυτή βασίστηκαν ισχυρότερες

γλώσσες όπως η ADA και η MODULE-2

H γλώσσα προγραμματισμού C αναπτύχθηκε στα εργαστήρια της BELL και

είναι μια πολύ ισχυρή γλώσσα προγραμματισμού , με πολλά κοινά

χαρακτηριστικά με τη PASCAL αλλά και με αρκετές δυνατότητες γλώσσας

χαμηλού επιπέδου.

Αναπτύχθηκε αρχικά ως εργαλείο για την κατασκευή του λειτουργικού

συστήματος UNIX.

Εξελίχθηκε στη συνέχεια σε C++ αποκτώντας δυνατότητες

αντικειμενοστραφούς προγραμματισμού.

C

Λειτουργικό Σύστημα

Μια σχετικά πρόσφατη γλώσσα (δεκαετία του 90 - SUN) που έχει αρκετά κοινά στοιχεία με

τη C++ και προσανατολίζεται στην ανάπτυξη εφαρμογών σε περιβάλλον Internet .

Εφαρμογές γραμμένες σε JAVA Μπορούν να εκτελεστούν χωρίς αλλαγές από

διαφορετικούς υπολογιστές καθώς εκτελούνται σε ένα «εικονικό υπολογιστή» (java virtual

machine). Έτσι ουσιαστικά έχουμε το Java Virtual Machine για διάφορα λειτουργικά όπως

τα Windows, το MacOS, το Linux και το πρόγραμμα Java τρέχει απαράλλαχτο σε καθένα

από αυτά.

Η Java είναι σήμερα η κύρια γλώσσα προγραμματισμού Mobile εφαρμογών για Android

JAVA

Πρόγραμμα JAVA JAVA Virtual Machine

Οπτικός Προγραμματισμός (Visual Programming) Προγραμματισμός οδηγούμενος από γεγονότα

(Event Driven Programming)

Γραφικά Περιβάλλοντα

Εργασίας

Οδήγησαν

Οπτικός Προγραμματισμός (Visual Programming): Η δυνατότητα να σχεδιάζουμε το περιβάλλον της εφαρμογής (πχ. Μενού , κουμπιά , πλαίσια εισαγωγής κειμένου) με οπτικά εργαλεία αντί για εντολές και στη συνέχεια να προγραμματίζουμε τη συμπεριφορά κάθε στοιχείου της εφαρμογής. Προγραμματισμός Οδηγούμενος από Γεγονότα (Event Driven): Η δυνατότητα να ενεργοποιούμε τμήματα-λειτουργίες του προγράμματος όταν συμβούν συγκεκριμένα γεγονότα (π.χ. Το πάτημα ενός κουμπιού, η εισαγωγή κειμένου σε ένα πεδίο)

•Φυσικότερος και πιο ανθρώπινος τρόπος έκφρασης των προβλημάτων

•Ανεξαρτησία από τον υπολογιστή που θα εκτελέσει το πρόγραμμα.

Μπορούν με ελάχιστες η καθόλου αλλαγές να λειτουργήσουν σε

οποιονδήποτε υπολογιστή υποστηρίζει την αντίστοιχη γλώσσα

•Ευκολία Εκμάθησης και Εκπαίδευσης

•Ευκολία Διόρθωσης Λαθών και Πραγματοποίησης Αλλαγών –

Συντήρησης Προγραμμάτων

Ελαττώθηκε ο Χρόνος και το Κόστος παραγωγής προγραμμάτων

Πλεονεκτήματα Γλωσσών Υψηλού Επιπέδου

• Διαδικαστικές (Procedural) ή Αλγοριθμικές: Είναι οι περισσότερες: Basic, C, Pascal,

Cobol κλπ και προορίζονται για την υλοποίηση αλγορίθμων

• Μη Διαδικαστικές (Non Procedural): π.χ. PROLOG. Ονομάζονται και γλώσσες πολύ

υψηλού επιπέδου καθώς είναι πιο κοντά από όλες στις ανθρώπινες γλώσσες

• Αντικειμενοστραφείς (Object Oriented): Π.χ. C++, JAVA

• Συναρτησιακές (Functional): π.χ LISP

• Ερωταπαντήσεων (Query Languages): π.χ. SQL - Σχεδιασμένες ώστε να επιτρέπουν

σε χρήστες-μη προγραμματιστές να εκφράζουν σύντομες ερωτήσεις και να παίρνουν

αποτελέσματα-απαντήσεις

Ταξινόμηση με βάση το είδος (φιλοσοφία) της γλώσσας

Γενικής Χρήσης: Κατάλληλες για κάθε εφαρμογή. Στην πράξη όμως κάθε γλώσσα είναι

περισσότερο ή λιγότερο κατάλληλη για το είδος της εφαρμογής

•Επιστημονικής Κατεύθυνσης (π.χ. FORTRAN)

•Εμπορικής Κατεύθυνσης (π.χ. COBOL)

Προγραμματισμού Συστημάτων: Γλώσσες με δυνατότητες χαμηλού επιπέδου

κατάλληλες για εφαρμογές που χρειάζονται αμεσότερη πρόσβαση στο υλικό του

υπολογιστή. Π.χ. C

Τεχνητής Νοημοσύνης: Κατάλληλες για ανάπτυξη εφαρμογών τεχνητής νοημοσύνης

Ειδικής Χρήσης: Χρησιμοποιούνται σε ειδικές εφαρμογές π.χ. Μόνο για

εκπαιδευτικούς σκοπούς όπως η LOGO, σε ρομποτικά συστήματα, Σε Βάσεις

Δεδομένων κ.λ.π.

Ταξινόμηση με βάση το πεδίο χρήσης - εφαρμογών

Όπως και οι φυσικές γλώσσες, έτσι και οι γλώσσες προγραμματισμού υπακούουν

στις βασικές αρχές της γλωσσολογίας

Μια γλώσσα προσδιορίζεται από:

1. Το Αλφάβητο: Το σύνολο των στοιχείων (χαρακτήρων) που χρησιμοποιείται στη

γλώσσα.

2. Το λεξιλόγιο: Αποτελεί από το σύνολο των λέξεων (ακολουθία συμβόλων του

αλφαβήτου) που είναι αποδεκτό στη γλώσσα.

3. Γραμματική:

3.1 Τυπικό: Οι μορφές με τις οποίες μια λέξη είναι αποδεκτή

3.2 Συντακτικό: Οι κανόνες που καθορίζουν πώς μπορούν να συνδεθούν οι

λέξεις μεταξύ του για τη δημιουργία προτάσεων

4. Σημασιολογία: Οι κανόνες που καθορίζουν τη σημασία των λέξεων και κατ’

επέκταση των εκφράσεων που σχηματίζονται από αυτές.

Γλώσσες Προγραμματισμού

Οι φυσικές γλώσσες εξελίσσονται συνεχώς, νέες λέξεις δημιουργούνται ή εισάγονται

από άλλες γλώσσες, άλλες λέξεις σταματάνε να χρησιμοποιούνται κλπ. Το Συντακτικό

και οι κανόνες επίσης αλλάζουν με το χρόνο (π.χ. Μονοτονικό Σύστημα)

Οι τεχνητές γλώσσες παρουσιάζουν σχετική στασιμότητα αφού αναπτύσσονται για να

εξυπηρετήσουν συγκεκριμένους σκοπούς. Πάντως και οι γλώσσες προγραμματισμού

εξελίσσονται (σε μικρότερο βαθμό). Π.χ. Νέες εντολές (λέξεις) μπορούν να

προστεθούν για να εξυπηρετήσουν νέες ανάγκες, να διορθωθούν αδυναμίες ή να

ακολουθήσουν τις εξελίξεις (π.χ. Υποστήριξη Internet).

Οι γλώσσες προγραμματισμού αλλάζουν σε επίπεδο Διαλέκτου (GW Basic-Quick Basic)

ή Επέκτασης (Basic -> Visual Basic).

Διαφορές Φυσικών και Τεχνητών Γλωσσών

Η ιεραρχική σχεδίαση και επίλυση είναι γνωστή και ως “top – to – bottom”, «Από πάνω προς τα

κάτω» καθώς ξεκινά από το συνολικό πρόγραμμα και το αναλύει σε όλο και πιο μικρές και απλές

λειτουργίες που είναι εύκολο να επιλυθούν-υλοποιηθούν.

Τεχνικές Σχεδίασης Προγραμμάτων – Ιεραρχική Σχεδίαση

Πρόγραμμα Φορολογίας

Εισαγωγή Δεδομένων Υπολογισμοί

Εκτύπωση Αποτελεσμάτων

Υπολογισμός Φορολογητέου

Υπολογισμός Προπληρωμένου Φόρου

Υπολογισμός Εισοδήματος

Υπολογισμός Εκπτώσεων

Αφού ένα πρόγραμμα σχεδιαστεί με την ιεραρχική μέθοδο μπορεί στη συνέχεια να

υλοποιηθεί με τη μεθοδολογία της τμηματικής υλοποίησης.

Έχοντας διαιρέσει το πρόβλημα σε μικρότερα (υπο-προβλήματα) κάθε υπο-πρόβλημα

αποτελεί ένα ανεξάρτητο τμήμα (Module) που προγραμματίζεται ξεχωριστά.

Ο τμηματικός προγραμματισμός:

• Διευκολύνει την υλοποίηση του προγράμματος

• Μειώνει τα λάθη

• Κάνει ευκολότερη την παρακολούθηση και συντήρηση του προγράμματος

• Επιτρέπει την πιο εύκολη κατανομή της εργασίας σε ομάδες εργασίας κάθε μια από της

οποίες μπορεί να ασχοληθεί με ένα από τα τμήματα.

Τεχνικές Σχεδίασης Προγραμμάτων – Τμηματικός Προγραμματισμός

Η μεθοδολογία του Δομημένου προγραμματισμού πρωτοεμφανίστηκε στα μέσα του 1960.

Μέχρι τότε τα προγράμματα ήταν ιδιαίτερα μεγάλα και σε μεγάλο βαθμό αδόμητα και

μπερδεμένα με αποτέλεσμα κάποιος να δυσκολεύεται να παρακολουθήσει τη ροή

εκτέλεσής τους.

Κύριος λόγος ήταν η αλόγιστη χρήση μια εντολής, της GOTO, που επέτρεπε την αλλαγή

της ροής ενός προγράμματος.

Ο Δομημένος προγραμματισμός προσπαθεί να καθιερώσει μια κοινή μεθοδολογία

συγγραφής προγραμμάτων με καθαρή ροή που αποφεύγεται η χρήση εντολών GOTO.

Βασικό του χαρακτηριστικό η εκτεταμένη χρήση διαδικασιών και συναρτήσεων

(Procedures και function)

Τεχνικές Σχεδίασης Προγραμμάτων – Δομημένος Προγραμματισμός

Σκοποί του Δομημένου προγραμματισμού:

• Μείωση των λαθών

• Ευκολότερη κατανόηση και συντήρηση των προγραμμάτων

• Καθαρότερη δομή προγραμμάτων

Σύμφωνα με τις αρχές του δομημένου προγραμματισμού, όλα τα προγράμματα

μπορούν να υλοποιηθούν με χρήση τριών και μόνο δομών:

- Ακολουθιακής Δομής

- Δομής Επιλογής

- Δομής Επανάληψης

Τεχνικές Σχεδίασης Προγραμμάτων – Δομημένος Προγραμματισμός

Ο Αντικειμενοστραφής προγραμματισμός παρουσιάστηκε στα τέλη του ’70 και

σήμερα γνωρίζει μεγάλη διάδοση.

Αποτελεί μια μεθοδολογία ανάπτυξης προγραμμάτων που έχει σκοπό να

διευκολύνει:

• Την ανάπτυξη μεγάλων και πολύπλοκων προγραμμάτων

• Την επαναχρησιμοποίηση τμημάτων κώδικα για άλλες εφαρμογές

Εισάγεται η έννοια του Αντικειμένου, μιας οντότητας που περικλείει τόσο τα

δεδομένα όσο και τις λειτουργίες που μπορούν να εκτελεστούν σε αυτά.

Τεχνικές Σχεδίασης Προγραμμάτων – Αντικειμενοστραφής Προγραμματισμός

Τεχνικές Σχεδίασης Προγραμμάτων – Παράλληλος Προγραμματισμός

Πρόγραμμα

Τμήμα 1 Τμήμα 2 Τμήμα 3

CPU 1 CPU 2 CPU 3

O Παράλληλος προγραμματισμός εκμεταλλεύεται την ύπαρξη πολλών επεξεργαστών για να «σπάσει» την εργασία σε επιμέρους εργασίες που μπορούν να εκτελεστούν παράλληλα. Προκύπτουν βέβαια σημαντικά ζητήματα συγχρονισμού και προτεραιότητας τα οποία επιλύονται με κατάλληλες εντολές των γλωσσών που υποστηρίζουν παράλληλο προγραμματισμό.

Περιβάλλοντα Προγραμματισμού

Αρχικό Πρόγραμμα Source Code

Μεταγλωττιστής Compiler

Αντικείμενο Πρόγραμμα Object Code

Συνδέτης Linker

Εκτελέσιμο Πρόγραμμα Executable

Το αρχικό Πρόγραμμα (πηγαίο) μέσω του μεταγλωττιστή μετατρέπεται σε αντικείμενο (Object) πρόγραμμα. Στη συνέχεια με το συνδέτη (Linker) συνδέεται με κάποια άλλα προγράμματα που απαιτούνται για την εκτέλεσή του ή με βιβλιοθήκες (Libraries) της γλώσσας προγραμματισμού και προκύπτει το εκτελέσιμο από τον υπολογιστή πρόγραμμα.

Συντάκτης Editor

Οι σύγχρονες γλώσσες προγραμματισμού περιλαμβάνουν όλα τα παραπάνω ολοκληρωμένα στο ίδιο περιβάλλον (IDE : Integrated Development Environment)

Σφάλματα

Λογικά Σφάλματα

Δύσκολο να ανιχνευτούν. Εμφανίζονται κατά την εκτέλεση του προγράμματος. Είναι σφάλματα στη «λογική» του προγράμματος. Το πρόγραμμα εκτελείται κανονικά αλλά παράγει λανθασμένα αποτελέσματα

Συντακτικά Σφάλματα

Εντοπίζονται κατά τη μεταγλώττιση του προγράμματος και οφείλονται σε λάθος γραμμένες εντολές, λάθη σύνταξης κλπ. Το πρόγραμμα δε μπορεί να εκτελεστεί μέχρι να διορθωθούν.

Περιβάλλοντα Προγραμματισμού

Περιβάλλοντα Προγραμματισμού – Διαφορές Interpreter - Compiler

Εντολή 1

Εντολή 2

Εντολή ν

Αρχικό – Πηγαίο Πρόγραμμα Source Code

Ανάλυση – Έλεγχος Ανίχνευση - Εκτέλεση

Εντολής 1

Ανάλυση – Έλεγχος Ανίχνευση - Εκτέλεση

Εντολής 2

Διερμηνευτής Interpreter

Μεταγλώττιση Φόρτωση Σύνδεση

ΟΛΟΥ του Προγράμματος

Εκτέλεση ολόκληρου του προγράμματος

Μεταγλωττιστής Compiler

Διερμηνευτής – Interpreter

+ Άμεση Εκτέλεση του Προγράμματος - Σημαντική μείωση της ταχύτητας εκτέλεσης

Μεταγλωττιστής - Compiler

- Προηγείται η μεταγλώττιση και σύνδεση του Προγράμματος + Σημαντικά ταχύτερη εκτέλεση του τελικού εκτελέσιμου κώδικα

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

Περιβάλλοντα Προγραμματισμού – Διαφορές Interpreter - Compiler