Log In

JAVA GUIDE - Κλάσεις (Μέρος 2ο)

Thunder's picture

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

 

 

Δημιουργία αντικειμένου

 

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

 

<όνομα κλάσης> <όνομα αντικειμένου> = new <όνομα κλάσης>(<ορίσματα της κλάσης αν υπάρχουν>)

 

***Αν η κλάση για την οποία θέλουμε να δημιουργήσουμε αντικείμενο δεν ανήκει στο ίδιο πακέτο τότε πρέπει στην αρχή του αρχείου να κάνουμε import το αντίστοιχο πακέτο.

 

Παράδειγμα 1

  Έστω ότι έχουμε ορίσει την κλάση Atomo που παίρνει τα ορίσματα: onoma, epitheto, ilikia και filo.

 

Atomo atomo1 = new Atomo("Kostas", "Papas", 35, "Andras");

 

Παράδειγμα 2

  Έστω ότι έχουμε ορίσει την κλάση Autokinhto που παίρνει τα ορίσματα: marka, montelo και kivika.

 

Autokinhto autokinhto1 = new Autokinhto("Ford", "Focus", 1400);

 

 

Constructor

 

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

 

public <όνομα κλάσης>(<ορίσματα αν υπάρχουν>) {

}

 

Παράδειγμα 3

public class Atomo {

            private String onoma;

            private String epitheto;

            private int ilikia;

            private String filo;

 

            public Atomo(String onoma, String epitheto, int ilikia, String filo){

                        this.onoma = onoma;

                        this.epitheto = epitheto;

                        this.ilikia = ilikia;

                        this.filo = filo;

            }

}

 

Παράδειγμα 4

public class Autokinhto {

            private String marka;

            private String montelo;

            private int kivika;

 

            public Autokinhto(String marka, String montelo, int kivika){

                        this.marka = marka;

                        this.montelo = montelo;

                        this.kivika = kivika;

            }

}

 

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

 

  Στην Java δεν υπάρχει κάτι ανάλογο του destructor (είναι το αντίθετο του constructor) που υπάρχει σε άλλες γλώσσες προγραμματισμού και αυτό διότι η Java δεν καθαρίζει τα «σκουπίδια» που αφήνουν τα διάφορα αντικείμενα.

 

 

Κλήση συναρτήσεων και μεταβλητών με την χρήση αντικειμένου

 

  Αφού δημιουργήσουμε αντικείμενο μίας κλάσης, μπορούμε να καλέσουμε της συναρτήσεις της εφόσον αυτές είναι public. Για να καλέσουμε μια συνάρτηση γράφουμε:

<όνομα αντικειμένου>.<όνομα συνάρτησης>(<ορίσματα αν υπάρχουν>);

 

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

 

Αν έχουμε λοιπόν μία κλάση:

 

public class <όνομα κλάσης> {

            private <τύπος μεταβλητής> <όνομα μεταβλητής>;

 

            public <τύπος μεταβλητής> get_<όνομα μεταβλητής>() {

                        return this.<όνομα μεταβλητης>;

             }

 

            public void set_<όνομα μεταβλητής>(<τύπος ορίσματος> <όνομα ορίσματος>){

                        this.<όνομα μεταβλητής> = <όνομα ορίσματος>;

            }

}

 

Τότε για να αλλάξουμε την μεταβλητή γράφουμε:

<όνομα αντικειμένου>.set_<όνομα μεταβλητης>(<τιμή μεταβλητής>);

 

και για να την διαβάσουμε:

<μεταβλητή> = <όνομα αντικειμένου>.get_<όνομα μεταβλητης>();

 

 

***Αν ορίσουμε τις μεταβλητές public τότε μπορούμε να αναφερθούμε σε αυτές απλά γράφοντας:

<όνομα αντικειμένου>.<όνομα μεταβλητης>

 

Παράδειγμα 5

public class Logariasmos {

        private String dikaiouxos;
        private String arithmos_logariasmou;
        private int upoloipo;
        private int pin;

        public Logariasmos(String dikaiouxos, String arithmos_logariasmou) {
                this.dikaiouxos = dikaiouxos;
                this.arithmos_logariasmou = arithmos_logariasmou;
                upoloipo = 0;
                pin = 1234;
        }

        public int katathesh(int poso) {
                upoloipo = upoloipo + poso;
                return upoloipo;
        }

        public int analupsh(int poso) {
                if (poso <= upoloipo) {
                        upoloipo = upoloipo - poso;
                }
                return upoloipo;
        }

        public String get_dikaiouxos() {
                return this.dikaiouxos;
        }

        public void set_dikaiouxos(String neos_dikaiouxos) {
                this.dikaiouxos = neos_dikaiouxos;
        }

}

 

//Δημιουργία αντικειμένου σε κάποια άλλη κλάση

Logariasmos logar = new Logariasmos("Kostas", "AB1234")

 

//Κατάθεση

upoloipo =logar.katathesh(500);

 

//Ανάληψη

upoloipo = logar.analupsh(500);

 

//Αλλαγή δικαιούχου

logar.set_dikaiouxos("Mitsos");

 

//Αναφορά σε δικαιούχο

String dikaiouxos = logar.get_dikaiouxos();

 

  Στο επόμενο άρθρο θα μιλήσουμε για τις υπερ-κλάσεις, τις υπο-κλάσεις, την κληρονομικότητα και τον τύπο abstract. Μείνετε συντονισμένοι!