Course CSE260
Title Computer Science B: Honors
Credits 3
Course Coordinator

Eugene W. Stark


Second part of a two-semester sequence, CSE 160 and CSE 260. Further development of the object-oriented design strategies presented in CSE 160. Continues with introductions to event-driven programming, graphical user interfaces, and design patterns. Includes an extended design and programming project.

Prerequisite CSE 160

Corequisite: CSE 261

Course Outcomes
  • An ability to apply techniques of object-oriented programming in the context of large-scale programs.
  • An understanding of the importance of time and memory efficiency in algorithm and data structure design.
  • An ability to use recursion to solve programming problems.
  • An ability to use programming tools such as syntax-directed editors, debuggers, execution profilers, documentation generators, and revision-control systems.

  • Horstmann, Object-Oriented Design and Patterns, Wiley, 2006 (ISBN 0-471-74487-5).
  • Budd, Classic Data Structures in Java, Addison Wesley, 2000 (ISBN 0-201-70002-6).

Major Topics Covered in Course
  • The software lifecycle: requirements and specifications, use cases, object-oriented design
  • UML: use case diagrams, class diagrams, sequence diagrams
  • Guidelines for class design, encapsulation, programming by contract, preconditions, postconditions, invariants, and assertions
  • Mutability and immutability, side effects and aliasing
  • The Java object model: primitive and object types, subtypes, wrapper classes, object identity versus equality, hashing and equality, cloning objects: shallow and deep copy, object serialization
  • Application frameworks, model/view/controller architecture, design patterns
  • Packages, using refactoring tools
  • Threads and synchronization, using threads with Swing
  • Running time analysis, big-O notation, using execution profiling tools to measure time and memory use
  • Abstract data types: specification and implementation
  • Collections: lists, bags, sets, and maps
  • Indexed collections, sorted collections, binary search
  • Sorting: mergesort, heapsort, quicksort
  • Stacks, queues, and their applications: depth-first and breadth-first search, Dijkstra's algorithm
  • Trees: binary heaps, binary search trees, balanced trees
  • Linked implementation of lists and trees, skip lists
  • Recursion
  • Hash tables and their implementation

Laboratory Projects
  • Software development process, specifications and requirements, object-oriented design, version management.
  • Event-driven programming, applets.
  • Graphical user interfaces.
  • Design Patterns, Threads and synchronization.
  • Abstract data types, collection types, mapping types.
  • Linked lists, iterators.
  • Stacks and applications.
  • Queues and applications.
  • Recursion.
  • Trees, binary search trees, heaps and balanced trees.
  • Searching, binary search, hash tables, complexity, big-O notation, using profiling tools to assess program performance.
  • Sorting, mergesort, heapsort, quicksort.

Course Webpage