Φωτογραφία ΓΕΩΡΓΙΟΣ ΤΖΕΛΛΟΣ
constructors και αντικειμενα
από ΓΕΩΡΓΙΟΣ ΤΖΕΛΛΟΣ - Saturday, 7 May 2011, 11:38 PM
 
Καλησπέρα ,

Οταν φτιάχνουμε ένα αντικείμενο πχ Point Point1 = new Point();
τοτε αυτόματα παράγεται και ο default constructor σώστα?

Οπότε μετά δεν είναι περιττό να γράψω πχ public Point(){ } ?
Ή το ένα ή το άλλο δεν χρησιμοποιούμε? Το ακριβώς αντίστοιχο συμβαίνει και με την αρχικοποιήση τιμών πχ Point Point2 = new Point(2,3); και public Point(int x,int y){}?
 
Φωτογραφία Νικόλαος Πανάγος
Απάντηση: constructors και αντικειμενα
από Νικόλαος Πανάγος - Sunday, 8 May 2011, 6:55 AM
 
Γεια σου Γιώργο, όλα καλά;

ισχύει το αντίθετο από αυτό που έγραψες, δηλαδή το statement Point p1 = new Point(); δημιουργεί ένα αντικείμενο της κλάσης Point χρησιμοποιώντας τον default constructor της κλασης Point.
Μία κλαση είναι το 'καλούπι' από το οποίο δημιουργούμε τα αντικείμενα που χρειαζόμαστε στο πρόγραμμά μας.
Αν δεν ορίσεις κανέναν constructor στην κλάση σου τότε ο compiler θα παράξει αυτόματα τον default για εσένα, αλλά αν ορίσεις έστω και εναν (default ή μη) τότε ο compiler δεν θα παράξει αυτόματα τον default. Σύμφωνα με την ισχύουσα πρακτική, μία κλάση θα πρέπει να έχει τουλάχιστον 2 constructors, τον default και αυτόν που αρχικοποιεί τις μεταβλητές μέλη.
Αυτό που καταλαβαίνω από την ερώτησή σου είναι πως έχεις λίγο μπερδέψει το τι είναι κλάση και τι αντικείμενο και πως χρησιμοποιείται το καθε ένα από αυτά. Θα ήθελα να ξαναδιαβάσεις την ενότητα 4 των σημειώσεων προσεκτικά γιατί είναι εξαιρετικά σημαντική.

ΝΠ
Φωτογραφία ΓΕΩΡΓΙΟΣ ΤΖΕΛΛΟΣ
Απάντηση: constructors και αντικειμενα
από ΓΕΩΡΓΙΟΣ ΤΖΕΛΛΟΣ - Sunday, 8 May 2011, 8:39 AM
 
Καλημέρα Νίκο η αλήθεια ειναι οτι διαβάζω και κάπου τα καλαβαίνω και κάπου το χάνω.
Δηλαδή γράφωντας την κλάση αφού ορίσουμε τις μεταβλητές μέλη αυτής θα πρέπει να ορίσουμε αρχικά τον default contsructor και αυτόν της αρχικοποίησης ώστε μετά να μπορώ να δημιουργήσω ενα αντικείμενο της κλάσης?

Και κάτι τελευταίο.

Έστω φτιάχνω ενα constructor με οσα ορίσματα θέλω εγω για να αρχικοποιήσω ας πουμε τις μεταβλητές μέλη. Όμως μετά οι get set το ιδιο πραγμα δεν επιτυχγάνουν(αρχικοποιηση τιμων)? Θέλω να πω αν υπάρχει ένας default και όχι και άλλος ένας αρχικοποιησης τιμών και βαλουμε get set για αρχικοποίση ειναι σωστό?


Φωτογραφία Νικόλαος Πανάγος
Απάντηση: constructors και αντικειμενα
από Νικόλαος Πανάγος - Sunday, 8 May 2011, 9:35 AM
 
Γιώργο ακριβώς! Αν δεν έχεις έστω έναν constructor στην κλάση σου δε θα είσαι σε θέση να δημιουργήσεις αντικείμενα π.χ. στην κεντρική σου μέθοδο και η κλάση σου δεν έχει νόημα. Γι αυτό ακριβώς υπάρχει αυτός ο μηχανισμός της Java που δημιουργεί αυτόματα τον default constructor αν δεν έχει οριστεί κάποιος άλλος από τον προγραμματιστή.
Για το δεύτερο που αναφέρεις, φυσικά αν έχεις τις getters/setters μπορείς να παραλείψεις τον constructor που αρχικοποιεί το αντικείμενο με τιμές, απλά είθισται να τους παρέχουμε και τους δύο ώστε να έχει τη δυνατότητα ο χρήστης να μπορεί να δημιουργήσει ένα αντικείμενο και να το αρχικοποιήσει κατά τη δημιουργία του.

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