|
Εισαγωγή
Όσοι ασχολούντε με τον προγραμματισμό, επαγγελματίες και μη, έχουνε
aκούσει για τη γλώσσα προγραμματισμού Java. Όλα ξεκίνησαν απο τη διάσημη εταιρία στο
χώρο της πληροφορικής Sun
Microsystems. Ήταν αρχές του 1991 όταν στη Sun αναζητούσαν το
κατάλληλο εργαλείο για ν' αποτελέσει την πλατφόρμα ανάπτυξης λογισμικού
σε μικρο-συσκευές (έξυπνες οικιακές συσκευές εως πολύπλοκα συστήματα
παραγωγής γραφικών). Τα εργάλεια της εποχής τα οποία πέρασαν από την
«πασαρέλα» των υποψηφίων ηταν γλώσσες όπως η C++
και η C. Μετά απο διάφορους πειραματισμούς αποφάνθηκαν οτι οι
υπάρχουσες γλώσσες δεν μπορούσαν να καλύψουν τις ανάγκες τους! Ο
πατέρας της Java, James Gosling που εργαζόταν εκείνη την εποχή για
την Sun, έκανε ήδη πειραματισμούς πάνω στη C++ και είχε παρουσιάσει
κατά καιρούς κάποιες πειραματικές γλωσσες(C++ ++) ως πρότυπα για το νέο
εργαλείο που αναζητουσαν στην Sun. Τελικα μετα απο λίγο καιρό κατέληξαν
με μια πρόταση για το επιτελείο της εταιρίας, ήταν η γλωσσα Oak. Το
όνομά της το πήρε απο το ομώνυμο δένδρο (βελανιδιά) το οποίο ο Gosling
είχε έξω απο το γραφείο του και έβλεπε κάθε μέρα!
Από την Oak στη Java
H Oak ήταν μία γλώσσα που διατηρούσε μεγάλη συγγένεια με την C++.
Παρολά αυτά είχε πολυ πιο έντονο αντικειμονοστραφή χαρακτήρα σε σχέση
με την C++ και χαρακτηριζόταν για την απλότητα της. Σύντομα οι
υπεύθυνοι ανάπτυξης της νέας γλώσσας ανακάλυψαν ότι το όνομα Oak ήταν
ήδη κατοχυρωμένο οπότε κατά την διάρκεια μίας εκ' των πολλών
συναντήσεων σε κάποιο τοπικό καφενείο αποφάσισαν να μετονομάσουν το νέο
τους δημιούργημα σε Java που εκτός των άλλων ήταν το όνομα αγαπητού
καφέ για τους δημιουργούς της (Java στην αγγλική γλώσσα είναι το φυτό
που βγάζει τον καφέ)! Η επίσημη εμφάνιση της Java αλλα και του HotJava
(πλοηγός με υποστήριξη Java) στη βιομηχανία της πληροφορικής έγινε το
Μάρτιο του 1995 όταν η Sun την ανακοίνωσε στο συνέδριο Sun World 1995.
O πρώτος αποδελτιωτής (compiler) της ήτανε γραμμένος στη γλώσσα C από
τον James Gosling. Το 1994 ο Van Hoffman ξαναγράφει τον αποδελτιωτή της
γλώσσας σε Java (από τα πλεόν δύσκολα επιτεύγματα στο χώρο της
πληροφορικής είναι να γράψεις έναν αποδελτιωτή μίας γλώσσας στην ίδια
τη γλώσσα), ενώ το Δεκέμβριο του 1995 πρώτες οι IBM, Borland,
Mitsubishi Electronics, Sybase και Symantec ανακοινώνουνε σχέδια να
χρησιμοποιήσουνε τη Java για την δημιουργία λογισμικού. Από εκεί και
πέρα η Java ακολουθεί μία ανοδική πορεία και είναι πλέον μία από τις
πιο δημοφιλείς γλώσσες στον χώρο της πληροφορικής.
Τα χαρακτηριστικά της Java
Τί κάνει όμως τη Java τόσο δημοφιλή; Ένα από τα βασικά πλεονεκτήματα
της Java έναντι των περισσότερων άλλων γλωσσών είναι η ανεξαρτησία του
λειτουργικού συστήματος και πλατφόρμας. Τα προγράμματα που είναι
γραμμένα σε Java τρέχουνε ακριβώς το ίδιο σε Windows, Linux, Unix και
Macintosh (σύντομα θα τρέχουνε και σε Playstation καθώς και σε άλλες
παιχνιδομηχανές) χωρίς να χρειαστεί να ξαναγίνει διάταξη αποδελτίωσης
(compiling) ή να αλλάξει ο πηγαίος κώδικας για κάθε διαφορετικό
λειτουργικό σύστημα. Για να επιτευχθεί όμως αυτό χρειαζόταν κάποιος
τρόπος ετσι ώστε τα προγράμματα γραμμενα σε Java να μπορουν να είναι
«κατανοητά» από κάθε υπολογιστή αναξάρτητα του είδους επεξεργαστή (Intel x86, IBM, Sun SPARC, Motorola) αλλα και
λειτουργικού συστήματος (Windows, Unix, Linux, Unix, MacOS). Ο λόγος
είναι ότι κάθε κεντρική μονάδα επεξεργασίας μπορεί και «καταλαβαίνει»
διαφορετικό assembly κώδικα. Ο συναρμολογούμενος (assembly) κώδικας που
τρέχει σε Windows είναι διαφορετικός από αυτόν που τρέχει σε ένα
Macintosh. Η λύση δόθηκε με την ανάπτυξη της Εικονικής Mηχανής (Virtual
Machine ή VM ή ΕΜ στα ελληνικά).
H εικονική μηχανή της Java
Τι κάνει λοιπόν το Java Virtual Machine; Αφου γραφτεί κάποιο πρόγραμμα
σε Java τότε γίνεται compile μέσω του Java compiler (javac), εκείνος με την σειρά του
δίνει ένα αριθμό απο .class αρχεια (=bytocode. Το bytecode είναι η
μορφή που παίρνει ο πηγαίος κώδικας της Java όταν έρθει σε μία διάταξη
αποδελτίωσης) αναλόγως με το πόσες κλάσεις έχουνε γραφτεί για την
εφαρμογή. Οταν προσπαθήσουμε λοιπόν να εκτελέσουμε την εφαρμογή μας το
Java Virtual Machine που πρέπει να είναι εγκατεστημένο στο μηχάνημά
μας, θα αναλάβει να διαβάσει τα .class αρχεία και να τα μεταφράσει σε
γλώσσα και εντολές (assembly) που υποστηρίζει το λειτουργικό μας και ο
επεξεργαστής μας, έτσι ώστε να εκτελεστεί (να σημειώσουμε εδώ ότι αυτό
συμβαίνει με την παραδοσιακή Εικονική Μηχανή (Εικόνα 1). Πιο
σύγχρονες εφαρμογές της ΕΜ μπορούνε και αποδελτιώνουνε τα πολύχρηστα
τμήματα bytecode απ' ευθείας σε ιθαγενή κώδικα (native code) με
αποτέλεσμα να βελτιώνεται η ταχύτητα). Χωρίς αυτό δε θα ηταν δυνατή η
εκτέλεση λογισμικού γραμμένο σε Java. Πρέπει να πούμε οτι το Virtual
Machine ειναι λογισμικό platform specific δηλαδή για κάθε είδος
λειτουργικού και ανάλογης τεχνολογίας επεξεργαστή, υπάρχει διαφορετική
έκδοση! Έτσι υπάρχουν διαθέσιμες εκδόσεις του για Windows, Linux,
Unix, Macintosh, κινητά τηλέφωνα, παιχνιδομηχανές κλπ!

Εικόνα 1
Ο,τιδήποτε θέλει να κάνει ο προγραμματιστής (ή ο χρήστης) γίνεται μέσω
της εικονικής μηχανής. Αυτό βοηθάει στο να υπάρχει μεγαλύτερη ασφάλεια
στο σύστημα γιατί η εικονική μηχανή είναι υπεύθυνη για την επικοινωνία
χρήστη - υπολογιστή. Ο προγραμματιστής δεν μπορεί να γράψει κώδικα ο
οποίος θα έχει καταστροφικά αποτελέσματα για τον υπολογιστή γιατί η
εικονική μηχανή θα τον ανιχνεύσει και δε θα επιτρέψει να εκτελεστεί.
Από την άλλη μεριά ούτε ο χρήστης μπορεί να κατεβάσει «κακό» κώδικα από
το δίκτυο και να τον τρέξει. Αυτό είναι ιδιαίτερα χρήσιμο για μεγάλα
διανεμειμένα συστήματα όπου πολλοί χρήστες χρησιμοποιούνε το ίδιο
πρόγραμμα συγχρόνως.
Ο συλλέκτης σκουπιδιών
(Garbage Collector)
Ακόμα μία ιδέα που βρίσκεται πίσω από τη Java είναι η ύπαρξη του
συλλέκτη σκουπιδιών (Garbage Collector). Σύλλεξη σκουπιδιών είναι μία
κοινή ονομασία που χρησιμοποιείται στον τομέα της πληροφορικής για να
δηλώσει την ελευθέρωση τμημάτων μνήμης από δεδομένα που δε χρειάζοντε
και δε χρησιμοποιούντε άλλο. Αυτή η απελευθέρωση μνήμης στη Java είναι
αυτόματη και γίνεται μέσω του συλλέκτη απορριμάτων. Υπεύθυνη για
αυτό είναι και πάλι η εικονική μηχανή η οποία μόλις «καταλάβει» ότι η
στοίβα (heap) της μνήμης (στη Java η συντριπτική πλειοψηφία των
αντικειμένων αποθηκεύοντε τη στοίβα σε αντίθεση με τη C++ που
αποθηκεύοντε κυρίως στο σωρό - stack) κοντεύει να γεμίσει ενεργοποιεί
το συλλέκτη απορριμάτων. Έτσι ο προγραμματιστής δε χρειάζεται να
ανησυχεί για το πότε και αν θα ελευθερώσει ένα συγκεκριμένο τμήμα της
μνήμης, ούτε και για δείκτες (pointers) που εστιάζουνε σε άδειο κουτάκι
μνήμης. Αυτό είναι ιδιαίτερα σημαντικό αν σκεφτούμε ότι ένα μεγάλο
ποσοστό κατάρρευσης των προγραμμάτων οφείλονται σε λάθος χειρισμό της
μνήμης.
Eπιδόσεις
Πάντως τίποτα σε αυτόν τον κόσμο δεν έρχεται χωρίς κόστος. Έτσι λοιπόν,
παρόλο που η εικονική μηχανή προσφέρει όλα αυτά (και όχι μόνο) τα
πλεονεκτήματα, η Java είναι πιο αργή σε σχέση με άλλες
προγραμματιστικές γλώσσες υψηλού επιπέδου (high-level) όπως η C και η
C++. Έχει αποδειχτεί ότι η C++ μπορεί να είναι αρκετές φορές
γρηγορότερη από τη Java. Ευτυχώς γίνοντε φιλότιμες προσπάθειες από τη
Sun για τη βελτιστοποίηση της εικονικής μηχανής, ενώ και διάφορες άλλες
πραγματοποιήσεις της εικονικής μηχανής υπάρχουνε από διάφορες
άλλες εταιρίες (όπως IBM) οι οποίες μπορεί σε κάποια σημεία να
προσφέρουνε καλύτερα και σε κάποια άλλα χειρότερα αποτελέσματα.
Επιπλέον με τον ερχομό των JIT (Just In Time) compilers, οι
οποίοι μετατρέπουνε το bytecode απ' ευθείας σε γλώσσα μηχανής, η
διαφορά ταχύτητας από τη C++ έχει μικρύνει κατά πολύ.
Εργαλεία ανάπτυξης
Όλα τα εργαλεία που χρειάζεται κάποιος για να γράψει Java προγράμματα
έρχοντε δωρεάν. Από περιβάλλον ανάπτυξης μέχρι build εργαλεία και
βιβλιοθήκες. Ευτυχώς η Sun και οι υπόλοιπες εταιρίες είναι αρκετά
γενναιόδωρες ώστε να μας τα παρέχουνε χωρίς χρέωση. Όπως είπαμε και πιο
πάνω υπάρχουνε πολλές διαφορετικές εφαρμογές της Εικονικής Μηχανής και
του compiler της Java. Είναι στο χέρι του καθενός να επιλέξει το
κατάλληλο περιβάλλον. Πάντως ο δικτυακός τόπος της Sun είναι ένα καλό
σημείο για να αρχίσει κάποιος. Η Εικονική Μηχανή και ο compiler
μπορούνε να βρεθούνε στην παρακάτω διεύθυνση όπου θα συνιστούσαμε να κατεβάσετε τις
τελευταίες εκδόσεις (1.4.2 τη στιγμή του γραψίματος αυτού του κειμένου)
καθώς και τα συνοδευτικά έγγραφα (documentation) διότι είναι αρκετά
κατατοπιστικά. Προσοχή, και τα τρία αρχεία είναι αρκετά μεγάλα σε
μέγεθος, οπότε χρήστες με αργή σύνδεση θα πρέπει να περιμένουνε ώρα.
Σύνθετο περιβάλλον
ανάπτυξης (IDE)
Για να να γράψει κάποιος Java κώδικα δε χρειάζεται τίποτα άλλο παρά
έναν επεξεργαστή κειμένου όπως notepad ή emacs αλλά ένα ολοκληρωμένο
περιβάλλον ανάπτυξης βοηθάει πολύ, ιδιαίτερα στον εντοπισμό σφαλμάτων.
Υπάρχουνε αρκετά διαθέσιμα, πολλά από αυτά έρχονται δωρεάν. Μερικά από
αυτά είναι το JCreator
(Windows μόνο), το JEdit,
το Eclipse και ο
JBuilder.
Προσωπική γνώμη, το πιο εύχρηστο και απλό είναι το JCreator. Σε κάποιον
που τώρα αρχίζει την εκμάθηση της Java θα το συνιστούσαμε ανεπιφύλακτα.
Αποστολόπουλος Πάρις
Κωνσταντινίδης
Πάνος
|