Φαντάσου ότι θέλουμε να φτιάξουμε ένα παιχνίδι με αυτοκινητάκια. Στην πραγματική ζωή, τα αυτοκινητάκια έχουν κάποια χαρακτηριστικά και μπορούν να κάνουν κάποιες ενέργειες. Για παράδειγμα, ένα αυτοκινητάκι μπορεί να έχει χρώμα κόκκινο και μπορεί να κινείται.
Α. Τι είναι οι Κλάσεις (Classes)
Στην C# (και σε πολλές άλλες γλώσσες προγραμματισμού), οι κλάσεις είναι σαν τα σχέδια (blueprints) για να φτιάξουμε πράγματα. Ας πούμε ότι θέλουμε να φτιάξουμε πολλά αυτοκινητάκια στο παιχνίδι μας. Μπορούμε να φτιάξουμε μια κλάση που να περιγράφει πώς είναι ένα αυτοκινητάκι και τι μπορεί να κάνει.
Παράδειγμα Κλάσης:
public class Car
{
// Χαρακτηριστικά (Properties) - Περιγράφουν το αυτοκινητάκι
public string Color { get; set; }
public string Model { get; set; }
// Ενέργειες (Methods) - Τι μπορεί να κάνει το αυτοκινητάκι
public void Drive()
{
Console.WriteLine("The car is driving.");
}
public void Stop()
{
Console.WriteLine("The car has stopped.");
}
}
Ας εξετάσουμε τις κλάσεις στην C# πιο αναλυτικά. Οι κλάσεις είναι θεμελιώδης έννοια στον αντικειμενοστραφή προγραμματισμό (OOP – Object-Oriented Programming) και μας επιτρέπουν να οργανώνουμε και να διαχειριζόμαστε τον κώδικά μας με έναν πιο φυσικό και αναλογικό προς τον πραγματικό κόσμο τρόπο.
Η Βασική Δομή μιας Κλάσης στην C#
Δήλωση Κλάσης
Η δήλωση μιας κλάσης στην C# γίνεται με τη χρήση της λέξης-κλειδί class
, ακολουθούμενη από το όνομα της κλάσης. Το όνομα της κλάσης θα πρέπει να είναι περιγραφικό και να αντικατοπτρίζει το σκοπό της κλάσης. Η δήλωση της κλάσης αποτελεί την αρχή της δομής της και υποδεικνύει στον μεταγλωττιστή (compiler) ότι πρόκειται να ακολουθήσει ορισμός μιας νέας κλάσης με τις δικές της ιδιότητες και μεθόδους.
Φαντάσου ότι οι κλάσεις είναι σαν σχέδια για τη δημιουργία αντικειμένων. Ένα σχέδιο μπορεί να είναι για ένα αυτοκίνητο, ένα σπίτι, ή ακόμα και για έναν σκύλο.
A. Ιδιότητες (Properties)
Οι ιδιότητες είναι μέλη μιας κλάσης που χρησιμοποιούνται για την αποθήκευση δεδομένων. Οι ιδιότητες είναι προσβάσιμες τόσο από τον κώδικα μέσα στην κλάση όσο και από εξωτερικό κώδικα, αν οριστούν ως δημόσιες (public).
Getters and Setters
Οι ιδιότητες συχνά διαθέτουν μεθόδους πρόσβασης (getters) και τροποποίησης (setters) που επιτρέπουν τον έλεγχο της πρόσβασης στα δεδομένα. Μέσω των ιδιοτήτων, μπορούμε να καθορίσουμε κανόνες για την ανάγνωση και την εγγραφή των τιμών, διασφαλίζοντας έτσι την ακεραιότητα των δεδομένων.
Οι ιδιότητες στην C# παρέχουν έναν μηχανισμό για την προστασία των πεδίων (fields) μιας κλάσης και για την προσθήκη λογικής κατά την ανάγνωση ή εγγραφή σε αυτά. Οι ιδιότητες συνήθως διαθέτουν δύο ειδών μεθόδους: τις μεθόδους πρόσβασης (getters) και τις μεθόδους τροποποίησης (setters).
Μέθοδοι Πρόσβασης (Getters)
Οι μέθοδοι πρόσβασης, ή αλλιώς “getters”, χρησιμοποιούνται για την ανάγνωση της τιμής μιας ιδιότητας. Όταν καλείται μια μέθοδος πρόσβασης, επιστρέφει την τιμή του αντίστοιχου πεδίου της κλάσης. Οι getters συχνά χρησιμοποιούνται για να εξασφαλίσουν ότι η τιμή που επιστρέφεται είναι σωστή και έγκυρη.
Μέθοδοι Τροποποίησης (Setters)
Οι μέθοδοι τροποποίησης, ή αλλιώς “setters”, χρησιμοποιούνται για την εγγραφή μιας τιμής σε μια ιδιότητα. Όταν καλείται μια μέθοδος τροποποίησης, λαμβάνει μια παράμετρο που αντιπροσωπεύει τη νέα τιμή και την αποθηκεύει στο αντίστοιχο πεδίο της κλάσης. Οι setters επιτρέπουν την προσθήκη λογικής για τον έλεγχο της τιμής που αποθηκεύεται, όπως η επικύρωση των δεδομένων.
Παράδειγμα Χρήσης Getters και Setters
Για να κατανοήσουμε καλύτερα πώς λειτουργούν οι getters και setters, ας δούμε ένα παράδειγμα με μια κλάση που αντιπροσωπεύει έναν τραπεζικό λογαριασμό.
Κλάση BankAccount
με Getters και Setters
public class BankAccount
{
// Ιδιωτικό πεδίο για την αποθήκευση του υπολοίπου
private double balance;
// Ιδιότητα για το υπόλοιπο
public double Balance
{
get
{
// Μέθοδος πρόσβασης (getter) – Επιστρέφει την τιμή του balance
return balance;
}
set
{
// Μέθοδος τροποποίησης (setter) – Θέτει μια νέα τιμή στο balance
// Ελέγχει αν η νέα τιμή είναι μη αρνητική
if (value >= 0)
{
balance = value;
}
else
{
Console.WriteLine(“The balance cannot be negative.”);
}
}
}
}
Χρήση της Κλάσης BankAccount
public class Program
{
public static void Main()
{
// Δημιουργία ενός αντικειμένου BankAccount
BankAccount account = new BankAccount();
// Χρήση του setter για την αρχικοποίηση του υπολοίπου
account.Balance = 1000.0; // Θέτει το υπόλοιπο σε 1000.0
// Χρήση του getter για την ανάγνωση του υπολοίπου
Console.WriteLine($"Balance: {account.Balance}"); // Εμφανίζει το υπόλοιπο: 1000.0
// Προσπάθεια θέσης αρνητικής τιμής
account.Balance = -500.0; // Εμφανίζει μήνυμα σφάλματος και δεν αλλάζει το υπόλοιπο
// Έλεγχος υπολοίπου μετά την προσπάθεια αρνητικής θέσης
Console.WriteLine($"Balance: {account.Balance}"); // Εμφανίζει το υπόλοιπο: 1000.0
}
}
τη σύγχρονη C#, υπάρχει ένας πιο συνοπτικός και εύκολος τρόπος για να γράφουμε getters και setters, ο οποίος ονομάζεται “auto-implemented properties”. Αυτός ο τρόπος μας επιτρέπει να δηλώνουμε ιδιότητες χωρίς να χρειάζεται να ορίζουμε ρητά τα αντίστοιχα πεδία (fields).
Auto-Implemented Properties
Οι auto-implemented properties μας επιτρέπουν να δηλώσουμε μια ιδιότητα χωρίς να γράφουμε τον πλήρη κώδικα για τους getters και setters. Ο μεταγλωττιστής (compiler) δημιουργεί αυτόματα το αντίστοιχο ιδιωτικό πεδίο (private field) για εμάς.
Παράδειγμα Χρήσης Auto-Implemented Properties
Ας δούμε ένα παράδειγμα χρησιμοποιώντας την κλάση BankAccount
με auto-implemented properties:
public class BankAccount
{
// Auto-implemented property για το υπόλοιπο
public double Balance { get; set; }
// Auto-implemented property για τον αριθμό λογαριασμού
public string AccountNumber { get; set; }
// Κατασκευαστής
public BankAccount(string accountNumber, double initialBalance)
{
AccountNumber = accountNumber;
Balance = initialBalance;
}
// Μέθοδος για εμφάνιση πληροφοριών του λογαριασμού
public string GetAccountInfo()
{
return $"Account Number: {AccountNumber}, Balance: {Balance}";
}
}
Προσθήκη Λογικής στους Getters και Setters
Αν χρειάζεται να προσθέσουμε λογική στους getters και setters, μπορούμε να το κάνουμε χρησιμοποιώντας τη σύνταξη με την οποία ορίζουμε ρητά τους getters και setters. Ας δούμε πώς μπορούμε να προσθέσουμε λογική επικύρωσης στο setter της ιδιότητας Balance
:
public class BankAccount
{
private double balance;
// Ιδιότητα με λογική στον setter
public double Balance
{
get { return balance; }
set
{
if (value >= 0)
{
balance = value;
}
else
{
Console.WriteLine("The balance cannot be negative.");
}
}
}
public string AccountNumber { get; set; }
public BankAccount(string accountNumber, double initialBalance)
{
AccountNumber = accountNumber;
Balance = initialBalance;
}
public string GetAccountInfo()
{
return $"Account Number: {AccountNumber}, Balance: {Balance}";
}
}
Μόνο-Ανάγνωσης (Read-Only) Ιδιότητες
Μπορούμε επίσης να ορίσουμε μόνο-ανάγνωσης ιδιότητες χρησιμοποιώντας μόνο έναν getter χωρίς setter, καθιστώντας την ιδιότητα μόνο-ανάγνωσης μετά την αρχικοποίηση.
public class BankAccount
{
public double Balance { get; private set; }
public string AccountNumber { get; private set; }
public BankAccount(string accountNumber, double initialBalance)
{
AccountNumber = accountNumber;
Balance = initialBalance;
}
public string GetAccountInfo()
{
return $"Account Number: {AccountNumber}, Balance: {Balance}";
}
public void Deposit(double amount)
{
if (amount > 0)
{
Balance += amount;
Console.WriteLine($"Deposited: ${amount}. New Balance: ${Balance}");
}
else
{
Console.WriteLine("Deposit amount must be positive.");
}
}
public void Withdraw(double amount)
{
if (amount > 0 && amount <= Balance)
{
Balance -= amount;
Console.WriteLine($"Withdrew: ${amount}. New Balance: ${Balance}");
}
else
{
Console.WriteLine("Invalid withdraw amount.");
}
}
}
Οι σύγχρονοι τρόποι δήλωσης ιδιοτήτων με auto-implemented properties κάνουν τον κώδικα πιο καθαρό και ευανάγνωστο, επιτρέποντας στον προγραμματιστή να επικεντρωθεί στη λογική της εφαρμογής αντί να ασχολείται με την διαχείριση των πεδίων. Η δυνατότητα προσθήκης λογικής στους getters και setters επιτρέπει επίσης τον έλεγχο και την επικύρωση των δεδομένων, διατηρώντας την ευελιξία και την ασφάλεια της εφαρμογής.
Πλεονεκτήματα Χρήσης Getters και Setters
- Ελεγχόμενη Πρόσβαση: Οι getters και setters επιτρέπουν την προσθήκη λογικής για την επικύρωση και τον έλεγχο των τιμών που αποθηκεύονται ή ανακτώνται.
- Απόκρυψη Πληροφοριών: Επιτρέπουν την απόκρυψη των εσωτερικών δεδομένων της κλάσης και την έκθεση μόνο των απαραίτητων μεθόδων πρόσβασης.
- Ευελιξία: Παρέχουν ευελιξία στον τρόπο που διαχειριζόμαστε την αποθήκευση και την ανάγνωση των δεδομένων, καθιστώντας εύκολη την προσθήκη πρόσθετης λογικής όταν χρειαστεί.
- Συντήρηση Κώδικα: Η χρήση των ιδιοτήτων κάνει τον κώδικα πιο ευανάγνωστο και ευκολότερο στη συντήρηση, καθώς μπορούμε να αλλάξουμε την εσωτερική υλοποίηση χωρίς να αλλάξουμε τον εξωτερικό κώδικα που χρησιμοποιεί τις ιδιότητες.
Συνοψίζοντας
Οι ιδιότητες με getters και setters είναι ένας ισχυρός μηχανισμός στην C# που επιτρέπει την ασφαλή και ελεγχόμενη πρόσβαση στα δεδομένα των αντικειμένων. Χρησιμοποιώντας αυτές τις μεθόδους, μπορούμε να διασφαλίσουμε την ακεραιότητα των δεδομένων και να προσθέσουμε λογική επικύρωσης, καθιστώντας τον κώδικα μας πιο σταθερό και αξιόπιστο.
B. Μέθοδοι (Methods)
Οι μέθοδοι είναι λειτουργίες που μπορούν να εκτελεστούν από τα αντικείμενα της κλάσης. Μια μέθοδος ορίζει μια συγκεκριμένη συμπεριφορά ή λειτουργία που μπορεί να εκτελεστεί, όπως για παράδειγμα το να υπολογίζει μια τιμή, να εκτελεί μια διαδικασία, ή να αλληλεπιδρά με άλλες μεθόδους και ιδιότητες. Οι μέθοδοι μπορούν να έχουν παραμέτρους και να επιστρέφουν τιμές. Η δομή των μεθόδων περιλαμβάνει τον ορισμό της, τις παραμέτρους της και το σώμα της όπου υλοποιείται η λογική της.
Ας δούμε τα βασικά στοιχεία που αφορούν τις μεθόδους και παρέχονται με ένα παράδειγμα:
Δομή Μίας Μεθόδου
- Ορισμός της Μεθόδου (Method Signature): Περιλαμβάνει το όνομα της μεθόδου, τον τύπο επιστροφής (αν υπάρχει) και τις παραμέτρους (αν υπάρχουν).
def method_name(parameter1, parameter2):
2. Σώμα της Μεθόδου:
Αυτό είναι το τμήμα του κώδικα που υλοποιεί τη λογική της μεθόδου. Περιλαμβάνει όλες τις εντολές που εκτελούνται όταν καλείται η μέθοδος.
def method_name(parameter1, parameter2):
# Κώδικας που εκτελεί τη λειτουργία της μεθόδου
result = parameter1 + parameter2 return result
Παράδειγμα Κλάσης με Μεθόδους σε C#
Ας δημιουργήσουμε μια κλάση Calculator
που θα έχει μεθόδους για πρόσθεση και αφαίρεση.
using System;
public class Calculator
{
// Μέθοδος για πρόσθεση δύο αριθμών
public int Add(int a, int b)
{
return a + b;
}
// Μέθοδος για αφαίρεση δύο αριθμών
public int Subtract(int a, int b)
{
return a - b;
}
}
class Program
{
static void Main()
{
// Δημιουργία ενός αντικειμένου της κλάσης Calculator
Calculator calc = new Calculator();
// Κλήση της μεθόδου Add με παραμέτρους 5 και 3
int sumResult = calc.Add(5, 3);
Console.WriteLine("Sum: " + sumResult); // Εκτυπώνει: Sum: 8
// Κλήση της μεθόδου Subtract με παραμέτρους 10 και 4
int diffResult = calc.Subtract(10, 4);
Console.WriteLine("Difference: " + diffResult); // Εκτυπώνει: Difference: 6
}
}
public
σημαίνει ότι η κλάση και οι μέθοδοι είναι προσβάσιμοι από άλλα μέρη του προγράμματος.
Η μέθοδος Add
δέχεται δύο ακέραιες παραμέτρους (int a
και int b
) και επιστρέφει το άθροισμά τους.
Η μέθοδος Subtract
δέχεται επίσης δύο ακέραιες παραμέτρους και επιστρέφει τη διαφορά τους.
Η μέθοδος Main
είναι το σημείο εκκίνησης του προγράμματος.
Δημιουργούμε ένα αντικείμενο της κλάσης Calculator
και το αποθηκεύουμε στη μεταβλητή calc
.
Καλούμε τις μεθόδους Add
και Subtract
μέσω του αντικειμένου calc
και εκτυπώνουμε τα αποτελέσματα.
Σημαντικά Σημεία για τις Μεθόδους σε C#
- Τύπος Επιστροφής: Στον C#, οι μέθοδοι μπορούν να επιστρέφουν έναν τύπο δεδομένων (όπως
int
,double
,string
, κ.λπ.) ή να μην επιστρέφουν τίποτα (σε αυτή την περίπτωση χρησιμοποιείται η λέξη-κλειδίvoid
).
- Παράμετροι: Οι παράμετροι της μεθόδου πρέπει να δηλώνονται με τον τύπο τους πριν από το όνομα της παραμέτρου. Στο παράδειγμά μας, οι παράμετροι είναι τύπου
int
.
- Προσβασιμότητα: Οι μέθοδοι μπορούν να είναι
public
,private
,protected
, ή άλλες τροποποιητές προσβασιμότητας. Τοpublic
σημαίνει ότι η μέθοδος είναι προσβάσιμη από άλλα μέρη του προγράμματος, ενώ τοprivate
σημαίνει ότι η μέθοδος είναι προσβάσιμη μόνο από την κλάση στην οποία ορίζεται.
Γ. Κατασκευαστές (Constructors)
Οι κατασκευαστές είναι ειδικές μέθοδοι που καλούνται αυτόματα όταν δημιουργείται ένα νέο αντικείμενο από την κλάση. Ο κύριος σκοπός των κατασκευαστών είναι η αρχικοποίηση των δεδομένων του αντικειμένου. Ένας κατασκευαστής έχει το ίδιο όνομα με την κλάση και δεν έχει τύπο επιστροφής. Οι κατασκευαστές μπορούν να είναι πολλαπλοί με διαφορετικές παραμέτρους (overloading), επιτρέποντας έτσι τη δημιουργία αντικειμένων με διαφορετικούς τρόπους αρχικοποίησης.
Ας αναλύσουμε την έννοια των κατασκευαστών (constructors) στην C# και δούμε πώς χρησιμοποιούνται για την αρχικοποίηση των αντικειμένων. Οι κατασκευαστές είναι ειδικοί μέθοδοι που καλούνται αυτόματα κατά τη δημιουργία ενός αντικειμένου από μια κλάση. Ας δούμε τα βασικά χαρακτηριστικά και την εφαρμογή τους με παραδείγματα.
Κατασκευαστές στην C#
Χαρακτηριστικά Κατασκευαστών
- Όνομα:
- Ο κατασκευαστής έχει το ίδιο όνομα με την κλάση στην οποία ανήκει.
- Χωρίς Τύπο Επιστροφής:
- Οι κατασκευαστές δεν έχουν τύπο επιστροφής, ούτε
void
.
- Οι κατασκευαστές δεν έχουν τύπο επιστροφής, ούτε
- Αρχικοποίηση:
- Ο κύριος σκοπός τους είναι η αρχικοποίηση των δεδομένων του αντικειμένου.
- Πολλαπλοί Κατασκευαστές (Overloading):
- Μπορείς να ορίσεις πολλαπλούς κατασκευαστές στην ίδια κλάση με διαφορετικές παραμέτρους. Αυτό επιτρέπει τη δημιουργία αντικειμένων με διαφορετικούς τρόπους αρχικοποίησης.
Παράδειγμα στην C#
Ας δούμε ένα παράδειγμα με μια κλάση Person
που χρησιμοποιεί κατασκευαστές για να αρχικοποιήσει τα δεδομένα της.
using System;
public class Person
{
// Ιδιότητες της κλάσης
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
// Κατασκευαστής χωρίς παραμέτρους
public Person()
{
FirstName = "Unknown";
LastName = "Unknown";
Age = 0;
}
// Κατασκευαστής με παραμέτρους
public Person(string firstName, string lastName, int age)
{
FirstName = firstName;
LastName = lastName;
Age = age;
}
// Μέθοδος για εμφάνιση των στοιχείων του ατόμου
public void DisplayInfo()
{
Console.WriteLine($"Name: {FirstName} {LastName}, Age: {Age}");
}
}
class Program
{
static void Main()
{
// Δημιουργία αντικειμένου χρησιμοποιώντας τον κατασκευαστή χωρίς παραμέτρους
Person person1 = new Person();
person1.DisplayInfo(); // Εκτυπώνει: Name: Unknown Unknown, Age: 0
// Δημιουργία αντικειμένου χρησιμοποιώντας τον κατασκευαστή με παραμέτρους
Person person2 = new Person("John", "Doe", 30);
person2.DisplayInfo(); // Εκτυπώνει: Name: John Doe, Age: 30
}
}
Ο πρώτος κατασκευαστής (χωρίς παραμέτρους) αρχικοποιεί τις ιδιότητες με προεπιλεγμένες τιμές.
Ο δεύτερος κατασκευαστής (με παραμέτρους) επιτρέπει την αρχικοποίηση των ιδιοτήτων με συγκεκριμένες τιμές κατά τη δημιουργία του αντικειμένου.
Σημαντικά Σημεία
- Αρχικοποίηση: Οι κατασκευαστές επιτρέπουν την αρχικοποίηση των αντικειμένων με προκαθορισμένες ή προσαρμοσμένες τιμές.
- Πολλαπλοί Κατασκευαστές: Η δυνατότητα ύπαρξης πολλαπλών κατασκευαστών (overloading) ενισχύει την ευελιξία κατά τη δημιουργία αντικειμένων.
- Κατασκευαστής από Ειδικές Απαιτήσεις: Αν δεν ορίσεις καθόλου κατασκευαστή, ο C# παρέχει αυτόματα έναν προεπιλεγμένο κατασκευαστή χωρίς παραμέτρους που δεν κάνει τίποτα.
Περιορισμένες Μεταβλητές (Private Fields)
Οι περιορισμένες μεταβλητές είναι εσωτερικά δεδομένα της κλάσης και συνήθως δηλώνονται ως ιδιωτικές (private) για να περιοριστεί η άμεση πρόσβαση σε αυτές από εξωτερικό κώδικα. Αυτές οι μεταβλητές αποτελούν τα πραγματικά δεδομένα που αποθηκεύονται στην κλάση. Οι ιδιότητες συχνά χρησιμοποιούνται για να εκθέτουν τις τιμές των περιορισμένων μεταβλητών με ελεγχόμενο τρόπο. Οι περιορισμένες μεταβλητές είναι η θεμελιώδης αποθήκευση δεδομένων που χρειάζονται για την κατάσταση του αντικειμένου.
την C#, οι περιορισμένες μεταβλητές (ή αλλιώς private
μεταβλητές) είναι εσωτερικές μεταβλητές της κλάσης που δεν μπορούν να προσπελαστούν απευθείας από κώδικα που βρίσκεται εκτός της κλάσης. Αυτές οι μεταβλητές χρησιμοποιούνται για να αποθηκεύουν την εσωτερική κατάσταση ή τα δεδομένα της κλάσης, και συχνά δηλώνονται ως private
για να διασφαλίσουν την ενσωμάτωσή τους.
Εξήγηση και Παράδειγμα στην C#
Χαρακτηριστικά των Περιορισμένων Μεταβλητών
- Ορατότητα:
- Οι περιορισμένες μεταβλητές δηλώνονται ως
private
, που σημαίνει ότι είναι ορατές μόνο μέσα στην κλάση που τις δηλώνει. Αυτό περιορίζει την άμεση πρόσβαση από άλλες κλάσεις και βοηθά στη διατήρηση της ενσωμάτωσης της κλάσης.
- Οι περιορισμένες μεταβλητές δηλώνονται ως
- Σκοπός:
- Χρησιμοποιούνται για να αποθηκεύουν δεδομένα που σχετίζονται με την κατάσταση του αντικειμένου. Αυτό επιτρέπει στην κλάση να διαχειρίζεται και να ελέγχει πώς τα δεδομένα της τροποποιούνται.
- Εκθέτοντας Δεδομένα:
- Οι περιορισμένες μεταβλητές συχνά εκτίθενται μέσω δημόσιων ιδιοτήτων (properties) ή μεθόδων (methods), οι οποίες παρέχουν ελεγχόμενη πρόσβαση στις τιμές τους.
Παράδειγμα στην C#
Ας δούμε ένα παράδειγμα με μια κλάση Account
που χρησιμοποιεί περιορισμένες μεταβλητές για να αποθηκεύσει τον αριθμό λογαριασμού και το υπόλοιπο και χρησιμοποιεί ιδιότητες για να επιτρέπει την ελεγχόμενη πρόσβαση και τροποποίηση αυτών των δεδομένων.
using System;
public class Account
{
// Περιορισμένες μεταβλητές (private) που αποθηκεύουν τα δεδομένα της κλάσης
private string accountNumber;
private decimal balance;
// Δημόσιος κατασκευαστής για αρχικοποίηση του αντικειμένου
public Account(string accountNumber, decimal initialBalance)
{
this.accountNumber = accountNumber;
this.balance = initialBalance;
}
// Δημόσια ιδιότητα για πρόσβαση στο accountNumber
public string AccountNumber
{
get { return accountNumber; }
// Δεν παρέχουμε set, οπότε η ιδιότητα είναι μόνο για ανάγνωση
}
// Δημόσια ιδιότητα για πρόσβαση και τροποποίηση του balance
public decimal Balance
{
get { return balance; }
set
{
if (value >= 0) // Ελέγχουμε αν το νέο υπόλοιπο είναι θετικό
{
balance = value;
}
else
{
Console.WriteLine("Balance cannot be negative.");
}
}
}
// Δημόσια μέθοδος για καταθέσεις χρημάτων
public void Deposit(decimal amount)
{
if (amount > 0)
{
balance += amount;
}
else
{
Console.WriteLine("Deposit amount must be positive.");
}
}
// Δημόσια μέθοδος για αναλήψεις χρημάτων
public void Withdraw(decimal amount)
{
if (amount > 0 && amount <= balance)
{
balance -= amount;
}
else
{
Console.WriteLine("Invalid withdrawal amount.");
}
}
// Δημόσια μέθοδος για εμφάνιση του υπόλοιπου
public void DisplayBalance()
{
Console.WriteLine($"Account Number: {accountNumber}, Balance: {balance}");
}
}
class Program
{
static void Main()
{
// Δημιουργία ενός αντικειμένου Account
Account myAccount = new Account("123456789", 1000m);
// Εμφάνιση του αρχικού υπολοίπου
myAccount.DisplayBalance(); // Εκτυπώνει: Account Number: 123456789, Balance: 1000
// Κατάθεση χρημάτων
myAccount.Deposit(500m);
myAccount.DisplayBalance(); // Εκτυπώνει: Account Number: 123456789, Balance: 1500
// Ανάληψη χρημάτων
myAccount.Withdraw(200m);
myAccount.DisplayBalance(); // Εκτυπώνει: Account Number: 123456789, Balance: 1300
// Δοκιμή αρνητικού υπολοίπου
myAccount.Balance = -100m; // Εκτυπώνει: Balance cannot be negative.
myAccount.DisplayBalance(); // Εκτυπώνει: Account Number: 123456789, Balance: 1300
}
}
Ανάλυση του Κώδικα
- Περιορισμένες Μεταβλητές:
private string accountNumber;
private decimal balance;
-
- Οι μεταβλητές
accountNumber
καιbalance
είναιprivate
, επομένως δεν μπορούν να προσπελαστούν απευθείας από εξωτερικό κώδικα.
- Οι μεταβλητές
- Ιδιότητες:
AccountNumber
: Είναιpublic
μόνο για ανάγνωση, παρέχοντας πρόσβαση στοaccountNumber
χωρίς να επιτρέπει αλλαγές.Balance
: Είναιpublic
με ελεγχόμενο setter, ο οποίος διασφαλίζει ότι το υπόλοιπο δεν μπορεί να γίνει αρνητικό.
- Μέθοδοι:
Deposit(decimal amount)
: Προσθέτει χρήματα στο υπόλοιπο αν το ποσό είναι θετικό.Withdraw(decimal amount)
: Αφαιρεί χρήματα από το υπόλοιπο αν το ποσό είναι θετικό και δεν υπερβαίνει το υπόλοιπο.DisplayBalance()
: Εμφανίζει τον αριθμό του λογαριασμού και το υπόλοιπο.
Σημαντικά Σημεία
- Αποκρυψη Δεδομένων: Οι περιορισμένες μεταβλητές εξασφαλίζουν την προστασία των δεδομένων της κλάσης, αποτρέποντας άμεσες τροποποιήσεις και επιτρέποντας μόνο ελεγχόμενη πρόσβαση μέσω ιδιοτήτων και μεθόδων.
- Ελεγχόμενη Πρόσβαση: Οι ιδιότητες παρέχουν έναν ασφαλή τρόπο να ελέγχεις την πρόσβαση και τις τροποποιήσεις των περιορισμένων μεταβλητών.
- Σχεδίαση Κλάσης: Η σωστή χρήση περιορισμένων μεταβλητών και ιδιοτήτων βοηθά στη διατήρηση της ενσωμάτωσης της κλάσης και στη διαχείριση της κατάστασης του αντικειμένου.
Αυτό το παράδειγμα δείχνει πώς μπορείς να χρησιμοποιήσεις περιορισμένες μεταβλητές στην C# για να αποθηκεύσεις και να ελέγξεις την κατάσταση ενός αντικειμένου.
Συνοψίζοντας
Μια κλάση στην C# είναι μια οργανωμένη δομή που περιλαμβάνει:
- Δήλωση Κλάσης: Χρησιμοποιώντας τη λέξη-κλειδί
class
για να ορίσουμε την κλάση. - Ιδιότητες (Properties): Για την αποθήκευση και διαχείριση δεδομένων με ελεγχόμενο τρόπο.
- Μέθοδοι (Methods): Για την υλοποίηση της συμπεριφοράς και των λειτουργιών που μπορεί να εκτελεί το αντικείμενο.
- Κατασκευαστές (Constructors): Για την αρχικοποίηση των αντικειμένων κατά τη δημιουργία τους.
- Περιορισμένες Μεταβλητές (Fields): Για την αποθήκευση των εσωτερικών δεδομένων της κλάσης.
Αυτά τα στοιχεία συνδυάζονται για να δημιουργήσουν ισχυρές και επαναχρησιμοποιήσιμες δομές που διευκολύνουν τη διαχείριση της πολυπλοκότητας του λογισμικού και προάγουν την καλή οργάνωση του κώδικα.
Παράδειγμα Κλάσης
Ας δούμε ένα πιο λεπτομερές παράδειγμα μιας κλάσης Car
:
public class Car
{
// Περιορισμένες μεταβλητές (Fields)
private string color;
private string model;
private int speed;
// Ιδιότητες (Properties) - Διαχειρίζονται την πρόσβαση στις περιορισμένες μεταβλητές
public string Color
{
get { return color; }
set { color = value; }
}
public string Model
{
get { return model; }
set { model = value; }
}
public int Speed
{
get { return speed; }
private set { speed = value; } // Μπορεί να ρυθμιστεί μόνο εσωτερικά
}
// Κατασκευαστής (Constructor) - Καλείται όταν δημιουργείται ένα αντικείμενο
public Car(string color, string model)
{
this.color = color;
this.model = model;
this.speed = 0; // Αρχική ταχύτητα
}
// Μέθοδοι (Methods) - Λειτουργίες που μπορεί να εκτελέσει το αντικείμενο
public void Drive(int increase)
{
speed += increase;
Console.WriteLine($"The car is now driving at {speed} km/h.");
}
public void Stop()
{
speed = 0;
Console.WriteLine("The car has stopped.");
}
}
Λεπτομέρειες
- Περιορισμένες Μεταβλητές (Fields): Είναι ιδιωτικές μεταβλητές (private) που χρησιμοποιούνται για την αποθήκευση δεδομένων. Μόνο ο κώδικας μέσα στην κλάση μπορεί να τις προσπελάσει άμεσα.
- Ιδιότητες (Properties): Παρέχουν έναν τρόπο για να διαβάζουμε και να γράφουμε τις τιμές των περιορισμένων μεταβλητών. Οι ιδιότητες μπορούν να έχουν
get
καιset
μεθόδους. Οget
επιστρέφει την τιμή της ιδιότητας, ενώ οset
ορίζει την τιμή της ιδιότητας. - Κατασκευαστής (Constructor): Είναι μια ειδική μέθοδος που έχει το ίδιο όνομα με την κλάση και καλείται όταν δημιουργείται ένα αντικείμενο από την κλάση. Χρησιμοποιείται για την αρχικοποίηση των δεδομένων του αντικειμένου.
- Μέθοδοι (Methods): Είναι οι λειτουργίες που μπορούν να εκτελεστούν από το αντικείμενο. Στο παράδειγμα, η μέθοδος
Drive
αυξάνει την ταχύτητα του αυτοκινήτου και η μέθοδοςStop
σταματά το αυτοκίνητο.
Χρήση Κλάσεων
Ας δούμε πώς μπορούμε να χρησιμοποιήσουμε την κλάση Car
για να δημιουργήσουμε και να διαχειριστούμε αντικείμενα:
public class Program
{
public static void Main()
{
// Δημιουργία αντικειμένων από την κλάση Car
Car myCar = new Car("Red", "Toyota");
Car anotherCar = new Car("Blue", "Ford");
// Χρήση των αντικειμένων
myCar.Drive(50); // "The car is now driving at 50 km/h."
anotherCar.Drive(60); // "The car is now driving at 60 km/h."
myCar.Stop(); // "The car has stopped."
}
}
Σημαντικές Έννοιες
- Κληρονομικότητα (Inheritance): Επιτρέπει τη δημιουργία νέων κλάσεων βασισμένων σε υπάρχουσες κλάσεις.
- Πολυμορφισμός (Polymorphism): Επιτρέπει τη χρήση μιας μεθόδου με διαφορετικούς τρόπους.
- Ενθυλάκωση (Encapsulation): Κρύβει την εσωτερική κατάσταση ενός αντικειμένου και επιτρέπει την πρόσβαση μόνο μέσω ιδιοτήτων και μεθόδων.
Η χρήση κλάσεων και αντικειμένων βοηθά στη δημιουργία κώδικα που είναι πιο οργανωμένος, επαναχρησιμοποιήσιμος και ευκολότερος στη συντήρηση.
2. Τι είναι τα Αντικείμενα (Objects)
Τα αντικείμενα είναι οι πραγματικές “υλοποιήσεις” της κλάσης. Στην πραγματική ζωή, είναι σαν τα πραγματικά αυτοκινητάκια που φτιάξαμε με το σχέδιο (κλάση).
Παράδειγμα Δημιουργίας Αντικειμένων:
// Δημιουργία ενός αυτοκινητάκι (αντικείμενο) από την κλάση Car
Car myCar = new Car();
myCar.Color = "Red";
myCar.Model = "Toyota";
// Χρήση των ενεργειών του αυτοκινητακιού
myCar.Drive();
myCar.Stop();
Που χρησιμεύουν οι Κλάσεις και τα Αντικείμενα;
- Οργάνωση Κώδικα: Οι κλάσεις βοηθούν να οργανώσουμε τον κώδικά μας σε κομμάτια που έχουν νόημα. Αν έχουμε ένα παιχνίδι με πολλά διαφορετικά πράγματα (π.χ. αυτοκινητάκια, μοτοσυκλέτες, ανθρώπους), μπορούμε να έχουμε μια κλάση για κάθε είδος.
- Επαναχρησιμοποίηση Κώδικα: Αν θέλουμε να φτιάξουμε πολλά αυτοκινητάκια στο παιχνίδι μας, δεν χρειάζεται να γράφουμε τον ίδιο κώδικα ξανά και ξανά. Απλά φτιάχνουμε την κλάση Car μια φορά και μετά μπορούμε να δημιουργούμε όσα αντικείμενα θέλουμε από αυτήν.
- Ευκολία στη Συντήρηση: Αν χρειαστεί να αλλάξουμε κάτι στον τρόπο που λειτουργούν τα αυτοκινητάκια, μπορούμε να το αλλάξουμε στην κλάση και αυτόματα όλες οι υλοποιήσεις (αντικείμενα) θα ενημερωθούν.
Πώς λειτουργούν;
- Κατασκευαστής (Constructor): Είναι μια ειδική μέθοδος που καλείται όταν δημιουργούμε ένα νέο αντικείμενο. Συνήθως χρησιμοποιείται για να αρχικοποιήσει τα χαρακτηριστικά του αντικειμένου.
public class Car
{
public string Color { get; set; }
public string Model { get; set; }
// Κατασκευαστής
public Car(string color, string model)
{
Color = color;
Model = model;
}
public void Drive()
{
Console.WriteLine("The car is driving.");
}
public void Stop()
{
Console.WriteLine("The car has stopped.");
}
}
// Δημιουργία αντικειμένου με τον κατασκευαστή
Car myCar = new Car("Red", "Toyota");
- Ιδιότητες (Properties): Χρησιμοποιούνται για να διαβάζουμε και να γράφουμε τις τιμές των χαρακτηριστικών ενός αντικειμένου.
- Μέθοδοι (Methods): Είναι οι ενέργειες που μπορεί να κάνει το αντικείμενο.
Με αυτή τη δομή, μπορούμε να δημιουργούμε πολύπλοκα προγράμματα με οργανωμένο και ευανάγνωστο κώδικα.
Ας εξετάσουμε τα αντικείμενα στην C# πιο αναλυτικά. Τα αντικείμενα είναι οι υλοποιήσεις των κλάσεων και είναι ένας από τους θεμελιώδεις λίθους του αντικειμενοστραφούς προγραμματισμού (OOP).
Τι Είναι τα Αντικείμενα;
Ένα αντικείμενο είναι μια συγκεκριμένη παρουσία μιας κλάσης. Εάν σκεφτούμε την κλάση ως ένα σχέδιο (blueprint) ή πρότυπο, τότε το αντικείμενο είναι το πραγματικό προϊόν που δημιουργείται από αυτό το σχέδιο.
Δημιουργία Αντικειμένων
Για να δημιουργήσουμε ένα αντικείμενο, χρησιμοποιούμε την λέξη-κλειδί new
, η οποία καλεί τον κατασκευαστή της κλάσης και επιστρέφει ένα νέο αντικείμενο αυτής της κλάσης.
Παράδειγμα Δημιουργίας Αντικειμένου:
// Δημιουργία αντικειμένου από την κλάση Car
Car myCar = new Car(“Red”, “Toyota”);
Ιδιότητες των Αντικειμένων
Τα αντικείμενα έχουν ιδιότητες (properties) που καθορίζονται από την κλάση τους. Οι ιδιότητες αυτές μπορεί να είναι δεδομένα όπως χρώμα, μοντέλο, ταχύτητα κλπ.
Παράδειγμα Χρήσης Ιδιοτήτων:
// Πρόσβαση στις ιδιότητες του αντικειμένου
string carColor = myCar.Color;
string carModel = myCar.Model;
Console.WriteLine($"Car Color: {carColor}, Car Model: {carModel}");
Μέθοδοι των Αντικειμένων
Τα αντικείμενα μπορούν να εκτελέσουν ενέργειες μέσω των μεθόδων τους. Αυτές οι μέθοδοι καθορίζονται επίσης από την κλάση.
Παράδειγμα Χρήσης Μεθόδων:
// Κλήση μεθόδων του αντικειμένου
myCar.Drive(50); // Αυξάνει την ταχύτητα κατά 50 km/h
myCar.Stop(); // Σταματά το αυτοκίνητο
Δημιουργία Πολλαπλών Αντικειμένων
Μπορούμε να δημιουργήσουμε πολλά αντικείμενα από την ίδια κλάση, και κάθε αντικείμενο θα έχει τη δική του κατάσταση (state).
Παράδειγμα:
// Δημιουργία πολλαπλών αντικειμένων από την κλάση Car
Car myCar = new Car("Red", "Toyota");
Car anotherCar = new Car("Blue", "Ford");
myCar.Drive(50); // The car is now driving at 50 km/h.
anotherCar.Drive(60); // The car is now driving at 60 km/h.
Αναλυτική Παρουσίαση
Ας αναλύσουμε την έννοια των αντικειμένων με περισσότερες λεπτομέρειες:
Κατασκευαστές (Constructors)
Οι κατασκευαστές είναι ειδικές μέθοδοι που καλούνται κατά τη δημιουργία ενός αντικειμένου. Χρησιμοποιούνται για την αρχικοποίηση των δεδομένων του αντικειμένου.
public class Car
{
public string Color { get; set; }
public string Model { get; set; }
public int Speed { get; private set; }
// Κατασκευαστής
public Car(string color, string model)
{
Color = color;
Model = model;
Speed = 0; // Αρχική ταχύτητα
}
public void Drive(int increase)
{
Speed += increase;
Console.WriteLine($"The car is now driving at {Speed} km/h.");
}
public void Stop()
{
Speed = 0;
Console.WriteLine("The car has stopped.");
}
}
Δημιουργία και Χρήση Αντικειμένων:
public class Program
{
public static void Main()
{
// Δημιουργία αντικειμένων από την κλάση Car
Car myCar = new Car("Red", "Toyota");
Car anotherCar = new Car("Blue", "Ford");
// Χρήση των αντικειμένων
myCar.Drive(50); // The car is now driving at 50 km/h.
anotherCar.Drive(60); // The car is now driving at 60 km/h.
myCar.Stop(); // The car has stopped.
}
}
Αντικείμενα και Μνήμη
Κάθε φορά που δημιουργούμε ένα αντικείμενο, καταλαμβάνει χώρο στη μνήμη. Κάθε αντικείμενο έχει τη δική του κατάσταση που είναι ανεξάρτητη από τα άλλα αντικείμενα της ίδιας κλάσης.
Αναφορά σε Αντικείμενα (References)
Όταν δημιουργούμε ένα αντικείμενο, η μεταβλητή που το αποθηκεύει είναι στην πραγματικότητα μια αναφορά στο αντικείμενο.
Car myCar = new Car("Red", "Toyota");
Car anotherCar = myCar; // anotherCar αναφέρεται στο ίδιο αντικείμενο με το myCar
myCar.Drive(50);
anotherCar.Stop(); // Σταματά το ίδιο αντικείμενο που αναφέρεται και από τις δύο μεταβλητές
Στο παραπάνω παράδειγμα, myCar
και anotherCar
αναφέρονται στο ίδιο αντικείμενο. Οποιαδήποτε αλλαγή γίνει μέσω της μιας μεταβλητής επηρεάζει και την άλλη, αφού αναφέρονται στο ίδιο αντικείμενο στη μνήμη.
Οφέλη από τη Χρήση Αντικειμένων
- Οργάνωση Κώδικα: Βοηθά στη διατήρηση του κώδικα οργανωμένου και ευανάγνωστου.
- Επαναχρησιμοποίηση Κώδικα: Μπορούμε να δημιουργούμε πολλαπλά αντικείμενα από την ίδια κλάση χωρίς να γράφουμε τον ίδιο κώδικα ξανά και ξανά.
- Ευκολία στη Συντήρηση: Οι αλλαγές στην κλάση επηρεάζουν αυτόματα όλα τα αντικείμενα που έχουν δημιουργηθεί από αυτήν την κλάση.
- Απόκρυψη Πολυπλοκότητας: Οι λεπτομέρειες της υλοποίησης μπορούν να κρυφτούν μέσα στην κλάση, παρέχοντας έναν καθαρό και απλό τρόπο χρήσης μέσω των ιδιοτήτων και μεθόδων της κλάσης.
Τα αντικείμενα αποτελούν την καρδιά του αντικειμενοστραφούς προγραμματισμού και μας επιτρέπουν να γράφουμε κώδικα που είναι πιο κοντά στην ανθρώπινη σκέψη και την πραγματική ζωή.
Τι είναι τα αντικείμενα στην C#;
Στην C#, τα αντικείμενα (objects) είναι μια από τις θεμελιώδεις έννοιες του προγραμματισμού, ειδικά στον αντικειμενοστραφή προγραμματισμό (Object-Oriented Programming – OOP). Ένα αντικείμενο είναι μια “οντότητα” που δημιουργείται από μια κλάση (class). Μπορείς να σκεφτείς την κλάση σαν ένα σχέδιο (blueprint) και τα αντικείμενα σαν τις πραγματικές υλοποιήσεις αυτού του σχεδίου.
Κλάση και Αντικείμενο
- Κλάση (class): Είναι το σχέδιο που περιγράφει τα χαρακτηριστικά (μεταβλητές) και τις λειτουργίες (μεθόδους) που μπορεί να έχει ένα αντικείμενο.
- Αντικείμενο (object): Είναι η πραγματική υλοποίηση μιας κλάσης. Όταν δημιουργείς ένα αντικείμενο, δημιουργείς μια μοναδική εκδοχή της κλάσης που μπορεί να χρησιμοποιηθεί για αποθήκευση δεδομένων και εκτέλεση λειτουργιών.
Πώς δημιουργείς μια κλάση και ένα αντικείμενο;
Παράδειγμα Κλάσης:
// Δημιουργία μιας κλάσης Car
public class Car
{
// Ιδιότητες (χαρακτηριστικά) της κλάσης
public string Brand { get; set; }
public string Model { get; set; }
public int Year { get; set; }
// Μέθοδος της κλάσης
public void Drive()
{
Console.WriteLine($"{Brand} {Model} is driving!");
}
}
Δημιουργία Αντικειμένου:
class Program
{
static void Main()
{
// Δημιουργία ενός αντικειμένου της κλάσης Car
Car myCar = new Car();
// Αρχικοποίηση των ιδιοτήτων του αντικειμένου
myCar.Brand = "Toyota";
myCar.Model = "Corolla";
myCar.Year = 2020;
// Κλήση της μεθόδου Drive
myCar.Drive(); // Εκτυπώνει: "Toyota Corolla is driving!"
}
}
Αναλυτικά τι γίνεται:
- Η κλάση
Car
:- Έχει τρεις ιδιότητες (Brand, Model, Year) που περιγράφουν το αυτοκίνητο.
- Έχει μια μέθοδο (Drive()) που εκτελεί τη λειτουργία του αυτοκινήτου, εκτυπώνοντας ένα μήνυμα.
- Το αντικείμενο
myCar
:- Το αντικείμενο
myCar
είναι μια συγκεκριμένη υλοποίηση της κλάσηςCar
. - Κάθε αντικείμενο της κλάσης μπορεί να έχει διαφορετικές τιμές για τις ιδιότητες του. Στην περίπτωση μας, το
myCar
είναι ένα αυτοκίνητο της Toyota με μοντέλο Corolla και έτος κατασκευής 2020.
- Το αντικείμενο
- Αρχικοποίηση και χρήση:
- Αρχικοποιούμε τις ιδιότητες του αντικειμένου χρησιμοποιώντας τις ιδιότητες
Brand
,Model
, καιYear
. - Καλούμε τη μέθοδο Drive() για να εκτελέσει τη λειτουργία του αυτοκινήτου.
- Αρχικοποιούμε τις ιδιότητες του αντικειμένου χρησιμοποιώντας τις ιδιότητες
Δημιουργία πολλών αντικειμένων:
Μπορείς να δημιουργήσεις πολλά αντικείμενα από την ίδια κλάση, το καθένα με διαφορετικές τιμές για τις ιδιότητες του.
class Program
{
static void Main()
{
// Δημιουργία δύο αντικειμένων της κλάσης Car
Car car1 = new Car();
car1.Brand = “Toyota”;
car1.Model = “Corolla”;
car1.Year = 2020;
Car car2 = new Car();
car2.Brand = "Honda";
car2.Model = "Civic";
car2.Year = 2018;
// Κλήση της μεθόδου Drive και για τα δύο αντικείμενα
car1.Drive(); // Εκτυπώνει: "Toyota Corolla is driving!"
car2.Drive(); // Εκτυπώνει: "Honda Civic is driving!"
}
}
Σημαντικές έννοιες για τα αντικείμενα:
- Κατασκευαστής (Constructor):
- Ο κατασκευαστής είναι μια ειδική μέθοδος που χρησιμοποιείται για να αρχικοποιήσει τα αντικείμενα όταν δημιουργούνται.
- Αν δεν δηλώσεις κάποιον κατασκευαστή, η C# χρησιμοποιεί έναν προεπιλεγμένο (default) κατασκευαστή.
public class Car
{
public string Brand { get; set; }
public string Model { get; set; }
public int Year { get; set; }
// Κατασκευαστής
public Car(string brand, string model, int year)
{
Brand = brand;
Model = model;
Year = year;
}
public void Drive()
{
Console.WriteLine($"{Brand} {Model} is driving!");
}
}
class Program
{
static void Main()
{
// Δημιουργία αντικειμένου με τον κατασκευαστή
Car myCar = new Car("Ford", "Focus", 2019);
myCar.Drive(); // Εκτυπώνει: "Ford Focus is driving!"
}
}
Ιδιότητες (Properties):
- Οι ιδιότητες είναι μέλη της κλάσης που επιτρέπουν να διαβάζουμε ή να γράφουμε τιμές στα χαρακτηριστικά του αντικειμένου. Συνήθως χρησιμοποιούνται με τη μορφή
get
καιset
.
public string Brand { get; set; }
- Μέθοδοι (Methods):
- Οι μέθοδοι είναι λειτουργίες που μπορεί να εκτελεί ένα αντικείμενο. Οι μέθοδοι μπορεί να αλλάζουν την κατάσταση του αντικειμένου ή να εκτελούν κάποια εργασία χωρίς να αλλάζουν τις ιδιότητες.
- Κατάσταση του αντικειμένου:
- Η κατάσταση ενός αντικειμένου καθορίζεται από τις τιμές των ιδιοτήτων του σε οποιαδήποτε δεδομένη στιγμή.
Συμπέρασμα:
- Τα αντικείμενα είναι η “πραγματική υλοποίηση” μιας κλάσης.
- Μια κλάση είναι το “σχέδιο”, και τα αντικείμενα είναι τα “αντίγραφα” αυτού του σχεδίου που μπορείς να χρησιμοποιήσεις στον κώδικα.
- Τα αντικείμενα έχουν ιδιότητες που αποθηκεύουν δεδομένα και μεθόδους που εκτελούν λειτουργίες.