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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

Δομές Δεδομένων & Αλγόριθμοι

1. ΕΙΣΑΓΩΓΗ-ΓΕΝΙΚΑ ΠΕΡΙ ΑΦΗΡΗΜΕΝΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ

Εισαγωγή στη γλώσσα προγραμματισμού C++

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

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

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

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

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

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

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

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

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

Διαδικασία Ανάπτυξης Λογισμικού

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

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

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

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

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

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

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

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

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Αρχεία Κεφαλίδων ΑΡΧΕΙΑ ΚΕΦΑΛΙΔΩΝ. Γεώργιος Παπαϊωάννου ( )

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Προγραμματισμός Υπολογιστών με C++

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

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

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Δομές Δεδομένων. Ενότητα 3: Ουρές Εισαγωγή-Υλοποίηση ΑΤΔ Ουρά με πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

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

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

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

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

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

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

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

Computing. Νοέμβριος Έκδοση 1.0

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

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

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

Πληροφορική 2. Γλώσσες Προγραμματισμού

Προγραμματισμός Υπολογιστών με C++

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Transcript:

Τύπος Δεδομένων: ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα - Ένας ΑΤΔ είναι ένα μαθηματικό μοντέλο (οντότητα) που ορίζει ένα τύπο δεδομένων. -Η έννοια του ΑΤΔ είναι θεωρητική (αφαιρετική) και έχει σαν σκοπό τον ορισμό -των δεδομένων και -των μεταξύ αυτών πράξεων αγνοώντας τις λεπτομέρειες υλοποίησης του. δομική σχέση στοιχείων ΑΤΔ Βασικός τύπος (boolean, int, float, ) σύνολο (set) γραμμική (linear) (στοίβα, ουρά, λίστα) ιεραρχική (hierarchical) (δένδρο, δυαδικό δένδρο) δίκτυο (network) (γράφημα) Υλοποίηση του ΑΤΔ Απεικόνιση σε κάποια γλώσσα προγραμματισμού του τύπου που ορίζει μια μεταβλητή του ΑΤΔ (typedef <new name>) υποπρογράμματα (συναρτήσεις) για κάθε πράξη του Πλεονεκτήματα του ΑΤΔ Ορισμός της επεξεργασία δεδομένων σε ένα αφηρημένο επίπεδο (τι κάνει) Απόκρυψη πληροφορίας υλοποίησης (πώς το κάνει) Μελλοντικές αλλαγές στην υλοποίηση μπορούν να γίνουν ανεξάρτητα από το υπόλοιπο πρόγραμμα που χρησιμοποιεί τον ΑΤΔ 1

Παράδειγμα: Ο ΑΤΔ Λογικός (Boolean) Δύο είναι οι τιμές του ΑΤΔ Λογικός οι : true και false. Ο τύπος δεδομένων typedef enum _BOOLEAN_ {F=0, T BOOLEAN; Οι βασικές του πράξεις είναι : Καταχώρηση Assign Και AND Η (διεζευκτικό) OR Μη NOT Πιθανά και άλλες (π.χ. XOR, NAND) Οι πράξεις (επικεφαλίδες) BOOLEAN OR BOOLEAN AND BOOLEAN NOT Και οι υλοποιήσεις τους... (BOOLEAN b1, BOOLEAN b2); (BOOLEAN b1, BOOLEAN b2); (BOOLEAN b); BOOLEAN OR (BOOLEAN b1, BOOLEAN b2) { if ((b1==t) (b2==t)) BOOLEAN AND (BOOLEAN b1, BOOLEAN b2) { if ((b1==t) && (b2==t)) BOOLEAN NOT (BOOLEAN b) { if ((b==t)) return F; else Δυσκολία: Προγράμματα που λύνουν «πραγματικά προβλήματα» μπορεί να είναιμεγάλα (χιλιάδες ή εκατομμύρια γραμμές κώδικα). Κανείς δεν καταλαβαίνει ή θυμάται τόσο μεγάλα προγράμματα. Πρόβλημα: Ενότητες στην C Τεχνική Υλοποίησης Αφαιρετικών Τύπων Δεδομένων στην C Πώς ξεπερνάμε τις δυσκολίες; 2

1.Διαχώρισε το πρόβλημα σε μικρότερα καλώς καθορισμένα υπο-προβλήματα 2. Απόκρυψε πληροφορίες υλοποίησης, όπου είναι δυνατόν Τι σημαίνουν; Δύο βασικές ιδέες Διαχωρισμός (ΤΙ κάνει το κάθε τμήμα) Η πρώτη ιδέα απαιτεί να μπορούμε να κολλήσουμε τα κομμάτια στα οποία έχουμε χωρίσει το μεγάλο πρόβλημα. Τα μικρότερα κομμάτια πρέπει να «μπουν μαζί» για να κατασκευάσουμε μεγαλύτερα κομμάτια ή και το τελικό πρόγραμμα. Απόκρυψη υλοποίησης (ΠΩΣ το κάνει) Η δεύτερη ιδέα μας επιτρέπει να ανακάμψουμε από μια ενδεχομένως κακή απόφαση υλοποίησης χωρίς να χρειάζεται να ξεκινήσουμε από την αρχή. Από την άλλη πλευρά μια καλή υλοποίηση μπορεί να ξαναχρησιμοποιηθεί σε άλλα προγράμματα μειώνοντας τον χρόνο και το κόστος. Ομηχανισμός της C για να υλοποιήσουμε τις δύο πολιτικές είναι η Ενότητα(MODULE) Σε φυσικό επίπεδο αποτελείται από δύο αρχεία: Αρχείο Διεπαφής(InterfaceFile.h) Αρχείο Υλοποίησης(ImplementationFile.c) Το αρχείο Διεπαφής διαθέτει την Δημόσια (PUBLIC) πληροφορία, δηλαδήτην πληροφορία που χρειάζεται ο Χρήστης για να χρησιμοποιήσει την λειτουργικότητα. Τοαρχείο Υλοποίησης περιλαμβάνει την ιδιωτική πληροφορία, δηλαδή την υλοποίηση της λειτουργικότητας την οποία «δημοσιεύει» το αρχείο Διεπαφής. Οργάνωση Προγράμματος σε Ενότητες (Πολλαπλά αρχεία) Interface Δημόσια Πληροφορία Header File υλοποιεί Implementation Ιδιωτική Πληροφορία Code File χρησιμοποιεί Πρόγραμμα Χρήστη ή Άλλη Ενότητα (Client/Driver) 3

Τι Είναι μια Ενότητα(Module) Ένα σύνολο δηλώσεων που μπορούν να χρησιμοποιηθούν σε ένα πρόγραμμα. Είναι μια μονάδα οργάνωσης ενός λογισμικού συστήματατος που A) Έχει αυτοτέλεια. Tοποθετούνται μαζί μια συλλογή από οντότητες (δεδομένα και πράξεις-συναρτήσεις) που ορίζουν ένα σύνολο δυνατοτήτων χρήσιμο στο να λύνει κάποια προβλήματα.(encapsulation ενθυλάκωση) B) Διαχωρίζει το Τι από το Πώς. Προσδιορίζει τι δεδομένα ή πράξεις επιτρέπεται να βλέπουν και να χρησιμοποιούν οι εξωτερικοί χρήστες. Πώς δημιουργούμε μια ενότητα Διεπαφή Module.h Ένα αρχείο που περιλαμβάνει όλες τις οντότητες που πρέπει να είναι ορατές: constants, type definitions, variable definitions, and functions (i.e., function prototypes) πουο χρήστης επιτρέπεται να χρησιμοποιήσει (συνάρτηση) ή αλλάξει (μεταβλητή). Υλοποίηση Module.c Ένα αρχείο που περιλαμβάνει όλες τις ιδιωτικές οντότητες: τον κώδικα υλοποίησης των συναρτήσεων και όλες τις σταθερές,μεταβλητές και συναρτήσεις που ο χρήστης της ενότητας δεν επιτρέπεται να έχει άμεση πρόσβαση. Module.h Module.c Δημόσια Πρόσβαση #include "Module.h Υλοποίηση Ιδιωτικές Μεταβλητές client.c #include "Module.h" User program #ifndef CH2_BOOLEAN #define CH2_BOOLEAN Παράδειγμα Boolean Interface file: Boolean.h 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 4

Implementation file: Boolean.c #include <stdio.h> #include "Boolean.h" void kataxorisi (BOOLEAN * const bptr, BOOLEAN bexpr) { *bptr=bexpr; BOOLEAN OR (BOOLEAN b1, BOOLEAN b2) { if ((b1==t) (b2==t)) BOOLEAN AND (BOOLEAN b1, BOOLEAN b2) { if ((b1==t) && (b2==t)) Πώς χρησιμοποιούμε μια ενότητα (Module): Το πρόγραμμα πελάτης (client) του Χρήστη κάνει δήλωση χρήσης μέσω include directive. #include <stdio.h> /* include system file */ /*. Other system inclusions. */ #include Module.h /* include non-system module */ /*. Other modules. */ /*. User Program. */ BOOLEAN NOT (BOOLEAN b) { if ((b==t)) return F; else Παράδειγμα Χρήσης Boolean #include <stdio.h> #include <stdlib.h> #include "Boolean.h" int main( ) { BOOLEAN a=t, b=f, c; // μεταβλητές και αρχικοποίηση kataxorish(&c, OR(a,b)); kataxorish(&c, AND(a,b); a=f; kataxorisi(&a, T); kataxorisi(&c, AND ( OR(a, NOT(b)), OR (NOT(a), b)); Πλεονεκτήματα Ξεχωριστή μεταγλώττιση Ενότητας και Προγράμματος Χρήσης (όχι άμεσα ορατό με την χρήση Dev C++ ή VisualStudio) gcc.exe -c Boolean.c -o ch2_boolean.o gcc.exe -c main.c -o main.o gcc.exe Boolean.o main.o -o "Project1.exe" 5

Κοινό χαρακτηριστικό των ενοτήτων σε όλες τις γλώσσες που υποστηρίζουν αυτό τον μηχανισμό είναι η ξεχωριστή μεταγλώττιση(separate Compilation) Απλά σημαίνει ότι η συλλογή δεδομένων και συναρτήσεων μπορεί να μεταγλωττιστεί αυτόνομα από άλλες και από άλλα προγράμματα που την χρησιμοποιούν. Αλλαγές στο πρόγραμμα του χρήστη ή σε μια από τις συλλογές απαιτεί την μεταγλώττιση ενός μικρού αριθμού ενοτήτων. Αυτό μπορεί να μην είναι σημαντικό για προγράμματα των Χ100 ή Χ1000 γραμμών, αλλά είναι κρίσιμο για προγράμματα Χ1.000.000 Αφαίρεση (Abstraction): Αφαίρεση Διαδικασιών (Procedural Abstraction) Πώς να αντικαταστήσουμε μια(μεγάλη) ακολουθία εντολών (πώςτο κάνει) με ένα Όνομα και μια διεπαφή (τί κάνει). Ενσωματώνεται στις Συναρτήσεις (FUNCTION) με καλά καθορισμένες παραμέτρους και τύπο επιστροφής (return) Απόκρυψη Πληροφορίας(τοπικές μεταβλητές) Αλλαγή Υλοποίησης (Αλλαγές μόνο στο boolean.c) #include <stdio.h> #include "Boolean.h" void kataxorisi (BOOLEAN * const bptr, BOOLEAN bexpr) { *bptr=bexpr; BOOLEAN OR (BOOLEAN b1, BOOLEAN b2) { return (b1 b2); /* πριν if ((b1==t) (b2==t)) */ BOOLEAN AND (BOOLEAN b1, BOOLEAN b2) { return (b1&&b2); BOOLEAN NOT (BOOLEAN b) { return (!b); 6