Επόμενο Προηγούμενο Περιεχόμενα
H Java αποτελεί μία object oriented γλώσσα. Η πλειοψηφία
των έτοιμων functions αποτελούν μέρος των αρμόδιων
classes και έτσι ο νέος χρήστης συναντά από νωρίς όρους,
όπως το object και την τεχνική του inheritance.
Η γλώσσα επιτρέπει σε μια δικιά μας class, να αποτελεί
γόνο περισσότερων από μιας αρχέτυπων classes.Αυτό όμως
δεν σημαίνει ότι η νέα class θα περιέχει τον κώδικα τών
αρχέτυπων. Απλά, εξασφαλίζει με αυτόν τον τρόπο ότι στη
νέα class θα υπάρχουν όλες οι functions που υπήρχαν στις
πατρικές ΟΝΟΜΑΣΤΙΚΑ. Έτσι, θα είμαστε σίγουροι ότι μία
class που κατάγεται από την Class Skylo και Class Gata,
και θα νιαουρίζει και θα γαβγίζει (έχοντας γράψει και τον
κατάλληλο κώδικα φυσικά). Classes σαν τον σκύλο και τη
γάτα, που λειτουργούν ως αρχέτυπα και εξασφαλίζουν ότι
ένας συγκεκριμένος αριθμός από functions θα υπάρχουν σε
κάθε class που κατάγεται από αυτές, ονομάζονται
interfaces και δεν περιεχουν implementation παρά μόνο
function headers. Συνεπώς, σε μία function που περιμένει
ως παράμετρο ένα interface, μπορούμε να περάσουμε κάθε
class που κάνει implement αυτό τo interface
H Java αποτελεί μία εν γένει threaded γλώσσα. Βασικές της
λειτουργίες όπως το αυτόματο garbage collection, o Audio
Player, η διαχειριση των events σε γραφικό περιβάλλον
αλλά και η ίδια η function main(), αναλαμβάνονται από
ξεχωριστά threads κατά την εκτέλεση του προγράμματος. Τα
threads αυτά τρέχουν παράλληλα και ο διαμερισμός του
χρόνου για κάθε διεργάσια ίδιου priority προσδιορίζεται
από το λειτουργικό σύστημα.
Προσοχή θα πρέπει να δοθεί στο γεγονός ότι η Java
διαβάζει και γράφει σε unicode και όχι σε ASCII.
Aς δούμε όμως μερικά σημεία της γλώσσας που την κάνουν
ιδιαίτερα επιθυμητή στο σημερινό προγραμματιστικό κοινό.
Λόγω threading είναι ιδανική για τη συγγραφή προγραμμάτων
σχετικά με δικτυακές εφαρμογές. Π.χ. σε ένα server
application το πρόγραμμα μπορεί να χρησιμοποιήσει ένα
thread για να ακούει σε μια port και κάθε φορά που
δέχεται ένα incomming connection, να ξεκινά ένα καινούριο
thread για να
αναλαμβάνει τις υπηρεσιές του connection αυτού. Έτσι δεν
χρειάζεται να παίζουμε με fork() και if-then-else
structures ώστε να χωρίζουμε τον κώδικα μεταξύ του
αρχικού server και των forked παιδιών του (ό πως γίνεται
στη C).
Eκτός αυτού, το threading μάς επιτρέπει να δώσουμε σε
βαριά προγράμματα μια νέα αρχιτεκτονική, όπου κάποιες
διεργασίες θα εκτελούνται παράλληλα, επιτρέποντας
καλύτερη αξιοποίηση της υπολογιστικής δύναμης ενός
multi-processor συστήματος.
Όσον αφορά το σχεδιασμό προγραμμάτων με GUI, εκτός από
την πληθώρα των classes υπεύθυνες για τέτοιες διεργασίες,
δίνεται στο χρήστη η δυνατότητα να επιλέξει το είδος των
widgets που θα βγάλει στη φόρμα του. Για παράδειγμα
μπορεί είτε να χρησιμοποιήσει τα default widgets του ήδη
υπάρχοντος window manager είτε (για περισσότερη ταχύτητα)
τα predefined widgets του swing, που έχουν σχεδιαστεί σε
java και είναι όμοια για όλες τις πλατφόρμες.
Η εξοικείωση με το συντακτικό της γλώσσας δεν αργεί πολύ
καθώς είναι παραπλήσιο με αυτό της C. H Java κρύβει από
το χρήστη τα pointer semantics και έτσι το παιχνίδι με τα
objects/classes γίνεται πολύ ευκολότερο απ΄ότι στη C++.
Έστω ότι μία function χρειάζεται ως παράμετρο την
instance μιας class που δεν πρόκειται να
ξαναχρησιμοποιήσουμε στο υπόλοιπο πρόγραμμα. Η Java μάς
επιτρέπει να φτιάξουμε επί τόπου μια "anonymous inner
class" και να κάνουμε τη δουλειά μας χωρίς άλλα
declarations. Ή για παράδειγμα, αν χρειαστούμε, για ένα
μικρό κομμάτι κώδικα, να κάνουμε override μια method μιας
ήδη υπάρχουσας class... :) η "anonymous inner class" θα
μας λύσει τα χέρια.
Η ελαστικότητα που προσφέρεται με τα threads παρατηρείται
και στο event handling. Οι λεγόμενοι adapters και event
listeners μάς δίνουν τη δυνατότητα να κάνουμε register
ένα event μιας class σε περισσότερους από έναν listeners.
Με αυτό τον τρόπο μπόρουμε να έχουμε ένα button στη φόρμα
μας που αλλάζει times σε διάφορα objects χωρίς να
χρειάζεται explicit reference στις συγκεκριμένες
instances και methods των objects αυτών (που θα αναλάβουν
το event).
Oι βιβλιοθήκες από functions είναι οργανωμένες σε μορφή
πακέτων (packages). Αυτές που αρχίζουν από java (ή sun)
είναι οι default που δίνονται με το jdk από τη Sun.
Γράφοντας import java.awt.* δίνουμε στο πρόγραμμα μας
πρόσβαση σε όλες τις classes του πακέτου AWT (υπεύθυνο
για ρουτίνες σε γραφικό περιβάλλον). Τα αρχεία .jar
αποτελούν τον ενδεδειγμένο τρόπο συμπίεσης πακέτων. Όποτε
ο java interpreter χρειαστεί μια class απο ενα τέτοιο
πακέτο, θα το αποσυμπιέσει αυτόματα. Τα περιβόητα Java
Beans δεν αποτελούν τ ίποτα παραπάνω από συμπιεσμένα
packages, που χρησιμοποιούνται ως components, σε εργαλεία
visual προγραμματισμού όπως ο Java Builder.
Εκτός από την απλή σχεδίαση γραφικών, μπορεί κανείς να
βρει packages υπεύθυνα για επεξεργασία αντικειμένων σε
3d, classes για φιλτράρισμα ήχου, προβολή και επεξεργασία
video, methods που απλουστεύουν τη χρήση των sockets στα
networking apps, message encryption και signing (με
επιλογή στους αλγόριθμους που θα χρησιμοποιηθούν) και
πολλά πολλά άλλα.
Δεδομένου ότι η Sun ήταν η μαμά του RPC (remote procedure
call), δεν θα μπορούσαν να αφήσουν απ΄έξω την RMI (remote
method invocation) τεχνολογία. Σύμφωνα με το RMI, ένα
object που τρέχει σε μια Virtual Machine μπορεί να
καλέσει (μέσω δικτύου) μια method ενός object που υπάρχει
σε μια άλλη virtual machine. Για να γίνουν τα πράγματα
πιο λιανά, φανταστείτε ότι έχετε κάνει semi-compile ένα
πρόγραμμα και το έχετε εγκαταστήσει σε ένα μηχάνημα ενός
δικτύου. Χρησιμοποιώντας λιγοστά αρχεία (που περιέχουν
πληροφορίες για το πώς θα καλέσουν τις methods στο server
μηχάνημα) θα μπορούσατε να κάνετε όλα τα μηχανήματα στο
LAN auto clients
αυτού του προγράμματος (χωρίς φυσικά να αντιγράψετε
ολόκληρο το software σας στο δίσκο κάθε μηχανήματος).
Τα Java Applets αποτελούν εκτελέσιμα αρχεία της java,
κατασκευασμένα για να τρέξουν από τον web-browser κάθε
χρήστη που θα τα κατεβάσει από το net. Στην ουσία
καλούνται από τα {APPLET CODE="koko.class"} tags της
σελίδας που παρακολουθεί ο χρήστης. O web-browser πρίν τα
τρέξει στη μικρή του jvm, θα τα ερευνήσει για
οποιεσδήποτε παράνομες κλήσεις (π.χ. διάβασμα από τον
τοπικό σκληρό δίσκο κλπ. κλπ.).
Επόμενο Προηγούμενο Περιεχόμενα