please follow the insyctions
CSCI 3132: Object-Oriented and Generic Programming
Winter 2024
Assignment 2: Smalltalk
20 marks
Preparing:
You may want a bit more hands-on experience with Smalltalk before diving into the assignment.
Following along with the recording for Lab 1 will help. Note: do not hand this portion in with
the assignment. You can save the project or sources if you want a copy of your work.
The Smalltalk-80 System class reading will also be useful when doing the assignment, and the
following terse reference may also help: https://squeak.org/documentation/terse_guide/ . A more
complete text is also available here: https://inria.hal.science/inria-00441576/document. The
course TAs will also be able to provide guidance if you get stuck, and your instructor is available
for office hour appointments.
Actual Assignment:
(1 mark) Create a new project in Squeak called Matryoshka Project.
Using the system browser, define a class category called Matryoshka.
(1 mark) Define a class in this category, called Doll, that has the following instance variables:
size (the size of the Doll)
nestedDoll (the Doll inside this Doll, or nil if empty)
(2 marks) Provide accessor methods for size and nestedDoll called size and nestedDoll,
respectively.
(2 marks) implement a mutator for size called size: that sets the Doll’s size to the provided
argument value if and only if size is currently nil (unset), otherwise it ignores the message.
(2 marks) Define a constructor (a class method) newSize: that takes a single argument
specifying the Doll’s size and returns a new Doll object with that size.
(2 marks) Provide a nest: method, which receives another Doll as an argument. If the Doll to
nest is smaller in size than this Doll, set the nestedDoll instance variable to refer to the Doll to
nest. Ignore whether or not nestedDoll is nil.
(2 marks) Provide a method called unstack, which sends a message to nestedDoll telling it to
unstack (if not nil), and removes the association with nestedDoll (by setting nestedDoll to nil).
CSCI 3132: Object-Oriented and Generic Programming
Winter 2024
(2 marks) Override the Object asString method such that it returns “Doll of size X[, …]” where
X is the size of this Doll, and if nestedDoll is not nil it will append a comma, a space, and the
result of calling nestedDoll: asString.
Hint: the comma (“,”) binary message is used to concatenate strings.
(4 marks) Define a class method called nest: that takes a Set of Dolls and nests them according
to size, returning a reference to the outermost Doll. If more than one Doll of a given size is
encountered during this process, the method will select one to nest and discard the other. If any
of the Dolls in the Set already contain other Dolls, simply ignore and replace them.
Hint: it may be useful to first sort the Set by Doll size before nesting the Dolls. The
asSortedCollection: message can be sent to a Smalltalk collection (including a Set) in order to
sort it by criteria that you include in a block as a message argument.
(2 marks): include scratch code (from the Workspace) that tests each of your methods. For Doll
nest: the following scratch code must be included (you may include other test code as well)
someDolls := Set new.
aDoll := Doll newSize: 5.
someDolls add: aDoll.
someDolls add: (Doll newSize: 3).
someDolls add: (Doll newSize: 1).
someDolls add: (Doll newSize: 2).
someDolls add: (Doll newSize: 4).
Doll nest: someDolls.
Transcript show: aDoll; cr
This must output the following in the Transcript window:
Doll of size 5, Doll of size 4, Doll of size 3, Doll of size 2,
Doll of size 1
Instructions for submitting your assignment:
Submit your assignment on Brightspace. You have two options:
1. Save the Squeak project and submit that, or
2. Save the Matryoshka category as source (fileOut) and copy the Workspace contents into
a text file. Submit these as separate files or as a single compressed (or otherwise
bundled) file.