Comp 401 – Assignment 6: Collections Date Assigned: Wed Sep 29, 2010 Completion Date: Fri Oct 8, 2010 Early Submission Date: Wed Oct 6, 2010 In this assignment, you will use arrays to create different variable-sized collections. You will create fairly complex logical structures, with collection embedded in other objects. In fact, the main challenge in this assignment is to create such structures. You will use ObjectEditor to display the elements of the collections. Thus, you must follow ObejctEditor conventions for read methods of a variable-sized collection. You do not need to do so for write methods. Moreover, while you should use ObjectEditor to invoke methods to remove elements, you should not use ObjectEditor to add elements to the collection. The reason is that each of these collections consists of composite objects such as a shape and ObjectEditor does not provide a convenient way to instantiate method parameters that are composite objects. You can programmatically add elements to connections in main and other methods of your class. Make sure a collection is fully populated before you ask ObjectEditor to display it so that you don’t have to interactively add elements to it. Besides collections, you will create other kinds of objects, which will ultimately be associated with collections In this and future assignments, some classes may be accidentally recognized as implementations of atomic shapes. Some of the composite graphics objects you will create may end up having graphics properties such as Cartesian coordinates. If the names of the classes and interfaces of these objects contain strings such as “Point” and “Oval” that denote atomic shapes, these composite graphics objects will be treated by ObjectEditor as atomic graphics objects . Thus, you might have to play around with the names of classes and interfaces to get the correct display. When you study annotations, you will see ways around this problem. House with Path and Mailbox Create a new class that adds a path to the class you created in the previous assignment to represent a house with a mail box. The exact placement, size, and nature of the path is up to you – I have used a rectangle, as shown below. Later, you will have to determine if an avatar is within a path. Therefore, make it a graphics object that makes it easy to make this determination. Candy Create a graphics class representing a candy. It can be a simple oval, as shown below, or an image or a complex graphics object that is more realistic. Candy Container Create a graphics class representing a candy container – an object, such as the one shown below, that can contain multiple candies. You can assume a limit on the number of candies that can be put in a candy container. Candy List Create a similar class that represents a collection of candies. This collection should also support two write methods: a single-parameter method that adds a candy (specified by the argument of the method), and a parameterless method that removes the last added candy from the collection. Like the house list, the collection does not determine the geometry of the elements (positions and sizes) – each element of the collection does. Candy Container with Candy List Create a class that represents a candy container with a collection of candies in it. This class should determine the positions of the candies to ensure that (1) each candy is fully contained in the container, and (2) no candy is completely hidden by other candies. The class should define a parameterless method to add a candy to the candy list. House List Create a class that represents a collection of houses (with mailboxes and paths). The collection should support two write methods: a single-parameter method that adds a house (specified by the argument of the method), and a parameterless method that removes the last added house from the collection. The collection does not determine the geometry of the elements (positions and sizes) – each element of the collection does. Token List Define a class (and interface) to represent a collection of token-objects (which were defined in the token assignment). For now, make the collection a history. Later you might need to modify the collection to implement some extra credit features. Input String with Token History Create a version of the stateful classes of assignment 4 (and 3). Like these classes, the new class has two properties. One of these properties is the independent editable property storing the scanned string. The second property, however, is no longer a string property. Instead, it is a dependent readonly property storing an instance of the token history class that contains all the tokens in the scanned string (in the order these tokens were scanned). Tester (Extra Credit) Write a tester for the class implementing the candy container with candies that checks that the two constraints given in its definition are actually met. Main Class Write a main class, using the conventions mentioned in earlier assignments, to test all of the classes above. Execute this class to create console and ObjectEditor windows demonstrating the correct behavior of these classes. Extra Credit Summary 1. The tester. 2. Graphics classes representing candies, paths, and containers that look more realistic than what I have created. Constraints As always, try and follow all style principles you have learned so far in class, and use only the concepts seen in class so far, and specified in earlier assignments. This means you cannot use the class Object in the definition of your collection classes. You must carefully choose the type of the element of each collection so that only legal objects in the collection can be stored in it. Questions to be answered Answer the following questions: 1. The assignment requires you to create three separate classes to display candies: a candy list, candy container, and a candy container with candy list. Why not create just (a) one class: a candy container with candy list, or (b) two classes, candy list and a candy container with candy list? Illustrate your answers with examples, if possible. 2. Classify each collection class as a history, database, (transparent) stack, or (transparent) queue. Submission Instructions Submit to blackboard your code together with screenshots of test cases and a document identifying the extra credit features and containing the answer to the questions