1991 - JAVA Γλώσσα Προγραμματισμού
JAVA
Τα χαρακτηριστικά της Java
Ένα από τα βασικά πλεονεκτήματα της Java έναντι των
περισσότερων άλλων γλωσσών είναι η ανεξαρτησία του λειτουργικού συστήματος και
πλατφόρμας. Τα προγράμματα που είναι γραμμένα σε Java τρέχουνε ακριβώς το ίδιο
σε Windows, Linux, Unix και Macintosh (σύντομα θα τρέχουν και σε Playstation
καθώς και σε άλλες κονσόλες παιχνιδιών) χωρίς να χρειαστεί να ξαναγίνει
μεταγλώττιση (compiling) ή να αλλάξει ο πηγαίος κώδικας για κάθε διαφορετικό
λειτουργικό σύστημα. Για να επιτευχθεί όμως αυτό χρειαζόταν κάποιος τρόπος έτσι
ώστε τα προγράμματα γραμμένα σε Java να μπορούν να είναι «κατανοητά» από κάθε
υπολογιστή ανεξάρτητα του είδους επεξεργαστή (Intel x86, IBM, Sun SPARC,
Motorola) αλλά και λειτουργικού συστήματος (Windows, Unix, Linux, BSD, MacOS).
Ο λόγος είναι ότι κάθε κεντρική μονάδα επεξεργασίας κατανοεί διαφορετικό κώδικα
μηχανής. Ο συμβολικός κώδικας (assembly) που μεταφράζεται και εκτελείται σε
Windows είναι διαφορετικός από αυτόν που μεταφράζεται και εκτελείται σε έναν
υπολογιστή Macintosh. Η λύση δόθηκε με την ανάπτυξη της Εικονικής Μηχανής
(Virtual Machine ή VM ή ΕΜ στα ελληνικά).
Η εικονική μηχανή της Java
Αφού γραφεί κάποιο πρόγραμμα σε Java, στη συνέχεια μεταγλωτίζεται
μέσω του μεταγλωτιστή javac, ο οποίος παράγει έναν αριθμό από αρχεία .class
(κώδικας byte ή bytecode). Ο κώδικας byte είναι η μορφή που παίρνει ο πηγαίος
κώδικας της Java όταν μεταγλωττιστεί. Όταν πρόκειται να εκτελεστεί η εφαρμογή
σε ένα μηχάνημα, το Java Virtual Machine που πρέπει να είναι εγκατεστημένο σε
αυτό θα αναλάβει να διαβάσει τα αρχεία .class. Στη συνέχεια τα μεταφράζει σε
γλώσσα μηχανής που να υποστηρίζεται από το λειτουργικό σύστημα και τον
επεξεργαστή, έτσι ώστε να εκτελεστεί (να σημειωθεί εδώ ότι αυτό συμβαίνει με
την παραδοσιακή Εικονική Μηχανή [Virtual Machine]. Πιο σύγχρονες εφαρμογές της
εικονικής Μηχανής μπορούν και μεταγλωττίζουν εκ των προτέρων τμήματα bytecode
απευθείας σε κώδικα μηχανής (εγγενή κώδικα ή native code) με αποτέλεσμα να
βελτιώνεται η ταχύτητα). Χωρίς αυτό δε θα ήταν δυνατή η εκτέλεση λογισμικού
γραμμένου σε Java. Πρέπει να σημειωθεί ότι η JVM είναι λογισμικό που εξαρτάται
από την πλατφόρμα, δηλαδή για κάθε είδος λειτουργικού συστήματος και
αρχιτεκτονικής επεξεργαστή υπάρχει διαφορετική έκδοση του. Έτσι υπάρχουν
διαφορετικές JVM για Windows, Linux, Unix, Macintosh, κινητά τηλέφωνα,
παιχνιδομηχανές κλπ.
Οτιδήποτε θέλει να κάνει ο προγραμματιστής (ή ο χρήστης)
γίνεται μέσω της εικονικής μηχανής. Αυτό βοηθάει στο να υπάρχει μεγαλύτερη
ασφάλεια στο σύστημα γιατί η εικονική μηχανή είναι υπεύθυνη για την επικοινωνία
χρήστη - υπολογιστή. Ο προγραμματιστής δεν μπορεί να γράψει κώδικα ο οποίος θα
έχει καταστροφικά αποτελέσματα για τον υπολογιστή γιατί η εικονική μηχανή θα
τον ανιχνεύσει και δε θα επιτρέψει να εκτελεστεί. Από την άλλη μεριά ούτε ο χρήστης
μπορεί να κατεβάσει «κακό» κώδικα από το δίκτυο και να τον εκτελέσει. Αυτό
είναι ιδιαίτερα χρήσιμο για μεγάλα κατανεμημένα συστήματα όπου πολλοί χρήστες
χρησιμοποιούν το ίδιο πρόγραμμα συγχρόνως.