User Tools

Site Tools


java:interface_implementation

Υλοποίηση του Interface

Μία κλάση υλοποιεί ένα interface μόνο εάν υλοποιεί ΟΛΕΣ τις μεθόδους του interface. Έάν έστω και μία μέθοδος δεν υλοποιείται τότε η κλάση δεν υλοποιεί το interface.

Σε συνέχεια του προηγούμενου παραδείγματος θα επιχειρήσουμε να δημιουργήσουμε δύο διαφορετικές κλάσεις που υλοποιούν το συγκεκριμένο interface. Οι κλάσεις αυτές είναι η ArrayStack που υλοποιεί τη στοίβα μέσω ενός πίνακα και η LinkedStack που υλοποιεί τη στοίβα διασυνδέοντας επιμέρους αντικείμενα μεταξύ τους σε αναλογία με μία διασυνδεδεμένη λίστα.

ArrayStack

ArrayStack.java
public class ArrayStack implements Stack {
  public int capacity;
  public Object []array;
  public int size;
 
  public ArrayStack() {
    this(256);
  }
 
  public ArrayStack(int capacity) {
    array = new Object[capacity];
    this.capacity = capacity;
    size = 0;
  }
 
  public int size() {
    return size;
  }
 
  public void push(Object o) {
 
    if( size >= capacity-1 ) {
      capacity *= 2;
      Object []newArray = new Object[capacity];
      for(int i=0; i<array.length; i++)
        newArray[i] = array[i];
      array = newArray;
      newArray = null;
    }
    array[size++] = o;
  }
 
  public Object pop() {
    return array[--size];
  }
 
  public Object top() {
    return array[size-1];
  }
 
  public String toString() {
    String str = "@@@@@@@@ - Stack - @@@@@@@@\n";
    for(int i=size-1; i>=0; i--)
      str += array[i].toString()+"\n";
    return str + "@@@@@@@@@@@@@@@@@@@@@@@@@@@\n";
  }  
}

LinkedStack

LinkedStack.java
class LinkedNode {
  private Object o;
  private LinkedNode next;
 
  public LinkedNode(LinkedNode nxt, Object e) {
    next = nxt;
    o = e;
  }
 
  public LinkedNode(Object e) {
    this(null, e);
  }
 
  public Object getElement() { return o; }
  public LinkedNode getNext() { return next; }
 
  public void setElement(Object e) { o = e; }
  public void setNext(LinkedNode node) { next = node; }
}
 
public class LinkedStack implements Stack {
  int size;
  LinkedNode head;
 
  public LinkedStack() {
    size=0;
    head = null;
  }
 
  public int size() {
    return size;
  }
 
  public void push(Object o) {
    // the following is OK even if head == null.
    head = new LinkedNode(head, o);
    size++;
  }
 
  public Object pop() {
    LinkedNode pN = head;
    head = head.getNext();
    size--;
    return pN.getElement();
  }
 
  public Object top() {
    return head;
  }
 
  public String toString() {
    String str = "@@@@@@@@ - Stack - @@@@@@@@\n";
    LinkedNode curr = head;
    while(curr != null)
      str += curr.getElement().toString();
    return str + "@@@@@@@@@@@@@@@@@@@@@@@@@@@\n";
  }
}

Παραπάνω έχουμε υλοποιήσει το συγκεκριμένο interface μέσα από δύο διαφορετικές κλάσεις. Αν και η υλοποίηση των κλάσεων διαφέρει σημαντικά, η λειτουργία τους είναι κοινή. Μπορείτε να χρησιμοποιήσετε οποιαδήποτε από της δύο κλάσεις για να εξυπηρετήσετε τη λειτουργικότητα του interface Stack σε ένα πρόγραμμα.

java/interface_implementation.txt · Last modified: 2017/02/03 10:18 by gthanos