CSE 261

Course CSE 261
Title Laboratory for Computer Science B: Honors
Credits 1
Course Coordinator

Eugene Stark

Description

Must be taken concurrently with lecture component, CSE 260; a common grade for both courses will be assigned. Two and one-half hours of laboratory per week. Students will learn how to use integrated development environments and associated tools such as syntax-directed editors, debuggers, version management, refactoring, and profiling tools, and they will be exposed to advanced programming concepts such as threads, graphical user interface (GUI) construction, model/view/controller architecture, and application frameworks. Experiments with algorithmic running times will underscore the pragmatic implications of the theoretical concepts of algorithmic complexity covered in the lecture component. The laboratory sessions will also provide a forum in which students will present their initial designs and ultimately demonstrate their final implementations for the course programming project.

Prerequisite Mandatory corequisite: CSE 260
Course Outcomes

After this course students can :

  • Apply techniques of object-oriented programming in the context of large-scale programs.
  • Use programming tools such as syntax-directed editors, debuggers, execution profilers, documentation generators and revision-control systems.
  • Apply an understanding of the importance of time and memory efficiency in the construction of software.

Textbook

No required textbook.

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
Course Webpage