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



Σχετικά έγγραφα
Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

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

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

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

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

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

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

Κλάσεις και αντικείμενα #include <iostream.h<

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Constructors

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

Λογισµικό (Software SW) Γλώσσες

είκτες και Πίνακες (2)

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

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

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

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

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

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

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

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

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

Σύνθεση και Κληρονομικότητα

Βασικά της γλώσσας JAVA

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός

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

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

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

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

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

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

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

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

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

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

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

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Σύνθεση και Κληρονομικότητα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Tοπικές μεταβλητές To αντικείμενο this Accessor, Mutator μέθοδοι

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

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

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

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

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

Τι είναι κλάση Κλάση

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

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

scanf() scanf() stdin scanf() printf() int float double %lf float

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays)

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

Κεφάλαιο 10 ο Υποπρογράµµατα

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

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

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

Επανάληψη για τις Τελικές εξετάσεις

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

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

ΗΥ-150. Πίνακες (Arrays)

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Εισαγωγή στην επιστήμη των υπολογιστών

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

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

H ΓΛΩΣΣΑ C. Μάθηµα 7: Πίνακες. ηµήτρης Ψούνης

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

Οντοκεντρικός Προγραμματισμός

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

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

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 9ο Γλώσσες Προγραμματισμού

Transcript:

1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος 2 http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα τοποθετούνται οι διαφάνειες του επόµενου µαθήµατος Επικοινωνία: dimitris@skyblue.csd.auth.gr Περιεχόµενα 3 οµές Κλάσεις

Στόχοι εκµάθησης 4 οµές Τύποι δοµής οµές ως ορίσµατα συναρτήσεων Αρχικοποίηση δοµών Κλάσεις Ορισµός, συναρτήσεις-µέλη ηµόσια και ιδιωτικά µέλη Συναρτήσεις προσπέλασης και τροποποίησης οµές σε σχέση µε τις κλάσεις οµές 5 2ος συσσωρευτικός τύπος δεδοµένων: struct Θυµηθείτε: συσσώρευση σηµαίνει οµαδοποίηση Πίνακας: συλλογή τιµών ιδίου τύπου οµή: συλλογή τιµών διαφορετικών τύπων Θεωρούνται µια οντότητα, όπως και οι πίνακες Κύρια διαφορά: Πρέπει πρώτα να ορίσουµε τη δοµή Πριν δηλώσουµε οποιαδήποτε µεταβλητή τέτοιου τύπου Τύποι δοµής 6 Ορίζουµε τη δοµή καθολικά (συνήθως) εν δεσµεύεται µνήµη Απλά ένας "placeholder" γι αυτό που θα αποτελέσει τη δοµή Ορισµός: struct CDAccountV1 Name of new struct "type" { double balance; member names double interestrate; int term; }; Μην το ξεχνάτε!

ήλωση µεταβλητής τύπου δοµής 7 Αφού ορίσουµε τη δοµή, δηλώνουµε µεταβλητές τέτοιου τύπου: CDAccountV1 account; Όπως και η δήλωση απλών µεταβλητών Η µεταβλητή account είναι τύπου CDAccountV1 Περιέχει τιµές-µέλη Κάθε µέρος της δοµής Προσπέλαση µελών δοµής 8 Ο τελεστής Τελείας (Dot) για να προσπελάσουµε τα µέλη της account.balance account.interestrate account.term Αποκαλούνται µεταβλητές-µέλη (membervariables) Τα µέλη της µεταβλητής τύπου δοµής ιαφορετικές δοµές µπορεί να έχουν τις ίδιες µεταβλητές- µέλη Παράδειγµα δοµής (1/3) 9

Παράδειγµα δοµής (2/3) 10 Παράδειγµα δοµής (3/3) 11 Παγίδα δοµής 12 Semicolon µετά τη δήλωση δοµής ; ΠΡΕΠΕΙ να υπάρχει: struct WeatherData { double temperature; double windvelocity; }; ΑΠΑΙΤΕΙΤΑΙ semicolon! Απαιτείται, γιατί έχουµε τη δυνατότητα να δηλώσουµε µεταβλητές δοµής στο σηµείο αυτό

Ανάθεση δοµής 13 Έστω µια δοµή µε όνοµα CropYield ήλωση δυο µεταβλητών δοµής CropYield: CropYield apples, oranges; Και οι δυο είναι τύπου δοµής µε όνοµα CropYield Οι απλές αναθέσεις είναι έγκυρες: apples = oranges; Απλά αντιγράφει κάθε µεταβλητή-µέλος από την apples στην αντίστοιχη µεταβλητή-µέλος της oranges οµές ως ορίσµατα συναρτήσεων 14 Περνιούνται όπως και οι απλοί τύποι, ως ορίσµατα-µε-τιµή (Pass-by-value) ορίσµατα-µε-αναφορά (Pass-by-reference) ή συνδυασµό τους Μπορούν να επιστραφούν από συνάρτηση Ο τύπος επιστροφής είναι δοµή Η δήλωση return στον ορισµό της συνάρτησης επιστρέφει στην καλούσα συνάρτηση µια µεταβλητή τύπου δοµής Αρχικοποίηση δοµών Οι δοµές µπορούν να αρχικοποιηθούν κατά τη δήλωσή τους Παράδειγµα: struct Date { int month; int day; int year; }; Date duedate = {12, 31, 2003}; Η δήλωση παρέχει αρχικές τιµές και στα τρια µέλη της δοµής Επιτρέπεται αρχικοποίηση µε λιγότερες τιµές από ότι ο αριθµός των µελών, ΌΧΙ όµως περισσότερες τιµές 15

Κλάσεις 16 Παρόµοιες µε τις δοµές Μπορούν να περιέχουν και ΣΥΝΑΡΤΗΣΕΙΣ-µέλη Όχι µόνο δεδοµένα-µέλη Ουσιώδες για τον object-oriented programming Εστιάζουµε στα αντικείµενα Αντικείµενο: Περιέχει δεδοµένα και λειτουργίες (πάνω τους) Στη C++, οι µεταβλητές τύπου κλάσης είναι αντικείµενα Ορισµοί κλάσεων 17 Ορίζονται όπως και οι δοµές Παράδειγµα: class DayOfYear name of new class type { public: void output(); member function! int month; int day; }; Παρατηρήστε ότι µόνο η δήλωση της συνάρτησης- µέλους βρίσκεται µέσα στον ορισµό της κλάσης Η υλοποίηση της συνάρτησης είναι σε διαφορετικό σηµείο ήλωση αντικειµένων 18 ηλώνονται όπως όλες οι µεταβλητές Προκαθορισµένων τύπων, τύπων δοµής Παράδειγµα: DayOfYear today, birthday; ηλώνει δυο αντικείµενα τύπου κλάσης DayOfYear Τα αντικείµενα περιλαµβάνουν: εδοµένα Τα µέλη month, day Λειτουργίες, δηλ., συναρτήσεις-µέλη (member functions) output()

Προσπέλαση µελών κλάσης 19 Τα µέλη προσπελάζονται όπως και τα αντίστοιχα των δοµών Παράδειγµα: today.month today.day Προσπέλαση στη συνάρτηση-µέλος: today.output(); Συναρτήσεις-µέλη κλάσεων 20 Όπως και οι κοινοί ορισµοί συναρτήσεων Μπορεί να βρίσκονται µετά τον ορισµό της main() Πρέπει να καθορίζουν την κλάση όπου ανήκουν: void DayOfYear::output() { } :: είναι ο τελεστής διάκρισης εµβέλειας (scope resolution) Λέει στον compiler ποιας κλάσης είναι µέλος Το item πριν το :: αποκαλείται type qualifier 21 Ορισµός συναρτήσεων-µελών κλάσης Προσέξτε τον ορισµό της συνάρτησης-µέλους output() στο επόµενο παράδειγµα Αναφέρεται στα δεδοµένα-µέλη της κλάσης Χωρίς qualifiers Η συνάρτηση χρησιµοποιείται από/για όλα τα αντικείµενα της κλάσης Θα αναφέρεται στα δεδοµένα του συγκεκριµένου αντικειµένου από το οποίο καλείται Παράδειγµα: today.output(); Τυπώνει τα δεδοµένα του αντικειµένου today

Πλήρες παράδειγµα κλάσης (1/4) 22 Πλήρες παράδειγµα κλάσης (2/4) 23 Πλήρες παράδειγµα κλάσης (3/4) 24

Πλήρες παράδειγµα κλάσης (4/4) 25 26 Τελεστές: Dot και Scope Resolution Χρησιµοποιούνται για να καθορίζουν ποιου πράγµατος είναι µέλη Τελεστής Τελείας (Dot) : Καθορίζει τα µέλη ενός αντικειµένου Τελεστής ιάκρισης Εµβέλειας (Scope resolution): Καθορίζει από ποια κλάση προέρχεται ο ορισµός της συγκεκριµένης συνάρτησης Συµπερασµατικά για τις κλάσεις 27 Η κλάσεις είναι κανονικοί τύποι δεδοµένων! Όπως και οι int, double, κ.τ.λ. Μπορούµε να έχουµε µεταβλητές συγκεκριµένου τύπου κλάσης Τις αποκαλούµε αντικείµενα Μπορούµε να έχουµε παραµέτρους τύπου κλάσης Ορίσµατα-µε-τιµή Ορίσµατα-µε-αναφορά Χρήση των κλάσεων όπως και οι άλλοι τύποι!

Ενθυλάκωση (Encapsulation) 28 Κάθε τύπος δεδοµένων περιλαµβάνει εδοµένα (εµβέλεια των δεδοµένων) Λειτουργίες (που µπορούν να εκτελεστούν πάνω στα δεδοµένα) Παράδειγµα: int τύπος: εδοµένα: +-32,767 Λειτουργίες: +,-,*,/,%,logical,κ.τ.λ. Το ίδιο συµβαίνει και µε τις κλάσεις Αλλά ΕΜΕΙΣ καθορίζουµε τα δεδοµένα και τις λειτουργίες πάνω τους! 29 Αφηρηµένοι Τύπου εδοµένων, ADT Αφηρηµένοι Οι προγραµµατιστές δεν γνωρίζουν τις λεπτοµέρειες Συντοµογραφία ADT Συλλογή από τιµές δεδοµένων µαζί µε σύνολο από βασικές λειτουργίες πάνω στις τιµές αυτές Οι ADT συχνά εξαρτώνται από τη γλώσσα Υλοποιούµε ADT στη C++ µε κλάσεις Μια C++ κλάση ορίζει τον ADT Και άλλες γλώσσες υλοποιούν ADT Περισσότερα για την ενθυλάκωση 30 Ενθυλάκωση Σηµαίνει: ενώνω ως µια οντότητα ήλωση κλάσης προκύπτει αντικείµενο Τα αντικείµενα είναι θύλακες των Τιµών δεδοµένων Λειτουργιών πάνω στα δεδοµένα (συναρτήσεις- µέλη)

Αρχές του OOP 31 Απόκρυψη Πληροφοριών Λεπτοµέρειες του πώς υλοποιούνται οι λειτουργίες της κλάσης δεν γίνονται γνωστές/διαθέσιµες στους χρήστες µιας κλάσης Αφαίρεση εδοµένων Λεπτοµέρειες του πώς τροποποιούνται τα δεδοµένα µέσα σε ADT/κλάσεις δεν γίνονται γνωστές/διαθέσιµες στο χρήστη Ενθυλάκωση Ενώνουµε δεδοµένα και λειτουργίες, αλλά δεν αποκαλύπτουµε τις λεπτοµέρειες ηµόσια και Ιδιωτικά µέλη 32 Τα δεδοµένα σε µια κλάση θα πρέπει(;) να είναι πάντα ιδιωτικά (Private)! Συντηρεί τις αρχές του OOP Απόκρυψη δεδοµένων από το χρήστη Επιτρέπεται διαχείριση µόνο διαµέσου λειτουργιών Από τις συναρτήσεις-µέλη ηµόσιες (Public) οντότητες (συνήθως συναρτήσεις-µέλη) είναι προσπελάσιµες από το χρήστη 33 Παράδειγµα Public και Private (1/2) Τροποποιούµε το προηγούµενο παράδειγµα: class DayOfYear { public: void input(); void output(); private: int month; int day; }; Τα δεδοµένα είναι τώρα ιδιωτικά (private) Τα ( εξωτερικά ) αντικείµενα δεν έχουν άµεση πρόσβαση

34 Παράδειγµα Public και Private (2/2) Με δεδοµένο το προηγούµενο παράδειγµα ηλώνουµε το αντικείµενο: DayOfYear today; Από το αντικείµενο today µπορούµε να προσπελάσουµε µόνο τα δηµόσια µέλη cin >> today.month; // NOT ALLOWED! cout << today.day; // NOT ALLOWED! Πρέπει να καλέσουµε τις δηµόσιες λειτουργίες: today.input(); today.output(); Στυλ για τα Public και Private 35 Μπορούµε να αναµείξουµε public & private Συνήθως τοποθετούµε πρώτα τα public Επιτρέπει εύκολη αναγνώριση των τµηµάτων που ΜΠΟΡΟΥΝ να χρησιµοποιηθούν από τους προγραµµατιστές/χρήστες της κλάσης Τα private δεδοµένα είναι κρυµµένα, και συνεπώς αδιάφορα στους χρήστες Εκτός του ορισµού της κλάσης, δεν µπορούµε αλλάξουµε (ή να προσπελάσουµε) τα private δεδοµένα 36 Συναρτ. προσπέλασης, τροποποίησης Όταν το αντικείµενο χρειάζεται να κάνει κάτι µε τα δεδοµένα του Καλούµε τις accessor (προσπέλασης) συναρτήσεις-µέλη Επιτρέπει να διαβάσουµε τα δεδοµένα Αποκαλούνται συχνά "get member functions" Απλή ανάκτηση των δεδοµένων-µελών Mutator (τροποποίησης) member functions Πραγµατοποιούν την τροποποίηση των δεδοµένων Αλλαγή µε βάση την εφαρµογή

Χωρισµός ιασύνδεσης-υλοποίησης 37 Οι χρήστες µιας κλάσης δεν χρειάζεται να βλέπουν τις λεπτοµέρειες υλοποίησης της κλάσης Αρχή του OOP ενθυλάκωση Χρήστες χρειάζονται µόνο τους κανόνες Αποκαλούνται διασύνδεση της κλάσης Στη C++ οι δηµόσιες συναρτήσεις-µέλη και τα σχετικά σχόλια Η υλοποίηση της κλάσης είναι κρυφή Οι ορισµοί των συναρτήσεων-µελών δίνονται αλλού Ο χρήστης δεν χρειάζεται να τις γνωρίζει Οι οµές σε σχέση µε Κλάσεις 38 οµές Συνήθως όλα τα µέλη είναι δηµόσια εν διαθέτουν συναρτήσεις-µέλη(;) Κλάσεις Κατά κανόνα, όλα τα δεδοµένα-µέλη είναι ιδιωτικά Οι συναρτήσεις-µέλη που υλοποιούν τη διασύνδεση είναι δηµόσιες Από τεχνικής σκοπιάς, είναι το ίδιο Εννοιολογικά, εντελώς διαφορετικοί µηχανισµοί Να σκέφτεστε µε αντικείµενα 39 Αλλαγή στον προγραµµατισµό Πριν οι αλγόριθµοι στο κέντρο της σκηνής OOP τα δεδοµένα στο κέντρο Οι αλγόριθµοι εξακολουθούν να υπάρχουν φυσικά Απλά εστιάζουν στα δεδοµένα τους Φτιάχνονται ώστε να ταιριάζουν στα δεδοµένα Σχεδίαση λογισµικού Ορισµός διάφορων αντικειµένων και τρόπου αλληλεπίδρασής τους

Περίληψη (1/2) 40 Η δοµή είναι µια συλλογή διαφορετικών τύπων Η κλάση χρησιµοποιείται για να συνδυάζει δεδοµένα και συναρτήσεις σε µια οντότητα -> αντικείµενο Μεταβλητές-Μέλη και Συναρτήσεις-Μέλη Μπορεί να είναι public µπορούν να προσπελάζονται και εκτός της κλάσης Μπορεί να είναι private προσπελάζονται µόνο µέσα στον ορισµό (υλοποίηση) µια συνάρτησης-µέλους της κλάσης Οι κλάσεις και οι δοµές µπορεί να είναι τυπικοί παράµετροι σε συναρτήσεις Περίληψη (2/2) 41 Ορισµός κλάσης στη C++ Πρέπει να διαχωρίζει δυο κοµµάτια ιασύνδεση (Interface): τι χρειάζεται ο χρήστης Υλοποίηση (Implementation): λεπτοµέρειες του πώς λειτουργεί η κλάση