CSE160


Course

CSE160

Title

Computer Science I: Honors

Credits

3

Course Coordinator

Eugene W. Stark

Current Catalog Description

The CSE 160, 260 sequence covers topics coextensive with those covered in the CSE 114, 214, and 219, but at an accelerated pace, and with somewhat different ordering and emphasis. Both CSE 160 and 260 use the Java programming language and include a required laboratory as an integral part of the course.

CSE 160 omits making a detailed review of the basic concepts, constructs, and mechanics of computer programming that students will have covered in the CSE 110 prerequisite course. Instead, emphasis in CSE 160 is on a higher-level, object-oriented approach to the construction of software. Close attention is paid to software engineering issues such as programming style, modularity, and code reusability. The way which software tools can be used to aid the program development process is also emphasized. The course initially considers the construction of small programs, continues by treating the design and implementation of program modules, and culminates in an introduction to object-oriented design techniques suitable for larger programs.

Specific topics covered in CSE 160 include: objects and classes, programming style, object interaction, mutability and immutability, collections of objects, iterators, debugging and testing, information hiding and modularity, cohesion and coupling, code refactoring, programming by contract, inheritance and polymorphism

Prerequisite

You must be in the CSE Honors program and have taken CSE 110 to take this course, or else you must seek special permission from the instructor.

Course Goals

Students will be able to apply object-oriented techniques to design and implement well-structured software modules consisting of several hundred lines of code.

Textbook

Barnes and Koelling, ``Objects First with JAVA: A Practical Introduction using BLUEJ'', Pearson, 2003

(ISBN 0130 44929 6).

Horstmann, ``Object-Oriented Design \& Patterns'', Wiley, 2004

(ISBN 0-471-31966-X).

Major Topics Covered in Course
  • Introduce the basic concepts of object-oriented programming, including object classes, encapsulation, inheritance, and polymorphism.
  • Demonstrate the relationship of programming style and modularity and to the construction and evolution of robust software.
  • Familiarize students with the capabilities and use of programming tools such as syntax-directed editors, debuggers,
  • Documentation generators, and testing frameworks.
  • Develop students' ability to construct software modules consisting of several hundred lines of code.
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 http://www.cs.sunysb.edu/~cse160