[Consiglio] Come strutturare

di il
3 risposte

[Consiglio] Come strutturare

Ciao ,

Dovrei chiedervi come muovermi in questo piccolo programma incompleto ,ma trovo difficile spiegarmi. Ci provo.
L'esercizio che sto svolgendo deve avere come soluzione una rubrica.
Inizialmente dopo un messaggio di benvenuto , cerca un file di configurazione per capire se esiste già un file db sul disco.
Se non esiste chiede di crearne un nuovo.

Istintivamente mi verrebbe voglia di creare una funzione per svolgere tale compito. Anzi avere un main che raccoglie tutti gli esiti
delle funzioni chiamate e poi decidere per conseguenza.
Ma questo non sarebbe oop.
Cosa dovrei fare , forse prima disegnare su carta le classi necessarie ?
Una volta create su carta , come interpreto le eccezioni o gli errori dell'utente , come comunicano fra di loro le classi rispetto al main ?
Fin'ora ho trovato info su come si creano le classi , ma non come si legano fra di loro.

Se in questo caso fosse necessario solo una classe ,"Rubrica" , l'input da tastiera rimarrebbe dentro main ?
Scusate la confusione nell'esporre , ma sono io stesso confuso

import java.io.*;
import java.util.Scanner;

public class rubrica
{
  public static void main (String[] args)
  {
    String welcome[] = {"R","i","c","e","r","c","a"," ","D","b"," ","s","u"," ",
                        "d","i","s","c","o"," ","l","o","c","a","l","e",".",".","."};
    
    Scanner input = new Scanner(System.in);

    long interval = 50;
    long previousMillis = 0;
    byte puntini = 26;
    
    for (byte n=0; n<welcome.length;)
    {
      long currentMillis = System.currentTimeMillis();
      if ( currentMillis - previousMillis >= interval)
      {
        previousMillis = currentMillis;
        System.out.print(welcome[n++]);
        if (n == puntini) interval =1000;
      }
    }
    try {
      
      FileReader filein = new FileReader ("d:/proveJava/Rubrica.cfg");
    
    } catch (IOException e) { //System.out.println(e); 
      
      System.out.println("File di configurazione non trovato o non leggibile.");
      System.out.println("Vuoi creare un file di configurazione nuovo ? (s/n)");
      char answer = input.next().charAt(0);
  }  
 } 
}

3 Risposte

  • Re: [Consiglio] Come strutturare

    Mi spiego meglio . Piccolo esempio nel codice seguente:
    
    import java.util.Scanner;
    
    public class rubrica01
    {
      public static void main (String[] args)
      {
        
        Agenda ag;
        Scanner input = new Scanner(System.in);
        boolean verifica;
        
        ag = new Agenda ("2017");
        
        verifica = ag.crea();
        
        if (!verifica) {
                System.out.println("File di configurazione non trovato o non leggibile. Vuoi creare un file di configurazione nuovo ? (s/n)");
                char answer = input.next().charAt(0);
        }
        
    
      }
    
    }
    
    Tutti gli esiti dell'esecuzione di alcuni metodi o la gestione degli input da parte dell'utente, di solito vengono gestiti dentro il main ?
    In oop , il main rimane sempre al centro del programma ?
    Grazie
  • Re: [Consiglio] Come strutturare

    Come potrai immaginare, non esiste LA RISPOSTA DEFINITIVA, ma si possono ideare n-mila soluzioni.

    Ma quale scegliere tra le n-mila?

    La scelta si fa in base ad un paio di principi 'spannometrici':

    - l'architettura DEVE ESSERE SEMPLICE: non ha senso progettare architetture complicatissime per risolvere un problema semplice
    - ogni oggetto DEVE ESSERE SEMPLICE: non deve fare cose troppo complicate, ma solo le cose che ha senso debba fare
    - gli oggetti dovrebbero essere riusabili, stile mattoncini dei Lego
    - devi immaginare due o tre modi diversi di usare i tuoi oggetti, per capire come progettare i singoli mattoncini

    Farai evolvere la tua architettura a mano a mano che si presenteranno nuove necessita' ed a mano a mano che l'implementazione del tuo oggetto diventa troppo complicata.

    Nel tuo caso hai il problema di dove mettere l'interazione tra l'utente e la rubrica:

    1) all'interno della rubrica?
    2) all'esterno della rubrica?
    3) implementando un oggetto "Utente"?

    Sono tutte soluzioni valide.
    Ma, ad esempio, implementare la gestione dell'utente all'interno dell'oggetto Rubrica va in conflitto con il fatto che la Rubrica potrebbe essere alimentata anche da file, o da un programma con interfaccia grafica, invece che da console.

    Certo, potresti implementare TUTTE le funzionalita' all'interno della Rubrica, ma questo va in conflitto con il fatto che il tuo oggetto deve essere semplice: meglio avere oggetti diversi.

    Non esiste un libro con LE RISPOSTE DEFINITIVE: serve solo

    - buon senso
    - esperienza

    Quello che ti conviene fare e'

    - implementi la prima idea che ti viene in mente
    - analizzi il risultato e valuti:
    --- ma quello che ho scritto e' scritto bene?
    --- e' una soluzione 'elegante'?
    --- e' inutilmente incasinato?

    ed agisci di conseguenza.

    Avendo gia' una soluzione, inoltre, hai gia' chiaro quali sono i problemi che hai dovuto affrontare, e quindi hai ormai una chiara idea di che cosa ti serve per risolverli.

    Certo, esistono i design patterns, ma e' inutile utilizzare metodologie di programmazione sofisticate fintanto che non si possiede un'adeguata 'sensibilita'/'pratica'.
  • Re: [Consiglio] Come strutturare

    Grazie per il tempo dedicato alla risposta.In effetti solo l'esperienza ti permette di guardare più lontano.
    Ci provo e al limite chiederò qualche altro consiglio più specifico stradafacendo.
    Grazie mille
Devi accedere o registrarti per scrivere nel forum
3 risposte