1. Modeling and UML - Explain differences between a model and what it is that is being modeled (simplification, abstraction, etc.) - Be able to draw and understand a simple UML class diagram, including the placement of class names, attributes and methods; the notation for associations and generalization/specialization (i.e. extends or implements) relations; and the notation for multiplicity (zero, one or many) at either end of the association. 2. Java Be able to write and debug programs written in Java, including: - Simple statements involving declarations, assignments, method calls. - Control flow. Sequential control, indexed for loops and while loops, if/else if/else branches. - Basic concepts of object orientation. The difference between classes and objects, class fields and methods, constants (static final fields), definition of constructors and their invocation using the reserved word "new". - Visibility rules governing public and private methods and fields. - Running and testing code. Use of the interaction pane in Dr. Java to instantiate objects and run class methods. The main method and running it. How to write comments. - Inheritance, the reserved word "extends"; polymorphism (classes that have same-named methods and the rules that govern which one applies). - Testing code. Writing main methods. - Generics. Collection classes and other classes (e.g. nodes) that are parameterized by their element type. The use of angle brackets to designate parameterized types. - I/O. Opening, closing, reading and writing files. - Exceptions. The required use of try and catch blocks. Their syntax. - Abstract classes and interfaces. That abstract classes are just classes and support single inheritance, whereas interfaces support multiple inheritance. Difference between "extends" and "implements." When a class is abstract and when not. - Package imports. Meaning of the reserved word "import" and the wildcard "*". Where to look in the java 1.5 library for classes and methods that you can reuse. 3. Media - Pictures. The representation of digital pictures as grids of pixels. Instantiating a picture from a file or a blank picture. Getting its width and height. Getting an array of all the pixels in the picture. Getting one pixel at a specified x,y location. - Colors. RGB encoding of color. The minimum and maximum values of R,G and B and the reasons for these values. Size of the RGB color palette. Getting and setting R,G,B values of a pixel. Instantiating a new java.awt.Color and getting and setting a color of a pixel in a single operation. - Working with pictures. Using nested indexed loops to manipulate specific pixels (e.g. those within a specified rectangle). Copying and composing pictures. [ Using the enhanced for loop to manipulate all pixels in a picture.] - Picture manipulation methods. Changing brightness. Selectively changing color/hue. Negatives of pictures. Reducing the color palette: black and white / grayscale and posterizing. - The difference between cloning an object (e.g. two identical twin pictures) and giving it an alias (e.g. two variable names for the same object). Effects of changing one but not the other in these two situations. - Turtle graphics. Instantiating worlds and turtles. Simple turtle movement using Turtle.forward, Turtle.backward, Turtle.turn, Turtle.penUp and Turtle.penDown. Trace a turtle program by drawing its result. 4. Graphical user interfaces. - Passing familiarity with basic javax.swing components: The JFrame and its content pane; JPanels; JButtons; JLabels, etc. - GUI structure. Designing the logical structure of a GUI as a tree of nested components. Using the polymorphic "add" method to add sub-components to a container. - GUI layout. The concept of a layout manager. Rules of FlowLayout and BorderLayout. That the layout managers are in java.awt not javax.swing. - GUI interaction. The concept of listeners. Using ActionListeners and their actionPerformed methods to listen for button presses. Writing implementations of ActionListener either by having the JFrame listen to itself or using addActionListener with an inner class. 5. Simulation - Simulation types. Continuous simulation vs. discrete-event simulations that use event queues. - Randomization. The use of random number generation to simulate non deterministic or incompletely understood phenomena. Using java.util.Random as a pseudo-random number generator. Generating integers and doubles from continuous distributions. The need to scale the results from random methods (e.g. for dice rolls or to match the mean and S.D. of population statistics). The difference between java.util.Random.nextFloat() and nextGaussian(). - Pursuit. Familiarity with the basic PredatorPrey simulation as agents taking alternating turns to approach and avoid each other. Using turtle geometry to visualize agent behavior. - Continuous simulations. The basic architecture of continuous simulations. The simulation loop. The act method and its relationship to an agent's behavior. - Queueing. The concept of a FIFO queue and how it is used in simulations to model waiting for services. - Discrete-event simulations. The "event queue" and rules for adding events to it and removing them from it. Scheduling events in the future and the discrete passage of time in a DES. 6. Data structures - Linked lists. Implementation of linked lists from scratch using node objects. Adding to a list at the beginning. Traversing a list from beginning to end. The meaning of NullPointerException when running faulty list processing code. - Abstract data types. Implementing stacks, queues and quacks in terms of linked lists and arrays. Reasons for using delegation (using an internal private linked list to hold the data) rather than extension (where the queue or stack is a special kind of linked list). - Event Queues. Adding an element in sorted order. - Tree drawing. Recursive drawing of a binary tree using turtle graphics. - Binary trees. Representation of binary tree nodes as data plus a left child and a right child. - n-ary trees. Representation of n-ary tree nodes as data plus a list of children. Use of n-ary trees to represent descending family trees (ancestor, their offspring, etc.), directory hierarchies (folder that contains other folders and files), outlines, and GUI structure (containers containing other containers and components). - Tree traversals. Pre-order, post-order and in-order traversals of a binary tree using recursion. Pre-order traversal of an n-ary tree.