ύο βασικές ιδέες Ενότητες Απόκρυψη Πληροφορίας, Αφηρηµένοι Τύποι εδοµένων 1) ιαχώρισε το πρόβληµα σεµικρότερα καλώς καθορισµένα υπο-προβλήµατα

Σχετικά έγγραφα
Ενότητες στην C Τεχνική Υλοποίησης Αφαιρετικών Τύπων Δεδομένων στην C

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 1: Εισαγωγικές Έννοιες

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Διάλεξη 22η: Επιπλέον στοιχεία της C

(programming interfaceή/και application programming interface API).

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Εισαγωγή στον Προγραμματισμό

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

ΠΛΗ111. Ανοιξη Μάθηµα 2 ο. Αλγόριθµοι και Αφηρηµένοι Τύποι εδοµένων. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

Ανάπτυξη και Σχεδίαση Λογισμικού

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Αλγόριθμοι Ταξινόμησης Μέρος 1

Κεφάλαιο : Εισαγωγή στην C: (Διαλέξεις 3-4)

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Προγραμματισμό για ΗΜΥ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός ΙΙ Εαρινό εξάμηνο Εργασία 3 Βιβλιοθήκη για λειτουργίες σε γράφους

Κεφάλαιο : Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Δομημένος Προγραμματισμός (ΤΛ1006)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η γλώσσα προγραμματισμού C

Προγραμματισμός I (Θ)

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

ιαφάνειες παρουσίασης #3

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

Ηβασικήσυνάρτηση προγράμματος main()

Μεθόδων Επίλυσης Προβλημάτων

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγή στον Προγραμματισμό

B. Ενσωμάτωση Ιθαγενών Μεθόδων

Αντικειµενοστρεφής Προγραµµατισµός

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο2-Νο3

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Η βασική συνάρτηση προγράμματος main()

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Προεπεξεργαστής C. Προγραμματισμός Ι 1

Ανάπτυξη και Σχεδίαση Λογισμικού

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Διαδικαστικός Προγραμματισμός

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εργαστήριο 4_1 Λεκτική Ανάλυση - Flex Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Η γλώσσα προγραμματισμού C

Περιεχόμενα. Πρόλογος... 17

Tύπος δεδοµένων (data type) µιας µεταβλητής (σε µια γλώσσα προγραµµατισµού) είναι το σύνολο των τιµών που µπορεί να πάρει η µεταβλητή.

double sum(double a, double b) { return(a+b); } double my_avg(double a, double b) { return(sum(a, b)/2.0); }

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι (ΗΥ120)

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

Δομημένος Προγραμματισμός

Εργαστήριο 5. Εντολή if και παραλλαγές: if-else, πολλαπλές if, πολλαπλές if-else. Απλές και σύνθετες εντολές. Εντολή switch.

Προγραμματισμός Ι (ΗΥ120)

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

Συναρτήσεις. Κατασκευαστικά Τεµάχια για τη ηµιουργία Αρθρωτών Προγραµµάτων

Βασικές Αρχές Προγραμματισμού

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Αρχές Προγραμματισμού

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

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

Δομημένος Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

2η Προγραµµατιστική Εργασία

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

Διάλεξη 17: Έλεγχος Λογισμικού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΝ ΕΙΚΤΙΚΑ ΣΧΕ ΙΑ ΛΥΣΕΩΝ - ΥΠΟ ΕΙΞΕΙΣ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

Προγραμματισμός Ι (ΗΥ120)

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Transcript:

Ενότητες Απόκρυψη Πληροφορίας, Αφηρηµένοι Τύποι εδοµένων Modularity, Information Hiding and Abstract Data Types. υσκολία: Προγράµµατα που λύνουν «πραγµατικά προβλήµατα µπορεί να είναι µεγάλα (εκατοµµύρια γραµµές κώδικα) Κανείς δεν καταλαβαίνει ή θυµάται τόσο µεγάλα προγράµµατα. Πρόβληµα: Πώς ξεπερνάµε τιςδυσκολίες; 1) ιαχώρισε το πρόβληµα σεµικρότερα καλώς καθορισµένα υπο-προβλήµατα 2) Κρύψε πληροφορίες υλοποίησης όπου είναι δυνατόν Τι σηµαίνουν; ύο βασικές ιδέες ιαχωρισµός Η πρώτη ιδέα απαιτεί να µπορούµε να κολλήσουµε τα κοµµάτια στα οποία έχουµε χωρίσειτο µεγάλο πρόβληµα. Τα µικρότερα κοµµάτια πρέπει να «µπουν µαζί» για να κατασκευάσουµε µεγαλύτερα ή και το τελικό πρόγραµµα. Απόκρυψη Πληροφορίας Η δεύτερη ιδέα µας επιτρέπει να ανακάµψουµε από µια ενδεχοµένως κακή απόφαση υλοποίησης χωρίς να χρειάζεται να ξεκινήσουµε από την αρχή. Από την άλλη πλευρά µια καλή υλοποίηση µπορεί να ξαναχρησιµοποιηθεί σε άλλα προγράµµατα µειώνοντας τον χρόνο και το κόστος. Τι µηχανισµό έχουµε στηνc γιαναυλοποιήσουµε τις δύο πολιτικές; Την Ενότητα (MODULE) Σε φυσικό επίπεδο αποτελείται από δύο αρχεία: Αρχείο ιεπαφής (Interface File) Αρχείο Υλοποίησης (Implementation File) Το αρχείο ιεπαφής διαθέτει την ηµόσια (PUBLIC) πληροφορία, δηλαδή την πληροφορία που χρειάζεται ο Χρήστης για να χρησιµοποιήσει την λειτουργικότητα. Το αρχείο Υλοποίησης περιλαµβάνει την ιδιωτική πληροφορία, δηλαδή την υλοποίηση της λειτουργικότητας που «διαφηµίζει» το αρχείο ιεπαφής. 1

Interface ηµόσια Πληροφορία Header File Implementation Ιδιωτική Πληροφορία Code File Πρόγραµµα Χρήστη ή Άλλη Ενότητα Τι Είναι µια Ενότητα (Module) Ένα σύνολο δηλώσεων που µπορούν να χρησιµοποιηθούν σε ένα πρόγραµµα. Είναι µια µονάδα οργάνωσης ενός λογισµικού συστήµατατος που A) Tοποθετεί µαζί µια συλλογή από οντότητες (δεδοµένα και πράξεις-συναρτήσεις) που ορίζουν ένα σύνολο δυνατοτήτων χρήσιµο στο να λύνει κάποια προβλήµατα. B) Ελέγχει τι επιτρέπεται οι εξωτερικοί χρήστες να βλέπουν και να χρησιµοποιούν. Πώς δηµιουργούµε µια ενότητα ModuleInterface.h Ένα αρχείο που περιλαµβάνει όλες τις οντότητες που πρ επει να είναι ορατές: constants, type definitions, variable definitions, and functions (i.e., function prototypes) που ο χρήστης επιτρέπεται να χρησιµοποιήσει (συνάρτηση) ήαλλάξει(µεταβλητή). ModuleImplementation.c Ένα αρχείο που περιλαµβάνει όλες τις ιδιωτικές οντότητες: τον κώδικα υλοποίησης των συναρτήσεων και όλες τις σταθερές, µεταβλητές και συναρτήσεις που ο χρήστης της ενότητας δεν επιτρέπεται να έχει άµεση πρόσβαση. ModuleInterface.h #include "ModuleInterface.h" Implementation Private Information Code File #include "ModuleInterface.h" User program 2

#ifndef CH2_BOOLEAN #define CH2_BOOLEAN Παράδειγµα Boolean (Interface file) typedef enum BOOLEAN {F=0, T BOOLEAN; void kataxorisi (BOOLEAN * const bptr, BOOLEAN bexpr); BOOLEAN OR (BOOLEAN b1, BOOLEAN b2); BOOLEAN AND (BOOLEAN b1, BOOLEAN b2); BOOLEAN NOT (BOOLEAN b); int diabasma (BOOLEAN *bptr); void grapsimo (BOOLEAN b); #endif Boolean (Implementation file) void kataxorisi (BOOLEAN * const bptr, BOOLEAN bexpr) { *bptr=bexpr; BOOLEAN OR (BOOLEAN b1, BOOLEAN b2) { if ((b1==t) (b2==t)) return T; else return F; BOOLEAN AND (BOOLEAN b1, BOOLEAN b2) { if ((b1==t) && (b2==t)) return T; else return F; BOOLEAN NOT (BOOLEAN b) { if ((b==t)) return F; else return T; Πώς χρησιµοποιούµε µια ενότητα (Module): Το πρόγραµµα πελάτης(client) του Χρήστη κάνει αίτηση χρήσης µέσω include directive. /* include system file */ /*. Other system inclusions. */ #include ModuleInterface.h /* include non-system module */ /*. Other modules. */ /*. User Program. */ ΠαράδειγµαΧρήσηςBoolean #include <stdlib.h> int main() { BOOLEAN a=t, b=f, c; // µεταβλητές και αρχικοποίηση printf ("a is initialised to T:"); grapsimo(a); printf("\n"); printf ("b is initialised to F:"); grapsimo(b); printf("\n"); printf ("c is not initialised :"); grapsimo(c); printf("\n\n"); c=or(a,b); printf ("a OR b assigned to c:"); grapsimo(c); printf("\n"); c=and(a,b); printf ("a AND b assigned to c:"); grapsimo(c); printf("\n\n"); a=f; printf ("F is assigned to a:"); grapsimo(a); printf("\n"); kataxorisi(&a, T); printf ("kataxorish T sto a:"); grapsimo(a); printf("\n"); c= AND ( OR(a, NOT(b)), OR (NOT(a), b)); kataxorisi(&c, AND(OR(a, NOT(b)), OR (NOT(a), b))); 3

Πλεονεκτήµατα Ξεχωριστή µεταγλώττιση Ενότητας και Προγράµµατος Χρήσης (όχι άµεσα ορατό µε την χρήση Dev C++ ή VisualStudio) gcc.exe -c ch2_boolean.c -o ch2_boolean.o gcc.exe -c main.c -o main.o gcc.exe ch2_boolean.o main.o -o "Project1.exe" Κοινό χαρακτηριστικό των ενοτήτων σε όλες τις γλώσσες που υποστηρίζουν αυτό τον µηχανισµό είναιη ξεχωριστή µεταγλώττιση (Separate Compilation) Απλά σηµαίνει ότι η συλλογή δεδοµένων και συναρτήσεων µπορεί να µεταγλωττιστεί αυτόνοµααπό άλλες και από άλλα προγράµµατα που την χρησιµοποιούν. Αλλαγές στο πρόγραµµα τουχρήστηή σε µια από τις συλλογές απαιτεί την µεταγλώττιση ενός µικρού αριθµού ενοτήτων. Αυτό µπορεί να είναι σηµαντικό για προγράµµατα των Χ100 ήχ1000 γραµµών, αλλά είναι κρίσιµο γιαπρογράµµατα Χ1.000.000 Αφαίρεση (Abstraction): Αφαίρεση ιαδικασιών (Procedural Abstraction) Πώς να αντικαταστήσουµε µια (µεγάλη) ακολουθία εντολών (πώ το κάνει) µε έναόνοµα καιµια διεπαφή (τί κάνει). Ενσωµατώνεται στις Συναρτήσεις (FUNCTION) µε καλά καθορισµένες παραµέτρους και τύπο επιστροφής (return) Απόκρυψη Πληροφορίας (τοπικές µεταβλητές) Αλλαγή Υλοποίησης (µόνο στο αρχείο υλοποίησης) void kataxorisi (BOOLEAN * const bptr, BOOLEAN bexpr) { *bptr=bexpr; BOOLEAN OR (BOOLEAN b1, BOOLEAN b2) { return (b1 b2); BOOLEAN AND (BOOLEAN b1, BOOLEAN b2) { return (b1&&b2); BOOLEAN NOT (BOOLEAN b) { return (!b); 4

Άλλες σχέσεις.h και.c Types and Specialized Functions: int Types and Specialized Functions: AirportCodes Linked Lists Arrays of Structs Parallel Arrays Main Program 5