Welcome message from Prof Dig

Welcome to Object-Oriented Analysis & Design CSCI 4448/5448! I am excited to teach this class. We will be doing a few things differently from other classes to make OOAD more interactive and participatory. You will have the opportunity to continuously share your opinions in class through iClicker and get instant feedback. You will be engaged in an active learning environment where you learn from many sources, including your peers in class. I will also interview in class (through Zoom) some of the most famous industry leaders, book authors, and alumni. In the initial phase you will be developing a project in Java and IntelliJ IDEA using Test Driven Development, and in the second part you have a wide choice of technologies. You are expected to follow an organized software development process (eXtreme Programming) and ultimately deliver a polished product with emphasis on good design, clean code, sufficient testing, and proper documentation.

Class Schedule

Lectures: M/W/F 3:00 - 3:50 PM due to covid-19 mitigation on Zoom https://cuboulder.zoom.us/j/96158358156

VIP: Zoom is set up so that you can only join when authenticated from a colorado.edu account.

Staff

Professor: Danny Dig
Email: danny.dig [at] colorado.edu
Office: on Zoom
Office hours: Right after class at 3:50pm, and by appointment

TA: Dwight Browne
Email: Dwight.Browne [at] colorado.edu
Office: on Zoom: https://cuboulder.zoom.us/j/91343768707
Office hours: Tues 10-12 and Thu 3-5

Grader: Vasu Sharma
Email: Vasu.Sharma [at] colorado.edu
Office: on Zoom: https://cuboulder.zoom.us/j/8073355370
Office hours: Wed 10-12, Fri 10-12

Grader: Abhas Prasad
Email: Abhas.Prasad [at] colorado.edu
Office: on Zoom: https://cuboulder.zoom.us/j/8866887657
Office hours: Mon 1-3, Wed 1-3

Important Dates

January 15: First day of classes

Course Learning Objectives

Object-Oriented Analysis and Design is a course that presents an introduction to the design and construction of software systems using techniques that view a system as a set of objects that work together to realize the system's functionality. This perspective stands in contrast to more traditional "procedural" or "structured" design techniques that viewed systems as a set of procedures that manipulate shared data structures. Proponents of object-oriented techniques point to the flexibility and extensibility of object-oriented systems along with other benefits such as increased modularity, abstraction, and encapsulation.

In this class, we will examine fundamental objected-oriented analysis and design techniques and show how decisions made during analysis and design impact the implementation of software systems. This class does not focus on object-oriented programming; however, we will examine many examples of object-oriented systems written in Java and other languages. A primary focus will be the understanding and application of key object-oriented principles and design patterns.

At the completion of this course, students will be able to...

  • Understand the major steps of Object-Oriented software development life cycles and the tools and techniques used in these steps
  • Synthesize requirements for a realistic software system and write a requirements specification document
  • Model system requirements using one or more semi-formal notations such as UML, dataflow diagrams, entity-relationship diagrams, or state diagrams
  • Design software systems at an architectural level and at lower levels, using one or more techniques, such as object-oriented design or agile methods, and express these designs in design specification documents
  • Validate designs and adjust the specification or design as necessary
  • Participate effectively in the development of a project in a team environment
  • Produce professional-quality software-related documents
  • Develop and articulate content knowledge and critical thinking in the discipline through frequent practice of informal and formal writing
  • Demonstrate knowledge/understanding of audience expectations, genres, and conventions appropriate to communicating in the discipline

Prerequisites

This course involves extensive work in programming for projects and assessments and therefore requires knowledge of programming (this course will primarily use Java, along with some Python) and basic computer architecture. Corresponding CU Boulder courses includes CSCI 1300, 2270, and CSCI 3308. Both Java and Python are straightforward languages to install, read, and apply, especially for those with existing background in other languages (like C, C++, or C#). They are also particularly suited to object-oriented design projects such as those in this class.

Neither Java nor Python programming will be taught in depth as an in-class topic, although examples and code snippets will be reviewed. Links for Java and Python tutorials and support materials will be provided for students to use as needed.

The class may also provide experience with other tools and languages, including but not limited to Git, HTML, UML and UML Editors, IDE, Jira, Amazon Web Services, various databases, and others. Prior experience in these tools is not required for the class.