Magaz, The Greek Linux Magazine
Magaz Logo

Επόμενο  Προηγούμενο  Περιεχόμενα

2. Χμμμ, ενδιαφέρον άρωμα... (Features/Applications)

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, θα τα ερευνήσει για οποιεσδήποτε παράνομες κλήσεις (π.χ. διάβασμα από τον τοπικό σκληρό δίσκο κλπ. κλπ.).

Επόμενο  Προηγούμενο  Περιεχόμενα


Valid HTML 4.01!   Valid CSS!