Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di felpone
    Registrato dal
    Jun 2010
    Messaggi
    182

    Aiuto su fondamentali java

    Salve a tutti, penso proprio che questo problema che ho sia sui fondamentali della programmazione ad oggetti. In questo esercizio non riesco proprio a capire il funzionamento del metodo getLength .



    codice:
    
    class Point {
    
    
        private int x;
        private int y;
    
    
        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
    
        public static void main(String argv[]) {
    
    
            Point p1 = new Point(0, 0);
            Walk w1 = new Right(new Down(new Left(new Up(new Stop()))));
            Walk w2 = new Left(new Left(new Up(new Stop())));
            // Walk w3=new Right(new Stop());
            System.out.println(w2.getLength());
        }
    }
    
    
    abstract class Walk {
    
    
        public abstract boolean isStop();
    
    
        public abstract int getLength();
    }
    
    
    class Stop extends Walk {
    
    
        @Override
        public boolean isStop() {
            return true;
        }
    
    
        @Override
        public int getLength() {
            return 0;
        }
    }
    
    
    abstract class Move extends Walk {
    
    
        Walk tail;
        
    
    
        @Override
        public int getLength() {
          
           return 1+tail.getLength();
        }
    
    
        Move(Walk tail) {
            this.tail = tail;
            System.out.println(tail);
        }
    
    
        @Override
        public boolean isStop() {
            return true;
        }
    }
    
    
    class Right extends Move {
    
    
        public Right(Walk tail) {
    
    
            super(tail);
    
    
        }
    }
    
    
    class Left extends Move {
    
    
        public Left(Walk tail) {
            super(tail);
        }
    }
    
    
    class Up extends Move {
    
    
        public Up(Walk tail) {
            super(tail);
        }
    }
    
    
    class Down extends Move {
    
    
        public Down(Walk tail) {
            super(tail);
        }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142
    Quote Originariamente inviata da felpone Visualizza il messaggio
    Salve a tutti, penso proprio che questo problema che ho sia sui fondamentali della programmazione ad oggetti. In questo esercizio non riesco proprio a capire il funzionamento del metodo getLength .



    codice:
    class Point {
    
    
        private int x;
        private int y;
    
    
        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
    
        public static void main(String argv[]) {
    
    
            Point p1 = new Point(0, 0);
            Walk w1 = new Right(new Down(new Left(new Up(new Stop()))));
            Walk w2 = new Left(new Left(new Up(new Stop())));
            // Walk w3=new Right(new Stop());
            System.out.println(w2.getLength());
        }
    }
    
    
    abstract class Walk {
    
    
        public abstract boolean isStop();
    
    
        public abstract int getLength();
    }
    
    
    class Stop extends Walk {
    
    
        @Override
        public boolean isStop() {
            return true;
        }
    
    
        @Override
        public int getLength() {
            return 0;
        }
    }
    
    
    abstract class Move extends Walk {
    
    
        Walk tail;
        
    
    
        @Override
        public int getLength() {
          
           return 1+tail.getLength();
        }
    
    
        Move(Walk tail) {
            this.tail = tail;
            System.out.println(tail);
        }
    
    
        @Override
        public boolean isStop() {
            return true;
        }
    }
    
    
    class Right extends Move {
    
    
        public Right(Walk tail) {
    
    
            super(tail);
    
    
        }
    }
    
    
    class Left extends Move {
    
    
        public Left(Walk tail) {
            super(tail);
        }
    }
    
    
    class Up extends Move {
    
    
        public Up(Walk tail) {
            super(tail);
        }
    }
    
    
    class Down extends Move {
    
    
        public Down(Walk tail) {
            super(tail);
        }
    }

    Ciao, se è un esempio che ti hanno fatto ad una lezione di un corso di base...bhe è la peggiore cosa che abbia mai visto!
    Ad ogni modo, poiché tutti quegli oggetti dai nomi confusionari sono collegati da ereditarierà ed incapsulamento il tuo metodo sulla lunghezza, facendo 1+tail.getLenght() restituirà il numero di "passi" (o come li vuoi chiamare) di cui è composto il "walk"

    Per capirlo meglio devi riflettere sul fatto che l'oggetto tail contenuto nell'oggetto Move è istanza di Walk, e che Move è a sua volta discendente di Walk. Quindi facendo 1+tail.getLenght() la seconda parte di questa chiamata (cioè quella dopo il '+') fa partire tutta una serie di chiamate innestate al metodo getLength() su oggetti tail diversi, fin quando non incontra un tail che è in realtà uno Stop. Qui ritornerà zero, senza fare altre chiamate ricorsive, e srotolando tutte le chiamate ti troverai con una somma tipo 1+1+1+...+1

    Dubito di essere stato chiaro, ma spero t'aiuti.

    Ciao
    <esistono cose che non esistono>

  3. #3
    Utente di HTML.it L'avatar di felpone
    Registrato dal
    Jun 2010
    Messaggi
    182
    Quello che non capisco bene è come faccia la variabile Walk tail nella classe Move a contenere tutti gli oggetti che vengono inizializzati.Altrimenti non mi so spiegare come invocare getLength su tail possa generare chiamate ricorsive

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142
    Quote Originariamente inviata da felpone Visualizza il messaggio
    Quello che non capisco bene è come faccia la variabile Walk tail nella classe Move a contenere tutti gli oggetti che vengono inizializzati.Altrimenti non mi so spiegare come invocare getLength su tail possa generare chiamate ricorsive
    L'oggetto tail a cui ti riferisci a runtime sarà istanza di Stop oppure di Move. Se è istanza di Stop allora non contiene nulla (ed infatti il suo metodo getLength() restituisce zero). Se è istanza di Move (a parte il fatto che sarà istanza di RIght, Left, Up oppure Down) allora conterrà un altro oggetto tail, per il quale devi rifare lo stesso ragionamento, e così via.

    Ciao
    <esistono cose che non esistono>

  5. #5
    Utente di HTML.it L'avatar di felpone
    Registrato dal
    Jun 2010
    Messaggi
    182
    quindi tail può contenere più di una istanza?

Tag per questa discussione

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.