Algorithms and OOD (CSC 207 2014F) : Handouts

# Learning Outcomes

(Still a work in progress.)

This document describes the learning outcomes I expect for this course.

## Object-Oriented Design

I expect that at the end of the semester, you will have mastered the basics of object-oriented design. In particular, I expect that you will be able to

• describe and use the three pillars of object-oriented design: encapsulation, inheritance, and polymorphism; and
• identify and use a variety of basic design patterns, including Model-View-Controller, Factory, Iterator, Singleton, Adapter, and Decorator.
• identify objects that will contribute to a program or solution, design those objects, and implement those objects.

## Design and Analysis of Algorithms

I expect that at the end of the semester, you will have significantly extended your skills in the design, implementation, and analysis of algorithms. In particular, I expect that you will be able to

• describe and implement classic algorithms, including binary search, sequential search, insertion sort, selection sort, heap sort, Quicksort, and merge sort;
• design new algorithms* using a variety of approaches including greed, divide and conquer, and dynamic programming;
• analyze the running time efficiency of algorithms using big-O notation; and
• use loop invariants* to better design and verify iterative algorithms.

## Design and Analysis of Abstract Data Types and Data Structures

I expect that at the end of the semester, you will have significantly extended your skills in the design, implementation, and analysis of abstract data types and algorithms. In particular, I expect that you will be able to

• describe and distinguish between the terms "abstract data type" and "data structure";
• describe and implement classic ADTs and data structures, including expandable arrays, lists, stacks, queues, dictionaries/maps, hash tables, binary search trees, and trees;
• design new ADTs using the PUM (philosophy, uses, methods) approach; and
• design new data structures using the LIA (layout, implement, analyze) approach.

## Software Construction

I expect that at the end of the semester, you will be a competent beginning software developer. In particular, in addition to having the skills described above, I expect that you will be able to

• design, implement, and run unit tests;
• develop software using an integrated development environment (in our case, Eclipse).
• collaborate on and keep track of the development history of code using a version control system* (in our case, Git);
• read, understand, and modify code that you did not write;
• design and develop libraries for use in other programs;
• use libraries in your own programs; and
• responsibly incorporate code that you did not use into your own program.

## Java

I expect that at the end of the semester, you will be a competent beginning Java programmer. In particular, I expect that you will also be able to

• write programs using the imperative core of Java;
• signal and recover from errors using Java's exceptions;
• construct simple graphical user interfaces using JavaFX; and
• describe and use a variety of special Java constructs including anonymous inner classes and "lambdas".