TD6 - L'Héritage

Exercice 1 - Classes abstraites

Créer la classe abstraite Stack qui contient les classes abstraites:

Object get();
void put(Object);

Classe Stack:

abstract class Stack{
   Vector v=new Vector();
   abstract Object get();
   abstract void put(Object o);
}

Implémenter cette classe de deux façons:  par une classe FIFOStack puis par une classe LIFOStack selon le comportement de pile désiré

Classe FIFOStack:

class FIFOStack extends Stack{
   Object get(){
      if ( v.size()>0 ){
         Object o=v.elementAt(0);
         v.removeElementAt(0);
         return o;
      }
      else{
         return null;
      }
   }
   void put(Object o){
      v.addElement(o);
   }
}


Classe LIFOStack:

class LIFOStack extends Stack{
   Object get(){
      if ( v.size()>0 ){
         Object o=v.elementAt(v.size()-1);
         v.removeElementAt(v.size()-1);
         return o;
      }
      else{
         return null;
      }
   }
   void put(Object o){
      v.addElement(o);
   }
}


Pour tester:

class Test{
   public static void main(String[] s){
      FIFOStack f=new FIFOStack();
      f.put("1");
      f.put("2");
      f.put("3");
      LIFOStack l=new LIFOStack();
      l.put("1");
      l.put("2");
      l.put("3");
      System.out.println("FIFO:");
      for ( int i=0;i<3;i++){
         System.out.println(f.get());
      }
      System.out.println("LIFO:");
      for ( int i=0;i<3;i++){
         System.out.println(l.get());
      }
   }
}

Exercice 2 - Interfaces

Transformez la classe Stack pour qu'elle devienne une interface qui est implémentée par les classes FIFOStack et LIFOStack.

Interface Stack:

interface Stack{
   static final Vector v=new Vector();
   Object get();
   void put(Object o);
}

Implémenter cette classe de deux façons:  par une classe FIFOStack puis par une classe LIFOStack selon le comportement de pile désiré

Classe FIFOStack:

class FIFOStack implements Stack{
   public Object get(){
      if ( v.size()>0 ){
         Object o=v.elementAt(0);
         v.removeElementAt(0);
         return o;
      }
      else{
         return null;
      }
   }
   public void put(Object o){
      v.addElement(o);
   }
}


Classe LIFOStack:

class LIFOStack implements Stack{
   public Object get(){
      if ( v.size()>0 ){
         Object o=v.elementAt(v.size()-1);
         v.removeElementAt(v.size()-1);
         return o;
      }
      else{
         return null;
      }
   }
   public void put(Object o){
      v.addElement(o);
   }
}


Remarque: Les méthodes get() et put() doivent être déclarées public pour éviter que leurs privilèges soit moindres que ceux de l'interface Stack dont les méthodes sont public par défaut.

Une instance de FIFOStack est de type: FIFOStack, Object et Stack.