Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 38

Discussione: input-output

  1. #21
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    No, non va bene. Non stai programmando ad oggetti.
    Ti ripeto nuovamente: tu sai che lavori con i file, in generale sai che le operazioni che puoi fare sono
    1. load(InputStream stream)
    2. save(OutputStream stream)
    3. visualize(int numRows)
    4. skip (int numRows)

    queste ti definisco una interfaccia. Sai che vai ad usare un oggetto che è in grado di implementare tale comportamento.
    Supponi di chiamare questo file IOManagement e questa è una interfaccia.
    Sicuramente avrai almeno una IOManagementImpl che lavora pensando ad un file sotto tutto.


    dentro lo switch ti limita a fare
    codice:
    switch (intValue){
    	case 1: loadFile(); 
    			break; 
    	case 2: saveFile(); 
    			break; 
    			// continua tu
    }
    ora in questa fase TU SAI che lavori su file, quindi

    codice:
    IOManagement ioman = new IOManagementImpl(); 
     
    FileInputStream stream = new FileInputStream(filename); 
    load(stream);
    e via dicendo.
    Se tu domani volessi fare il caricamento da che so web page, i cambiamenti sarebbero minimi.
    Ovviamente io ti ho descritto a grandi linee le implementazioni, a te i dettagli implementativi.

    Ah, ogni implementazione una sua classe, il main serve SOLO a far partire il programma (al max a gestire questo menu)
    RTFM Read That F*** Manual!!!

  2. #22
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Quote Originariamente inviata da valia Visualizza il messaggio
    Supponi di chiamare questo file IOManagement e questa è una interfaccia.
    Sicuramente avrai almeno una IOManagementImpl che lavora pensando ad un file sotto tutto.
    Io però non capisco qual è la reale differenza tra:
    - definire nello switch dei metodi astratti da implementare poi nell'altra classe (diciamo quella che fa tutto)
    - richiamare semplicemente nello switch (tramite nomeAltraClasse.nomeMetodo()) il metodo che è sviluppato nell'altra classe.

    Ok, la classe dello switch dovrebbe essere dichiarata come interfaccia ma ci sono delle regole particolari che dovrebbero impormi una determinata struttura del programma?

    Quote Originariamente inviata da newutente Visualizza il messaggio
    L'esercizio l'ho svolto e funziona però ho un dubbio.
    Leggendo sul manuale ho potuto capire che i Decorator sono sottoclassi che in genere hanno bisogno di agganciarsi ad un Component per poter funzionare.
    Io nel mio esercizio ho utilizzato un Component (BufferedReader) agganciandolo ad un altro Component (InputStreamReader) e quindi usandolo come un Decorator e successivamente un Decorator (FileWriter) non agganciandolo a niente.
    E' vero che l'esercizio l'ho svolto e funziona però sono andato più a intuito e rileggendo il manuale mi sembra che in questo teoria (quindi utilizzo del pattern Decorator) e pratica non coincidono.
    Mi aiutate a capire?
    Questo è il dubbio che ho sul pattern Decorator. Ve lo riposto giusto per evitare di dimenticarlo.
    Ultima modifica di newutente; 20-01-2015 a 20:25

  3. #23
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    il punto centrale è che se tu hai una classe che fa SOLO la gestione dell'IO, non importa di come renderizzi a video le informazioni per gli utenti.
    Tu adesso stai facendo uno switch, credo che per il momento il tuo main vada su console. Se tu volessi replicare le stesse funzioni e renderizzarle su GUI, il fatto di avere una classe che fa a parte il lavoro facilita te.
    Se tu volessi rendere la tua libreria come servizio, tu sai che dato un input hai un output, quindi non importa chi ti genera l'input e chi l'output.
    Analogamente, il main con uno switch (quindi chiamare le funzioni) è il tuo input e output, ma la tua funzionalità prescinde da questo ed è giusto che venga messa a parte.
    Adesso rivedo bene il decorator ( scusa ma a volte non ho tanto tempo libero)
    RTFM Read That F*** Manual!!!

  4. #24
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Quote Originariamente inviata da valia Visualizza il messaggio
    il punto centrale è che se tu hai una classe che fa SOLO la gestione dell'IO, non importa di come renderizzi a video le informazioni per gli utenti.
    Tu adesso stai facendo uno switch, credo che per il momento il tuo main vada su console. Se tu volessi replicare le stesse funzioni e renderizzarle su GUI, il fatto di avere una classe che fa a parte il lavoro facilita te.
    Se tu volessi rendere la tua libreria come servizio, tu sai che dato un input hai un output, quindi non importa chi ti genera l'input e chi l'output.
    Analogamente, il main con uno switch (quindi chiamare le funzioni) è il tuo input e output, ma la tua funzionalità prescinde da questo ed è giusto che venga messa a parte.
    ok, ora mi è più chiaro il discorso.

  5. #25
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Avrei un dubbio relativo alla implementazione fatta dal manuale rispetto a quella fatta da me.
    L'esercizio in questione chiede di stampare per un determinato file le prime 10 righe alla pressione della lettera n sulla tastiera, una volta stampate le righe se si preme nuovamente la lettera n stampa le successive 10 e così via fino alla fine del file.
    Ora, tralasciando tutto il resto del codice, il mio dubbio è relativo proprio a come il programma farebbe a capire, una volta stampate le prime 10 righe, che alla successiva pressione della lettera n deve stampare le successive 10 e non di nuovo le stesse.
    Io ho sviluppato una mia soluzione che alla fine del post vi posterò e che funziona senza problemi ma non riesco davvero a capire come possa, la soluzione del manuale, funzionare.

    Questa è la soluzione del manuale:
    codice:
    if (carattere.equals(NEXT_COMMAND)) {
                                for (int i = 0; fileScanner.hasNext() && i < numeroRighe; i++) {
                                    System.out.println(fileScanner.nextLine());
                                }
    }
    la variabile "numeroRighe" è settata a 10 mentre la costante NEXT_COMMAND è settata a "n".
    fileScanner è definito in questo modo: Scanner fileScanner = new Scanner(file);
    file rappresenta il file da scansionare.

    Quello che non capisco è come faccia fileScanner, una volta scandito le prime 10 righe, e non tornare a scandire di nuovo le prime 10 ma a passare alle successive 10.


    Comunque questa è la mia soluzione:
    codice:
    if (lettera.equals("n") || lettera.equals("N")) {
                               if (lista1.size()<=10) {
                                   listaTemp.addAll(lista1.subList(0, lista1.size()));
                                   Iterator<String> iteratore = listaTemp.iterator();
                                   while(iteratore.hasNext()) {
                                       String riga = iteratore.next();
                                       System.out.println(riga);
                                   }
                                   lista1.subList(0, lista1.size()).clear();
                                   System.out.println("stampate tutte le righe");
                               }
                               else if(lista1.size()>10) {
                                   listaTemp.addAll(lista1.subList(0, 10));
                                   Iterator<String> iteratore = listaTemp.iterator();
                                   while(iteratore.hasNext()) {
                                          String riga = iteratore.next();
                                          System.out.println(riga);
                                   }
                                   lista1.subList(0, 10).clear();
                               }
    }
    La differenza in termini di compattezza del codice è imbarazzante effettivamente però non sono riuscito a svolgerlo diversamente.

  6. #26
    Compattezza di codice solo... Memoria... Prestazioni....
    comunque la soluzione del libro funziona perchè l'oggetto Scanner mantiene sempre in memoria l'ultima riga letta ( metodo next) quindi ( suppongo che quel l'if sia in ciclo) alla successiva iterazione next, se per esempio è la seconda iterazione, punterà all'undicesima riga

  7. #27
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    Compattezza di codice solo... Memoria... Prestazioni....
    infatti.

    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    comunque la soluzione del libro funziona perchè l'oggetto Scanner mantiene sempre in memoria l'ultima riga letta ( metodo next) quindi ( suppongo che quel l'if sia in ciclo) alla successiva iterazione next, se per esempio è la seconda iterazione, punterà all'undicesima riga
    ah ecco, questa cosa mi era sfuggita. quindi nel momento in cui invoco il metodo next(), nextLine(), ecc. è come se stessi invocando un puntatore che si è fermato alla posizione a cui era nel precedente ciclo e quindi riprende da dove si era fermato.

  8. #28
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Quote Originariamente inviata da newutente Visualizza il messaggio
    L'esercizio l'ho svolto e funziona però ho un dubbio.
    Leggendo sul manuale ho potuto capire che i Decorator sono sottoclassi che in genere hanno bisogno di agganciarsi ad un Component per poter funzionare.
    Io nel mio esercizio ho utilizzato un Component (BufferedReader) agganciandolo ad un altro Component (InputStreamReader) e quindi usandolo come un Decorator e successivamente un Decorator (FileWriter) non agganciandolo a niente.
    E' vero che l'esercizio l'ho svolto e funziona però sono andato più a intuito e rileggendo il manuale mi sembra che in questo teoria (quindi utilizzo del pattern Decorator) e pratica non coincidono.
    Mi aiutate a capire?
    Mi permetto di riproporvi il dubbio che ho sul pattern Decorator, non per mettervi fretta ma solo perchè vorrei continuare senza lasciarmi niente indietro.

  9. #29
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    Mi permetto di riproporvi il dubbio che ho sul pattern Decorator, non per mettervi fretta ma solo perchè vorrei continuare senza lasciarmi niente indietro.
    Il pattern "Decorator" descrive lo scenario in cui ci sono una serie di oggetti denominati con i termini "componente", "componente concreto", "decoratore" e "decoratore concreto".

    Nel caso del package java.io (modellato appunto sul Decorator), classi come FileReader, FileWriter, FileInputStream e FileOutputStream NON sono decoratori. Sono componenti concreti!
    Per es. BufferedWriter è un decoratore, perché a) è-un Writer, e b) contiene (incapsula) un altro Writer.
    Mentre FileWriter è un componente concreto, "finale" nel senso che opera su un qualcosa di ben preciso (esclusivamente su un file) e non incapsula "altro".

    InputStreamReader invece è più un "adapter" che un "decorator", perché in effetti fa cambiare completamente faccia allo stream. Infatti contiene un InputStream ma InputStreamReader non è-un InputStream ma bensì un Reader.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #30
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    il tuo ragionamento l'ho capito però il dubbio è dovuto anche al fatto che sul manuale ad esempio BufferedWriter lo riporta come un Component, infatti qui ( http://www.iismarconi.net/inside/mat...O_&&_JAVA5.pdf ) se vai a pagina 448-449 i Decorator nella scheda li segna in grigio e BufferedWriter è bianco. Stesso discorso su FileWriter che il manuale lo riporta come Decorator.
    Non vorrei aver capito male io tutto quanto.


    p.s. quello linkato è la versione gratuita del manuale che sto utilizzando però quella parte è identica.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.