CS 435/535 Assignment #6 – Spring 2021
Project Overview: In this project, you will use Smalltalk to complete the same shape project done previously. You
will implement one base class (Shape) and four (4) derived classes (Sphere, Cylinder, Cone, and Cuboid).
They need to be saved into five different files, shape.st, sphere.st, cylinder.st, cone.st, and
cuboid.st respectively.
For this project, you also need to write the main.st file that will read the shaper from a file with its filename
furnished as a command line argument. You can download form Blackboard a sample shapes file named
shapes.dat, as shown below. Each shape occupies one line in the file and two attributes of a shape are separated
by one or more spaces. The number of shapes in the file is unknown in advance.
Cube#1 cuboid 1 1 1
Cube#2 cuboid 2 2 2
Cone#1 cone 1 1
Cyl#1 cylinder 1 1
Box#1 cuboid 2 4 6
Box#2 cuboid 10.5 21 10.5
UnitSphere sphere 1
LargeSphere sphere 100
Cone#2 cone 1 2
Cyl#2 cylinder 1 2
The user can execute your program using the following command, assuming shapes.dat is the shapes file.
gst shape.st sphere.st cylinder.st cone.st cuboid.st -f main.st shapes.dat
If the number of arguments is incorrect, please print out a usage message and quit. If the file can’t be opened for
reading, print out an error message to indicate it and quit. If the file can be opened, you can assume it follows the
correct format and it contains correct attributes.
The user can then issue one of the following queries: count, countN, print, printN, min, minN, max,
maxN, total, totalN, avg, avgN. Here N is a positive integer to indicate the number of test conditions to be
imposed with the query. Without N, the query will be unconditional (performed on all the shapes). If N appears, the
user needs to enter N test conditions one by one, and the query will be performed on the shapes that satisfy all the N
test conditions.
Each test condition will be in the
“volume” (without the quotation marks). The
“>=”, “<=”, “>”, and “<”). The
For example, “type” “>” “cyl”, “area” “<=” “1000”, and “volume” “>” “100.5” are three examples of test
conditions.
The user can keep issuing the queries until the user enters the quit command. Please see the sample executions at
the end for details. You can assume the user will enter the queries and the test conditions correctly.
It is not required, but it might be a good idea to define another class in main.st to represent a list of shapes read
from the file and the class can respond to the messages that correspond different quarries issued by the user (i.e.
count print min max total avg).
What You Need To Do
• Create a directory named project6 for this assignment. Download shapes.dat from Blackboard to
the project6 directory.
• Create five classes to be saved in shape.st, sphere.st, cylinder.st, cone.st, and
cuboid.st respectively.
• Create another file named main.st to read the shapes file, and to accept and answer the queries issued by
the user.
• When you are ready to submit your project, compress your project6 directory into a single (compressed)
zip file, project6.zip.
• Once you have a compressed zip file named project6.zip, submit that zip file to Blackboard.
• Your submission will be graded on cs-parallel.ua.edu. Make sure to test it on that machine before
submission.
• Make sure to follow the above instructions exactly. Otherwise we may not be able to grade your submission.
.
Assignment #6 is due at 11:59pm on Monday, March 31. Late projects are not accepted.
This document including its associated files is for your own personal use only.
You may not post this document or a portion of this document to a site
such as chegg.com without prior written authorization.
An assignment shall be completed individually, with no sharing of code or solutions.
All submissions will go through MOSS (Measure Of Software Similarity) for similarity check.
The University of Alabama’s Code of Academic Conduct will be rigorously enforced.
Sample executions of the program
gst shape.st sphere.st cylinder.st cone.st cuboid.st -f main.st
Usage: shape.st sphere.st cylinder.st cone.st cuboid.st -f main.st shape_file
gst shape.st sphere.st cylinder.st cone.st cuboid.st -f main.st xxxx.dat
Unable to open xxxx.dat for reading
gst shape.st sphere.st cylinder.st cone.st cuboid.st -f main.st shapes.dat
Enter a command: print
Cuboid: Cube#1, Length=1.00, Width=1.00, Height=1.00
Surface Area: 6.00, Volume: 1.00
Cuboid: Cube#2, Length=2.00, Width=2.00, Height=2.00
Surface Area: 24.00, Volume: 8.00
Cone: Cone#1, Radius=1.00, Height=1.00
Surface Area: 7.58, Volume: 1.05
Cylinder: Cyl#1, Radius=1.00, Height=1.00
Surface Area: 12.57, Volume: 3.14
Cuboid: Box#1, Length=2.00, Width=4.00, Height=6.00
Surface Area: 88.00, Volume: 48.00
Cuboid: Box#2, Length=10.50, Width=21.00, Height=10.50
Surface Area: 1102.50, Volume: 2315.25
Sphere: UnitSphere, Radius=1.00
Surface Area: 12.57, Volume: 4.19
Sphere: LargeSphere, Radius=100.00
Surface Area: 125663.71, Volume: 4188790.20
Cone: Cone#2, Radius=1.00, Height=2.00
Surface Area: 10.17, Volume: 2.09
Cylinder: Cyl#2, Radius=1.00, Height=2.00
Surface Area: 18.85, Volume: 6.28
Enter a command: print2
Enter test condition #1: type == cuboid
Enter test condition #2: area >= 88
Cuboid: Box#1, Length=2.00, Width=4.00, Height=6.00
Surface Area: 88.00, Volume: 48.00
Cuboid: Box#2, Length=10.50, Width=21.00, Height=10.50
Surface Area: 1102.50, Volume: 2315.25
Enter a command: count1
Enter test condition #1: type > cyl
There are 4 shapes.
Enter a command: count1
Enter test condition #1: type != cuboid
There are 6 shapes.
Enter a command: quit