Course CSE160
Title Computer Science A: Honors
Credits 3
Course Coordinator

Eugene W. Stark


First part of a two-semester sequence, CSE 160 and CSE 260. An introduction to procedural and object-oriented programming methodology and basic data structures. Topics include program structure, conditional and iterative programming, procedures, arrays, object classes, encapsulation, information hiding, inheritance, polymorphism, file I/O, exceptions and simple data structures, such as lists, queues and stacks.

Bulletin Link


Computer Science Honors Program or Honors College or the WISE Honors program or University Scholar

Corequisite: CSE 161


Course Outcomes
  • An ability to program in a procedural and object oriented language, using concepts such as loops, methods, object classes, encapsulation, inheritance, and polymorphism.
  • An ability to use and define fundamental data structures such as arrays, stack and queues.
  • An ability to program with sound code structure and use systematic software debugging and testing techniques.

  • Barnes and Koelling, "Objects First with JAVA: A Practical Introduction using BLUEJ", Pearson, 2009 (ISBN 0-13-606086-2).
  • Horstmann, Object-Oriented Design and Patterns, Wiley, 2006 (ISBN 0-471-74487-5).
  • Supplementary Material: None

Major Topics Covered in Course
  • Objects, methods, and classes
  • Object state, mutability and immutability, object interaction
  • Accessors and mutators
  • Fields, parameters, and local variables
  • Abstraction and modularization
  • Arrays, collections, and iterators
  • Library classes, documentation, using the Javadoc documentation generator
  • Designing classes: modularity and information hiding, cohesion, coupling, refactoring
  • Programming style: naming, commenting, formatting, avoiding code repetition, using a syntax-directed editor
  • Testing and debugging: using a debugger, unit testing, regression testing, using the JUnit testing framework
  • Regular expressions and programming applications
  • Recursion
  • Inheritance, polymorphism, overloading and overriding, static and dynamic type, subtyping, dynamic method lookup
  • Abstract classes and interfaces
  • Handling errors: exceptions and handlers
  • Files and input/output, streams, readers and writers, character sets
  • Introduction to graphical user interfaces, using the Swing framework
  • Introduction to object-oriented design, using CRC cards

Laboratory Projects
  • Class definitions, methods, programming style.
  • Object interaction, object references, object state, mutability and immutability, using a debugger.
  • Collections, iterators, arrays, library classes, documentation, using Javadoc.
  • Packages and import, information hiding, public and private access modifiers, class diagrams.
  • Debugging and testing, unit testing, regression testing, using JUnit for testing.
  • Designing classes, modularity, programming by contract, preconditions, postconditions, invariants, assertions Cohesion, coupling, refactoring.
  • Inheritance, polymorphism, Overriding, static and dynamic type, dynamic method lookup, super Abstract classes, interfaces, multiple inheritance, Exceptions and handlers, files and I/O, serialization, Intro to object-oriented design, CRC cards.

Course Webpage