This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
java:interface_as_data_type [2017/03/31 13:30] gthanos |
java:interface_as_data_type [2017/03/31 14:32] gthanos |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Το interface ως τύπος δεδομένων ====== | ====== Το interface ως τύπος δεδομένων ====== | ||
- | Ας υποθέσουμε τώρα ότι θέλουμε να αρχικοποιήσουμε ένα αντικείμενο τύπου //Timer// και περιοδικά να ελέγχουμε εάν ο //timer// έχει λήξει ή όχι. Δείτε το παρακάτω πρόγραμμα το οποίο ελέγχει εάν ο Timer έχει λήξει ή όχι. | + | Ας υποθέσουμε τώρα ότι θέλουμε να χρησιμοποιήσουμε μία στοίβα για να αντιμεταθέσουμε τα στοιχεία ενός πίνακα χαρακτήρων. Ο πίνακας αρχικά περιέχει την αγγλική αλφαβήτα (26 χαρακτήρες) και θέλουμε να αντιστρέψουμε την σειρά με την οποία αποθηκεύονται οι χαρακτήρες στον πίνακα. Η μέθοδος invertArray παρακάτω αντιμεταθέτει τα στοιχεία του πίνακα array με χρήση της στοίβας stk. |
- | <code java SleepOnTimer.java> | + | <code java ArrayManipulator.java> |
- | class SleepOnTimer { | + | public class ArrayManipulator { |
public static void main(String []args) { | public static void main(String []args) { | ||
- | Timer timer = new SimpleTimer(); | + | Character alphabet[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; |
- | System.out.println(new Date()); | + | printCharacterArray(alphabet); |
- | sleepOnTimer(timer, 5); | + | System.out.println("-----------"); |
- | System.out.println(new Date()); | + | |
+ | Stack stack = new ArrayStack(); | ||
+ | invertArray(alphabet, stack); | ||
+ | | ||
+ | printCharacterArray(alphabet); | ||
} | } | ||
- | public static void sleepOnTimer(Timer t, int sleepSeconds) { | + | |
- | try { | + | public static void invertArray(Object []array, Stack stk) { |
- | t.setTimer(sleepSeconds); | + | for(int i=0; i<array.length; i++) |
- | t.startTimer(); | + | stk.push(array[i]); |
- | while(!t.hasExpired()) { | + | for(int i=0; i<array.length; i++) |
- | Thread.sleep(sleepSeconds * 1000 / 10); | + | array[i] = stk.pop(); |
- | } | + | } |
- | } | + | |
- | catch(Exception ex) { | + | public static void printCharacterArray(Character []array) { |
- | ex.printStackTrace(); | + | for(Character c : array) |
- | } | + | System.out.print(c+" "); |
+ | System.out.println(""); | ||
} | } | ||
} | } | ||
Line 27: | Line 32: | ||
<WRAP important 80% center round> | <WRAP important 80% center round> | ||
- | Παρατηρήστε ότι η μέθοδος //sleepOnTimer// παίρνει ως 2ο όρισμα όχι το αντικείμενο μίας κλάσης αλλά ένα αντικείμενο τύπου interface //Timer//! Στην πραγματικότητα αυτό που δηλώνει η συγκεκριμένη μέθοδος είναι ότι ως 2ο όρισμα παίρνει ένα αντικείμενο του οποίου η κλάση υλοποιεί το interface //Timer//. Επίσης, δηλώνει ότι από όλες τις διαθέσιμες μεθόδους της κλάσης μπορούν να χρησιμοποιηθούν μόνο οι μέθοδοι που δηλώνονται στο interface Timer. | + | Παρατηρήστε ότι η μέθοδος //invertArray// παίρνει ως 2ο όρισμα όχι το αντικείμενο μίας κλάσης αλλά ένα αντικείμενο τύπου interface //Stack//! Στην πραγματικότητα αυτό που δηλώνει η συγκεκριμένη μέθοδος είναι ότι ως 2ο όρισμα παίρνει ένα αντικείμενο του οποίου η κλάση υλοποιεί το interface //Stack//. Επίσης, δηλώνει ότι από όλες τις διαθέσιμες μεθόδους της κλάσης μπορούν να χρησιμοποιηθούν μόνο οι μέθοδοι που δηλώνονται στο interface. |
</WRAP> | </WRAP> | ||
Line 33: | Line 38: | ||
Στο παραπάνω πρόγραμμα, αλλάξτε την γραμμή | Στο παραπάνω πρόγραμμα, αλλάξτε την γραμμή | ||
<code java> | <code java> | ||
- | Timer timer = new SimpleTimer(); | + | Stack stack = new ArrayStack(); |
</code> | </code> | ||
σε | σε | ||
<code java> | <code java> | ||
- | Timer timer = new StartStopTimer(); | + | Stack stack = new LinkedStack(); |
</code> | </code> | ||
- | Παρατηρήστε εάν εκτελώντας το πρόγραμμα αυτό τερματίζει στον ίδιο χρόνο (5 sec); | + | Παρατηρήστε αν σας βγάζει κάποιο μήνυμα ο //compiler// και εάν εκτελώντας το πρόγραμμα παράγεται το ίδιο τελικό αποτέλεσμα. Τι συμπέρασμα βγάζετε για τη χρήση της στοίβας από την μέθοδο //invertArray()//; |
</WRAP> | </WRAP> | ||
- | | Προηγούμενο : [[ :java:interface_implementation | Υλοποίηση του interface ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:interface_modification | Μεταβολή υφιστάμενου interface ]] | | + | | Προηγούμενο : [[ :java:interface_implementation | Υλοποίηση του interface ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ java:abstract_classes_vs_interfaces | Συγκρίνοντας Abstract Κλάσεις και Interfaces ]] | |