Course Details

  • Course Number: 01:198:213
  • Course type: Undergraduate
  • Semester 1: Spring
  • Credits: 4
  • Description:

    This course teaches essential principles, techniques, tools, and methods used to develop large software programs in Java. These include object-oriented programming and design, Unified Modeling Language (UML), testing and debugging, using and documenting APIs, asynchronous (event-driven) programming in a Graphical Use Interface (GUI) framework, code maintenance and version management using CVS, software development using Eclipse, introduction to building software on mobile platforms, introduction to multithreading and network programming, object persistence,

  • Prerequisite information:

    01:198:112.

    - A grade below a "C" in a prerequisite course will not satisfy that prerequisite requirement.

  • Course links: 01:198:112 - Data Structures
  • This course is a Pre-requisite for the Following Courses: 01:198:431 - Software Engineering
  • Topics:
       - Inheritance, interfaces, abstract classes, polymorphism
       - Unified Modeling Language (UML)
       - Essential design patterns, including Singleton, Model-View-Controller (MVC),
         Template Method, State
       - Black-box unit testing, debugging, developing large applications in Eclipse
       - Object persistence, serialization
       - Code management using CVS
       - Designing and implementing GUIs using Java Swing and AWT
       - Frames, dialogs, panels, widgets, tables, layouts, colors, fonts, drawing, painting
       - The Swing MVC architecture and working with data models
       - Event handling
       - Introduction to software development on mobile platforms
       - Introduction to multithreading
       - Introduction to network programming
  • Expected Work: Regular homework assignments, team projects.
  • Exams: Final
  • Learning Goals:

    Computer Science majors ...

    • will be prepared to contribute to a rapidly changing field by acquiring a thorough grounding in the core principles and foundations of computer science (e.g., techniques of program design, creation, and testing; key aspects of computer hardware; algorithmic principles).
    • will acquire a deeper understanding on (elective) topics of more specialized interest, and be able to critically review, assess, and communicate current developments in the field.
    • will be prepared for the next step in their careers, for example, by having done a research project (for those headed to graduate school), a programming project (for those going into the software industry), or some sort of business plan (for those going into startups).