Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

6.6 Η ενθυλάκωση (Encapsulation) στην γλώσσα C++

Η ενθυλάκωση (Encapsulation) στην γλώσσα C++ είναι ένας μηχανισμός που επιτρέπει τη συσπείρωση δεδομένων και συναρτήσεων που τα χειρίζονται σε ένα αντικείμενο. Μέσω της ενθυλάκωσης, η πρόσβαση και η επεξεργασία των δεδομένων γίνεται μόνο μέσω των δημόσιων μεθόδων της κλάσης.

Η ενθυλάκωση βοηθά στην επίτευξη αρχών αντικειμενοστραφούς προγραμματισμού, όπως η αφαιρετικότητα (abstraction), η επαναχρησιμοποίηση κώδικα και η ασφάλεια. Με την ενθυλάκωση, οι λεπτομέρειες υλοποίησης κρύβονται από τον χρήστη και μόνο οι δημόσιες μέθοδοι είναι προσβάσιμες, προσφέροντας ένα σταθερό και καλά ορισμένο διεπαφή.

Για την ενθυλάκωση στην C++, χρησιμοποιούνται κλάσεις και η προστασία δεδομένων γίνεται με τη χρήση δημόσιων (public), ιδιωτικών (private) και προστατευμένων (protected) μελών. Η ενθυλάκωση επιτρέπει τη δημιουργία ασφαλών και αποτελεσματικών κλάσεων, ενισχύοντας την οργάνωση και τη συντήρηση του κώδικα.

Ένα παράδειγμα με χρήση get και set μεθόδων:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <iostream>
using namespace std;
class Car {
private:
string brand; // Ιδιωτική μεταβλητή για τη μάρκα του αυτοκινήτου
string model; // Ιδιωτική μεταβλητή για το μοντέλο του αυτοκινήτου
int year; // Ιδιωτική μεταβλητή για το έτος του αυτοκινήτου
public:
void setBrand(string brand) {
this->brand = brand; // Ορισμός της μάρκας του αυτοκινήτου
}
string getBrand() {
return brand; // Επιστροφή της μάρκας του αυτοκινήτου
}
void setModel(string model) {
this->model = model; // Ορισμός του μοντέλου του αυτοκινήτου
}
string getModel() {
return model; // Επιστροφή του μοντέλου του αυτοκινήτου
}
void setYear(int year) {
this->year = year; // Ορισμός του έτους του αυτοκινήτου
}
int getYear() {
return year; // Επιστροφή του έτους του αυτοκινήτου
}
};
int main() {
Car myCar; // Δημιουργία αντικειμένου της κλάσης Car
myCar.setBrand("Ford"); // Ορισμός της μάρκας του αυτοκινήτου
myCar.setModel("Mustang"); // Ορισμός του μοντέλου του αυτοκινήτου
myCar.setYear(1969); // Ορισμός του έτους του αυτοκινήτου
cout << myCar.getBrand() << " " << myCar.getModel() << " " << myCar.getYear() << endl; // Εκτύπωση των πληροφοριών του αυτοκινήτου
return 0;
}
#include <iostream> using namespace std; class Car { private: string brand; // Ιδιωτική μεταβλητή για τη μάρκα του αυτοκινήτου string model; // Ιδιωτική μεταβλητή για το μοντέλο του αυτοκινήτου int year; // Ιδιωτική μεταβλητή για το έτος του αυτοκινήτου public: void setBrand(string brand) { this->brand = brand; // Ορισμός της μάρκας του αυτοκινήτου } string getBrand() { return brand; // Επιστροφή της μάρκας του αυτοκινήτου } void setModel(string model) { this->model = model; // Ορισμός του μοντέλου του αυτοκινήτου } string getModel() { return model; // Επιστροφή του μοντέλου του αυτοκινήτου } void setYear(int year) { this->year = year; // Ορισμός του έτους του αυτοκινήτου } int getYear() { return year; // Επιστροφή του έτους του αυτοκινήτου } }; int main() { Car myCar; // Δημιουργία αντικειμένου της κλάσης Car myCar.setBrand("Ford"); // Ορισμός της μάρκας του αυτοκινήτου myCar.setModel("Mustang"); // Ορισμός του μοντέλου του αυτοκινήτου myCar.setYear(1969); // Ορισμός του έτους του αυτοκινήτου cout << myCar.getBrand() << " " << myCar.getModel() << " " << myCar.getYear() << endl; // Εκτύπωση των πληροφοριών του αυτοκινήτου return 0; }
#include <iostream>
using namespace std;

class Car {
  private:
    string brand; // Ιδιωτική μεταβλητή για τη μάρκα του αυτοκινήτου
    string model; // Ιδιωτική μεταβλητή για το μοντέλο του αυτοκινήτου
    int year; // Ιδιωτική μεταβλητή για το έτος του αυτοκινήτου
  public:
    void setBrand(string brand) {
      this->brand = brand; // Ορισμός της μάρκας του αυτοκινήτου
    }
    string getBrand() {
      return brand; // Επιστροφή της μάρκας του αυτοκινήτου
    }
    void setModel(string model) {
      this->model = model; // Ορισμός του μοντέλου του αυτοκινήτου
    }
    string getModel() {
      return model; // Επιστροφή του μοντέλου του αυτοκινήτου
    }
    void setYear(int year) {
      this->year = year; // Ορισμός του έτους του αυτοκινήτου
    }
    int getYear() {
      return year; // Επιστροφή του έτους του αυτοκινήτου
    }
};

int main() {
  Car myCar; // Δημιουργία αντικειμένου της κλάσης Car

  myCar.setBrand("Ford"); // Ορισμός της μάρκας του αυτοκινήτου
  myCar.setModel("Mustang"); // Ορισμός του μοντέλου του αυτοκινήτου
  myCar.setYear(1969); // Ορισμός του έτους του αυτοκινήτου

  cout << myCar.getBrand() << " " << myCar.getModel() << " " << myCar.getYear() << endl; // Εκτύπωση των πληροφοριών του αυτοκινήτου

  return 0;
}

Ο παραπάνω κώδικας σε C++ δημιουργεί μια κλάση με όνομα “Car” που αναπαριστά ένα αυτοκίνητο. Η κλάση έχει ιδιότητες (μεταβλητές) για τη μάρκα, το μοντέλο και το έτος του αυτοκινήτου.

Η κλάση περιλαμβάνει μεθόδους (συναρτήσεις μέλη) για να ορίσει και να ανακτήσει τιμές για τις ιδιότητες του αυτοκινήτου. Οι μέθοδοι setBrand, setModel και setYear χρησιμοποιούνται για να ορίσουν τις μεταβλητές brand, model και year αντίστοιχα. Οι μέθοδοι getBrand, getModel και getYear επιστρέφουν τις τρέχουσες τιμές των ιδιοτήτων.

Στην συνέχεια, η συνάρτηση main δημιουργεί ένα αντικείμενο της κλάσης Car με όνομα myCar. Χρησιμοποιούνται οι μέθοδοι setBrand, setModel και setYear για να οριστούν οι τιμές των ιδιοτήτων του αυτοκινήτου.

Τέλος, εκτυπώνονται οι τιμές των ιδιοτήτων του αυτοκινήτου χρησιμοποιώντας τις μεθόδους getBrand, getModel και getYear και η έξοδος εμφανίζεται στην οθόνη.

Η ενθυλάκωση αναγνωρίζεται ως καλή πρακτική στον προγραμματισμό, καθώς επιτρέπει καλύτερο έλεγχο των δεδομένων μας. Με το να δηλώνουμε τα χαρακτηριστικά μιας κλάσης ως ιδιωτικά, απαιτείται η χρήση δημόσιων μεθόδων για την πρόσβαση και τροποποίησή τους από άλλα τμήματα κώδικα. Με αυτόν τον τρόπο, εξασφαλίζεται η ασφάλεια των δεδομένων, καθώς μόνο εξουσιοδοτημένα μέρη του κώδικα έχουν πρόσβαση και δικαίωμα τροποποίησης τους.

Επιπλέον, η ενθυλάκωση εξασφαλίζει καλύτερο έλεγχο των δεδομένων μας, καθώς μπορούμε να τροποποιούμε μόνο το αντίστοιχο μέρος του κώδικα χωρίς να επηρεάζουμε άλλα μέρη του. Αυτή η δυνατότητα μας επιτρέπει να διατηρούμε μεγαλύτερο έλεγχο του κώδικά μας και να διαχωρίζουμε τις διάφορες λειτουργίες του προγράμματός μας. Αυτό καθιστά τον κώδικα πιο εύκολο στη συντήρηση και την αναβάθμιση, καθώς οι αλλαγές σε μια λειτουργία δεν επηρεάζουν αναγκαστικά τις υπόλοιπες.

27 Ιουνίου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων