Προγραμματιστικές τεχνικές

Σχετικά έγγραφα
Προγραµµατιστικές τεχνικές

Προγραµµατιστικές τεχνικές

Προγραμματιστικές τεχνικές

Προγραµµατιστικές τεχνικές

Εισαγωγή στην πληροφορική

Εισαγωγή στην πληροφορική

Εισαγωγή στην πληροφορική

Εισαγωγή στην πληροφορική

Εισαγωγή στην πληροφορική

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

Εισαγωγή στην πληροφορική

Προγραμματιστικές τεχνικές

Εισαγωγή στην πληροφορική

Προγραµµατιστικές Τεχνικές

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

Εισαγωγή στην πληροφορική

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο. Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

3 ο Εργαστήριο Μεταβλητές, Τελεστές

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματιστικές Τεχνικές

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

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

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

Προγραµµατιστικές Τεχνικές

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

Προγραμματισμός Δομές Δεδομένων

Προγραμματισμός H/Y Ενότητα 6: Δομές (structures) Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

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

Εισαγωγή στην πληροφορική

Προγραμματιστικές Τεχνικές

Εισαγωγή στην πληροφορική

Προγραμματιστικές Τεχνικές

Εισαγωγή στην πληροφορική

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

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

Προγραμματιστικές Τεχνικές

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

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

Προγραµµατιστικές Τεχνικές

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

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Διδάσκων: Παναγιώτης Ανδρέου

Κεφάλαιο V: Δομές και ενώσεις. 5.1 Δομές.

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Δυναμική μνήμη με πίνακες και λίστες

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

ΚΕΦΑΛΑΙΟ 3 ο ΣΥΝΑΡΤΗΣΕΙΣ, ΤΡΙΓΩΝΟΜΕΤΡΙΑ( FUNCTIONS,TRIGONOMETRY)

Εισαγωγή στην πληροφορική

οµές (structures) και Eνώσεις (unions)

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

Βάσεις εδοµένων Βασίλειος Βεσκούκης Κανονικοποίηση σχήµατος Β Σύνοψη

Διάλεξη 19η: Δομές δεδομένων

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

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

Προγραµµατιστικές Τεχνικές

Ενδεικτική περιγραφή μαθήματος

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

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

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

Εισαγωγή στον Προγραμματισμό (με. τη C)

Κλάσεις και Αντικείµενα

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Αντικειμενοστραφής Προγραμματισμός και JavaScript

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 9: Ειδικά θέματα Δομών Δεδομένων

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

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

Βάσεις εδοµένων. Βασίλειος Βεσκούκης, Εµµ. Στεφανάκης ΜΟΝΤΕΛΟΠΟΙΗΣΗ Ε ΟΜΕΝΩΝ, ΚΛΑΣΙΚΑ ΜΟΝΤΕΛΑ Ε ΟΜΕΝΩΝ

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

Θέματα Προγραμματισμού Η/Υ

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Τύποι δεδομένων, τελεστές, μεταβλητές

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

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

Στοιχειώδης προγραμματισμός σε C++

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

Συναρτήσεις Θεωρία Ορισμοί - Παρατηρήσεις

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

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

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

Εισαγωγή στην Πληροφορική

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

Transcript:

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόμων Τοπογράφων Μηχανικών Προγραμματιστικές τεχνικές Βασίλειος Βεσκούκης Δρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Δομές δεδομένων στη C++ Εισαγωγή στις κλάσεις Δομές δεδομένων Μέχρι σήμερα, μοναδικός μηχανισμός αποθήκευσης πληροφοριών σε ένα πρόγραμμα την ώρα που αυτό εκτελείται, ήταν οι μεταβλητές μνήμης οι οποίες: είναι ατομικές, δηλαδή περιέχει μία τιμή η κάθε μία δηλώνονται πριν τη χρήση τους βασιζόμαστε στην τήρηση ορισμένων παραδοχών κατά την ονομασία και τη χρήση τους Αυτά είναι καλά, όμως... Ο πραγματικός κόσμος είναι πιο σύνθετος Πολλές μεταβλητές μνήμης χαρακτηρίζουν μία έννοια του πραγματικού κόσμου Σημείο: x, y Γραμμή: x1, y1, x2, y2 Κύκλος: x, y, R, area, perimeter Αν πρέπει να χρησιμοποιούμε αποκλειστικά απλές μεταβλητές μνήμης, τότε πρέπει να προσέχουμε ιδιαίτερα κατά τη χρήση τους Η ανάγκη για σύνθετες μεταβλητές μνήμης, είναι φανερή 1

Δομές (structures) Ορισμός: Ενα struct είναι ένας τύπος που ορίζεται από τον προγραμματιστή και περιέχει μέσα του περισσότερες από μία απλές μεταβλητές μνήμης, οι οποίες λέγονται πεδία (fields) ή μέλη (members) Κάθε structure έχει όνομα που μετά τη δήλωσή του χρησιμοποιείται ως όνομα τύπου δηλαδή ορίζουμε μεταβλητές ενός τύπου τον οποίο εμείς δημιουργήσαμε περιέχει απλές μεταβλητές μνήμης με διαφορετικά ονόματα μπορεί να περιέχει αναφορά (δείκτη) στον ίδιο τύπο ηδήλωσήτουολοκληρώνεταιμε";" Παράδειγμα struct Line { float x1, y1, x2, y2; int line_id; // προσοχή εδώ! βάζουμε και ";" Line L1, L2, L3; // όπως θα ορίζαμε "int i,j,k;" float a,b,x1; Χρήση των structures Για ποιο λόγο είναι χρήσιμα τα structures; Για την παράσταση σύνθετων οντοτήτων στα προγράμματά μας Γραμμή Κύκλος Φυσικό πρόσωπο Αντικείμενο Πράξη Αν και φαίνονται "σύνθετα" είναι ισχυροί μηχανισμοί οργάνωσης των δεδομένων Παραδείγματα struct Person { char[20] firstname, lastname; int birthdate, birthmonth, birthyear; char[10] height; float weight; char[20] ColorOfEyes; struct Polygon { char[30] description; int koryfes; float x[max_koryfes]; float y[max_koryfes]; float area; 2

Χρήση των structures Αναφορά στα πεδία/μέλη μέλη: Δήλωση του struct και μίας μεταβλητής τέτοιου τύπου όνομα της μεταβλητής τύπου struct + μια τελεία + όνομα του πεδίου μέσα στο stuct struct Polygon { char[30] description; int koryfes; float x[max_koryfes]; float y[max_koryfes]; float area; Polygon p1; p1.koryfes=4; p1.x[0]=0; p1.y[0]=0; p1.x[1]=1;... p1.area=calc_area(p1.x[], p1.y[], koryfes]; Χρήση των structures Αναφορά στα πεδία/μέλη μέλη: Δήλωση του struct και τουλάχιστον μίας μεταβλητής τύπου δείκτη στο struct όνομα της μεταβλητής τύπου δείκτη + το σύμβολο "->" + όνομα του πεδίου μέσα στο stuct struct Polygon { char[30] description; int koryfes; float x[max_koryfes]; float y[max_koryfes]; float area; Polygon *P1; P1->koryfes=4; P1->x[0]=0; P1->y[0]=0; P1->x[1]=1;... P1->area=calc_area(p1->x[], p1->y[], koryfes); 3

Παράδειγμα χρήσης structures (1) struct Line { float x1, y1, x2, y2; float linelength(line L) { float mikos; mikos=sqrt( pow((l.x1-l.x2),2)+pow((l.y1-l.y2),2) ); return mikos; } int main() { Line et1,et2; float len1, len2; cout<<"dose tis syntetagmenes tou et1"<<endl; cout<<"x1="; cin>>et1.x1; cout<<"y1="; cin>>et1.y1; cout<<"x2="; cin>>et1.x2; cout<<"y2="; cin>>et1.y2; cout<<endl<<"tmhma et1: ("<<et1.x1<<", "<<et1.y1<<") - ("<<et1.x2<<", "<<et1.y2<<")"<<endl; } len1=linelength(et1); cout<<"length="<<len1; return 0; Παράδειγμα χρήσης structures (2) struct Line { float x1, y1, x2, y2; float linelength(line L) { float mikos; mikos=sqrt( pow((l.x1-l.x2),2)+pow((l.y1-l.y2),2) ); return mikos; } int main() { Line *et1,*et2; float len1, len2; cout<<"dose tis syntetagmenes tou et1"<<endl; cout<<"x1="; cin>>et1->x1; cout<<"y1="; cin>>et1->y1; cout<<"x2="; cin>>et1->x2; cout<<"y2="; cin>>et1->y2; cout<<endl<<"tmhma et1: ("<<et1->x1<<", "<<et1->y1<<") - ("<<et1->x2<<", "<<et1- >y2<<")"<<endl; } len1=linelength(*et1); cout<<"length="<<len1; return 0; 4

Γενικά περί structures Γενικές δυσκολίες Πότε τα χρησιμοποιούμε; Τι βάζουμε μέσα; Τι σημαίνει ότι ορίζουμε ένα δικό μας τύπο; Τεχνικές δυσκολίες Σωστή αναφορά στα πεδία ενός struct Σωστή χρήση των pointers και των συμβόλων *,., ->, & Συντακτικά σφάλματα κατά τη χρήση των παραπάνω Θέματα προς συζήτηση Τι είναι τα πεδία του struct; Μπορούμε να έχουμε κρυφά πεδία; Μπορούμε να υπολογίζουμε εξαρτημένα πεδία εσωτερικά στο struct; struct Polygon { char[30] description; int koryfes; float x[max_koryfes]; float y[max_koryfes]; float area; Δομές δεδομένων και μεταβλητές μνήμης Απλές (ατομικές) δομές δεδομένων Αποθηκεύουν μία τιμή κάθε φορά Ανήκουν σε κάποιους προκαθορισμένους τύπους της γλώσσας προγραμματισμού που χρησιμοποιούμε (int, float, char, κλπ) Δεν είναι κατάλληλες για την παράσταση σύνθετων εννοιών και των ιδιοτήτων τους, οι οποίες, γενικά ΔΕΝ είναι ατομικές Σύνθετες δομές δεδομένων Αποθηκεύουν πολλές τιμές μαζί Ορίζονται ως νέοι τύποι από το χρήστη και μετά τον ορισμό τους χρησιμοποιούνται κανονικά ως τύποι της γλώσσας Είναι εργαλεία για την παράσταση σύνθετων εννοιών και οντοτήτων Υπενθύμιση Τύπος που υπάρχει ενσωματωμένος στη C++ float x,y; Ονόματα μεταβλητών μνήμης (τύπου float) Ορισμός ενός νέου τύπου από τον χρήστη Ονομα του νέου τύπου struct point { float x,y; int pid; point p1, p2, p3; Ονόματα μεταβλητών μνήμης (τύπου point) 5

Σύνθετες δομές δεδομένων Ιδιότητες ή πεδία Ολες οι μεταβλητές μνήμης που είναι ενός σύνθετου τύπου (struct) ο οποίος έχει οριστεί από τον χρήστη, έχουν τις ίδιες ιδιότητες Διαφέρουν μεταξύ τους από το όνομά τους, όπως ακριβώς και οι απλές μεταβλητές μνήμης struct point { float x,y; int pid; point p1, p2, p3; Στο παράδειγμά μας: όλα τα σημεία (p1, p2, p3) έχουν τις ίδιες ιδιότητες, δηλαδή τα x, y και pid. Αναφορά στις ιδιότητες Το όνομα της ιδιότητας (x, y, pid) ΔΕΝ έχει νόημα από μόνο του διότι πρέπει να προσδιορίσουμε ΣΕ ΠΟΙΟΥ ΜΕΛΟΥΣ ΤΙΣ ΙΔΙΟΤΗΤΕΣ ΑΝΑΦΕΡΟΜΑΣΤΕ. Ετσι χρησιμοποιούμε τον συμβολισμό: όνομα_μεταβλητής_μνήμης + τελεία + όνομα_πεδίου Αναφορά στα πεδία των struct Ονομα_μεταβλητής μεταβλητής_μνήμηςμνήμης + τελεία + όνομα_πεδίου Ετσι καθορίζουμε σε ποιο πεδίο ποιας σύνθετης οντότητας θα αναφερθούμε Ορισμός ενός νέου τύπου από τον χρήστη Ονομα του νέου τύπου struct point { float x,y; int pid; point p1, p2, p3; Ονόματα και τύποι ιδιοτήτων (πεδίων) του τύπου point Δήλωση μεταβλητών μνήμης τύπου point p1.x=2.14; p1.y=0; p1.pid=1 Ανάθεση τιμών στα πεδία του p1 Ονομα της μεταβλητής μνήμης Ονομα του πεδίου cin>>p2.x; cout<<p2.y; ΣΩΣΤΗ ΧΡΗΣΗ! cin>>point.x; cout<<point.y; point.pid=10; ΛΑΘΟΣ ΓΙΑΤΙ ΔΕΝ ΧΡΗΣΙΜΟΠΟΙΕΙ ΟΝΟΜΑ ΜΕΤΑΒΛΗΤΗΣ ΜΝΗΜΗΣ, ΑΛΛΑ ΤΟ ΟΝΟΜΑ ΤΟΥ ΤΥΠΟΥ (point) 6

Το struct ως εργαλείο μοντελοποίησης Μια από τις πρώτες διατυπώσεις σχετικά με την πληροφορική: Από τον πραγματικό κόσμο......σε ένα μοντέλο κατάλληλο για Η/Υ......στον υπολογιστή με χρήση μιας γλώσσας προγραμματισμού Τα μοντέλα δεδομένων χρησιμοποιούνται για να αντιστοιχίσουν Εννοιες του πραγματικού κόσμου (πχ μήκος, συντεταγμένες, εμβαδόν) Σε έννοιες που χρησιμοποιεί ο Η/Υ (float length, x, y, area;) Σύνθετα αντικείμενα του πραγματικού κόσμου δεν παριστάνονται απλά και κατανοητά με απλές (ατομικές) μεταβλητές μνήμης Σημείο Τετμημένη Τεταγμένη float int Γραμμή Τετμ.σημ.1 Τεταγ.σημ.1 Τετμ.σημ.2 Τεταγ.σημ.2 Μήκος Χρώμα Σημείο float int Γραμμή Σημείο1 Σημείο2 Μήκος Χρώμα Ονομα struct Πεδία του struct (ιδιότητες) Νέες ιδέες μοντελοποίησης δεδομένων Ενα struct Α περιέχει Πεδία, δηλαδή απλές (ατομικές) μεταβλητές μνήμης Τα πεδία αυτά αποτελούν τις ιδιότητες του struct ή καλύτερα καθορίζουν ποιες θα είναι οι ιδιότητες των μεταβλητών που θα οριστούν ως τύπου Α Προσοχή: Καθορίζουν ποιες θα είναι οι ιδιότητες και όχι τι τιμές θα έχουν Ποιες θα είναι: (ύψος, βάρος, ημ.γέννησης) Τι τιμές θα έχουν: (1.70, 60, 1.1.1980) Μια νέα ιδέα: να κατασκευάσουμε δομές δεδομένων οι οποίες εκτός από ιδιότητες να έχουν και δική τους συμπεριφορά! Αυτές οι δομές λέγονται ΚΛΑΣΕΙΣ (class) Μέθοδοι ή "συναρτήσεις-μέλη" (member functions) Ονομα Πεδία (ιδιότητες) Στοιχεία "συμπεριφοράς" Γραμμή Σημείο1 Σημείο2 Μήκος Χρώμα Εμφάνισε() Μέτρησε() 7

Κλάσεις Σύνθετες, οριζόμενες από το χρήστη δομές, οι οποίες περιέχουν Ιδιότητες (πεδία, fields, attributes) και Συμπεριφορά (μεθόδους, methods, member functions) Οι κλάσεις μπορούν να ιδωθούν: Ως προγραμματιστικό εργαλείο Ως εργαλείο μοντελοποίησης δεδομένων Ορολογία Απλοί τύποι: τύπος δεδομένων -> μεταβλητή int i (Μεταβλητή τύπου int) Point p1 (μεταβλητή τύπου Point (struct που ορίστηκε από εμάς) Κλάσεις: Κλάση -> αντικείμενο (object) Οπως ορίζουμε μεταβλητές ενός τύπου, δημιουργούμε και Αντικείμενα (objects) μιας κλάσης Εξ' ου και "object-oriented" (αντικειμενοστρεφής) Ενα πρώτο παράδειγμα Αρχή δήλωσης της κλάσης Τέλος δήλωσης της κλάσης 8

Ενα πρώτο παράδειγμα ΠΡΟΣΔΙΟΡΙΣΤΗΣ ΟΡΑΤΟΤΗΤΑΣ ΠΕΔΙΑ ΜΕΘΟΔΟΙ Ενα πρώτο παράδειγμα ΔΗΜΙΟΥΡΓΙΑ ΑΝΤΙΚΕΙΜΕΝΟΥ ΠΡΟΣΠΕΛΑΣΗ ΠΕΔΙΩΝ ΚΛΗΣΗ ΜΕΘΟΔΟΥ 9