Project 3

CSU 670 Fall 2007
Out: September 22, 2007
Due September 28, 2007
This subproject consists of three parts: A requirements part, an implementation part and a tool part.

Requirements part

Requirements part 1

We have a pretty good handle on certain parts of the requirements, like what is raw material, what is a finished product, what is a derivative. What we have not done yet is to agree on a STANDARD notation to talk about Derivative, RawMaterial, FinishedProduct. Write a class dictionary that defines a language for all three. Use a parser generator to debug your language. Instead of an LL(1) grammar, you may use an XML schema to define a markup language for this information.

Requirements part 2

In requirements part 2, use the text book by Booch et al. to select suitable UML constructs to describe the generic flow of interactions between players and the administrator. The example below should be a specific instance of the the generic flow.

The Admin first invokes String KateSloan.Player.yourTurn(String) where the argument string is the admin's store derivative list (currently empty) and the return string is the list of derivatives D1 and D2 that Kate and Sloan put up for sale.

The Admin now invokes String JasonMorgan.Player.yourTurn(String) where the argument string contains the two derivatives D1 and D2 offered by Kate and Sloan. Jason and Morgan recognize both derivatives as great buys and they return a string that says that they buy the two derivatives D1 and D2 and the string also says that a list of three derivatives D3, D4, D5 are for sale.

The Admin invokes String KateSloan.Player.yourTurn(String) where the argument string contains the three derivatives D3, D4, D5 offered by Jason and Morgan as well as a request for raw materials for D1 and D2 to be delivered to Jason and Morgan. In the return string, Kate and Sloan send raw material with 400 variables and 2000 clauses for D1 and 400 variables and 1800 clauses for D2. In the return string Kate and Sloan also buy D5 because it seems cheap. Also in the return string, Kate and Sloan offer D6 and D7 for sale.

The Admin now invokes String JasonMorgan.Player.yourTurn(String) where the argument string contains the two derivatives D6 and D7 offered by Kate and Sloan as well as the raw materials. Jason and Morgan put their clever MAXSAT solver to work to finish the raw materials for D1 and D2 from Kate and Sloan and they find an assignment that satisfies 95% for D1 and 85% of D2. The finished raw materials are put into the return string. The return string also says that they buy D6 and D7. In addition the raw materials for D5 are delivered in the return string.

As a side effect of all those messages, the administrator updates the accounts of the two teams.

Implementation part

Write a program that checks that a given raw material (CNF formula) is of type T.

Tool part

Work through the complete Laboratory Guide to give you an impression how structure-shy programming works.

The Laboratory Guide introduces you to DemeterJ (formerly called Demeter/Java) but most of what you learn will help you to write Java Programs with DJ and a tiny bit of DemeterJ. So when you go through the Laboratory Guide, focus on class dictionaries and how you would express the adaptive programs you encounter directly using DJ without using the adaptive programming language of DemeterJ.

Name substitution throughout Laboratory Guide and other documents:
Demeter/Java -> DemeterJ
demjava -> demeterj

THEME:

READING:

Read chapters 11, 12 of the AP book.

The class dictionary for DemeterJ which defines the DemeterJ notation. It is reachable from the DemeterJ and AP-Studio resources page: http://www.ccs.neu.edu/research/demeter/DemeterJava/

Plus additional reading as described below.


PURPOSE: See DemeterJ in action. Study an application of the concepts covered so far in the context of a Java application.

Tasks to be done: Read and work through the Laboratory Guide using DemeterJ and hand in all files modified.

Browse through the DemeterJ User's Guide available from the DemeterJ and AP-Studio Resources page http://www.ccs.neu.edu/research/demeter/DemeterJava/. Focus on class dictionaries and only a little bit on the adaptive programming language of DemeterJ.

Browsing the User's Guide will help you to better understand the Laboratory Guide available from the same resource page.

The purpose of this laboratory exercise is to see adaptive programming in operation in the Java world. Turn in all the files you modified.

Please send mail to 

csu670-grader@ccs.neu.edu 

if you find something not clear in the Laboratory Guide.

From a happy user of the Demeter/C++ lab guide. The DemeterJ Laboratory Guide is a translation of the Demeter/C++ Lab Guide.

Hi Crista:
 
I just finished working through the Demeter Lab Guide and already feel
a lot more comfortable with Demeter. The Lab Guide is concise, clear
and written with a great deal of empathy for the user. Congratulations
for doing such an excellent job with the Lab Guide!
 
...

What to turn in: For the requirements part: your schema (e.g., a class dictionary) and UML descriptions of the generic game flow. For the implementation part: your program with test cases. For the tools part: Modified files.