Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [java] Calcolatrice testuale

    Salve a tutti,
    ho bisogno di scrivere un programmino java che permetta di fare dei semplici calcoli passando i valori tramite riga di comando (da prompt di dos, per capirci, quindi nulla di grafico).

    Ho già realizzato una cosa simile ma in modo procedurale, mentre ora mi servirebbe sfruttando la programmazione ad oggetti.

    Qualcuno è in grado di aiutarmi?
    Ho cercato su internet e ho trovato il codice di diverse calcolatrici, ma tutte grafiche e molto complesse, a me servirebbe una calcolatrice testuale, ad oggetti ma molto semplice.

    Grazie in anticipo a tutti

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Ovviamente ci sono piu modi di realizzare la cosa.

    Se lo scopo è entrare nella filosofia della programmazione ad oggetti, inizierei a scommporre il problema in sottoproblemi e a pensare alle classi con cui implementare i vari moduli. Ad esempio, io userei una classe che rappresenta un'operazione; tale classe contiene gli operandi ed è in grado di eseguire l'operazione tra gli operandi.
    Un'altra classe invece puo occupasrsi di fare il parsing dell'input dell'utente per ricavarne un oggetto che rappresenta un'operazione.

    La Calcolatrice userebbe il Parser per interpretare l'input dell'utente, ovvero ricavare dall'input un oggetto oprazione, dopodichè può invocare un opportuno metodo sull'oggetto operazione per eseguire effettivamente l'operazione che rappresenta.

    Questo approccio è molto aderente alla filosofia della progrmmazione ad oggetti, la calcolatrice non ha bisogno di preoccuparsi di come implementare le operazioni: saranno le apposite classi a fare questo; analogamente la calcolatrice non deve preoccuparsi di come effettuare il parsing: se domani decidi che i dati devono essere immessi in modo diverso è sufficiente implementare diversamenete solo la classe Parser; se vuoi aggiungere altre operazioni devi solo definire le relative classi.

    Qui di seguito ti riporto in forma stringata le classi che io userei:

    Codice PHP:

    //E l'interfaccia che deve essere implemetate dalle classi che rappresentano un'operazione

    interface Operazione{

        public 
    double calcola();

    }


    //E una classe che rappresenta un'operazione unaria
    //è astratta perche il metodo calcola non è implementato
    abstract classe OperazioneUnaria implements Operazione{

        protected 
    double primoOperando;

        public 
    OperazioneUnaria(double operando){
            
    primoOperando operando;
        }

        public abstract 
    double calacla();

    }

    //Questa classe rappresenta un'operazione binaria aggiungendo 
    //un secondo operando; anche questa è astratta
    abstract classe OperazioneBinaria extends OperazioneUnaria{

        protected 
    double secondoOperando;

        public 
    OperazioneUnaria(double operando1double operando2){
            
    super(operando1);
            
    secondoOperandoOperando operando;
        }

        public abstract 
    double calacla();

    }


    //Poi fai le varie implementazioni, in base alle diverse operazioni;


    class RadiceQuadrata extends OperazioneUnaria{

        public 
    double calcola(){
            return 
    Math.sqrt(primoOperando);
        }
    }

    class 
    Moltiplicazione extends OperazioneBinaria{

        public 
    double calcola(){
            return 
    primoOperando secondoOperando;
        }


    e cosi per le altre operazioni che vuoi implementare

    Subito dopo potresti pensare ad una classe Parser che riceve una stringa e capisce che operazione bisonga fare. Tale classe può offrire ad esempio un metodo pubblico parse(String s) che restituisce un oggetto di una classe che implementa Operazione.

    Codice PHP:
    class Parser{
       
       public static 
    Operazione parse(String s){
           
    //Supponiamo che la stringa s sia 4 * 2
           //Allora bisogna fare una moltiplicazione:
           
    return new Moltiplicazione(42);
           
    //Supponiamo che la stringa s sia 4 / 2
           //Allora bisogna fare una divisione:
           
    return new Divisione(42);
           
    //eccetera eccetera...
        
    }

    Ora, avendo queste classi a disposizione, una Calcolatrice deve semplicemente eseguire un ciclo continuo in cui:

    1 - prende una stringa s di input dall'utente;
    2 - invoca il metodo Parser.parse(s) della classe Parser, ottenendo un oggetto op che è un'Operazione;
    3 - invocare su op il metodo calcola per avere i risultato e stamparlo.

    Codice PHP:

    class Calcolatrice{

        private 
    void execute(){
           
    String s null;       
           while(
    true){
                
    System.out.println("Immetti l'operazione da eseguire");
                
    String s //....s contiene l'iput dell'utente
                
    Operazione op Parser.parse(s);
                
    float rislutato op.calcola();
                
    System.out.println("il risultato è " risultato);
           }
        }

    Nota: la calcolatrice non sa neanche se l'operazione che esegue è unaria o binaria, ma poichè ogni classe che rappresenta un'operazione implementa l'iterfaccia Operazione, la Calcolatrice sa che basta invocare il metodo calcola() per averne il risulatato.



  3. #3
    Ti ringrazio moltissimo per la tempestività e per la tua esaustività.
    Non ho capito proprio tutto (soprattutto come comporre a livello totale il codice) perchè sono assolutamente all'inizio di java ma grazie alle tue istruzioni vedrò di sbrogliare l'immensa matassa che ho nel cervello :-))

    Grazie ancora, hai centrato esattamente le mie necessità.

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    prego, per ulteriori chiarimetni chiedi pure,


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 © 2024 vBulletin Solutions, Inc. All rights reserved.