Γιατί η Java ΔΕΝ είναι 100% Object–Oriented γλώσσα προγραμματισμού
Η Java έγινε release το 1995 από την Sun Microsystems με τη λογική οτι είναι μια γλώσσα προγραμματισμού που δημιουργήθηκε γύρω από την Object-Oriented φιλοσοφία . Στην πραγματικότητα, η Java θεωρείται ο ιδανικός τρόπος για να μάθει κάποιος OOP. Θα πρέπει επίσης να σημειώσουμε οτι σε όλα τα πανεπιστήμια / σχολές κτλ στο πρόγραμμα σπουδών αναγράφετε το μάθημα “Αντικειμενοστραφής προγραμματισμός” και έχει ως αναφορά την Java. Έτσι λοιπόν όλοι οι φοιτητές θεωρούν οτι έφόσον το αναφέρει εκεί έτσι θα είναι.
Έχουν υπάρξει μέχρι τώρα αρκετές στιγμές που έχουν έρθει σε “κόντρα” προγραμματιστές μεταξύ τους για το εαν η Java είναι καθαρά Object-Oriented γλώσσα προγραμματισμού. Έχουμε λοιπον ενα μεγάλο κοινό το οποίο υποστηρίζει οτι ναι είναι και ενα μικρότερο το οποίο υποστηρίζει το αντίθετο. Στη προκειμένη περίπτωση οι λίγοι έχουν δίκιο και πολλοί άδικο. Ναι, η Java δεν είναι 100% OOP γλώσσα. Πάμε να καταρρίψουμε το μύθο.
Κανόνες και αρχές
Καταρχήν για να μπορέσουμε να συνεχίσουμε θα πρέπει να ξαναθυμηθούμε τις βασικές αρχές που οριοθετούν μια γλώσσα προγραμματισμού ως “Αντικειμενοστραφή”
- Encapsulation : Με αυτή την έννοια όλα τα data είναι “κρυμμένα” μέσα σε ένα συγκεκριμένο header.
- Polymorphism : Με αυτή την έννοια επιτρέπεται να έχουμε μια οντότητα σε πολλαπλές μορφές.
Αυτό μπορεί να επιτευχθεί με τις διαδικασίες method overloading και
overriding - Inheritance : Με αυτή την έννοια έχουμε την δυνατότητα να κληρονομήσουμε όλα properties
από την parent class στην child - Abstraction : Λόγω αυτής της ιδιότητας του OOP, ο χρήστης βλέπει μόνο τα απαραίτητα
δεδομένα. Όλα τα υπόλοιπα αποκρύπτονται γιατί δεν πρέπει να εκτίθενται και
να υπάρχει πρόσβαση. Αυτό επιτυγχάνεται μέσω των interfaces και των abstract
κλάσεων. - Όλα τα predefined types είναι objects
- Όλα τα user-defined types είναι objects
- Όλες οι διαδικασίες εκτελούνται μόνο μέσω των objects χρησιμοποιώντας τις υλοποιημένες μεθόδους.
Για να θεωρείται μια γλώσσα προγραμματισμού (οποιαδήποτε όχι μόνο η Java) θα πρέπει να ικανοποιεί όλες τις παραπάνω αρχές.
Γιατί η Java δεν είναι 100% OOP γλώσσα
Έχοντας υπόψη τα παραπάνω, η Java “ικανοποιεί” τους κανόνες 1, 2, 3, 4, 6. Οι κανόνες 5 και 7 δεν εφαρμόζονται κατά γράμμα. Πάμε να δούμε λίγο πιο αναλυτικά πως λειτουργεί η Java στους κανόνες αυτούς.
Κανόνας 5
Ο 5ος κανόνας λέει ότι όλα τα predefined (primitive) types είναι objects, κάτι το οποίο δε συμβαίνει στην Java. Ας παρουμε για παράδειγμα την γλώσσα προγραμματισμού “Smalltalk” η οποία είναι 100% object-oriented. Η Smalltalk είναι μια γλώσσα Αντικειμενοστραφούς Προγραμματισμού καθώς όλοι οι προκαθορισμένοι τύποι δεδομένων, όπως int, Boolean και chars, κτλ είναι επίσης αντικείμενα, αντίθετα από την Java. Στην Java, οι primitive datatypes όπως int, char, long, boolean κτλ δεν είναι αντικείμενα, αλλά έχουν τις Wrapper κλάσεις Integers, Character και Float κτλ. Αυτές οι κλάσεις έχουν τη δυνατότητα να μετατρέψουν τα primitive datatypes σε αντικείμενα. Αυτό σημαίνει ότι τα primitive datatypes δεν είναι αντικείμενα. Αυτό έρχεται σε αντίθεση με τον κανόνα 5 των αρχών του Αντικειμενοστραφούς Προγραμματισμού.
Κανόνας 7
Ο 7ος κανόνας λέει ότι οποιαδήποτε διεργασία θέλουμε να εκτελέσουμε γίνεται μέσω ενός object και κατ’ επέκταση χρησιμοποιώντας τις μεθόδους της κλάσης. Εδώ έρχεται η Java και δίνει την δυνατότητα να δηλώσουμε μια μέθοδο ή μεταβλητή ως static για να έχουμε απευθείας access χωρίς την δημιουργία object.
Παράδειγμα :
Car.startEngine()
Ενώ η κλήση της startEngine θα έπρέπε να γίνεται μόνο με τον παρακάτω τρόπο για να μην σπάει ο κανόνας
Car car1 = new Car();
car1.startEngine();
Το παραπάνω παράδειγμα αυτομάτως ακυρώνει τον κανόνα 7.
Συμπεράσματα
Ενώ η Java είναι σε μεγάλο βαθμό αντικειμενοστραφής και υποστηρίζει πολλά βασικά χαρακτηριστικά της αντικειμενοστραφούς δομής (encapsulation, inheritance, polymorphism, κλπ.), για τους δυο παραπάνω λόγους δεν είναι 100% αντικειμενοστραφής.