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