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

Σχετικά έγγραφα
Η Γλώσσα Προγραµµατισµού 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) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8. Μέθοδοι (Methods)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

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

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

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

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

Transcript:

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η

Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα τοποθετούνται οι διαφάνειες του επόµενου µαθήµατος Επικοινωνία: dimitris@skyblue.csd.auth.gr

Περιεχόµενα οµές Κλάσεις

Στόχοι εκµάθησης οµές Τύποι δοµής οµές ως ορίσµατα συναρτήσεων Αρχικοποίηση δοµών Κλάσεις Ορισµός, συναρτήσεις-µέλη ηµόσια και ιδιωτικά µέλη Συναρτήσεις προσπέλασης και τροποποίησης οµές σε σχέση µε τις κλάσεις

οµές 2ος συσσωρευτικός τύπος δεδοµένων: struct Θυµηθείτε: συσσώρευση σηµαίνει οµαδοποίηση Πίνακας: συλλογή τιµών ιδίου τύπου οµή: συλλογή τιµών διαφορετικών τύπων Θεωρούνται µια οντότητα, όπως και οι πίνακες Κύρια διαφορά: Πρέπει πρώτα να ορίσουµε τη δοµή Πριν δηλώσουµε οποιαδήποτε µεταβλητή τέτοιου τύπου

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

ήλωση µεταβλητής τύπου δοµής Αφού ορίσουµε τη δοµή, δηλώνουµε µεταβλητές τέτοιου τύπου: CDAccountV1 account; Όπως και η δήλωση απλών µεταβλητών Η µεταβλητή account είναι τύπου CDAccountV1 Περιέχει τιµές-µέλη Κάθε µέρος της δοµής

Προσπέλαση µελών δοµής Ο τελεστής Τελείας (Dot) για να προσπελάσουµε τα µέλη της account.balance account.interestrate account.term Αποκαλούνται µεταβλητές-µέλη (membervariables) Τα µέλη της µεταβλητής τύπου δοµής ιαφορετικές δοµές µπορεί να έχουν τις ίδιες µεταβλητές- µέλη

Παράδειγµα δοµής (1/3)

Παράδειγµα δοµής (2/3) 1

Παράδειγµα δοµής (3/3) 1

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

1 Ανάθεση δοµής Έστω µια δοµή µε όνοµα CropYield ήλωση δυο µεταβλητών δοµής CropYield: CropYield apples, oranges; Και οι δυο είναι τύπου δοµής µε όνοµα CropYield Οι απλές αναθέσεις είναι έγκυρες: apples = oranges; Απλά αντιγράφει κάθε µεταβλητή-µέλος από την apples στην αντίστοιχη µεταβλητή-µέλος της oranges

1 οµές ως ορίσµατα συναρτήσεων Περνιούνται όπως και οι απλοί τύποι, ως ορίσµατα-µε-τιµή (Pass-by-value) ορίσµατα-µε-αναφορά (Pass-by-reference) ή συνδυασµό τους Μπορούν να επιστραφούν από συνάρτηση Ο τύπος επιστροφής είναι δοµή Η δήλωση return στον ορισµό της συνάρτησης επιστρέφει στην καλούσα συνάρτηση µια µεταβλητή τύπου δοµής

1 Αρχικοποίηση δοµών Οι δοµές µπορούν να αρχικοποιηθούν κατά τη δήλωσή τους Παράδειγµα: struct Date { int month; int day; int year; }; Date duedate = {12, 31, 2003}; Η δήλωση παρέχει αρχικές τιµές και στα τρια µέλη της δοµής Επιτρέπεται αρχικοποίηση µε λιγότερες τιµές από ότι ο αριθµός των µελών, ΌΧΙ όµως περισσότερες τιµές

1 Κλάσεις Παρόµοιες µε τις δοµές Μπορούν να περιέχουν και ΣΥΝΑΡΤΗΣΕΙΣ-µέλη Όχι µόνο δεδοµένα-µέλη Ουσιώδες για τον object-oriented programming Εστιάζουµε στα αντικείµενα Αντικείµενο: Περιέχει δεδοµένα και λειτουργίες (πάνω τους) Στη C++, οι µεταβλητές τύπου κλάσης είναι αντικείµενα

1 Ορισµοί κλάσεων Ορίζονται όπως και οι δοµές Παράδειγµα: class DayOfYear { public: void output(); int month; int day; }; name of new class type member function! Παρατηρήστε ότι µόνο η δήλωση της συνάρτησης- µέλους βρίσκεται µέσα στον ορισµό της κλάσης Η υλοποίηση της συνάρτησης είναι σε διαφορετικό σηµείο

1 ήλωση αντικειµένων ηλώνονται όπως όλες οι µεταβλητές Προκαθορισµένων τύπων, τύπων δοµής Παράδειγµα: DayOfYear today, birthday; ηλώνει δυο αντικείµενα τύπου κλάσης DayOfYear Τα αντικείµενα περιλαµβάνουν: εδοµένα Τα µέλη month, day Λειτουργίες, δηλ., συναρτήσεις-µέλη (member functions) output()

1 Προσπέλαση µελών κλάσης Τα µέλη προσπελάζονται όπως και τα αντίστοιχα των δοµών Παράδειγµα: today.month today.day Προσπέλαση στη συνάρτηση-µέλος: today.output();

2 Συναρτήσεις-µέλη κλάσεων Όπως και οι κοινοί ορισµοί συναρτήσεων Μπορεί να βρίσκονται µετά τον ορισµό της main() Πρέπει να καθορίζουν την κλάση όπου ανήκουν: void DayOfYear::output() { } :: είναι ο τελεστής διάκρισης εµβέλειας (scope resolution) Λέει στον compiler ποιας κλάσης είναι µέλος Το item πριν το :: αποκαλείται type qualifier

2 Ορισµός συναρτήσεων-µελών κλάσης Προσέξτε τον ορισµό της συνάρτησης-µέλους output() στο επόµενο παράδειγµα Αναφέρεται στα δεδοµένα-µέλη της κλάσης Χωρίς qualifiers Η συνάρτηση χρησιµοποιείται από/για όλα τα αντικείµενα της κλάσης Θα αναφέρεται στα δεδοµένα του συγκεκριµένου αντικειµένου από το οποίο καλείται Παράδειγµα: today.output(); Τυπώνει τα δεδοµένα του αντικειµένου today

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

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

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

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

2 Τελεστές: Dot και Scope Resolution Χρησιµοποιούνται για να καθορίζουν ποιου πράγµατος είναι µέλη Τελεστής Τελείας (Dot) : Καθορίζει τα µέλη ενός αντικειµένου Τελεστής ιάκρισης Εµβέλειας (Scope resolution): Καθορίζει από ποια κλάση προέρχεται ο ορισµός της συγκεκριµένης συνάρτησης

2 Συµπερασµατικά για τις κλάσεις Η κλάσεις είναι κανονικοί τύποι δεδοµένων! Όπως και οι int, double, κ.τ.λ. Μπορούµε να έχουµε µεταβλητές συγκεκριµένου τύπου κλάσης Τις αποκαλούµε αντικείµενα Μπορούµε να έχουµε παραµέτρους τύπου κλάσης Ορίσµατα-µε-τιµή Ορίσµατα-µε-αναφορά Χρήση των κλάσεων όπως και οι άλλοι τύποι!

2 Ενθυλάκωση (Encapsulation) Κάθε τύπος δεδοµένων περιλαµβάνει εδοµένα (εµβέλεια των δεδοµένων) Λειτουργίες (που µπορούν να εκτελεστούν πάνω στα δεδοµένα) Παράδειγµα: int τύπος: εδοµένα: +-32,767 Λειτουργίες: +,-,*,/,%,logical,κ.τ.λ. Το ίδιο συµβαίνει και µε τις κλάσεις Αλλά ΕΜΕΙΣ καθορίζουµε τα δεδοµένα και τις λειτουργίες πάνω τους!

2 Αφηρηµένοι Τύπου εδοµένων, ADT Αφηρηµένοι Οι προγραµµατιστές δεν γνωρίζουν τις λεπτοµέρειες Συντοµογραφία ADT Συλλογή από τιµές δεδοµένων µαζί µε σύνολο από βασικές λειτουργίες πάνω στις τιµές αυτές Οι ADT συχνά εξαρτώνται από τη γλώσσα Υλοποιούµε ADT στη C++ µε κλάσεις Μια C++ κλάση ορίζει τον ADT Και άλλες γλώσσες υλοποιούν ADT

3 Περισσότερα για την ενθυλάκωση Ενθυλάκωση Σηµαίνει: ενώνω ως µια οντότητα ήλωση κλάσης προκύπτει αντικείµενο Τα αντικείµενα είναι θύλακες των Τιµών δεδοµένων Λειτουργιών πάνω στα δεδοµένα (συναρτήσεις- µέλη)

3 Αρχές του OOP Απόκρυψη Πληροφοριών Λεπτοµέρειες του πώς υλοποιούνται οι λειτουργίες της κλάσης δεν γίνονται γνωστές/διαθέσιµες στους χρήστες µιας κλάσης Αφαίρεση εδοµένων Λεπτοµέρειες του πώς τροποποιούνται τα δεδοµένα µέσα σε ADT/κλάσεις δεν γίνονται γνωστές/διαθέσιµες στο χρήστη Ενθυλάκωση Ενώνουµε δεδοµένα και λειτουργίες, αλλά δεν αποκαλύπτουµε τις λεπτοµέρειες

3 ηµόσια και Ιδιωτικά µέλη Τα δεδοµένα σε µια κλάση θα πρέπει(;) να είναι πάντα ιδιωτικά (Private)! Συντηρεί τις αρχές του OOP Απόκρυψη δεδοµένων από το χρήστη Επιτρέπεται διαχείριση µόνο διαµέσου λειτουργιών Από τις συναρτήσεις-µέλη ηµόσιες (Public) οντότητες (συνήθως συναρτήσεις-µέλη) είναι προσπελάσιµες από το χρήστη

3 Παράδειγµα Public και Private (1/2) Τροποποιούµε το προηγούµενο παράδειγµα: class DayOfYear { public: void input(); void output(); private: int month; int day; }; Τα δεδοµένα είναι τώρα ιδιωτικά (private) Τα ( εξωτερικά ) αντικείµενα δεν έχουν άµεση πρόσβαση

3 Παράδειγµα Public και Private (2/2) Με δεδοµένο το προηγούµενο παράδειγµα ηλώνουµε το αντικείµενο: DayOfYear today; Από το αντικείµενο today µπορούµε να προσπελάσουµε µόνο τα δηµόσια µέλη cin >> today.month; // NOT ALLOWED! cout << today.day; // NOT ALLOWED! Πρέπει να καλέσουµε τις δηµόσιες λειτουργίες: today.input(); today.output();

3 Στυλ για τα Public και Private Μπορούµε να αναµείξουµε public & private Συνήθως τοποθετούµε πρώτα τα public Επιτρέπει εύκολη αναγνώριση των τµηµάτων που ΜΠΟΡΟΥΝ να χρησιµοποιηθούν από τους προγραµµατιστές/χρήστες της κλάσης Τα private δεδοµένα είναι κρυµµένα, και συνεπώς αδιάφορα στους χρήστες Εκτός του ορισµού της κλάσης, δεν µπορούµε αλλάξουµε (ή να προσπελάσουµε) τα private δεδοµένα

3 Συναρτ. προσπέλασης, τροποποίησης Όταν το αντικείµενο χρειάζεται να κάνει κάτι µε τα δεδοµένα του Καλούµε τις accessor (προσπέλασης) συναρτήσεις-µέλη Επιτρέπει να διαβάσουµε τα δεδοµένα Αποκαλούνται συχνά "get member functions" Απλή ανάκτηση των δεδοµένων-µελών Mutator (τροποποίησης) member functions Πραγµατοποιούν την τροποποίηση των δεδοµένων Αλλαγή µε βάση την εφαρµογή

3 Χωρισµός ιασύνδεσης-υλοποίησης Οι χρήστες µιας κλάσης δεν χρειάζεται να βλέπουν τις λεπτοµέρειες υλοποίησης της κλάσης Αρχή του OOP ενθυλάκωση Χρήστες χρειάζονται µόνο τους κανόνες Αποκαλούνται διασύνδεση της κλάσης Στη C++ οι δηµόσιες συναρτήσεις-µέλη και τα σχετικά σχόλια Η υλοποίηση της κλάσης είναι κρυφή Οι ορισµοί των συναρτήσεων-µελών δίνονται αλλού Ο χρήστης δεν χρειάζεται να τις γνωρίζει

3 Οι οµές σε σχέση µε Κλάσεις οµές Συνήθως όλα τα µέλη είναι δηµόσια εν διαθέτουν συναρτήσεις-µέλη(;) Κλάσεις Κατά κανόνα, όλα τα δεδοµένα-µέλη είναι ιδιωτικά Οι συναρτήσεις-µέλη που υλοποιούν τη διασύνδεση είναι δηµόσιες Από τεχνικής σκοπιάς, είναι το ίδιο Εννοιολογικά, εντελώς διαφορετικοί µηχανισµοί

3 Να σκέφτεστε µε αντικείµενα Αλλαγή στον προγραµµατισµό Πριν οι αλγόριθµοι στο κέντρο της σκηνής OOP τα δεδοµένα στο κέντρο Οι αλγόριθµοι εξακολουθούν να υπάρχουν φυσικά Απλά εστιάζουν στα δεδοµένα τους Φτιάχνονται ώστε να ταιριάζουν στα δεδοµένα Σχεδίαση λογισµικού Ορισµός διάφορων αντικειµένων και τρόπου αλληλεπίδρασής τους

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

4 Περίληψη (2/2) Ορισµός κλάσης στη C++ Πρέπει να διαχωρίζει δυο κοµµάτια ιασύνδεση (Interface): τι χρειάζεται ο χρήστης Υλοποίηση (Implementation): λεπτοµέρειες του πώς λειτουργεί η κλάση