Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

ΦΡΟΝΤΙΣΤΗΡΙΟ 1-α.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "ΦΡΟΝΤΙΣΤΗΡΙΟ 1-α."— Μεταγράφημα παρουσίασης:

1 ΦΡΟΝΤΙΣΤΗΡΙΟ 1-α

2 ΤΙ ΕΙΝΑΙ Ο ΥΠΟΛΟΓΙΣΤΗΣ Ο όρος είναι συντομογραφία του όρου «Αυτόματος, Ηλεκτρονικός Ψηφιακός Υπολογιστής Γενικού Σκοπού» [1]. Αυτόματος Μετά την έναρξη της λειτουργίας του εργάζεται μόνος του εκτελώντας μια διαδικασία σειράς εντολών που λέγεται πρόγραμμα. Ηλεκτρονικός Είναι κατασκευασμένος απο ηλεκτρονικά στοιχεία (κυρίως ολοκληρωμενα κυκλωματα). Ψηφιακός Επεξεργάζεται διακριτές πληροφορίες που μοντελοποιούνται με τη μορφή δυαδικων ψηφίων. Γενικού σκοπού Μπορεί να δεχθεί και να εκτελέσει διαφορετικά προγράμματα (σειρές εντολών) και να διεκπεραιωσει πολλές διαφορετικές λειτουργίες. [1] Ηλεκτρονικοί Υπολογιστές, Ν. Αλεξανδρίδη Καθηγητή ΕΜΠ.

3 ΤΙ ΔΕΝ ΕΙΝΑΙ Ο ΥΠΟΛΟΓΙΣΤΗΣ
Δεν είναι Ηλεκτρονικός Εγκέφαλος. Δεν είναι αριθμομηχανή. Δεν είναι αυτόνομη λογικά σκεπτόμενη μονάδα. Δεν έχει ανεξάρτητη λειτουργία πέρα από το πρόγραμμα πού έχει ορισθεί να εκτελέσει πιστά. Δεν είναι σε θέση να εκτελέσει λειτουργίες οι οποίες δεν έχουν ορισθεί καί μοντελοποιηθεί με ακρίβεια.

4 ΟΙ Η/Υ ΜΠΟΡΟΥΝ Να επεξεργασθούν τεράστιους όγκους μοντελοποιημένων δεδομένων (data modelling and data representation). Να εκτελέσουν πιστά επαναληπτικές, πολύπλοκες, και μακρές διαδικασίες (algorithms and processes). Να επιλύσουν παραμετρικά, μοντελοποιημένα προβλήματα με υψηλή απόδοση, και αξιοπιστία (performance – time/space, reliability/robustness).

5 ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ Άβακας
Ραβδοι του Napier (Λογαριθμικός Κανόνας) – 1600 Αριθμητική Μηχανή του Pascal – 1642 Μηχανοποίηση του Πολ/σμού Leibnitz – 1694 Υφαντουργική Μηχανή με κάρτες Jacquard Διαφορική Μηχανή Babbage – 1822 Αναλυτική Μηχανή (Μνήμη, ελεγχος ροής, αριθμητική υπολογιστική μονάδα, μονάδες εισόδου/εξόδου Parmalee, Webb, Babbage – 1868 Ηλεκτομηχανική μηχανή με διάτρητα δελτία Hollerith – 1891 Πρώτη αυτόματη υπολογιστική μηχανή ΙΒΜ – 1929 Υπολογιστής με Ηλεκτονόμους από την Bell Telephone Labs Ψηφιακός Η/Υ ENIAC – 1946 UNIVAC – 1951 Υπολογιστές με Μαγνητικό Τύμπανο – 1953 Υπολογιστές με δίσκους 1970’s – micro computers Personal Computers 80’s Super Computers 80’s – 90’s Ubiquitous Computing and Devices – 1990 και μετά

6 ΟΡΓΑΝΩΣΗ ΚΑΙ ΔΟΜΗ ΤΟΥ Η/Υ
Ο Η/Υ είναι μια επαναπρογραμματιζόμενη συσκευή επεξεργασίας πληροφοριών. Ο τυπικός Η/Υ αποτελείται από: Τήν Μονάδα Εισόδου Τήν Κεντρική Μνήμη Τήν Αριθμητική/Λογική Μονάδα Τήν Μονάδα Ελέγχου Τήν Μονάδα Εξόδου

7 Τυπικό Διάγραμμα Οργάνωσης Η/Υ
Μονάδα Εισόδου Μονάδα Εξόδου Κεντρική Μνήμη Μονάδα Ελεγχου Αριθμητική/Λογική Μονάδα

8 ΔΙΑΓΡΑΜΜΑ Η/Υ (Συγκεκριμένο)
Κεντρική Μνήμη Καταχωρητής Διευθύνσεων Μνήμης Ι/Ο Αποκωδικοποιητής Διευθύνσεων Καταχωρητής Λέξεων Α/Λ Μονάδα Μονάδα Ελέγχου Κώδικας Λειτουργίας Διεύθυνση Αποκωδικοποιητής Διευθύνσεων Απαριθμητής Εντολών Συσσωρευτής Καταχωρητής Κυκλώματα Πράξεων

9 ΜΟΝΑΔΑ ΕΙΣΟΔΟΥ Το υποσύστημα το οποίο κωδικοποιεί τις πληροφορίες που προέρχονται από το εξωτερικό περιβάλλον. Πληκτρολόγιο (keyboard) Ευαίσθητες επιφάνειες (smart panels) Συσκευές ανάγνωσης μαγνητικών καρτών (magnetic card readers) Συσκευές ανάγνωσης ήχου και εικόνας (sound and image acquisition) Συσκευές μετρήσεων (sensors) Κ.λ.π.

10 ΚΕΝΤΡΙΚΗ ΜΝΗΜΗ Το υποσύστημα το οποίο είναι υπεύθυνο για την προσωρινή αποθήκευση όλων των πληροφοριών (εντολές καί δεδομένα) που είναι απαραίτητες για την λειτουργία του Η/Υ και την εκτέλεση ενός προγράμματος. Η Κεντρική Μνήμη επικοινωνεί με τις Μονάδες Εισόδου/Εξόδου, την Α/Λ Μονάδα, καί την Μονάδα Ελεγχου. Τα τεχνικά χαρακτηριστικά της Κεντρικής Μνήμης είναι Χωρητικότητα Ταχύτητα Μονιμότητα αποθηκεύσεως

11 ΑΡΙΘΜΗΤΙΚΗ / ΛΟΓΙΚΗ ΜΟΝΑΔΑ
Το υποσύστημα το οποίο είναι υπεύθυνο για τον μετασχηματισμό των κωδικοποιημένων ψηφιακών πληροφοριών. Οι μετασχηματισμοί είναι Αριθμητικές πράξεις (Πρόσθεση, Αφαίρεση, Πολ/σμός, Διαίρεση) Λογικές πράξεις (AND, OR, NOT, XOR) Ολίσθηση (shift)

12 ΜΟΝΑΔΑ ΕΛΕΓΧΟΥ Το υποσύστημα το οποίο είναι υπεύθυνο γιά τον συντονισμό της διαδοχής των πράξεων στην Α/Λ Μονάδα, και των υπολοίπων μονάδων του Η/Υ. Κατά τη διάρκεια εκτέλεσης ενός προγράμματος η Μονάδα Ελέγχου λαμβάνει εντολές (ηλεκτρικά σήματα) και σε καθορισμένες χρονικές στιγμές (περιοδικά) στέλνει σήματα ελέγχου πρός την Κεντρική Μνήμη, την Α/Λ Μονάδα, τις Μονάδες Εισόδου/Εξόδου.

13 ΜΟΝΑΔΑ ΕΞΟΔΟΥ Το υποσύστημα το οποίο απο-κωδικοποιεί τις πληροφορίες που προέρχονται από τον Η/Υ και τις διανέμει πρός το εξωτερικό περιβάλλον. Οθόνη (display) Εκτυπωτή (printer) Συσκευές ήχου (audio) Ηλεκτρομηχανικές συσκευές (actuators) Κ.λ.π.

14 ΔΙΑΓΡΑΜΜΑ Η/Υ (Συγκεκριμένο)
Κεντρική Μνήμη Καταχωρητής Διευθύνσεων Μνήμης Ι/Ο Αποκωδικοποιητής Διευθύνσεων Καταχωρητής Λέξεων Α/Λ Μονάδα Μονάδα Ελέγχου Κώδικας Λειτουργίας Διεύθυνση Αποκωδικοποιητής Διευθύνσεων Απαριθμητής Εντολών Συσσωρευτής Καταχωρητής Κυκλώματα Πράξεων

15 ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ Η/Υ (1) Ο Η/Υ έχει κατασκευασθεί να εκτελεί μια προκαθορισμένη αλληλουχία εντολών (προγράμματα). Υπάρχουν δύο βασικές κατηγορίες προγραμμάτων: Τά προγράμματα που καθορίζουν την εσωτερική λειτουργία του υπολογιστή (Λειτουργικό Σύστημα – Operating System) Τα προγράμματα που ορίζει ο χρήστης (Προγράμματα εφαρμογών, Application Software)

16 ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ Η/Υ (2) Οι αλληλουχίες εντολών (προγράμματα) εκτελούνται σάν μονάδες διαδικασιών (processes) σε συγκεκριμένες περιοχές μνήμης του υπολογιστή. Σε μια αλληλουχία εντολών (δηλαδή μέσα σ΄ένα πρόγραμμα), ή μεταξύ διαφορετικών αλληλουχιών (δηλαδή σε διαφορετικά προγράμματα οι περιπτώσεις διαδοχής εντολών είναι Διαδοχική εκτέλεση (μία εντολή εκτελέιται μετά την άλλη) – Η αλληλουχία Α διατηρεί τον έλεγχο Διακλάδωση – Η αλληλουχία Α μεταφέρει τον έλεγχο στη Β, με, ή χωρίς κάποια συνθήκη) Διακοπή – Η Β αποσπά τον έλεγχο από την Α Δανεισμός ελέγχου – Η Α δανείζει τον έλεγχο στη Β

17 ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ Η/Υ (3) Η εκτέλεση ενός προγράμματος επιτυγχάνεται με τήν επαναληπτική χρησιμοποίηση βασικών διαδικασιών του υπολογιστή. Οι πιο κύριες είναι Ανάκληση απο τη μνήμη της επόμενης εντολής Αποκωδικοποίηση – Ερμηνεία της εντολής Ανάκληση των δεδομένων (όταν αυτό χρειάζεται) Εκτέλεση της λειτουργίας της αποκωδικοποιημένης εντολής σύμφωνα με τον ορισμό αυτής της εντολής Κάθε μία από τις παραπάνω βασικές διαδικασίες εκτελούνται σε σταθερά χρονικά διαστήματα, τα οποία καθορίζονται από ηλεκτρικούς παλμούς (ρολόι) Τα παραπάνω συμβαίνουν σε δύο βασικους κύκλους Κύκλο ανάκλυσης (fetch cycle) Κύκλο εκτέλεσης (execution cycle)

18 ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ Η/Υ (4) Παράδειγμα: ADD 256
Η θέση μνήμης στή παραπάνω εντολή ορίζεται να είναι 256. Η διεύθυνση αυτή μεταφέρεται στόν καταχωρητή διευθύνσεων μνήμης Ο καταχωρητής διευθύνσεων μνήμης καθορίζει την θέση μνήμης 256 καί το περιεχόμενό της (π.χ. Τον αριθμό 15) Το περιεχόμενο της θέσης μνήμης με διεύθυνση 256 το οποίο είναι 15, τοποθετείται στον καταχωρητή λέξεων Επειδή το περιεχόμενο αντιπροσωπεύει δεδομένο μεταφέρεται στόν καταχωρητή της Α/Λ μονάδας Η μονάδα ελέγχου εκπέμπει τα κατάλληλα ηλεκτρικά σήματα ελέγχου για νά επιτύχει την πρόσθεση του περιεχομένου του καταχωρητου Α/Λ και του περιεχομένου του συσσωρευτού Α/Λ με την βοήθεια των κυκλωμάτων πράξεων της Α/Λ Το αποτέλεσμα μεταφέρεται στον συσσωρευτή της Α/Λ αντικαθιστώντας το προηγούμενο περιεχόμενο του συσσωρευτή

19 ΠΡΟΓΡΑΜΜΑΤΑ / ΣΥΜΒΟΛΟΜΕΤΑΦΡΑΣΗ
Όπως είπαμε, ένα πρόγραμμα δεν είναι τίποτε παραπάνω από μία ακολουθία εντολών πού μπορούν να εκτελεσθούν από τα ηλεκτρονικά κυκλώματα του Η/Υ Όμως το τι μπορεί να εκτελεσθεί από τα ηλεκτρονικά κυκλώματα του Η/Υ και το τι μπορεί εύκολα ένας άνθρωπος να προγραμματίσει είναι τελείως διαφορέτικα. Ο Η/Υ εκτελεί βασικές λειτουργίες στά κυκλώματά του ( π.χ. S=C+D) – Γλωσσα Μηχανής (Machine Language) Ο προγραμματιστής όμως θέλει να ορίζει λειτουργίες σε πιο υψηλό επίπεδο χρησιμοποιώντας μια πιο φυσική γλώσσα που να θυμιζει π.χ. Αγγλικά – Ανώτερη Γλωσσα Προγραμματισμού (High Level Language) ή Πηγαία Γλώσσα (Source Code) Κάπου λοιπόν αυτές οι δυο απαιτήσεις πρέπει να συναντηθούν – Συμβολική Γλώσσα (Assembly Language) Χρειαζόμαστε λοιπόν καποιούς μεταφραστές από τη μία γλώσσα στην αλλή – Συμβολομεταφραστες (assembler) και μεταγλωτιστές (compiler)

20 Γενικά Περί Γλωσσών Συντακτικό και Ερμηνεία Γλώσσα Μηχανής
Συντακτικό ορίζει τους γραμματικούς κανόνες για μία σωστά δομημένη πρόταση Ερμηνεία ορίζει την σημασία της πρότασης Γλώσσα Μηχανής Είναι σε δυαδική μορφή και κά9ε λέξη έχει τη δομη (πρόσημο) – αριθμός Συμβολική Γλώσσα Είναι σε συμβολική μορφή και κάθε εντολή έχει τη δομή εντολή - διεύθυνση Γλωσσα Προγραμματισμού Ανωτέρου Επιπέδου – Πηγαία Γλώσσα Είναι σε συμβολική μορφή και καθε εντολή μοιάζει με Αγγλικά (στις περισσότερες γλώσσες προγραμματισμού)

21 ΚΥΚΛΟΣ ΜΕΤΑΦΡΑΣΕΩΝ Πηγάιο Πρόγραμμα Μετάφραση Πρόγραμμα σε
Συβολική Γλώσσα Optimization Linking Εννοποιημένη Συμβολική Γλώσσα Optimized Συμβολίκή Γλώσσα Συμβολομετάφραση Η/Υ Γλώσσα Μηχανής Φόρτωση

22 Ανασκόπηση Γενικά Ιστορικά στοιχεία περί της εξέλιξης των Η/Υ.
Γενική δομή και λειτουργία των Η/Υ. Γενικές αρχές γιά τις Γλώσσες Προγραμματισμού. Εισαγωγικές έννοιες γιά τη μετάφραση και συμβολομετάφραση προγραμμάτων.

23 ΠΡΟΓΡΑΜΜΑΤΑ / ΣΥΜΒΟΛΟΜΕΤΑΦΡΑΣΗ
Όπως είπαμε, ένα πρόγραμμα δεν είναι τίποτε παραπάνω από μία ακολουθία εντολών πού μπορούν να εκτελεσθούν από τα ηλεκτρονικά κυκλώματα του Η/Υ Όμως το τι μπορεί να εκτελεσθεί από τα ηλεκτρονικά κυκλώματα του Η/Υ και το τι μπορεί εύκολα ένας άνθρωπος να προγραμματίσει είναι τελείως διαφορέτικα. Ο Η/Υ εκτελεί βασικές λειτουργίες στά κυκλώματά του ( π.χ. S=C+D) – Γλωσσα Μηχανής (Machine Language) Ο προγραμματιστής όμως θέλει να ορίζει λειτουργίες σε πιο υψηλό επίπεδο χρησιμοποιώντας μια πιο φυσική γλώσσα που να θυμιζει π.χ. Αγγλικά – Ανώτερη Γλωσσα Προγραμματισμού (High Level Language) ή Πηγαία Γλώσσα (Source Code) Κάπου λοιπόν αυτές οι δυο απαιτήσεις πρέπει να συναντηθούν – Συμβολική Γλώσσα (Assembly Language) Χρειαζόμαστε λοιπόν καποιούς μεταφραστές από τη μία γλώσσα στην αλλή – Συμβολομεταφραστες (assembler) και μεταγλωτιστές (compiler)

24 Γενικά Περί Γλωσσών Συντακτικό και Ερμηνεία Γλώσσα Μηχανής
Συντακτικό ορίζει τους γραμματικούς κανόνες για μία σωστά δομημένη πρόταση Ερμηνεία ορίζει την σημασία της πρότασης Γλώσσα Μηχανής Είναι σε δυαδική μορφή και κά9ε λέξη έχει τη δομη (πρόσημο) – αριθμός Συμβολική Γλώσσα Είναι σε συμβολική μορφή και κάθε εντολή έχει τη δομή εντολή - διεύθυνση Γλωσσα Προγραμματισμού Ανωτέρου Επιπέδου – Πηγαία Γλώσσα Είναι σε συμβολική μορφή και καθε εντολή μοιάζει με Αγγλικά (στις περισσότερες γλώσσες προγραμματισμού)

25 ΚΥΚΛΟΣ ΜΕΤΑΦΡΑΣΕΩΝ Μετάφραση/ Compilation Πηγάιο Πρόγραμμα
Πρόγραμμα σε Συβολική Γλώσσα Βελτιστοποίηση/ Optimization Ενοποίηση/ Linking Εννοποιημένη Συμβολική Γλώσσα Βελτιστοποιημένη Συμβολίκή Γλώσσα Συμβολομετάφραση/ Assembler Η/Υ Γλώσσα Μηχανής Φόρτωση/ Loading

26 Η ΕΠΙΛΥΣΗ ΕΝΟΣ ΠΡΟΒΛΗΜΑΤΟΣ
Η επίλυση ενός προβλήματος (problem solving) ορίζεται σαν το σύνολο των βημάτων που χρειάζονται για την ανάλυση, μοντελοποίηση, σχεδίαση, καί υλοποίηση μίας κατάλληλης λύσης του προβλήματος. Δύο βασικές μεθοδολογίες επίλυσης προβλημάτων (περισσότερα σε λίγο) Αναλυτική (Top Down) Συνθετική (Bottom Up)

27 ΑΝΑΛΥΤΙΚΗ ΜΕΘΟΔΟΛΟΓΙΑ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ
Η Αναλυτική Μεθοδολογία για την επίλυση ενός προβλήματος (top down problem solving) βσίζεται στην εξής ιδέα: Γιά να λύσω κάποιο σύνθετο πρόβλημα πρέπει: να ορίσω τα επι μέρους υπο-προβλήματα του (sub goals). να επιλύσω κάθε ένα από αυτά χρησιμοποιώντας την αναλυτική μεθοδολογία. Εάν δεν υπάρχουν άλλα υπο-προβλήματα, τότε προχωρώ στήν άμεση επίλυσή του. Όταν επιλύσω όλα τα υπο-προβλήματα τότε έχω επιλύσει και το αρχικό σύνθετο πρόβλημα.

28 ΠΑΡΑΔΕΙΓΜΑ ΑΝΑΛΥΤΙΚΗΣ ΜΕΘΟΔΟΛΟΓΙΑΣ
Σύνθετο Πρόβλημα Υπο- Πρόβλημα 1 Υπο- Πρόβλημα 2 Υπο- Πρόβλημα 3 Υπο- Πρόβλημα 1-1 Υπο- Πρόβλημα 1-2 Υπο- Πρόβλημα 2-1 Υπο- Πρόβλημα 3-1 Υπο- Πρόβλημα 3-2

29 ΣΥΝΘΕΤΙΚΗ ΜΕΘΟΔΟΛΟΓΙΑ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ
Η Συνθετική Μεθοδολογία για την επίλυση ενός προβλήματος (bottom up problem solving) βσίζεται στην εξής ιδέα: Η λύση ενός προβλήματος επιτυγχάνεται απο τη σύνθεση στοιχείων και δεδομένων: Αρχίζουμε απο αξιώματα τα οποία θεωρούμε ορθά, ή από δεδομένα που μπορούν να αποδειχθούν. Χρησιμοποιούμε θεωρήματα, και μια λογική διαδικασία ώστε να παράγουμε νέα δεδομένα και αποτελέσματα Όταν το ζητούμενο πρόβλημα μπορεί να αποδειχθεί τότε η διαδικασία τερματίζει

30 ΠΑΡΑΔΕΙΓΜΑ ΣΥΝΘΕΤΙΚΗΣ ΜΕΘΟΔΟΛΟΓΙΑΣ
Σύνθετο Πρόβλημα Αποτέλεσμα 1 Αποτέλεσμα 2 Αποτέλεσμα 3 Δεδομένα 1-1 Δεδομένα 1-2 Δεδομένα 2-1 Δεδομένα 3-1 Δεδομένα 3-2

31 ΜΕΙΚΤΗ ΜΕΘΟΔΟΛΟΓΙΑ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ
Η Μεικτή Μεθοδολογια (mixed problem solving methodology) είναι μία μίξη από αναλυτική και συνθετική μορφή. Συγκεκριμένα, κάποια απο τα υπο-προβλήματα/προβλήματα επιλύονται αναλύτικα, και κάποια συνθετικά.

32 Η ΕΠΙΛΥΣΗ ΕΝΟΣ ΠΡΟΒΛΗΜΑΤΟΣ
Η επίλυση ενός προβλήματος εμπεριέχει τα παρακάτω βήματα: Ορισμός του προβλήματος Σχεδίαση, ενός αλγόριθμου ο οποίος μπορεί να επιλύσει το πρόβλημα, με ταχύτητα και αποδοτικότητα Υλοποίηση του αλγόριθμου σε μία κατάλληλη γλώσσα προγραμματισμου

33 ΤΙ ΕΙΝΑΙ ΟΜΩΣ ΕΝΑΣ ΑΛΓΟΡΙΘΜΟΣ;
Αλγόριθμος (Algorithm) είναι μία ακολυθία οδηγιών (εντολών) οι οποίες επιλύουν ένα συγκεκριμένο πρόβλημα Μπορούμε να έχουμε πολλούς διαφορετικούς αλγόριθμους για την επίλυση ενός προβλήματος Η επιλογή του πιό κατάλληλου αλγόριθμου μπορεί να γίνει με βάση τήν πολυπλοκότητα του (time complexity), την χρήση της μνήμης που απαιτεί (space complexity), τήν δυνατότητα παραμετροποίησής του (parameterization), την αξιοπιστία του (reliability), την δυνατότητα συνέχισης της λειτουργίας του σε ακραίες συνθήκες (robustness) κλπ. Ένας αλγόριθμος έχει ένα ή περισσότερα σημεία εισόδου (πρώτη εντόλή να εκτελεσθεί στην ακολουθία – συνήθως όμως έχει ένα σημείο εισόδου), και εμπεριέχει καποιές συνθήκες που εγκυόνται την λήξη της λειτουργίας του (τελευταία εντολή)

34 Σχηματική Παρουσίαση της Διαδικασίας Προγραμματισμού
Μεταφραστής και Συμβολομεταφραστής/ Compiler/Assembler/Linker Γνώση της περιοχής Του Προβλήματος/ Domain Knowledge Δεδομένα/Data Προγραμμα- τιστής Προγραμμα- τιστής Η/Υ Η/Υ Γλώσσα Μηχανής Ορισμός του Προβλήματος/ Problem Definition Αλγόριθμος/ Algorithm Πηγαίο πρόγραμμα (Source Code) σε κάποια Γλώσσα Προγραμματισμού π.χ. C Αποτέλεσμα/ Result

35 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Προγραμματισμός δεν είναι μόνο η υλοποίηση ενός αλγόριθμου σε μία κατάλληλη για το πρόβλημα γλώσσα (C, C++, Java, Pascal, Fortran, Cobol κλπ.) Ο Προγραμματισμός εμπεριέχει: 1. Την ανάλυση των απαιτήσεων του προβλήματος α. Λειτουργικές απαιτήσεις (functional requirements analysis) β. Μη-λειτουργικές απαιτήσεις (non-functional requirements analysis) Επιλυση Προβλήματος 2. Τη σχεδίαση τού προγράμματος (θεωρούμε ότι ήδη έχουμε κάνει την επιλογή – σχεδίαση του κατάλληλου αλγόριθμου όπως είπαμε στη διαφάνεια σχετικά με την επίλυση ενος προβλήματος (design specifications) 3. Την υλοποίηση του προγράμματος σε μία κατάλληλη γλώσσα γιά το πρόβλημα (implementation) 4. Τον έλεγχο του προγράμματος ώστε να πιστοποιηθεί η ορθή λειτουργία του σε σχέση με τις λειτουργικές και μη-λειτουργικες απαιτήσεις (testing) 5. Τη συντήρηση του για την διόρθωση λαθών, προσθήκη νέων λειτουργιών, και την προσαρμογή του σε άλλα συστήματα (maintenance)

36 ΑΣ ΑΡΧΙΣΟΥΜΕ ΑΠΛΑ (Με Γλώσσα Μηχανής !!!)
Ας θεωρήσουμε ένα απλό πρόγραμμα: Φόρτωσε τη θέση μνήμης 6000 (σε κάποιο καταχωρητή π.χ. Α) Αφαίρεσε 50 από τον καταχωρητή και φόρτωσε το αποτέλεσμα πάλι στον καταχωρητή Α Εάν το αποτέλεσμα είναι θετικό συνέχισε τη λειτουργία του προγράμματος από την εντολή που βρίσκεται στη θέση μνήμης 11200

37 ΓΛΩΣΣΑ ΜΗΧΑΝΗΣ Τα προγράμματα είναι ακολουθίες από ψηφία 0 και 1 (για απλούστευση ας πούμε δεκαδικά ψηφία για το παράδειγμά μας) Ο κώδικας μηχανής για τον επεξεργαστή είναι: 161 6000 46 50 127 11200

38 ΣΥΜΒΟΛΙΚΗ ΓΛΩΣΣΑ Είναι πολύ δύσκολο να γράψουμε προγράμματα σε γλώσσα μηχανής. Η συμβολική γλώσσα είναι ένα βήμα ώστε να μπορούμε να υλοποιήσουμε αλγόριθμους πιό εύκολα. Η συμβολική γλώσσα αντικαθιστά τους αριθμούς που παρουσιάζουν εντολές με συμβολικά ονόματα γιά εύκολη χρήση Η μετάφραση από τη γλώσσα μηχανής στη συμβολική γλώσσα γίνεται αυτόματα με τη βοήθεια του συμβολομεταφραστή (assembler) Το απλό μας πρόγραμμα σε συμβολική γλώσσα είναι: MOV A, [6000] SUB A, 50 JG 11200

39 ΟΜΩΣ ΤΙ ΚΑΝΕΙ ΑΥΤΟ ΤΟ ΠΡΟΓΡΑΜΜΑ;
Ας υποθέσουμε ότι η θέση μνήμης 6000 αποθηκεύει το τελικό βαθμό ενός φοιτητή Εάν ο βαθμός είναι μεγαλύτερος του 50 τότε υπάρχει λάθος Το πρόγραμμα ελέγχει εάν ο βαθμός είναι μεγαλύτερος του 50, και εάν είναι τότε συνεχίζει τη λειτουργία του από την εντολή στη θέση μνήμης που υποθέτουμε ότι κάνει κάτι χρήσιμο γιά να διορθώσει αυτό το λάθος

40 ΕΠΕΚΤΑΣΗ ΤΗΣ ΣΥΜΒΟΛΙΚΗΣ ΓΛΩΣΣΑΣ
Γιά να βοηθηθει ο προγραμματιστής μπορούμε να δώσουμε συμβολικά ονόματα (mnemonic names) στις θέσεις μνήμης. Οπότε το πρόγραμμα γίνεται: MOV A, [FinalMark] SUB A, 50 JG HandleFinalMarkError Όμως καί με αυτή την επέκταση ο προγραμματισμός είναι ακόμη δύσκολος

41 ΓΛΩΣΣΑ ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (C)
if (FinalMark > 50) goto HandleFinalMarkError

42 ΚΑΤΗΓΟΡΙΟΠΟΙΗΣΗ ΓΛΩΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
Οι διάφορες γλώσσες προγραμματισμου κατηγοριοποιούνται με τα παρακάτω κριτήρια: Επίπεδο (Level of Abstraction) Προγραμματικό ιδίωμα (Programmatic paradigm) Προγραμματική δομή (Programmatic structure) Χαρακτηριστικά του τύπου τών μεταβλητών (programmatic variable types)

43 ΕΠΙΠΕΔΑ ΓΛΩΣΣΩΝ Γλώσσες υψηλού επιπέδου (C, Fortran, Cobol, Pascal, Ada, Java …) Συμβολικές Γλώσσες (8086, P3, Motorola 6000…) – Ουσιαστικά είναι γλώσσες μηχανής γιά το συγκεκριμένο επεξεργαστή αλλά σε συμβολική μορφή Γλώσσες Μηχανής – Ακολουθίες απο ψηφία 0 και 1 Ενδιάμεσες Γλώσσες – Ουσιαστικά είναι γλώσσες υψηλού επιπέδου που επιτρέπουν και εντολές από γλώσσες χαμηλότερου επιπέδου (C, Modula-2 κλπ.)

44 ΠΟΓΡΑΜΜΑΤΙΚΟ ΙΔΙΩΜΑ Διαδικαστικού Προγραμματισμού (imperative/algorithmic/procedure oriented) – Είναι δομημένες γύρω από διαδικασίες – procedures Λειτουργικού Προγραμματισμού (functional languages) – Οι διαδικασίες θεωρούνται και αυτές δεδομένα Οντοκεντρικού Προγραματισμού (object oriented languages) – Το κύριο σημείο είναι τά δεδομένα τα οποία εμπεριέχουν (encapsulate) διαδικασίες με τη μορφή μεθόδων (methods) Λογικού Προγραμματισμού (logic programming languages) – Το πρόγραμμα είναι ουσιαστικά η περιγραφή του προβλήματος, και η χρήση του αλγόριθμου δέν είναι σημαντική

45 ΠΡΟΓΡΑΜΜΑΤΙΚΗ ΔΟΜΗ Γλώσσες δομημένες σε Blocks – (Algol, Pascal, Modula-2, Ada …). Κάθε μία προγραμματική ενότητα είναι δομημένη σε blocks. Δομημένες γλώσσες – (C, C++, Java..). Το πρόγραμμα είναι δομημένο σε ενότητες αλλά δεν υπάρχει άμεσος διαχωρισμός σε blocks Μή δομημένες γλώσσες – (Assembly, Lisp, Prolog…). Ένα πρόγραμμα σ’αυτές τις γλώσσες δεν είναι χωρισμένο σε ενότητες

46 ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΥΠΟΥ ΜΕΤΑΒΛΗΤΩΝ
Γλώσσες Ισχυρού Τύπου (Strongly Typed) – Algol, Pascal, C++, Java. Οι μεταβλητές πρέπει να έχουν συγκεκριμένο τύπο. Επείσης, αριθμητικές καί άλλες πράξεις και λειτουργείες μεταξύ των μεταβλητών συγκεκριμένων τύπων, παράγουν αποτελέσματα συγλεκριμένου τύπου. Γλώσσες Περιορισμένου Τύπου (Weakly Typed) – C. Οπως και του ισχυρού τύπου, αλλά η γλώσσα δίνει τη δυνατότητα οι τύποι των μεταβλητών να αλλάξουν καθώς το πρόγραμμα τρέχει. Γλώσσες χωρίς Τύπο (Untyped) – LISP. Οι μεταβλητές δέν εχουν τύπο.

47 ΠΡΟΓΡΑΜΜΑΤΑ ΚΑΙ ΒΙΒΛΙΟΘΗΚΕΣ
Μία τυπική εφαρμογή αποτελείται: Από το πηγαίο κώδικα που κατά το πλήστον (ή καθ’ ολοκληρία) υλοποιεί ένα αλγόριθμό της λύσης του προβλήματος Από κώδικα που υποσηρίζει γενικές λειτουργιές που ίσως χρειάζεται ο πηγαίος κώδικας (π.χ. Εκτύπωση, τριγωνομετρικές συναρτήσεις κλπ.) Αυτός ο κώδικας υποστήριξης ονομάζεται βιβλιοθήκη (library) Οι βιβλιοθήκες που χρειάζονται και ο πηγαίος κώδικας μεταφράζονται (compiled) και ενοποιούνται (linked) σε ένα συμβολικό πρόγραμμα, το οποίο με τη σειρά του συμβολομεταφράζεται σε γλώσσα μηχανής Υπάρχουν ευτυχώς πολλές βιβλιοθήκες για διάφορες λειτουργίες, οπότε δεν χρειάζεται να υλοποιήσουμε κώδικα γι’αυτές τις λειτουργίες. Όποτε τις χρειαζόμαστε, απλά τις εισάγουμε (include) στο πηγαίο κώδικά μας.

48 ΣΧΗΜΑΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ LIB 1 LIB 2 LIB 3 Include ΠΗΓΑΙΟΣ ΚΩΔΙΚΑΣ
ΕΦΑΡΜΟΓΗΣ ΓΛΩΣΣΑ ΜΗΧΑΝΗΣ Μετάφραση & Συμβολομεταφραση

49 ΠΑΡΑΔΕΙΓΜΑ Ένα απλό πρόγραμμα της C: #include <stdio.h>
void main() { printf(“Hello World.\n”); } Εντολή εισαγωγής βιβλιοθήκης για χρήση συναρτήσεων είσοδου/έξοδου Εντολή Προ-επεξεργασίας Βιβλιοθήκη Η αρχική συνάρτηση main Τύπος Επιστροφής της main Η συνάρτηση βιβλιοθήκης printf που έχει ορισθεί στη βιβλιοθήκη stdio και επιτρέπει την εκτύπωση στην οθόνη (standard output)

50 AKOMH ENA ΠΑΡΑΔΕΙΓΜΑ Κι’άλλο ένα απλό πρόγραμμα της C:
#include <stdio.h> int main() { printf(“Hello World.\n”); return(1); }

51 ΜΕΤΑΦΡΑΣΗ ΚΑΙ ΕΝΟΠΟΙΗΣΗ ΜΕ ΤΗ ΠΑΡΟΥΣΙΑ ΒΙΒΛΙΟΘΗΚΗΣ
Για να μεταφράσουμε πηγάιο κώδικα της C σε Γλώσσα Μηχανής υπό τη παρουσία βιβλιοθηκών ο compiler εκτελεί τα παρακάτω βήματα. Προ-επεξεργασία: Το πηγαίο πρόγραμμα πρώτα πηγαίνει σε μία εφαρμογή (που έρχεται με τον compiler) και ονομάζεται προ-επεξεργαστής (pre-processor). Ο προ-επεξεργαστής είναι κάτι σαν επεξεργαστής κειμένου (προσθέτει,αφαιρεί, και μεταβάλει το «κείμενο» του πηγαίου προγράμματος (source code). Όλες οι εντολές που είναι να εκτελεσθούν απο τον προ-επεξεργαστή ξεκινούν με το σύμβολο #. Συγκεκριμένα η #include<stdio.h> παίρνει το πηγάιο κώδικα της stdio.h και τον εισάγει στη θέση της εντολής #include<stdio.h> . Ουσιαστικά μετά την προεπεξεργασία δέν υπάρχουν πλέον εντολές που ξεκινούν με #. Μετάφραση και Συμβολομετάφραση. Tα βήματα αυτά παράγουν αντικειμενικό κώδικα – object code (σχεδόν γλώσσα μηχανής) Εννοποίηση (linking). Το βήμα αυτό εννοποιεί αντικειμενικό κώδικα (πιθανόν απο διαφορετικά αρχεία πηγαίου κώδικα) σε ένα εκτελέσιμο αρχείο (π.χ. .exe) σε καθαρή γλώσσα μηχανής.

52 ΓΕΝΙΚΗ ΜΟΡΦΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C
directives main() { statements }

53 ΕΠΙΣΚΟΠΗΣΗ Τι είδαμε μεχρι τώρα: Γενικά περί γλωσσών προγραμματισμού
Μετάφραση / Συμβολομετάφραση / Εννοποίηση (Συννενωση) Επίλυση Προβλημάτων και Μεθοδολογίες Προεπεξεργασία Γενική δομή απλού προγράμματος C


Κατέβασμα ppt "ΦΡΟΝΤΙΣΤΗΡΙΟ 1-α."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google