CSCI H212
Introduction to Software Systems Honors
H212 is a second, in-depth, introduction to programming which
follows the first introductory course C211. In H212,
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 How to Program, 8/e, Late Objects Version by Paul Deitel
and
Harvey Deitel.
There are two written exams and a final.
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