Esercizio Componente

di il
3 risposte

Esercizio Componente

Ciao a tutti,

Sto studiando java e come esercizio da svolgere ho il seguente testo :
Si scriva un interfaccia Componente contenente 1 metodo:
• attiva: viene chiamato quando il componente viene attivato.
Si scriva poi una classe astratta Connettore che implementa Componente con 1
campo:
• uscite: un array di componenti a cui il connettore è collegato.
Definire inoltre i seguenti metodi:
• un costruttore che imposta le uscite;
• propaga: attiva il connettore e propaga l’attivazione a uno dei componenti
connessi (propagando ulteriormente qualora possibile), a turno circolare dal
primo all’ultimo.
Si scriva poi una classe concreta Dimmer che implementa Connettore con 2 campi:
• MAX: il massimo livello del dimmer;
• l: il livello del dimmer (aumenta di uno fino al massimo, poi ritorna al minimo).
Definire inoltre i seguenti metodi:
• livello: metodo accessorio per il campo l;
• attiva: realizzare il metodo dichiarato nell’interfaccia Componente

Riesco ad intuire la struttura delle classi ma proprio non riesco a capire l'implementazione :
[CODE] public interface Componente { public void attiva(); } public abstract class Connettore implements Componente { public Componente[] uscite; public Connettore() { } public void Propaga() { for(Componente c : uscite) { c.attiva(); } } } public class Dimmer extends Connettore { public final int MAX=100; public int l; @Override public void attiva() { // TODO Auto-generated method stub } }

3 Risposte

  • Re: Esercizio Componente

    Allora:

    Interfaccia Componente: ok. Il "public" nel metodo è opzionale (sono sempre implicitamente public) ma ok se lo metti.

    Classe astratta Connettore no, non proprio.
    Il testo dice: un costruttore che imposta le uscite. E già qui ci sarebbe il primo dubbio. Le imposta .. COME? E' il costruttore che deve ricevere es un array di Componente da assegnare direttamente al campo? (presumo) O che altro?

    Altra questione: il testo dice che Connettore deve avere il "propaga" descrivendo: attiva il connettore e propaga l’attivazione a uno dei componenti connessi (propagando ulteriormente qualora possibile), a turno circolare dal primo all’ultimo.
    Quindi presumerei che già in Connettore ci debba essere un campo che permetta di "indirizzare" un connettore facendo cambiare il connettore di volta in volta in modo "circolare". Ma questo non è descritto.

    Altra cosa ancora: in Dimmer dice di mettere un "attiva": realizzare il metodo dichiarato nell’interfaccia Componente. Implementandolo COME? Che cosa deve fare? E come deve essere usato quel livello "l" ?

    Insomma, il testo è tutto tranne che chiaro. Scritto così serve solo a confondere.
  • Re: Esercizio Componente

    Non so mi sono arreso e ho chiesto chiarimenti al prof.
    Non capisco come possa il costruttore riceve un array e impostare le uscite.
    Connettore è astratto e percui propaga il costruttore al dimmer. e il dimmer come lo costruisco se deve ricevere un array?

    Con la questione del link mi hai fatto salire ulteriori dubbi.

    Presumo che attiva deve richiamare il metodo accessorio livello che incrementa l e poi l'attiva controlla se è >= max e lo reinizializza
    [CODE] package exeDiff_A; public interface Componente { public void attiva(); } public abstract class Connettore implements Componente { public Componente[] uscite; public Connettore() { } public void Propaga() { for(Componente c : uscite) { c.attiva(); } } } public class Dimmer extends Connettore { public Dimmer() { super(); // TODO Auto-generated constructor stub } private final int MAX=10; private int l; @Override public void attiva() { livello(); if(l>=MAX) { l=0; } } public void livello() { l+=1; } }
  • Re: Esercizio Componente

    fractals87 ha scritto:


    Non capisco come possa il costruttore riceve un array e impostare le uscite.
    Ma non è quello il problema. Una qualunque classe, astratta o concreta che sia, può avere uno o più costruttori.
    E' chiaro che se la classe è astratta, NON li puoi invocare direttamente (una classe astratta non è istanziabile direttamente). Dovrà essere una sotto-classe "concreta" ad avere uno o più costruttori e ciascuno di essi dovrà invocare uno (a sua scelta) dei costruttori della super-classe.

    fractals87 ha scritto:


    Connettore è astratto e percui propaga il costruttore al dimmer.
    I costruttori NON si "ereditano". Se Connettore avesse solo un costruttore che riceve un Componente[] e lo assegna al campo, allora vuol dire che anche Dimmer (sotto-classe) dovrebbe avere un costruttore che riceve un Componente[] e, attenzione, lo passa al costruttore di Connettore usando la forma super( .... )
    Non potrebbe essere diversamente .. a meno che Dimmer trovi un altro modo per fornire al costruttore di Connettore un tot di oggetti Componente senza riceverli lui stesso dal costruttore.

    La cosa certa e scontata (dalle regole di Java) è che se Connettore ha soltanto un costruttore che riceve Componente[], una sottoclasse DEVE (chiaramente nel suo costruttore) invocare questo costruttore di Connettore.

    fractals87 ha scritto:


    e il dimmer come lo costruisco se deve ricevere un array?
    La questione è che il testo non è chiaro nemmeno su questo: COME deve essere usato Dimmer?
Devi accedere o registrarti per scrivere nel forum
3 risposte