Dubbio costruttore classe che utilizza LinkedList e HashSet

di il
3 risposte

Dubbio costruttore classe che utilizza LinkedList e HashSet

Salve a tutti mi presento, sono Giancarlo Lamanna e sono uno studente in ingegneria elettronica alle prese con l'esame di programmazione orientata agli oggetti. Ho un dubbio su un'esercizio di un appello d'esame...spero mi possiate aiutare. La traccia è questa:
Definire mediante un’interfaccia un tipo di dato astratto Insieme<T> generico nel tipo T degli elementi ed iterabile, corrispondente al concetto di insieme matematico di oggetti (non sono ammesse le repliche, né è importante l’ordine). Insieme si deve accompagnare (almeno) alle seguenti operazioni:
(METODI DA IMPLEMENTARE OMESSI)
Progettare una classe astratta InsiemeAstratto<T> che implementa l’interfaccia Insieme<T> e concretizza quanti più metodi è possibile.

Fornire classi concrete eredi di InsiemeAstratto di cui al precedente esercizio, rispettivamente basate su 1) java.util.LinkedList 2) java.util.HashSet.

Il mio dubbio è il seguente: quando vado a implementare le classi concrete basate su LinkedList e HashSet come devono essere definiti esattamente i costruttori? Ho un paio di opzioni:
1) definisco una classe InsiemeLinkedList<T> alla quale assegno come attributo una LinkedList. Poi dichiaro un costruttore "classico" all'interno del quale creo una nuova LinkedList:
public class InsiemeLinkedList<T> extends InsiemeAstratto<T>{
          private LinkedList<T> lista;
          public InsiemeLinkedList<T>(){
                   lista=new LinkedList<T>();
          }
}
2) definisco un metodo crea() che mi da una LinkedList, ma il tipo restituito poi non sarebbe un InsiemeLinkedList..quindi questa soluzione non mi sembra attuabile.
Il punto è...l'opzione 1 è praticabile? In caso affermativo poi nell'andare a definire metodi come ad esempio
boolean aggiungi(T elem)
devo utilizzare i metodi di LinkedList come add...allora dovrei definirmi anche un metodo all'interno della classe getLinkedList() che mi restituisce l'unico attributo che ha l'InsiemeLinkedList, ovvero la LinkedList lista e operare su quella? Oddio spero di essere stato chiaro...vi ringrazio in anticipo!

3 Risposte

  • Re: Dubbio costruttore classe che utilizza LinkedList e HashSet

    Ciao, spero di aver capito bene. Secondo me fai bene con l'opzione 1,decidi di utilizzare come rappresentazione interna del tuo insieme una LinkedList. A questo punto però le altre classi secondo me dovrebbero utilizzare InsiemeLinkedList<T> senza preoccuparsi di come questa classe gestisca fisicamente l'insieme (Information Hiding).Quindi io non definirei metodi

    getLinkedList()
    setLinkedList()

    adesso non so come sono realizzate InsiemeLinkedList<T> e InsiemeAstratto<T> e l'interfaccia, ma in sostanza una classe che utilizza InsiemeLinkedList<T> dovrebbe scrivere ad esempio qualcosa del genere credo:

    //Insieme di interi
    InsiemeLinkedList<Integer> insiemeInteri = new InsiemeLinkedList<Integer>();

    e poi ,ad esempio, aggiungere elementi all'insieme attraverso metodi della classe InsiemeLinkedList:

    insiemeInteri.add(5);

    poi è chiaro che metodi di questo tipo utilizzeranno la LinkedList interna per gestire l'insieme aggiungendo o rimuovendo ad essa elementi oppure iterandola per la stampa e cosi via.... Mentre dal punto di vista delle classi client della tua classe, il tutto è perfettamente trasparente.
  • Re: Dubbio costruttore classe che utilizza LinkedList e HashSet

    Hai capito perfettamente...ed effettivamente anche a me convince di più la tua soluzione...poi pensandoci bene getLinkedList() non aveva molto senso perché comunque all'interno della classe InsiemeLinkedList<T> posso definire dei metodi add,ecc senza preoccuparmi di ricavarmi la linkedlist perché comunque è pubblica all'interno della classe. ti ringrazio! comunque ho notato in alcune soluzioni che quando si tratta di utilizzare strutture dati che raccolgono degli oggetti (ad esempio una classe Polinomio che raccoglie dei Monomi) viene utilizzato un metodo crea() per istanziare un Polinomio...qual'è la differenza? cioè come dovrei regolarmi...è uguale o devo pensarci su e decidere quale delle due opzioni utilizzare?
  • Re: Dubbio costruttore classe che utilizza LinkedList e HashSet

    Sai sono scelte progettuali, non è una regola generale, esistono però i design patterns che rappresentano soluzioni a problemi ricorrenti, li in effetti vedi particolari linee guida sulla realizzazione di classi ed interfacce, nomi particolari dati ai metodi e cosi via.
Devi accedere o registrarti per scrivere nel forum
3 risposte