1.1 Ο αντικειμενοστρεφής προγραμματισμός στην Java

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

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

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

Ο αντικειμενοστραφής προγραμματισμός προσφέρει πολλά πλεονεκτήματα σε σχέση με τον προγραμματισμό διαδικαστικής λογικής:

  1. Ταχύτητα και ευκολία εκτέλεσης: Ο αντικειμενοστραφής προγραμματισμός επιτρέπει την παράλληλη εκτέλεση πολλαπλών νημάτων, βελτιώνοντας έτσι την απόδοση των εφαρμογών.
  2. Καθαρή δομή προγραμμάτων: Ο αντικειμενοστραφής προγραμματισμός επιτρέπει τη χρήση σαφών και καλά οργανωμένων δομών κώδικα, καθιστώντας την ανάγνωση και συντήρηση του προγράμματος πιο ευκολη και γρήγορη.
  3. Αρχή του “Μην επαναλαμβάνεσαι” (DRY): Ο αντικειμενοστραφής προγραμματισμός προωθεί την επαναχρησιμοποίηση του κώδικα, καθώς οι μέθοδοι και οι κλάσεις μπορούν να επαναχρησιμοποιηθούν σε διάφορα μέρη του προγράμματος.
  4. Συντομότερος χρόνος ανάπτυξης εφαρμογών: Ο αντικειμενοστραφής προγραμματισμός επιτρέπει την ανάπτυξη εφαρμογών με λιγότερο κώδικα και μικρότερο χρόνο ανάπτυξης, καθώς οι αντικειμενοστραφείς εφαρμογές απαιτούν λιγότερο κώδικα σε σύγκριση με τις διαδικαστικές εφαρμογές.
  5. Ευκολία στη διαχείριση του κώδικα: Ο αντικειμενοστραφής προγραμματισμός επιτρέπει τη διαχωρισμό του κώδικα σε μικρότερα τμήματα και την οργάνωσή του σε λογικές κλάσεις και μεθόδους, πράγμα που διευκολύνει τη διαχείριση και την ανάπτυξη του προγράμματος.

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

Οι κλάσεις και τα αντικείμενα αποτελούν τις βασικές έννοιες της αντικειμενοστραφούς προγραμματισμού στην Java.

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

Τα αντικείμενα, από την άλλη πλευρά, είναι τα πραγματικά παραδείγματα της κλάσης. Δημιουργούνται από μια κλάση, και κάθε αντικείμενο έχει τις δικές του τιμές για τα χαρακτηριστικά που έχουν καθοριστεί στην κλάση.

Για παράδειγμα, μπορούμε να δημιουργήσουμε μια κλάση με το όνομα “Car”, η οποία θα περιέχει χαρακτηριστικά που περιγράφουν ένα αυτοκίνητο, όπως ο αριθμός των πορτών, η μέγιστη ταχύτητα και η μάρκα του αυτοκινήτου. Όταν δημιουργούμε ένα αντικείμενο της κλάσης “Car”, το αντικείμενο αυτό θα έχει τιμές για αυτά τα χαρακτηριστικά. Για παράδειγμα, θα ορίσουμε τον αριθμό των πορτών του αυτοκινήτου, τη μέγιστη ταχύτητα που μπορεί να αναπτύξει και τη μάρκα του αυτοκινήτου.

[adinserter block=”2″]

Στην Java, ο προγραμματισμός με κλάσεις και αντικείμενα είναι ένας αντικειμενοστραφής προγραμματισμός προσανατολισμένος στα αντικείμενα του πραγματικού κόσμου και στην δομή των πραγμάτων.

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

Για παράδειγμα, αν έχουμε μια κλάση με το όνομα “Car”, μπορούμε να δημιουργήσουμε ένα αντικείμενο της κλάσης χρησιμοποιώντας τη λέξη-κλειδί “new” και το όνομα της κλάσης, και στη συνέχεια να το αναθέσουμε σε μια μεταβλητή.

Για παράδειγμα, ας υποθέσουμε ότι η κλάση “Car” έχει τα χαρακτηριστικά “number_of_doors”, “max_speed” και “brand”. Μπορούμε να δημιουργήσουμε ένα αντικείμενο με το όνομα “car1” ως εξής:

Car car1 = new Car();

Με αυτόν τον τρόπο, δημιουργούμε ένα αντικείμενο της κλάσης “Car” και το αναθέτουμε στη μεταβλητή “car1”. Έπειτα, μπορούμε να χρησιμοποιήσουμε τη μεταβλητή “car1” για να αποκτήσουμε πρόσβαση στις μεθόδους και τα χαρακτηριστικά του αντικειμένου “car1”.

Αφού δημιουργήσετε ένα αντικείμενο από μια κλάση, μπορείτε να αναθέσετε τιμές στα χαρακτηριστικά του αντικειμένου χρησιμοποιώντας τον τελεστή “.” (dot operator). Για παράδειγμα, αν θέλουμε να ορίσουμε τον αριθμό των πορτών στο αυτοκίνητο “car1” στο 4, μπορούμε να το κάνουμε ως εξής:

car1.number_of_doors = 4;

Με αυτήν την ενέργεια, αναθέτουμε την τιμή 4 στο χαρακτηριστικό “number_of_doors” του αντικειμένου “car1”. Μπορούμε να χρησιμοποιήσουμε τον τελεστή “.” για να αποκτήσουμε πρόσβαση σε κάθε χαρακτηριστικό του αντικειμένου και να του αναθέσουμε μια τιμή.

Τέλος, μπορείτε να καλέσετε μια μέθοδο της κλάσης από ένα αντικείμενο χρησιμοποιώντας τον τελεστή “.”. Για παράδειγμα, αν θέλουμε να καλέσουμε τη μέθοδο “accelerate” για το αυτοκίνητο “car1”, μπορούμε να το κάνουμε ως εξής:

car1.accelerate();

Με αυτήν την ενέργεια, καλούμε τη μέθοδο “accelerate” για το αντικείμενο “car1”. Η μέθοδος αυτή θα εκτελέσει τον κώδικα που έχει οριστεί μέσα στη μέθοδο “accelerate”. Μπορείτε να χρησιμοποιήσετε τον τελεστή “.” για να καλέσετε οποιαδήποτε μέθοδο από το αντικείμενο και να εκτελέσετε τις ενέργειες που απαιτούνται από αυτήν.

Πλήρες παράδειγμα:

Βεβαιωθείτε ότι έχετε ορίσει την κλάση “Car” με τις αντίστοιχες μεθόδους και χαρακτηριστικά. Ακολουθεί ένα πλήρες παράδειγμα χρησιμοποιώντας τον παραπάνω κώδικα:

public class Car {
    private int numberOfDoors; // Αριθμός πόρτων του αυτοκινήτου
    private int maxSpeed; // Μέγιστη ταχύτητα του αυτοκινήτου
    private String brand; // Μάρκα του αυτοκινήτου

    public Car(int doors, int speed, String carBrand) {
        numberOfDoors = doors;
        maxSpeed = speed;
        brand = carBrand;
    }

    public int getMaxSpeed() {
        return maxSpeed;
    }

    public void accelerate() {
        System.out.println("The car is accelerating."); // Το αυτοκίνητο επιταχύνει
    }

    public void decelerate() {
        System.out.println("The car is decelerating."); // Το αυτοκίνητο επιβραδύνει
    }

    public static void main(String[] args) {
        Car car1 = new Car(4, 200, "Toyota"); // Δημιουργία ενός αντικειμένου αυτοκινήτου
        int speed = car1.getMaxSpeed(); // Ανάκτηση της μέγιστης ταχύτητας του αυτοκινήτου
        System.out.println("Max speed: " + speed); // Εκτύπωση της μέγιστης ταχύτητας

        car1.accelerate(); // Επιτάχυνση του αυτοκινήτου
        car1.decelerate(); // Επιβράδυνση του αυτοκινήτου
    }
}

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

Έχει έναν δημιουργό (constructor) που παίρνει τιμές για τις παραπάνω μεταβλητές και τις αποθηκεύει.

Η κλάση περιέχει επίσης δύο μεθόδους. Η μέθοδος getMaxSpeed() επιστρέφει τη μέγιστη ταχύτητα του αυτοκινήτου. Οι μέθοδοι accelerate() και decelerate() εκτυπώνουν μηνύματα που υποδεικνύουν την επιτάχυνση και την επιβράδυνση του αυτοκινήτου αντίστοιχα.

Τέλος, η κύρια μέθοδος main δημιουργεί ένα αντικείμενο της κλάσης “Car” με συγκεκριμένες τιμές για τον αριθμό των πορτών, τη μέγιστη ταχύτητα και τη μάρκα. Στη συνέχεια, εκτυπώνει τη μέγιστη ταχύτητα του αυτοκινήτου και καλεί τις μεθόδους accelerate() και decelerate() για να εκτυπώσει μηνύματα που αντιπροσωπεύουν την επιτάχυνση και την επιβράδυνση του αυτοκινήτου αντίστοιχα.

Το αποτέλεσμα που θα εμφανιστεί στην οθόνη αφού εκτελεστεί ο παραπάνω κώδικας είναι:

Max speed: 200
The car is accelerating.
The car is decelerating.

Πρώτα εκτυπώνεται η φράση “Max speed: 200”, που αντιστοιχεί στην τιμή της μέγιστης ταχύτητας του αυτοκινήτου. Στη συνέχεια, εκτυπώνονται τα μηνύματα “The car is accelerating.” και “The car is decelerating.” που αναπαριστούν την επιτάχυνση και την επιβράδυνση του αυτοκινήτου αντίστοιχα.

Παράδειγμα:

Έστω ότι θέλουμε να δημιουργήσουμε μια κλάση “Rectangle” για να αντιπροσωπεύει ένα ορθογώνιο με ύψος και πλάτος, και να παρέχει μια μέθοδο για τον υπολογισμό της εμβαδού του.

public class Rectangle {
    int height;  // Υψος του ορθογωνίου
    int width;   // Πλάτος του ορθογωνίου

    public int calculateArea() {
        return height * width;  // Υπολογισμός της εμβαδού (υψος * πλάτος)
    }
}

Ο παραπάνω κώδικας αναπαριστά μια κλάση με όνομα “Rectangle” (ορθογώνιο), η οποία έχει δύο μεταβλητές “height” (ύψος) και “width” (πλάτος). Αυτές οι μεταβλητές αντιπροσωπεύουν τις διαστάσεις ενός ορθογωνίου.

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

Οι σχόλιοι είναι κείμενο που προστίθεται μέσα στον κώδικα για να εξηγήσουν τον σκοπό ή τη λειτουργία των διάφορων τμημάτων του κώδικα. Στον παραπάνω κώδικα, οι σχόλιοι σας βοηθούν να κατανοήσετε ότι οι μεταβλητές “height” και “width” αντιπροσωπεύουν τις διαστάσεις του ορθογωνίου και η μέθοδος “calculateArea” υπολογίζει την εμβαδό του ορθογωνίου.

Για να χρησιμοποιήσουμε την κλάση, δημιουργούμε ένα αντικείμενο της κλάσης με τη χρήση του τελεστή “new” και το όνομα της κλάσης:

Rectangle rect = new Rectangle();

Έπειτα, μπορούμε να ορίσουμε το ύψος και το πλάτος του ορθογωνίου χρησιμοποιώντας τα χαρακτηριστικά του αντικειμένου “rect”:

rect.height = 5;
rect.width = 10;

Τέλος, μπορούμε να καλέσουμε τη μέθοδο “calculateArea” για να υπολογίσουμε το εμβαδόν του ορθογωνίου:

int area = rect.calculateArea();
System.out.println("The area of the rectangle is: " + area);

Παραπάνω εκτυπώνουμε την τιμή της μεταβλητής “area”, η οποία θα πρέπει να είναι ίση με 50 (5 * 10).

Πλήρες Παράδειγμα:

public class Main {
public static void main(String[] args) {
// Δημιουργία ενός αντικειμένου της κλάσης Rectangle
Rectangle rectangle = new Rectangle();

public class Rectangle {
    int height;  // Υψος του ορθογωνίου
    int width;   // Πλάτος του ορθογωνίου

    public int calculateArea() {
        return height * width;  // Υπολογισμός της εμβαδού (υψος * πλάτος)
    }
}

public class Main {
    public static void main(String[] args) {
        // Δημιουργία ενός αντικειμένου της κλάσης Rectangle
        Rectangle rectangle = new Rectangle();

        // Ορισμός των διαστάσεων του ορθογωνίου
        rectangle.height = 5;
        rectangle.width = 10;

        // Υπολογισμός και εκτύπωση της εμβαδού
        int area = rectangle.calculateArea();
        System.out.println("Η εμβαδό του ορθογωνίου είναι: " + area);
    }
}

Στο παραπάνω παράδειγμα, δημιουργούμε ένα αντικείμενο της κλάσης “Rectangle” με τη γραμμή κώδικας Rectangle rectangle = new Rectangle();. Στη συνέχεια, ορίζουμε τις διαστάσεις του ορθογωνίου χρησιμοποιώντας τις μεταβλητές rectangle.height και rectangle.width.

Έπειτα, χρησιμοποιούμε τη μέθοδο rectangle.calculateArea() για να υπολογίσουμε την εμβαδό του ορθογωνίου και αποθηκεύουμε το αποτέλεσμα στη μεταβλητή area. Τέλος, εκτυπώνουμε την εμβαδό με την εντολή System.out.println("Η εμβαδό του ορθογωνίου είναι: " + area);.

Όταν εκτελέσουμε το παραπάνω πρόγραμμα, θα εμφανιστεί το ακόλουθο αποτέλεσμα:

Η εμβαδό του ορθογωνίου είναι: 50

Αυτό επιβεβαιώνει ότι η εμβαδό του ορθογωνίου με ύψος 5 και πλάτος 10 είναι 50.

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