Java
Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Η Java είναι μία αντικειμενοστρεφής (object oriented) γλώσσα προγραμματισμού που σχεδιάστηκε από την εταιρεία πληροφορικής Sun Microsystems.
Πίνακας περιεχομένων |
[Επεξεργασία] Ιστορία
Στις αρχές του 1991, στη Sun αναζητούσαν το κατάλληλο εργαλείο για να αποτελέσει την πλατφόρμα ανάπτυξης λογισμικού σε μικρο-συσκευές (έξυπνες οικιακές συσκευές έως πολύπλοκα συστήματα παραγωγής γραφικών). Τα εργαλεία της εποχής ήταν γλώσσες όπως η C++ και η C. Μετά από διάφορους πειραματισμούς αποφάνθηκαν ότι οι υπάρχουσες γλώσσες δεν μπορούσαν να καλύψουν τις ανάγκες τους. Ο "πατέρας" της Java, James Gosling, που εργαζόταν εκείνη την εποχή για την Sun, έκανε ήδη πειραματισμούς πάνω στη C++ και είχε παρουσιάσει κατά καιρούς κάποιες πειραματικές γλώσσες (C++ ++) ως πρότυπα για το νέο εργαλείο που αναζητούσαν στην Sun. Τελικά μετά από λίγο καιρό κατέληξαν με μια πρόταση για το επιτελείο της εταιρίας, η οποία ήταν η γλωσσα Oak. Το όνομά της το πήρε από το ομώνυμο δένδρο (βελανιδιά) το οποίο ο Gosling είχε έξω από το γραφείο του και έβλεπε κάθε μέρα.
[Επεξεργασία] Από την Oak στη Java
H Oak ήταν μία γλώσσα που διατηρούσε μεγάλη συγγένεια με την C++. Παρολά αυτά είχε πολυ πιο έντονο αντικειμονοστραφή (object oriented) χαρακτήρα σε σχέση με την C++ και χαρακτηριζόταν για την απλότητα της. Σύντομα οι υπεύθυνοι ανάπτυξης της νέας γλώσσας ανακάλυψαν ότι το όνομα Oak ήταν ήδη κατοχυρωμένο οπότε κατά την διάρκεια μίας εκ των πολλών συναντήσεων σε κάποιο τοπικό καφενείο αποφάσισαν να μετονομάσουν το νέο τους δημιούργημα σε Java που εκτός των άλλων ήταν το όνομα αγαπητού καφέ για τους δημιουργούς της (Java στην αγγλική γλώσσα είναι το φυτό που βγάζει τον καφέ). Η επίσημη εμφάνιση της Java αλλα και του HotJava (πλοηγός με υποστήριξη Java) στη βιομηχανία της πληροφορικής έγινε το Μάρτιο του 1995 όταν η Sun την ανακοίνωσε στο συνέδριο Sun World 1995. O πρώτος αποδελτιωτής (compiler) της ήταν γραμμένος στη γλώσσα C από τον James Gosling. Το 1994, ο A.Van Hoff ξαναγράφει τον αποδελτιωτή της γλώσσας σε Java (από τα πλεόν δύσκολα επιτεύγματα στο χώρο της πληροφορικής είναι να γράψεις έναν αποδελτιωτή μίας γλώσσας στην ίδια τη γλώσσα), ενώ το Δεκέμβριο του 1995 πρώτες οι IBM, Borland, Mitsubishi Electronics, Sybase και Symantec ανακοινώνουνε σχέδια να χρησιμοποιήσουνε τη Java για την δημιουργία λογισμικού. Από εκεί και πέρα η Java ακολουθεί μία ανοδική πορεία και είναι πλέον μία από τις πιο δημοφιλείς γλώσσες στον χώρο της πληροφορικής. Στις 13 Νοεμβρίου του 2006 η Java έγινε πλέον μια γλώσσα ανοιχτού κώδικα (GPL) στον compiler (javac) και στο developement εργαλείο (jdk).
[Επεξεργασία] Τα χαρακτηριστικά της 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 τότε γίνεται compile μέσω του Java compiler (javac), εκείνος με την σειρά του δίνει ένα αριθμό απο .class αρχεια (=bytecode). Το bytecode είναι η μορφή που παίρνει ο πηγαίος κώδικας της Java όταν έρθει σε μία διάταξη αποδελτίωσης αναλόγως με το πόσες κλάσεις έχουνε γραφτεί για την εφαρμογή. Οταν προσπαθήσουμε λοιπόν να εκτελέσουμε την εφαρμογή μας το Java Virtual Machine που πρέπει να είναι εγκατεστημένο στο μηχάνημά μας, θα αναλάβει να διαβάσει τα .class αρχεία και να τα μεταφράσει σε γλώσσα και εντολές μηχανής (assembly) που υποστηρίζει το λειτουργικό μας και ο επεξεργαστής μας, έτσι ώστε να εκτελεστεί (να σημειώσουμε εδώ ότι αυτό συμβαίνει με την παραδοσιακή Εικονική Μηχανή (Virtual Machine) . Πιο σύγχρονες εφαρμογές της εικονικής Μηχανής μπορούν και αποδελτιώνουν τα πολύχρηστα τμήματα bytecode απ' ευθείας σε ιθαγενή κώδικα (native code) με αποτέλεσμα να βελτιώνεται η ταχύτητα). Χωρίς αυτό δε θα ηταν δυνατή η εκτέλεση λογισμικού γραμμένου σε Java. Πρέπει να πούμε οτι το Virtual Machine ειναι λογισμικό platform specific δηλαδή για κάθε είδος λειτουργικού και ανάλογης τεχνολογίας επεξεργαστή, υπάρχει διαφορετική έκδοση. Έτσι υπάρχουν διαθέσιμες εκδόσεις του για Windows, Linux, Unix, Macintosh, κινητά τηλέφωνα, παιχνιδομηχανές κλπ!
Ο,τιδήποτε θέλει να κάνει ο προγραμματιστής (ή ο χρήστης) γίνεται μέσω της εικονικής μηχανής. Αυτό βοηθάει στο να υπάρχει μεγαλύτερη ασφάλεια στο σύστημα γιατί η εικονική μηχανή είναι υπεύθυνη για την επικοινωνία χρήστη - υπολογιστή. Ο προγραμματιστής δεν μπορεί να γράψει κώδικα ο οποίος θα έχει καταστροφικά αποτελέσματα για τον υπολογιστή γιατί η εικονική μηχανή θα τον ανιχνεύσει και δε θα επιτρέψει να εκτελεστεί. Από την άλλη μεριά ούτε ο χρήστης μπορεί να κατεβάσει «κακό» κώδικα από το δίκτυο και να τον εκτελέσει. Αυτό είναι ιδιαίτερα χρήσιμο για μεγάλα κατανεμημένα συστήματα όπου πολλοί χρήστες χρησιμοποιούν το ίδιο πρόγραμμα συγχρόνως.
[Επεξεργασία] Ο συλλέκτης σκουπιδιών (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 Compiler με την χρήση της τεχνολογίας Hot Spot καταφέρνει να παρέχει αξιόλογες επιδόσεις που πλησιάζουν ή και ξεπερνούν σε μερικές περιπτώσεις native κώδικα.
[Επεξεργασία] Εργαλεία ανάπτυξης
Όλα τα εργαλεία που χρειάζεται κάποιος για να γράψει Java προγράμματα έρχονται δωρεάν, από το περιβάλλον ανάπτυξης μέχρι build εργαλεία όπως το Apache Ant και βιβλιοθήκες ενώ υπάρχουν πολλές διαφορετικές εφαρμογές της Εικονικής Μηχανής και του compiler (πχ the GNU Compiler for Java) της Java. Είναι στο χέρι του καθενός να επιλέξει το κατάλληλο περιβάλλον. Πολλά εργαλεία και τεχνολογίες σε Java μπορούν να βρεθούν στο Apache Software Foundation αλλά και στο Jakarta Project.
[Επεξεργασία] Σύνθετο περιβάλλον ανάπτυξης (IDE)
Για να να γράψει κάποιος Java κώδικα δε χρειάζεται τίποτα άλλο παρά έναν επεξεργαστή κειμένου όπως notepad ή vi. Παρ'όλ'αυτά, ένα ολοκληρωμένο περιβάλλον ανάπτυξης (IDE) βοηθάει πολύ, ιδιαίτερα στον Εντοπισμός σφαλμάτων(Προγραμματισμός) (debugging). Υπάρχουν αρκετά διαθέσιμα, πολλά από αυτά έρχονται δωρεάν.
[Επεξεργασία] Εξωτερικοί σύνδεσμοι
- IDE
- NetBeans ((Linux)), ((Windows))
- Eclipse ((Linux)), ((Windows))
- jΕdit ((Linux)), ((Windows))
- JCreator ((Windows))
- JΒuilder
- Java User Groups
- jugs κοινότητα
- jhug (ελληνική ομάδα χρηστών Java)
- bejug (βελγική ομάδα χρηστών Java)
- jugmilano (μιλανέζικη ομάδα χρηστών Java)
- egjug (αιγυπτιακή ομάδα χρηστών Java)