Component-based software from client programmer's perspective; intellectual foundations of software engineering; mathematical modeling; specification of object-oriented components; layering; testing and debugging layered operations.
Using the GUI_Catalog, Id_Name_Table, Least_Cost_Path_Machine, and Natural_Number classes to write simple main programs and layered implementations of operations;
Using simple recursion to write layered implementations of operations;
Using simple predicate calculus assertions involving mathematical integer, string, and tuple models to understand and reason about an operation's behavior;
Using simple techniques to test layered implementations of operations, including developing and carrying out simple specification-based test plans;
Using simple techniques to debug layered implementations of operations;
Using induction arguments to establish the correctness of recursive implementations of operations;
Using simple loop specifications to reason about loop behavior.
Important Note: A passing grade on the final exam is required in order to receive a passing grade for the course.