3.2 Δημιουργία κλάσεων στο ΟΠΕ
© Γιάννης Κωστάρας
| 🏠 | ⬆️ | ◀️ | ▶️ |
Μαθησιακοί στόχοι
Σε αυτήν την ενότητα θα μάθουμε πώς μπορούμε να δημιουργήσουμε τις κλάσεις που μάθαμε στο προηγούμενο μάθημα:
- σε έναν απλό κειμενογράφο
- στο BlueJ
- στο NetBeans
- στο Visual Studio Code
Κειμενογράφος
Φυσικά μπορείτε να μη χρησιμοποιήσετε κάποιο ΟΠΕ για να μεταγλωττίσετε τις κλάσεις σας. Αλλά ας δούμε πρώτα πώς μπορούμε να δημιουργήσουμε τα προγράμματά μας χωρίς αυτό.
Δημιουργήστε ένα νέο αρχείο στον αγαπημένο επεξεργαστή κειμένου, επικολλήστε τον κώδικα της κλάσης Car από το προηγούμενο μάθημα, και αποθηκεύστε το ως Car.java. Θα πρέπει όμως να μπορούμε να δημιουργήσουμε και αντικείμενα της κλάσης αυτής και να δούμε τα αποτελέσματα στην οθόνη μας. Γι’ αυτό το σκοπό χρειαζόμαστε μια μέθοδο main() όπως μάθαμε στα μαθήματα της προηγούμενης εβδομάδας. Μπορούμε είτε να προσθέσουμε την main() στην Car είτε να δημιουργήσουμε μια νέα κλάση, π.χ. CarDemo.java που να έχει μόνο τη μέθοδο main(). Θα κάνουμε το πρώτο.
class Car { // κλάση
// ιδιότητες/γνωρίσματα
String model;
int maxSpeed;
int ccm;
int speed = 0;
// μέθοδος δημιουργίας αντικειμένων - κατασκευαστής
Car(String m, int s, int c) {
model = m; maxSpeed = s; ccm = c;
}
// ενέργειες/μέθοδοι
void accelerate() {
if (speed <= maxSpeed - 10)
speed+=10;
}
void decelerate() {
if (speed >= 10)
speed-=10;
}
public String toString() {
return "Car[" + "model=" + model + ", maxSpeed=" + maxSpeed + ", ccm=" + ccm + ", speed=" + speed + "]";
}
public static void main(String... args) {
Car audiA3 = new Car("Audi A3", 210, 1595);
System.out.println(audiA3.speed);
audiA3.accelerate();
System.out.println(audiA3.speed);
}
}
Μεταγλωττίστε το και εκτελέστε το όπως μάθατε στο μάθημα της προηγούμενης εβδομάδας.
$ java Car.java
0
10
Δημιουργήστε νέα αρχεία Point.java, Line.java, Circle.java, Rectangle.java και αντιγράψτε τον κώδικα του προηγούμενου μαθήματος. Έχει σημασία η σειρά με την οποία θα μεταγλωττίσετε τον κώδικα. Οι κλάσεις Line, Circle και Rectangle εξαρτώνται από την Point. Επομένως η Point πρέπει να μεταγλωττιστεί πρώτη. Καθώς δεν υπάρχει main() μέθοδος δεν υπάρχει νόημα να καλέσουμε την εντολή java για να τρέξουμε το πρόγραμμα.
$ javac Point.java
$ javac Line.java
$ javac Circle.java
$ javac Rectangle.java
$ ls
Circle.class Circle.java Line.java Line.class Point.class Point.java Rectangle.class Rectangle.java
Συνηθίζεται αντί να έχουμε πολλά αρχεία .class, να τα συλλέγουμε όλα μαζί σε ένα συμπιεσμένο αρχείο .jar (ή Java Archive). Π.χ. μπορούμε να φτιάξουμε μια βιβλιοθήκη των εγγραφών που δημιουργήσαμε πιο πάνω ως εξής.
Μεταβείτε στο φάκελο που έχετε μεταγλωττίσει τον κώδικα, δηλ. στο φάκελο που περιέχει τα αρχεία .class και δώστε την εντολή:
$ jar cvf shapes.jar *.class // ή jar -c -f shapes.jar *.class
$ jar --help
Usage: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
jar creates an archive for classes and resources, and can manipulate or
restore individual classes or resources from an archive.
...
-c, --create Create the archive
-i, --generate-index=FILE Generate index information for the specified jar
archives
-t, --list List the table of contents for the archive
-u, --update Update an existing jar archive
-x, --extract Extract named (or all) files from the archive
-d, --describe-module Print the module descriptor, or automatic module name
--validate Validate the contents of the jar archive. This option
will validate that the API exported by a multi-release
jar archive is consistent across all different release
versions.
...
$ jar tf shapes.jar // ή jar -t -f shapes.jar
META-INF/
META-INF/MANIFEST.MF
Circle.class
Line.class
Point.class
Rectangle.class
Το αρχείο .jar είναι ένα .zip αρχείο μετονομασμένο σε .jar το οποίο περιέχει και ένα αρχείο MANIFEST.MF:
$ unzip -p shapes.jar META-INF/MANIFEST.MF
Manifest-Version: 1.0
Created-By: 17 (Oracle Corporation)
Αν υπάρχει και μια ‘εκτελέσιμη’ κλάση στο έργο σας (δηλ. μια κλάση που περιέχει μια μέθοδο main()) τότε μπορούμε να την δηλώσουμε στο MANIFEST.MF ως εξής:
$ jar cvfe cardemo.jar Car Car.class // ή jar -c -f cardemo.jar -e Car Car.class
$ unzip -p cardemo.jar META-INF/MANIFEST.MF
Manifest-Version: 1.0
Created-By: 17 (Oracle Corporation)
Main-Class: Car
$ java -jar cardemo.jar
0
10
Παρατηρούμε ότι δημιουργήσαμε έτσι ένα εκτελέσιμο .jar αρχείο το οποίο μπορούμε να το εκτελέσουμε με την τελευταία εντολή!
BlueJ
- Δημιουργήστε ένα νέο έργο από το μενού Project -> New Project
- Κλικ στο κουμπί New Class…. Παρατηρούμε ότι το BlueJ υποστηρίζει τους τύπους ‘Class’(Κλάση), ‘Abstract Class’ (Αφηρημένη Κλάση) που θα μάθουμε σε επόμενο μάθημα, ‘Interface’ (Διεπαφή), ‘Unit Test’ (Έλεγχος Τμήματος Κώδικα, θα μάθουμε σε επόμενο μάθημα πώς να τεστάρουμε τις κλάσεις μας) και ‘Enum’ (Απαριθμημένος Τύπος). Δεν υποστηρίζει ακόμα εγγραφές (Records).

Εικόνα 3.2.1 Παράθυρο δημιουργίας νέας κλάσης στο BlueJ
- Δώστε το όνομα
Carκαι πατήστε OK. Δημιουργήθηκε ένα παραλληλόγραμμο με το όνομα Car. Αυτό είναι το σύμβολο της κλάσης στην UML. Θα μάθουμε για τη UML και πώς αναπαριστά κλάσεις, διεπαφές κλπ. στο επόμενο μάθημα.

Εικόνα 3.2.2 Κλάση Car στο BlueJ
- Πατήστε διπλό κλικ πάνω στην Car για να ανοίξει ο κειμενογράφος ή διορθωτής του BlueJ.
- Επιλέξτε όλον τον κώδικα που έχει δημιουργήσει το BlueJ. Σβήστε τον και επικολλήστε τον κώδικα της κλάσης
Carπου γράψαμε στο προηγούμενο μάθημα. - Μεταγλωττίστε την κλάση
Carπατώντας στο κουμπί Compile. - Για να δημιουργήσουμε ένα νέο αντικείμενο της κλάσης
Car, κάντε δεξί κλικ πάνω στο εικονίδιο τηςCarκαι επιλέξτε τον constructor της κλάσης. - Δώστε τις παρακάτω τιμές στο διαλογικό παράθυρο που εμφανίζεται:

Εικόνα 3.2.3 Δημιουργία νέου αντικειμένου κλάσης Car στο BlueJ
- Δημιουργήθηκε ένα νέο αντικείμενο κλάσης
Carόπως φαίνεται στην παρακάτω εικόνα. Φυσικά μπορείτε να δημιουργήσετε όσα αντικείμενα θέλετε.

Εικόνα 3.2.4 Δημιουργήθηκε το νέο αντικειμένο κλάσης Car στο BlueJ
- Πατήστε δεξί κλικ στο νέο αντικείμενο και καλέστε τις διαθέσιμες μεθόδους του:

Εικόνα 3.2.5 Κλήση της toString() αφού κλήθηκε πρώτα η accelerate()
Παρατηρήστε ότι το BlueJ δεν σας επιτρέπει να προσπελάσετε τις ιδιότητες της κλάσης Car παρόλο που αυτές δεν είναι private.
Το BlueJ σας δίνει επίσης τη δυνατότητα να δημιουργήσετε αντικείμενα από κλάσεις που δεν είναι μέρος του έργου σας αλλά μέρος της βιβλιοθήκης της Java.
Από το μενού Tools –> Use Library Class… θα εμφανιστεί ένα διαλογικό παράθυρο παροτρύνοντας σας να εισάγετε ένα πλήρως κατάλληλο όνομα κλάσης, όπως π.χ. java.lang.String. Μόλις εισαχθεί ένα όνομα κλάσης, πατώντας Enter θα παρουσιάσει όλους τους κατασκευαστές και τις στατικές μεθόδους εκείνης της κλάσης σε έναν κατάλογο στο διαλογικό παράθυρο. Οποιοιδήποτε από αυτούς τους κατασκευαστές ή στατικές μεθόδους μπορούν να κληθούν επιλέγοντας τους από αυτόν τον κατάλογο. Η επίκληση (invocation) προχωρά όπως και με κάθε άλλο κατασκευαστή ή κλήση μεθόδου.
Σαν άσκηση δημιουργήστε ένα αντικείμενο της java.util.Random. Η Random είναι μια γεννήτρια τυχαίων αριθμών. Αφού δημιουργήσετε ένα αντικείμενο της κλάσης, στη συνέχεια κάντε δεξί κλικ πάνω του και καλέστε τη μέθοδο nextInt(). Θα εμφανιστεί ένα διαλογικό παράθυρο με τον τυχαίο ακέραιο αριθμό που “γέννησε” η μέθοδος.
Με το BlueJ μπορούμε πολύ εύκολα να δημιουργήσουμε ένα εκτελέσιμο .jar αρχείο ως εξής:
- Επιλέξτε το μενού Project -> Create Jar File…
- Από το αναδυόμενο παράθυρο επιλέξτε ως Main class την κλάση που περιέχει την
main()μέθοδο - Αποεπιλέξτε τα τσεκαρισμένα πεδία Include source και Include Blue project files και πατήστε Continue. Θα εμφανιστεί ένα διαλογικό παράθυρο που θα σας ζητήσει το όνομα του
.jarαρχείου που πρόκειται να δημιουργηθεί καθώς και τον φάκελο στον οποίο θέλετε να δημιουργηθεί και πατήστε Save.
NetBeans
- Δημιουργήστε ένα νέο έργο
CarDemoκαι ορίστε την κύρια κλάση ωςCarστο 2ο βήμα του οδηγού (βλ. Εικόνα 2.6.2). - Επικολλήστε τον κώδικα της υποενότητας “Κειμενογράφος” στην αρχή αυτού του μαθήματος.
- Εκτελέστε το πρόγραμμα πατώντας στο κουμπί Run Project
Το NetBeans υποστηρίζει και εγγραφές.
- Δημιουργήστε ένα νέο έργο
RecordDemoόπως μάθαμε στο μάθημα 2.6 της προηγούμενης εβδομάδας, χωρίς να επιλέξετε Create Main Class στο 2ο βήμα του οδηγού (βλ. Εικόνα 2.6.2). - Κάντε δεξί κλικ στο έργο
RecordDemoαπό το παράθυρο Projects και επιλέξτε New -> Other από το αναδυόμενο μενού. - Επιλέξτε Java Record όπως φαίνεται στην παρακάτω εικόνα και Next.
- Δώστε το όνομα
Pointσαν όνομα της κλάσης και Finish. - Τροποποιήστε τον κώδικα που δημιούργησε το NetBeans με τον παρακάτω:

Εικόνα 3.2.6 Δημιουργία νέας κλάσης, εγγραφής κλπ. στο NetBeans
record Point(int x, int y) { }
Επαναλάβετε τη διαδικασία για να δημιουργήσετε και τις υπόλοιπες εγγραφές του προηγούμενου μαθήματος.
Για να δημιουργήσουμε ένα εκτελέσιμο .jar στο NetBeans:
- Κάντε δεξί κλικ στο έργο και επιλέξτε Properties από το αναδυόμενο μενού.
- Επιλέξτε την κατηγορία Run και ορίστε την κλάση που περιέχει την μέθοδο
main()στο πεδίο Main Class (πατήστε το κουμπί Browse για να την εντοπίσετε). - Πατήστε ΟΚ για να κλείσετε το παράθυρο Properties.
- Πάλι δεξί κλικ στο έργο και επιλέξτε Clean and Build.
Στο φάκελο του έργου δημιουργήθηκε ένας υποφάκελος dist μέσα στον οποίο έχει δημιουργηθεί το εκτελέσιμο αρχείο .jar. Μπορείτε να το δείτε και από την καρτέλα Files του NetBeans.
Visual Studio Code
- Δημιουργήστε ένα νέο φάκελο στο Λ.Σ. σας με όνομα
CarDemo. - Επιλέξτε το μενού File -> Add Folder to Workspace… και προσθέστε το φάκελο
CarDemoστον ήδη ανοικτό χώρο εργασίας (workspace). - Δημιουργήστε ένα νέο έργο Java όπως μάθαμε στην ενότητα 2.6. Το VS Code δημιούργησε και ένα αρχείο
App.javaτο οποίο περιέχει μιαmain()μέθοδο. - Επιλέξτε όλα τα περιεχόμενα του αρχείου, διαγράψτε τα και επικολλήστε τον κώδικα της κλάσης
Carστην αρχή αυτού του μαθήματος και αποθηκεύστε τις αλλαγές. - Μετονομάστε το αρχείο
App.javaσεCar.javaπατώντας δεξί κλικ πάνω του στο χώρο εργασίας (βρίσκεται μέσα στο φάκελοsrc) και επιλέγονταςRenameαπό το αναδυόμενο μενού. - Κάντε πάλι δεξί κλικ πάνω του και αυτή τη φορά επιλέξτε
Run Javaαπό το αναδυόμενο μενού. Θα πρέπει να δείτε την ταχύτητα του αυτοκινήτου, δηλ.0και10. - Επιλέξτε το φάκελο
srcκαι στη συνέχεια κλικ στο μενού File -> New File…. - Γράψτε
javaκαι επιλέξτε New java class. - Επικολλήστε τον παρακάτω κώδικα σβήνοντας ότι έχει δημιουργήσει το VS Code.
- Αποθηκεύστε το αρχείο ως
Point.java - Επιλέξτε το μενού View -> Command palette… και πληκτρολογήστε
Java Compileγια να μεταγλωττίσετε τις κλάσεις.
record Point(int x, int y) { }
Η διαδικασία δημιουργίας εκτελέσιμου αρχείου .jar περιγράφεται εδώ.
- Μεταγλωττίστε τον πηγαίο κώδικα.
- Στην επιλογή JAVA PROJECTS κάτω αριστερά πατήστε στο κουμπί Export Jar… (σύμβολο
|->). -
Στο πλαίσιο που θα εμφανιστεί δώστε το όνομα της κλάσης που περιέχει την μέθοδο
main()και θα δημιουργηθεί το εκτελέσιμο αρχείο JAR στο φάκελο του έργου σας.
| 🏠 | ⬆️ | ◀️ | ▶️ |