-------------------------------------------------------------------------- Adaptive Object-Oriented Software Development Fall 1997 COM 3360/NTU SE737 Prof. Karl Lieberherr --------------------------------------------------------------------------- Project : Technology Transfer Submitted by: Karen Yahle ================================================================== My original project was to be Object Equivalence of Class Graphs. I had problems with that project and decided afer a few weeks I needed to modify my selection of topic if I was to complete this project. This technology transfer project was less complicated and I had already solved it first in "C" and then again using C++. The growth plan for this project details the steps I used to build the functionality slowly. One of the reasons I chose this project was that in the original, I had written a number of parsing functions to properly identify and handle the different types of input that needed to be processed. Demeter/Java's built-in parsing greatly simplfied the processing of the input and the code that handled it. This project simulated an insurance database with a list of agents, a list of customers and their policies and a list of transactions to be executed on the database. There are 6 types of transactions possible: 1) this transaction will print all insurees in the database. input format: transaction1 1 output format: lastname, firstname. 2) this transaction will find all insurance agents that have sold at least one policy of the same type to more than one customer. input format: transaction2 2 output format: agent: LASTNAME, FIRSTNAME, AgentCode 3) this transaction will find all agents that have sold the type of insurance specified in the query field. There are 3 types of policies possible: life, accident, home. input format: transaction3 3 accident output format: agent: LASTNAME, FIRSTNAME 4) this transaction will find all agents who have sold a total greater than the amount in the query field. input format: transaction4 4 2200 output format: agent_lastname, total $$ premiums 5) this transaction will find all insurees that have bought insurance from the agent specified in the query field. input format: transaction5 5 CLINTON, BILL output format: insuree: LAST, FIRST; agentCode: 123456 6) this transaction will find all insurees who have bought more than one type of insurance from the same agent. input format: transaction6 6 output format: insuree: LASTNAME, FIRSTNAME. Example of inputs: "agent:" LASTNAME, FIRSTNAME, AgentCode "insuree:" LASTNAME, FIRSTNAME "Policies:" "(" type, premium, agentcode ")" "transaction#" trans type [optional additional query data ] Directory: files and subdirectories are attached to email message in zip format. (see below) Files for this project: (contained in top directory) Class dictionary: project.cd Behavior file: project.beh Input files: agent.input insuree.input trans.input Output file: sample output in project.output install.direct: this file has installation and execute directions for this project (for alexey) README-proj: this file project.html: contains the tasks, growth plan, use cases, results and summary for the project. /original: subdirectory containing the C and C++ programs used to base this project on. /vers2 thru /vers7: these are subdirectories containing the different phases of development. (if you're interested) Parts of your project which you would have developed further if you had more time. Include a list of known bugs here. Functionality that I did not develop was the ability to print the output in ascending or descending order. In the C/C++ programs this was accomplished with ordered doubly-linked lsts so that one could start at either end depending on which order was required. Also, when an agent or insuree was repeated in the output more than once, it should not be printed again. This feature was not implemented. My use of Demeter/Java could very well have been more elegant and the code size smaller. I could possibly have reused traversals and visitors using alternation classes (ie. in the transaction classes). I think I might have used in-lined visitors and traversals more often rather than defining them as I did. I also tried writing some "dig_out" methods so I did not have to reference subparts directly, but had some problems in getting to the correct data, so backed them out. Please answer the following questions: Did you change the generated Java code? NO ----------------------------------------