package lectures.class_dual_roles.instances;
import util.annotations.WebDocuments;

import lectures.class_dual_roles.statics.Factorials;

/**
 * STORED VS COMPUTED PROPERTIES
 * If a property is stored, then an instance variable directly stores its value.
 * If a property is computed if it is not stored, its value is computed from variables
 * that do not directly store its value.
 * 
 *
 */

@WebDocuments({"Lectures/ClassDualRolesInstances.pptx", "Lectures/ClassDualRolesInstances.pdf", "Videos/ClassDualRolesInstances.avi"})
public class AnotherLoopingFactorialSpreadsheet 
{
    /*
     * factorial is no longer an instance variable as it is computed
     * each time getFactorial() is called  
     */ 
    int num; // the name is not the same as the property.

    public int getNumber() {
        return num;
    }
    /**
     * setNumber no longer computes the factorial as it is computed
     * each time getFactorial() is called  
     */ 
    public void setNumber(int newValue) {
        num = newValue ;
    }
    /**
     * The getter computes the factorial only on demand
     */  
    public long getFactorial() {
        return Factorials.loopingFactorial(num);
    }   
}