| Title | Computer Science A: Honors | 
          
                                                            | Credits | 3 | 
          
                                                            | Course Coordinator | Eugene Stark | 
          
                                                            | Description | 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. | 
          
                                                            | Prerequisite | Prerequisite: Honors in Computer Science or the Honors College or the WISE Honors Program or University Scholars or the Simons STEM Scholars Program. 
 Advisory Prerequisite: CSE 101  Corequisite: CSE 161
 
 SBC: TECH
 | 
          
                                                            | 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. | 
          
                                                            | Textbook | Y. Daniel Liang, Introduction To Java Programming, Comprehensive Version. Pearson, 11th ed., 2017. | 
          
                                                            | Major Topics Covered in Course | 
Objects, methods, and classesObject state, mutability and immutability, object interactionAccessors and mutatorsFields, parameters, and local variablesAbstraction and modularizationArrays, collections, and iteratorsLibrary classes, documentation, using the Javadoc documentation generatorDesigning classes: modularity and information hiding, cohesion, coupling, refactoringProgramming style: naming, commenting, formatting, avoiding code repetition, using a syntax-directed editorTesting and debugging: using a debugger, unit testing, regression testing, using the JUnit testing frameworkRegular expressions and programming applicationsInheritance, polymorphism, overloading and overriding, static and dynamic type, subtyping, dynamic method lookupAbstract classes and interfacesHandling errors: exceptions and handlersFiles and input/output, streams, readers and writers, character setsIntroduction to graphical user interfaces, using the Swing frameworkIntroduction to object-oriented design, using CRC cards | 
          
                                                            | Laboratory | 
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 |   CSE160 |