CSCI C212/H212/A592
Introduction to Software Systems

C212 is a second, in-depth, introduction to programming which follows the first introductory course C211. In C212, advanced programming concepts and practices are covered including use and design of interfaces and libraries, types and type-checking, run-time systems, programming environments, and the programming development cycle. At the end of the course, every student should be proficient at designing and developing medium-sized programs and using the following tools: object-oriented programming style, simple graphics, basic operating system concepts and commands, and a debugger.

There is a programming homework assignment due each week during the first half of the course. The second half is devoted to a long-term project. This semester we are using Java 6 as the programming language. The current text is: Java Concepts by Cay Horstmann. There are two written exams and a final.

H212 is the Honors version of the course. Additional material will be covered in the H212 lab and students will include more features in their projects.


Topics

In no particular order:
  1. Datatypes and data structures
    1. Primitive types (int, boolean, etc) and associated operators including bitwise operations
    2. Arrays
    3. Linked lists
    4. Stacks
  2. Types
    1. Static vs. dynamic typing, strong vs. weak typing
    2. Type checking
    3. Polymorphism, overloading, subtyping, coercions
  3. Program structures
    1. Conditionals, loops, labels
    2. Exceptions
    3. Modules, packages
  4. Object-oriented programming
    1. Classes, class hierarchy
    2. Object construction, object identity
    3. Interfaces
    4. Encapsulation
    5. Elementary OO design
    6. Static objects (co-existence of OO and non-OO programming)
  5. Algorithms
    1. Big-O notation (informal)
    2. Linear search
    3. Binary search
    4. Insertion and/or bubble sort
    5. O(n log n) sorting algorithm
  6. Program development
    1. Style: indentation, comments, meaningful identifier names
    2. Efficiency vs. clarity
    3. Specifications, requirements, invariants
    4. Debuggers, breakpoints
    5. Program development cycle
  7. Interaction with the outside world
    1. File I/O
    2. GUI listeners
    3. GUI widgets and layout management
  8. Runtime systems
    1. Activation frames, runtime stack
    2. Recursion, tail-recursion implementations
    3. Memory management issues
  9. Programming environment
    1. Basic command line interaction with compiler, interpreter, etc.
    2. Stdin, stdout, stderr
    3. File system structure, paths

[ Proceed to internal home page | Authorization Failed? ]