Review Session Minutes

Subject: Review Session Minutes
From: John Sung (
Date: Sun Feb 10 2002 - 19:15:31 EST

Here's the minutes of the review session:

Is drawing a UML diagram going to be in the mid-term?

No, but knowing how to draw one from a class
dictionary will help in doing the mid-term since a
UML class diagram is pretty much the class graph.

What type of questions are on the mid-term?

Just like the practice ones, it's all unknowns. So,
practicing the unknowns from homework 1 and 2 would be
a good idea.

Do we need to read all the chapters in the book?

No, since the mid-term is going to be unknown
questions. But understandin the concepts however is
cruicial in being able to figure out the unknowns. If
you haven't read the chapters, it's probably not very
cost effective for you to do with so little time
before the mid-term. It's probably productive to
practice the homeworks.

Test taking strategy:

o You should skim over the test and find the questions
that is easiest to answer and answer them first.

o Try to go through the whole test atleast once, so if
you see a question that you can not answer right away
just skip and goto the next one.

o Write the unknowns directly on the test and after
the first pass, i.e. the previous step, copy down the
unknowns on the answer sheet. This minimizes the times
that you have to keep on going back and forth between
different sheets

o Then on the second pass, go back and attempt to
answer the harder questions.

o draw arrows on the class dictionary to make it
easier to "traverse" through the class graph.

o Mark the places where the program outputs something
so that you can figure out the order of the output
very quickly.

o You can even try to predict the type of questions
that will be asked by analyzing the lecture notes and

o Look through the homeworks and make sure that you
can answer the unknown questions and very quickly.

o Remember that you are under some time constraint,
practicing on the homeworks and seeing how fast you
can answer them will simulate the mid-term conditions
and allow you to perform faster on the actual test.
You can do the same with the practice mid-term as

Concepts that you need to understand:

o Understand how the demeter system works:

class dictionary -> class graph
class graph + strategy -> traversal graph
traversal graph + visitor -> "work done"

o Understand how java works so that you can figure out
the local variables, data members in a class, method

o Know how traverse, gather, and fetch works for
TraversalGraph and ClassGraph objects in DJ.

o Understand the relationship between class dictionary
(grammar), object graph (parse tree), and input.
Knowing how PrintVisitor outputs an object graph would
be useful, i.e. <label> : class name ( <..> : ... ());

class dictionary + input -> object graph (parse tree)

Given a class dictionary and input, create the object
graph, i.e. parse tree.

Given an object graph and class dictionary, recreate
the input that generated the object graph.

So, if there was some unknown in the object graph, you
should be able to figure it out if you were given the
class dictionary and the input that generated or vice

o Understand how to create strategies given a class
dictionary. Basically you can specify it of the form:
from source to target.

class dictionary:
Basket = "Basket" List(Fruit).
Fruit : Banana | Apple.
Banana = "Banana" <w> int.
Apple = "Apple" <a> int.

In the current version of demeterj, "through" is equal
to "via".

-if you want to traversal to all the int's then:
from Basket to int.

-if you only wanted to traverse to Apple's int then:
from Basket through Apple to int

-If you wanted to specify the particular edge from
Apple to int with a as the label the:
from Basket through {-> Apple,a,int} to int

-if you wanted to specify all the edges that has the
label a which does the same thing as above then:
from Basket through {-> *,a,*} to int

- if you want to use the converse of the first
strategy then:
from Basket bypassing Banana to int

- if you want to use the converse of the 2nd strategy
from Basket bypassing {->Banana,w,int} to int

- if you want to use the converse of the 3rd strategy

from Basket bypassing {->*,w,*} to int

Remember that the concepts here are pretty simple, but
applying them to something with a complex class
dictionary will be hard to do. So, I would suggest
that you practice at it and try to figure out how you
can solve these problems in a short amount of time.
Hopefully, the advice that I gave will help.

Good luck with the mid-term.


Do You Yahoo!?
Send FREE Valentine eCards with Yahoo! Greetings!

This archive was generated by hypermail 2b28 : Sun Feb 10 2002 - 19:15:33 EST