java:interface_as_data_type

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
java:interface_as_data_type [2017/03/31 13:31]
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(timer5); +    System.out.println("​-----------"​);​ 
-    ​System.out.println(new Date());+     
 +    Stack stack = new ArrayStack(); 
 +    ​invertArray(alphabetstack); 
 +    ​ 
 +    printCharacterArray(alphabet);
   }   }
-  public static void sleepOnTimer(Timer tint sleepSeconds) { +  ​ 
-    ​try {       +  ​public static void invertArray(Object []arrayStack stk) { 
-      t.setTimer(sleepSeconds)      +    ​for(int i=0i<​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:​abstract_classes_vs_interfaces | Συγκρίνοντας Abstract Κλάσεις και Interfaces ​ ]]  |+| Προηγούμενο : [[ :​java:​interface_implementation | Υλοποίηση του interface ​ ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο:​ [[ java:​abstract_classes_vs_interfaces | Συγκρίνοντας Abstract Κλάσεις και Interfaces ​ ]]  |
java/interface_as_data_type.txt · Last modified: 2017/03/31 14:32 by gthanos