RU beehive logo ITEC dept promo banner
ITEC 120
2012fall
dbraffitt
ibarland

homeinfolectslabsexamshws
tutor/PIsbreeze (snow day)
Object120 + its docsjava.lang docsjava.util docs

lect07b
Mutation!
modifying an object's fields

Sometimes we want an object to change over time. For example, if a Song enters the public domain, we might want to update its copyright status:

Song s;
s = new Song( "Happy Birthday", "Patty and Mildred Hill", 31, true );

// Returns true:
Object120.equals(s,  new Song( "Happy Birthday", "Patty and Mildred Hill", 31, true ) )

s.isCopyrighted = false;

// Returns false:
Object120.equals(s,  new Song( "Happy Birthday", "Patty and Mildred Hill", 31, true ) )
It turns out you can modify fields the same way as you initialize them: object.field = expression;.

We often use “setter functions” to change a field:

/** Set the isCopyright status of a Song.
 * @param copyable The new copyright status for the Song to have.
 */
static void setCopyright( Song s, boolean copyable ) {
  s.isCopyrighted = copyable;
  }


// Test that it works (from the Code Pad):
setCopyright(s, true);  // A *void* function -- must include semicolon in code pad

System.out.println( "Actual: " + s );
System.out.println1( "Expect: " + new Song( "Happy Birthday", "Patty and Mildred Hill", 31, false ) );
Although it seems odd (and long-winded) to call a separate function “setCopyright” rather than just change the field directly, we'll start doing that more and more often as we become concerned with having our projects scale up safely and without confusion.


More examples: Robots

We will draw pictures of what's happening at each step!


1We've already seen that rather than print out the actual/expected and check the printed results by hand, it's more convenient to have the computer check if they're equal:



setCopyright(s, false);

if (Object120.equals(s,  new Song( "Happy Birthday", "Patty and Mildred Hill", 31, false ) )) {
  System.out.println( "(test passed)" );
}
else {
  System.out.println( "Actual: " + s );
  ( "Expect: " + new Song( "Happy Birthday", "Patty and Mildred Hill", 31, false ) );
}

     

homeinfolectslabsexamshws
tutor/PIsbreeze (snow day)
Object120 + its docsjava.lang docsjava.util docs


©2012, Ian Barland, Radford University
Last modified 2012.Oct.10 (Wed)
Please mail any suggestions
(incl. typos, broken links)
to ibarlandradford.edu
Powered by PLT Scheme