Skip to the content.

1.1 Εισαγωγή στη γλώσσα προγραμματισμού Java

© Γιάννης Κωστάρας


->

Γιατί Java;

Η Java παραμένει μια από τις πιο δημοφιλείς γλώσσες προγραμματισμού. Ξεκίνησε ως μια απλοποίηση της C/C++, αφαιρώντας όσα χαρακτηριστικά ήταν δύσκολα και πηγές λάθους, όπως π.χ. οι δείκτες (pointers) κλπ. Ορίστηκε από την αρχή ως μια αυστηρά αντικειμενοστραφής (object-oriented) γλώσσα προγραμματισμού. Άλλο σημαντικό χαρακτηριστικό της είναι ότι είναι ανεξάρτητη πλατφόρμας χάρις στην Εικονική Μηχανή Java - Java Virtual Machine με αποτέλεσμα να μη χρειάζεται επαναμεταγλώττιση του πηγιαίου κώδικα για να τρέξει σε άλλες πλατφόρμες (‘Write Once Run Everywhere’). Ακόμα είναι ασφαλής (μέσω του Sandbox δεν σας επιτρέπει να γράψετε εφαρμογές που μπορούν να αποκτήσουν πρόσβαση στους πόρους του Η/Υ στον οποίο εκτελείται) ενώ τέλος είναι πολυ-νηματική (multi-threaded).

Κατηγορίες γλωσσών προγραμματισμού

Ανάλογα με τον τρόπο εκτέλεσης, οι γλώσσες προγραμματισμού χωρίζονται σε:

Εικόνα 1.1.1 Διαδικασία μεταγλώττισης πηγαίου κώδικα

Εικόνα 1.1.2 Διαδικασία διερμήνευσης πηγαίου κώδικα

Ανάλογα με τον τρόπο εκτέλεσης, οι γλώσσες προγραμματισμού χωρίζονται ακόμα σε:

myvar = 5
myvar = 3.14
int myvar = 5
double myvar = 3.14

Ανάλογα με το μοντέλο προγραμματισμού που χρησιμοποιείται, χωρίζονται σε:

Οι στατικές γλώσσες προγραμματισμού στοχεύουν σε ταχύτερη εκτέλεση και μεγάλες εφαρμογές ενώ οι δυναμικές γλώσσες στοχεύουν σε ευκολία χρήσης και μικρότερες εφαρμογές.

Με βάση τις παραπάνω κατηγορίες, μπορούμε να πούμε ότι η Java είναι μια αντικειμενοστραφής (αλλά και με στοιχεία συναρτησιακής), στατική, μεταγλωττιζόμενη (αλλά και διερμηνευόμενη) γλώσσα προγραμματισμού.

Εικόνα 1.1.3 Διαδικασία μεταγλώττισης/διερμήνευσης πηγαίου κώδικα Java

Η Εικονική Μηχανής της τρέχει πάνω σε διάφορες πλατφόρμες ανεξαρτήτως αρχιτεκτονικής, π.χ. Windows, Linux, Mac OS, Solaris. Επιτρέπει στα προγράμματα γραμμένα στη γλώσσα Java να μεταγλωττίζονται μόνο μια φορά και να μπορούν να εκτελούνται σε οποιαδήποτε πλατφόρμα χωρίς την ανάγκη επαναμεταλώττισης. (Write once run everywhere)

Εικόνα 1.1.4 Η Εικονική Μηχανή της Java (Java Virtual Machine)

Όπως φαίνεται στο παραπάνω σχήμα, ο πηγαίος κώδικας (.java) μεταγλωττίζεται σε κώδικα bytecode (.class). Κατά την εκτέλεση του προγράμματος, η Εικονική Μηχανή (Ε.Μ.) Java φορτώνει και ελέγχει τις κλάσεις και στη συνέχεια τις εκτελεί με τον διερμηνευτή (Java Interpreter). Ο μεταγλωττιστής Just In Time (JIT) ψάχνει για τμήματα κώδικα που εκτελούνται περισσότερο (hot spots) και τα μεταγλωτίζει για γρηγορότερη εκτέλεση.

Ολίγη ιστορία

Η γλώσσα προγραμματισμού Java ιδρύθηκε το 1991 και αρχικά ονομάστηκε “Δρυς” (Oak) από μια ομάδα προγραμματιστών υπό τον James Gosling στη Sun Microsystems με στόχο την αυτοματοποίηση των οικιακών συσκευών. Τα επόμενα δύο χρόνια ήταν απογοητευτικά για τη γλώσσα μέχρι το 1994, όταν η ομάδα ανάπτυξης επαναπροσδιορίζει τη γλώσσα με στόχο την κοινότητα του Internet. Η Oak μετονομάζεται σε “Java” από το μάρκετινγκ.

Εικόνα 1.1.5 Ο πατέρας της Java James Gosling

Ο Netscape Navigator 2.0 υποστηρίζει τη γλώσσα το Σεπτέμβριο του 1995 με τη μορφή των μη αυτόνομων εφαρμογών Java applets. Η Microsoft ενσωματώνει τη γλώσσα στον Internet Explorer στο τέλος του 1995.

Από τότε, οι δυνατότητες της γλώσσας απογειώνονται. Το 1996 η Sun αναπτύσσει το Java Development Kit 1.02. Το επόμενο έτος, η έκδοση 1.1 υποστηρίζει JavaBeans. Το 1997 η Sun κατηγορεί τη Microsoft για παραβίαση της συμφωνίας όσον αφορά την Java στον Internet Explorer 4.

Η Sun αναπτύσσει το JDK 1.2 και το Swing, το οποίο αποτελεί την αντικατάσταση του AWT (Abstract Window Toolkit), για την ανάπτυξη GUIs (γραφικών εφαρμογών). Επειδή οι αλλαγές είναι πολύ μεγάλες σε σχέση με τις εκδόσεις 1.02 και 1.1, αποφασίζει να την ονομάσει “Java 2”. Ακολουθούν οι εκδόσεις 1.3 και 1.4 (εισαγωγή του JDBC για επικοινωνία με βάσεις δεδομένων). Οι εκδόσεις 1.2, 1.3 και 1.4 αποτελούν τη “Java 2”. Από την έκδοση 1.5, οι αλλαγές είναι πάλι μεγάλες, και πλέον αλλάζει πάλι η ονομασία της έκδοσης σε Java 5. Η Java 5 ήταν η πρώτη ουσιαστική αλλαγή του πυρήνα της γλώσσας απ’ τη δημιουργία της, έτσι ώστε να υποστηρίζει Generics, Enumerated Types, autoboxing, varargs, annotations, static imports και νέες δυνατότητες για πολυνηματισμό (multi-threading). Η έκδοση 6 καταφέρνει να είναι 30% ταχύτερη από τις προηγούμενες εκδόσεις, ενώ η έκδοση 7 φέρνει μικρές βελτιώσεις στη γλώσσα. Είναι η εποχή που η Sun Microsystems εξαγοράζεται από την Oracle. Η έκδοση 8 φέρνει σημαντικές αλλαγές στη γλώσσα παρέχοντάς της δυνατότητες συναρτησιακού (λ-) προγραμματισμού αλλάζοντας κατά πολύ τον τρόπο χρήσης της. Η πολυαναμενόμενη έκδοση 9 έφερε δυνατότητες τμηματοποίησης (modularisation) της γλώσσας δίνοντας τη δυνατότητα να δημιουργήσετε την δική σας εφαρμογή που να περιλαμβάνει μόνο τα modules της Java που χρειάζεται η εφαρμογή σας για να τρέξει. Από την έκδοση 10 και μετά, η Oracle αποφάσισε να εκδίδει μια νέα (minor) έκδοση Java κάθε 6 μήνες (και μια major έκδοση κάθε δυο χρόνια). Η πρώτη έκδοση με μακροπρόθεσμη υποστήριξη (Long Time Support - LTS) είναι η 11. (Εκδόσεις Java SE)

Έκδοση Java Κωδική ονομασία Τέλος εποχής Ημερομηνία έκδοσης Αρ. δημοσίων κλάσεων*
Java 17 - - 14/09/2021  
Java 16 - - 15/03/2021  
Java 15 - - 15/09/2020  
Java 14 - - 17/03/2020  
Java 13 - - 17/09/2019  
Java 12 - - 19/03/2019  
Java 11 - - 25/09/2018 4410
Java 10 - - 20/03/2018 6002
Java 9 - - 27/07/2017 6005
Java 8 Spider 31/12/2020 18/03/2014 4240
Java 7 Dolphin 14/04/2015 28/07/2011 4024
Java 6 Mustang 16/04/2013 23/12/2006 3793
Java 5 Tiger 4/11/2009 04/10/2004 3279
Java 1.4 Merlin <4/11/2009 06/02/2002 2991
Java 1.3 Kestrel <4/11/2009 08/05/2000 1842
Java 1.2 Playground <4/11/2009 08/12/1998 1520
Java 1.1 - <4/11/2009 19/02/1997 504
Java 1.02 Oak <4/11/2009 21/01/1996 212

*αριθμός δημοσίων κλάσεων του πλαισίου ‘all classes’ του javadoc API

Μια σύνοψη των αλλαγών στις διάφορες εκδόσεις:

Η ιστοσελίδα Java Almanac περιλαμβάνει λεπτομερείς πληροφορίες για τις διάφορες εκδόσεις καθώς και τι αλλάζει από έκδοση σε έκδοση με δυνατότητα να δοκιμάσετε τα νέα χαρακτηριστικά κάθε έκδοσης απευθείας στον πλοηγό σας. Αξίζει να την επισκεφθείτε.

Εικόνα 1.1.6 Αρχιτεκτονική της Java Standard Edition (Πηγή: https://tinyurl.com/y9y2meap)

Εν τω μεταξύ, μετά το JDK 1.3 εμφανίστηκε και η Java Enterprise Edition (JEE) 1.3 η οποία στοχεύει στην ανάπτυξη επιχειρηματικών εφαρμογών (κοινώς το Web). Περιλαμβάνει τεχνολογίες όπως Enterprise JavaBeans (EJBs), servlets, Java Server Pages, Java Server Faces κ.ά. Σήμερα βρίσκεται στην έκδοση 8, με πολλές δυνατότητες και ευκολία χρήσης σε σχέση με τις προηγούμενες εκδόσεις (1.3, 1.4, 5, 6, 7). Παράλληλα, έχουν αναπτυχθεί πολλά frameworks για ανάπτυξη επιχειρηματικών εφαρμογών (ή εφαρμογών ιστού) βασισμένα στη Java, όπως το Apache Tapestry, το Apache Struts, το Play και το Spring για να αναφέρουμε τα πιο γνωστά.

Εικόνα 1.1.7 Αρχιτεκτονική της Java Enterprise Edition (Πηγή: https://i.stack.imgur.com/LuHAa.png)

Βασικά συστατικά μιας εφαρμογής JEE είναι:

Η JavaEE πλέον διαμένει στο νέο της ‘σπίτι’ και ονομάζεται Jakarta EE.

Αλλά η Java έχει γίνει πολύ γνωστή και στον κλάδο των κινητών εφαρμογών με τη Java Micro Edition (JME) που αποτελεί ανταγωνιστή του Android και του iOS.

Εικόνα 1.1.8 Αρχιτεκτονική της Java Mobile Edition (Πηγή: https://tinyurl.com/ysz9t6ww)

Η Java έχει προκαλέσει περισσότερο ενθουσιασμό από οποιαδήποτε άλλη εξέλιξη στο Διαδίκτυο από την εποχή του Mosaic. Είναι μια γλώσσα προγραμματισμού για κατανεμημένες εφαρμογές. Έχει γίνει παγκοσμίως γνωστή ωστόσο, επειδή επιτρέπει στους χρήστες να αλληλεπιδρούν με τις ιστοσελίδες. Ένα πολύ βασικό χαρακτηριστικό που αποτέλεσε κι έναν από τους κυριότερους λόγους διάδοσης της γλώσσας είναι ότι είναι ανεξάρτητη πλατφόρμας (‘Write Once Run Everywhere’). Αυτό σημαίνει ότι γράφετε κώδικα μια φορά και αυτός τρέχει σε οποιαδήποτε πλατφόρμα που έχει εγκατεστημένο το Java Virtual Machine.

Με το JDK 1.2, η Java έγινε η πιο ελκυστική γλώσσα για την κατασκευή φιλικών προς το χρήστη γραφικών περιβάλλοντων με τη χρήση του Swing. Το JavaFX, ο ανταγωνιστής των Adobe AIR και MS Silverlight, αποτελεί το νέο framework της γλώσσας για ανάπτυξη γραφικών εφαρμογών (αντικαθιστά το Swing).

Για να δούμε και μια άλλη γνώμη όμως, ο Stroustrup υποστηρίζει ότι ≪… η Java δεν είναι ανεξάρτητη πλατφόρμας. Είναι μια πλατφόρμα. Όπως και τα Windows, είναι μια ιδιόκτητη εμπορική πλατφόρμα. Δηλαδή, μπορείτε να γράψετε προγράμματα για Windows / Intel ή για Java / JVM, και σε κάθε περίπτωση γράφετε κώδικα για μια πλατφόρμα που ανήκει σε μία εταιρεία και για το εμπορικό όφελος των εν λόγω εταιριών. Έχει επισημανθεί ότι μπορείτε να γράψετε τα προγράμματα σε οποιαδήποτε γλώσσα για τη JVM και τα συναφή λειτουργικά συστήματα. Ωστόσο, η JVM, κ.λπ., είναι σε μεγάλο βαθμό μεροληπτική υπέρ της Java. Δεν είναι πουθενά κοντά σε μια γενική, λογικά, ουδέτερη γλώσσα VM/Λ.Σ. …≫

Αν και τα επιχειρήματα του Stroustrup, του δημιουργού της C++ ήταν αληθή έως ένα βαθμό μέχρι πρότεινος, πρόσφατα η Oracle “άνοιξε” τον κώδικα τόσο της Java SE όσο και της Java EE. Επίσης, η ΕΜ (JVM) αποτελεί πλέον την πλατφόρμα για πολλές άλλες γλώσσες προγραμματισμού οι οποίες μπορούν να τρέξουν σ’ αυτή, όπως Groovy, Ruby (JRuby), Python (Jython), Go, Erlang (Erjang), Clojure κ.ά. κάνοντάς τη μια πραγματικά πολύγλωσση (polyglot) εικονική μηχανή.

Η Java έγινε πλέον ανοικτού κώδικα με το OpenJDK, η πρώτη έκδοση του οποίου κυκλοφόρησε για το Ubuntu και διανέμεται πλέον μ’ αυτό αλλά και το Jakarta EE.

Εν τω μεταξύ, η Microsoft δημιούργησε τον κύριο ανταγωνιστή της Java μέσω της πλατφόρμας της .NET, που ονομάζεται C#, μια γλώσσα που απορρέει από την Java και τη C++ κι αυτός ήταν κι ένας από τους λόγους των πολλών αλλαγών που επήλθαν στη Java στην έκδοση 5 και μετά. Η JVM μπορεί να θεωρηθεί ως η εξ’ ορισμού πλατφόρμα για τα συστήματα Unix/Linux και στον αντίποδα το .NET για την πλατφόρμα Windows. Παρόλ’ αυτά, τόσο η JVM υποστηρίζεται από τα Windows αλλά πλέον το .ΝΕΤ υποστηρίζεται και από τις πλατφόρμες Linux.

Το 2009 ο ήλιος της Sun έσβησε μετά την εξαγορά της από την Oracle, η οποία μάλιστα ισχυρίζεται, ότι η Java ήταν ο κύριος λόγος εξαγοράς της Sun καθώς το μεγαλύτερο μέρος του middleware της Oracle είναι γραμμένο σε Java. Αν και οι εξελίξεις έδειχναν αρνητικές, καθώς ο CEO της SUN παραιτήθηκε κι ακολούθησε κι η παραίτηση του ‘πατέρα’ της Java, του James Gosling, και μετά από πολλές περιπέτειες, η Oracle κατάφερε να βγάλει πολλές επιτυχημένες εκδόσεις της Java και πλέον μια νέα έκδοση βγαίνει κάθε 6 μήνες.

Συνοπτικά η Java είναι:

Πηγές

  1. Java History.
  2. JAVATM TECHNOLOGY: AN EARLY HISTORY.
  3. Α brief history of the Green Project.
  4. Kabutz H. (2002), “Once Upon an Oak…”, JavaSpecialists Newsletter 055.
  5. Wikipedia, Java Programming Language.
  6. Liguori R. & Liguori P. (2014), Java 8 Pocket Guide, O’Reilly.
  7. Oracle Java SE Support Roadmap.

Δ ->