0% found this document useful (0 votes)
65 views26 pages

Mutable, Immutable, and Cloneable Objects

This document discusses mutable and immutable objects, cloning objects, and techniques for cloning different data structures. It covers: 1) Mutable objects can be modified after creation while immutable objects cannot be modified. Companion classes provide a way to alter immutable objects by creating corresponding mutable objects. 2) The Object class contains a clone method for copying objects, but it only performs a shallow copy. Classes must override clone to perform deep copies of nested objects. 3) Cloning objects before adding them to a data structure like a sorted list prevents external modification from disrupting the order. The data structure returns clones rather than the original objects.

Uploaded by

gitu583
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
65 views26 pages

Mutable, Immutable, and Cloneable Objects

This document discusses mutable and immutable objects, cloning objects, and techniques for cloning different data structures. It covers: 1) Mutable objects can be modified after creation while immutable objects cannot be modified. Companion classes provide a way to alter immutable objects by creating corresponding mutable objects. 2) The Object class contains a clone method for copying objects, but it only performs a shallow copy. Classes must override clone to perform deep copies of nested objects. 3) Cloning objects before adding them to a data structure like a sorted list prevents external modification from disrupting the order. The data structure returns clones rather than the original objects.

Uploaded by

gitu583
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 26

Mutable, Immutable, and

Cloneable Objects
Chapter 15
Chapter Contents
Mutable and Immutable Objects
• Companion Classes
• Using Inheritance to Form Companion
Classes
Cloneable Objects
A Sorted List of Clones
Cloning an Array
Cloning a Chain
2
Mutable and Immutable Objects
A mutable object belongs to a class that
has mutator or set methods for its data
fields
The client uses set methods to change
values of the object's data fields

Fig. 15-1 An object and its reference variable chris


3
Mutable and Immutable Objects

Done
Doneby byexecuting
executing
chris.setLast
chris.setLast("Smith");
("Smith");

Fig. 15-2 An object in the list nameList (a) initially;


(b) after the reference variable chris is used to change it 4
Mutable and Immutable Objects

Immutable object belongs to a class that


does NOT have mutator or set methods
Class said to be read only
Placing immutable objects in a sorted list is
a way to prevent the client from destroying
the order of the list
Use an immutable object if it will be shared
Use a mutable object if its data will change
frequently
5
Companion Classes
If it is necessary to alter an immutable
object
• Can be accomplished by having a companion
class of corresponding mutable objects
Also helpful to have methods that convert
an object from one type to another

6
Companion Classes

Fig. 15-3 the classes Name and ImmutableName


7
Companion Classes
Java's String class is a read-only class
• Instances of String are immutable

Java provides a companion class,


StringBuffer
• Has a constructor that takes an instance of
String as an argument
• Has the toString method that converts a
mutable instance of StringBuffer to an
immutable instance of String
8
Companion Classes
Inheritance can be used to form companion
classes
Text shows declaration of ImmutableName
Then uses this to declare the derived class
Name
• Invokes protected methods of base class
• Adds mutator methods

It is best to derive the mutable class from


the immutable class
9
Companion Classes

Fig. 15-4 The class Name is derived from the


10
class ImmutableName
Cloneable Objects
A clone is a copy of an object
The Object class contains a protected
method clone that returns a copy of an
object
• The implementation of any method can invoke
clone
• Clients cannot invoke clone unless the class
overrides it, declares it public
public class MyClass implements Cloneable
{... 11
Cloneable Objects

Fig. 15-5 (a) A shallow clone; (b) a deep clone.


12
Cloneable Objects

Fig. 15-6 An instance of Name and its shallow clone.


13
Cloneable Objects

Fig. 15-7 A clone after one of its data fields is changed.


14
Cloneable Objects
A clone method for class Student that does
a deep copy
public Object clone()
{ try
{ Student theCopy = (Student)super.clone();
theCopy.fullName = (Name)fullName.clone();
return theCopy;
}
catch (CloneNotSupportedException e)
{ throw new Error(e.toString());
}
} // end clone

15
Cloneable Objects

Fig. 15-8 An instance of Student and its clone,


including a deep copy of fullName. 16
Cloneable Objects

Fig. 15-9 A shallow copy of fullName.


17
Tasks for a clone Method
Invoke the clone method of the
superclass with super.clone()
Enclose call to clone in a try block
Write a catch block to handle exception of
CloneNotSupportedException
• Skip if super.clone() invokes a public
clone method
Clone mutable data fields of object
super.clone() returned, when possible
Return the clone 18
A Sorted List of Clones
Recall problem of placing mutable objects
in an ADT (such as a sorted list)
If object is cloned before it is added to an
ADT
• Client could access/change the ADT's data
only by using ADT operations
• Requires that object added to the ADT be
Cloneable

19
A Sorted List of Clones

Fig. 15-10 An ADT and its client after the clone of an


object is added to the ADT.
20
A Sorted List of Clones

Fig. 15-11 The effect of getEntry if


it did not return a clone.
21
A Sorted List of Clones

Fig. 15-12 The effect of getEntry


when it does return a clone.
22
Cloning an Array
To make a deep clone of an array a of
cloneable objects
• The class must implement Cloneable
• Invoke a.clone()
• Clone each object in the array

Thing[ ] clonedArray = (Thing[ ])myArray.clone();


for (int index = 0; index < myArray.length; index++)
clonedArray[index] = (Thing)myArray[index].clone();

23
Cloning a Chain
The ADT list class must implement the
interface Cloneable

public class LList implements ListInterface, Cloneable


{
private Node firstNode; // reference to first node
private int length; // number of entries in list
...

24
Cloning a Chain

Fig. 15-13 A list that stores its data in a linked


25
chain and its shallow clone.
Cloning a Chain

Fig. 15-14 A list that stores its data in a linked


chain and its deep clone. 26

You might also like