JAVA - ΕΝΟΤΗΤΑ 2 – First Java Program




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


Ξεκινώντας λοιπόν το NetBeans θα βρεθείτε σε ένα περιβάλλον που λογικά θα σας λείπουν τα 3 βασικά tabs που συνήθως θα χρησιμοποιείται: Projects, Files και Services. 


Για να τα εμφανίσετε, πρέπει να πάτε στο Window, από το κύριο μενού, και να πατήσετε σε κάθε μια από τις επιλογές ξεχωριστά.
 

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

Κάθε Java εφαρμογή, όταν δημιουργείται μέσα από ένα IDE, όπως NetBeans ή Eclipse, ανήκει σε μια μεγαλύτερη και γενικότερη κατηγορία που ονομάζεται project. Ο λόγος ύπαρξης ενός project είναι γιατί εκτός από τον κώδικα μας, μπορεί να περιέχει και έξτρα resources που είναι αναγκαία για την λειτουργία της εφαρμογής όπως έξτρα βιβλιοθήκες ή drivers για βάσεις δεδομένων. Οπότε σαν πρώτο μας βήμα πηγαίνουμε στο File μενού και επιλέγουμε New Project.


Στο καινούργιο παράθυρο που ανοίγει, επιλέγουμε Java από το Categories και Java Application από τα Projects. Όπως βλέπετε υπάρχουν αρκετές επιλογές εδώ που θα έχουμε την ευκαιρία να επισκεφτούμε και να χρησιμοποιήσουμε σε μελλοντικές ενότητες. Πατήστε Next να προχωρήσετε στην επόμενη επιλογή.

 

Τώρα θα πρέπει να δώσουμε ένα όνομα στο project μας και να επιλέξουμε που θέλουμε να το αποθηκεύσουμε. Μην επιλέξετε το Create Main Class. Ας δημιουργήσουμε το πρώτο μας project από την αρχή μόνοι μας. Όταν εξοικειωθείτε με το περιβάλλον τότε μπορείτε να χρησιμοποιήσετε και τους διάφορους αυτοματισμούς που προσφέρει. Για τώρα απλά βεβαιωθείτε ότι δεν το έχετε επιλέξει και πατήστε Finish.

 

 

Σαν δεύτερο βήμα, θα ήταν συνετό να δημιουργήσουμε ένα πακέτο. Όταν αργότερα τα προγράμματα μας θα αποτελούνται από περισσότερα από ένα αρχείο (κλάσεις) , τα πακέτα θα μας φανούν χρήσιμα για να μπορέσουμε να ομαδοποιήσουμε κλάσεις που αναφέρονται σε κάποιο κοινό event. Για παράδειγμα σε ένα πακέτο μπορούμε να έχουμε όλες τις κλάσεις που συνεργάζονται από κοινού για να δώσουν networking δυνατότητες στην εφαρμογή ενώ σε κάποιο άλλο πακέτο ίσως έχουμε όλες τις κλάσεις που αναφέρονται στην επικοινωνία της εφαρμογής με κάποια βάση. Όλα τα πακέτα βρίσκονται μέσα στο ίδιο project. Αν όλη αυτή η εξήγηση σας μπερδεύει απλά σκεφτείτε πως οργανώνετε τα αρχεία σας στον υπολογιστή σας χρησιμοποιώντας φακέλλους. Κάνετε λοιπόν δεξί κλικ επάνω στο Source Packages και επιλέγετε New > Java Package.

 

Ονομάστε το πακέτο maincode (ή όπως αλλιώς θέλετε) και πατήστε Finish.

 

Όπως ανέφερα και στην αρχή της ενότητας, τα πιο πάνω βήματα θα θεωρούνται δεδομένα κάθε φορά που αναφερόμαστε στην δημιουργία ενός καινούργιου java project.
Έχοντας αυτή την δομή έτοιμη, μπορούμε να ξεκινήσουμε την πρώτη μας κλάση. Η Java εξ αρχής δημιουργήθηκε σαν αντικειμενοστραφής γλώσσα προγραμματισμού που σημαίνει ότι όποιο κώδικα και αν γράψουμε (από τον πιο απλό μέχρι και τον πιο πολύπλοκο) πρέπει να βρίσκεται μέσα σε μια κλάση. Από την κλάση, όπως θα μάθουμε αργότερα, θα μπορέσουμε να παράγουμε αντικείμενα. Κάνουμε λοιπόν δεξί κλικ επάνω στο πακέτο maincode και επιλέγουμε New > Java Class

 

Ας ονομάσουμε την κλάση MainClass και ας πατήσουμε Finish.

 


 

Ας δούμε τι έχουμε σαν βασικό κώδικα μέχρι τώρα. Στην πρώτη γραμμή δηλώνεται το πακέτο στο οποίο ανήκει η κλάση. Αμέσως μετά έχουμε τον ορισμό της κλάσης. Η λέξη κλειδί class ορίζει ότι το όνομα MainClass είναι κλάση και ο κώδικάς που ανήκει σε αυτήν θα περικλείεται από άγκιστρα ( { } ). Η λέξη κλειδί public μπροστά από το class δίνει την δυνατότητα τον Runtime περιβάλλον της της Java ή και σε άλλες κλάσεις της εφαρμογής να έχουν πρόσβαση στις μεθόδους που προσφέρει η κλάση. Αυτή είναι η πιο βασική αλλά και συγχρόνως η πιο απλή λειτουργική μορφή μιας κλάσης. 

Σκοπός αυτού του απλού παραδείγματος είναι να μπορέσουμε να τρέξουμε μια πολύ απλή και μικρή εφαρμογή και να εμφανιστεί ένα μήνυμα στην κονσόλα του NetBeans. Όμως μια κλάση από μόνη της δεν είναι εκτελέσιμη και κατά συνέπεια δεν μπορεί να τρέξει σαν εφαρμογή. Αυτή την δυνατότητα την αποκτάει η κλάση όταν συμπεριλάβει και μια δυναμική μέθοδο που προσφέρει η Java που ονομάζεται main.

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



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

 
Αμέσως μετά ακολουθεί ο ορισμός της κλάσης. Μια κλάση αναγνωρίζεται από την λέξη κλειδί class και το όνομα που ακολουθείται αμέσως μετά από αυτήν. Ολόκληρος ο κώδικας της κλάσης θα περιέχεται μέσα σε άγκιστρα. Για τώρα δεν χρειάζεται να μπούμε σε περισσότερες λεπτομέρειες εκτός από τον γεγονός ότι όλη η δράση του προγράμματος μας παράγεται από κώδικα που βρίσκεται μέσα σε μια κλάση. Για αυτό και άλλωστε μιλάμε για αντικειμενοστραφή προγραμματισμό αφού για να παράγουμε έστω ένα απλό “Hello World” μήνυμα η χρήση της κλάση είναι απαραίτητη. Η λέξη κλειδί public αφήνει άλλες κλάσεις ή εφαρμογές να αποκτήσουν πρόσβαση στα στοιχεία που περιέχονται μέσα στην κλάση.

Όπως είπαμε και πιο πριν, μια κλάση δεν κάνει ένα Java πρόγραμμα εκτελέσιμο. Αυτό μπορεί να το πετύχει η μέθοδος main. Η συγκεκριμένη μέθοδος είναι η αρχή εκτέλεσης του προγράμματος μας. Η λέξη public με την οποία ξεκινάει ο ορισμός της επιτρέπει στο Java Virtual Machine να αποκτήσει πρόσβαση σε αυτήν και να ξεκινήσει την εκτέλεση της. Η λέξη static επιτρέπει την εκτέλεση της μεθόδου χωρίς πρώτα να χρειαστεί να κάνουμε αντικείμενο από την κλάση στην οποία περιέχεται. Η λέξη void ενημερώνει τον compiler της Java ότι η συγκεκριμένη μέθοδο δεν πρόκειται να επιστρέψει τίποτα πίσω στο πρόγραμμα μας κατά την εκτέλεση της. Η λέξη main( ) ορίζει το όνομα της μεθόδου. Μέσα στην παρένθεση ορίζεται ένας String πίνακας σε περίπτωση που θέλουμε να περάσουμε κάποιες τιμές στην εφαρμογή πριν την εκτέλεση της. Τέλος τα άγκιστρα ορίζουν τον κώδικα που περιέχει.

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

Τι έχουμε λοιπόν σαν κώδικα? Δύο πράγματα. Πρώτον ένα απλό σχόλιο για να μπορούμε να θυμόμαστε την λογική του κώδικα όταν επιστρέψουμε σε αυτόν αργότερα, και την prinln( ) μέθοδο που οτιδήποτε γράψουμε μέσα στην παρένθεση θα μας το εμφανίσει στο terminal. Όσο αφορά το System.out, Το System είναι μια κλάση της Java που μας δίνει πρόσβαση στο σύστημα και δια μέσω του out μπορούμε να ενωθούμε στην κονσόλα και να βλέπουμε τα μηνύματα του παράγονται από την εφαρμογή μας. Ξανά, και αυτή η γραμμή θα ξεκαθαρίσει αργότερα όταν μιλήσουμε για στατικές κλάσεις.

Πριν τρέξουμε το πρόγραμμα μας, ας βεβαιωθούμε ότι κάνουμε compile των κώδικα μας με java 10 και όχι με java 8. Κάνουμε δεξί κλικ επάνω στο project και από το εμφανιζόμενο παράθυρο πατάμε στο libraries. Βεβαιωθείτε ότι στο Java Platform είναι επιλεγμένο το JDK 10. Μην πατήσετε ακόμη ΟΚ. Χρειάζεται να κάνουμε ακόμα μια αλλαγή.



 



 
 
Τώρα πατήστε επάνω στο Sources και βεβαιωθείτε ότι το Source/Binary Format είναι JDK 10. Αν έχουν ολοκληρωθεί αυτές οι δύο αλλαγές, μπορείτε να πατήσετε ΟΚ τώρα.


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

 




 
To output παράθυρο στο NetBeans αντιπροσωπεύει την κονσόλα των Windows (ή του εκάστοτε λειτουργικού συστήματος) σαν να είχατε τρέξει το πρόγραμμα με cmd εντολές χωρίς την βοήθεια κάποιου IDE. Το NetBeans έχει απλά αντιπροσωπεύσει τις εντολές της Java με εύκολα μενού για πιο γρήγορη εκτέλεση του προγράμματος αλλά και για την εύρεση τυχόν λαθών.


Αυτό το εύκολο σε εκτέλεση και λειτουργία πρόγραμμα περιέχει πολύ θεωρία που δεν έχουμε ακόμα αναλύσει σε βάθος γιατί πάρα πολύ απλά είναι πολύ νωρίς για να καταλάβετε σε βάθος τον αντικειμενοστραφή προγραμματισμό. Αν κάποιους ορισμούς που χρησιμοποιήσαμε δεν σαν είναι εντελώς ξεκάθαροι, μην ανησυχείτε γιατί θα επιστρέψουμε σε αυτούς πολλές φορές στα επόμενα προγράμματά μας. Για τώρα απλά κρατάμε τα εξής:
  • Έστω και το πιο απλό πρόγραμμα στην Java περιέχει μια κλάση.
  • Για να είναι εκτελέσιμη η κλάση και κατά συνέπεια η εφαρμογή μας χρειαζόμαστε την main μέθοδο.
  • Η γραμμή που ορίζει την main θα παραμείνει πάντα η ίδια για όλα τα προγράμματα. Εξοικειωθείτε με τον ορισμό της κλάσης και της main.
  • Για να δείξουμε μήνυμα (ή πολλαπλά μηνύματα) στην κονσόλα, χρησιμοποιούμε την prinln μέθοδο. Θα εκτυπώσει στην οθόνη ότι μήνυμα θα συμπεριλάβουμε στην παρένθεση της.


Μιχάλης Κασάπογλου







 


 
 

Archive

Contact Form

Send