Aiuto Esercizio

di il
2 risposte

Aiuto Esercizio

Salve Ragazzi!
Non capisco come implementare alcuni metodi di questa interfaccia:

public interface Channel<E> extends iterable<E>{
void write(E data);
E read();
boolean canRead();
boolean canWrite();
void rearrangeBuffer(Comparator<E> c);
void write(E data, Comparator<E> c);
void erasebuffer();
int size();

Vi prego Aiutatemi

Ecco il testo dell'esercizio:
L'interfaccia Channel definisce un tipo di dato astratto corrispondente ad un canale di comunicazione tra due entità software che svolgono rispettivamente un ruolo di lettore e di scrittore. Un oggetto di tipo Channel implementa una politica di buffering memorizzando in un opportuna struttura i dati scritti fino a quando non avviene la loro lettura.

Mi interessa come concretizzare questi due metodi:
il metodo write(E data) . (il metodo write consente di effettuare un operazione di scrittura e potrebbe sollevare un eccezione di tipo FullBufferException nel caso in cui non ci sia spazio a disposizione per memorizzare il dato).
il metodo read(). (il metodo read consente di leggere , rimuovendolo , un dato dall'oggetto Channel su cui è invocato e può sollevare un eccezione NoDataAvailableException nel caso in cui non ci siano i dati disponibili).

Grazie

2 Risposte

  • Re: Aiuto Esercizio

    Ciao provo ad aiutarti con una soluzione veloce ma che spero ti sia di aiuto:

    La tua interfaccia:


    package channel;

    import java.util.Comparator;

    public interface Channel<E> extends Iterable<E>{

    void write(E data);
    E read();
    boolean canRead();
    boolean canWrite();
    void rearrangeBuffer(Comparator<E> c);
    void write(E data, Comparator<E> c);
    void erasebuffer();
    int size();

    }

    Un classe che la implementa e che ad esempio voglia realizzare un canale per lettura e scrittura
    di caratteri:



    package channel;

    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.Iterator;

    public class CharChannel implements Channel<Character> {

    /*Buffer*/
    private ArrayList<Character> buffer = new ArrayList<Character>();

    /*Dimensione del buffer*/
    private int size;


    public CharChannel(int size){
    this.size = size;
    buffer.ensureCapacity(size);
    }

    @Override
    public boolean canRead() {
    // TODO Auto-generated method stub
    return buffer.size()>0?true:false;
    }

    @Override
    public boolean canWrite() {
    // TODO Auto-generated method stub
    return buffer.size()<size?true:false;
    }

    @Override
    public void erasebuffer() {
    buffer.clear();
    }

    @Override
    public Character read() {
    if(buffer.size()==0){
    throw new RuntimeException("NoDataAvailableException");
    }
    return buffer.remove(0);
    }

    @Override
    public void rearrangeBuffer(Comparator<Character> c) {
    // TODO Auto-generated method stub

    }

    @Override
    public int size() {
    // TODO Auto-generated method stub
    return buffer.size();
    }

    @Override
    public void write(Character data) {
    if(buffer.size()==size){
    throw new RuntimeException("FullBufferException");
    }
    buffer.add(data);
    }

    @Override
    public void write(Character data, Comparator<Character> c) {
    // TODO Auto-generated method stub

    }

    @Override
    public Iterator<Character> iterator() {
    // TODO Auto-generated method stub
    return buffer.iterator();
    }


    }

    Una classe demo per l'uso:


    package channel;

    public class DemoChannel {

    /**
    * @param args
    */
    public static void main(String[] args) {

    CharChannel charChannel = new CharChannel(3);

    try{
    charChannel.read();
    }catch(Exception e){
    System.out.println("Nessun dato da leggere:"+e.getMessage());
    }

    if(charChannel.canWrite()){
    charChannel.write('A');
    }
    if(charChannel.canWrite()){
    charChannel.write('B');
    }
    if(charChannel.canWrite()){
    charChannel.write('C');
    }

    System.out.println("Dimensione buffer:"+charChannel.size());

    try{
    charChannel.write('D');
    }catch(Exception e){
    System.out.println("Il buffer è pieno: "+e.getMessage());
    }

    while(charChannel.canRead()){
    System.out.println(charChannel.read());
    }
    }

    }

    Non ho implementato tutti i metodi e mancano le tue eccezioni personalizzate per i metodi write e read.
  • Re: Aiuto Esercizio

    Ti ringrazio Alessandro per l'aiuto fornitomi.
    Quello che tu hai postato sicuramente mi aiuterà molto nell'esercizio.
    Grazie ancora
    Ciao
Devi accedere o registrarti per scrivere nel forum
2 risposte