RU beehive logo ITEC dept promo banner
ITEC 120
2019fall
asbrennem
ibarland

Mutation!
modifying an object's fields

Getters: We've seen previously, that you can access the field of an object using the\ Object.field syntax:

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

s.title    // evaluates to "Happy Birthday"
Often, people will wrap this field-lookup inside a getter method:
String getTitle( Object thiss ) { return thiss.title; }


s.getTitle()   // evaluates to "Happy Birthday"
Although it seems odd (and long-winded) to call a separate function getTitle 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.


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 thiss, boolean copyable ) {
  thiss.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!


1 We'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 ) );
}

     

logo for creative commons by-attribution license
This page licensed CC-BY 4.0 Ian Barland
Page last generated
Please mail any suggestions
(incl. typos, broken links)
to ibarlandradford.edu
Rendered by Racket.