COM S 362 (Spring 2021)

By Source, Fair use, https://en.wikipedia.org/w/index.php?curid=30996761

362 Home

Syllabus

Staff

Schedule

FAQ

Miscellaneous

 

Object-Oriented Analysis and Design

Object-Oriented Analysis and Design covers an introduction to requirements analysis and systems design. Topics include:

  • Software Development Process - Agile, Unified Process and Scrum
  • Domain Analysis and Modeling - Responsibility-Driven Design, CRC Cards and UML
  • Design Principles and Heuristics - GRASP, SOLID and code smells
  • Design Patterns - Gang of Four (GoF) design patterns and architectural patterns

The course is roughly split into halves, in the first half we cover the software development process, domain analysis and modeling, and design principles and heuristics using readings and in-class activities. In the second half, we work through multiple iterations of a project, extending and refactoring a "large" existing code base while focusing on team-based iterative development and applying design principles and patterns. You may find the project significantly different than what you have experienced in other project-based courses, you will be writing very little code, we are intentionally not building something new, we are focused on design improvements. Lectures are motivated by the progress of project iterations and cover topics including: applying design patterns, how to draw meaningful UML diagrams, how to navigate and work on a large code base with multiple levels of indirection, how to refactor and how to design for testability. The course concludes with a look at alternative software paradigms and the future of software development.

What will you get from this course? The goal of this course is to give you the knowledge and skills to:

  • make software that is "open for extension, but closed for modification," and understand why this one weird trick is the key to your success as a software engineer
  • communicate effectively using UML diagrams drawn with intention and meaning (not your intro-to-programming version of UML)
  • work on a large code base with confidence
  • apply design principles and patterns that lead to successful software

Prerequisites

The prerequsites for this course are COM S 228, MATH 165 and ENGL 250. The project is in Java, we will cover any advanced concepts as they are needed to implement design patterns, for example, dynamic dispatch, however, we assume you are already proficient with the basics of Java. This is a class about design, not about code style or practices. We expect the code you produce to conform to good coding practices, and we assume you have already learned how to do this in prerequisite courses. A good resource is Clean Code by Robert Martin [MartinCleanCode08].

Required Reading

There is no single textbook for this course, instead we will have selected readings from several well know books in the field, all of the books are free to students in a digital format.

[BoochOOAD07]

Grady Booch, Robert A. Maksimchuk, Michael W. Engle, Bobbi J. Young, Jim Conallen and Kelli A. Houston. Object-Oriented Analysis and Design with Applications, 3rd Edition, 2007.
Description: We have selected readings covering basic principles of object-oriented programming.
Availability: The full text is online from the library via O’Reilly for Higher Education.

[FowlerRefactoring18]

Martin Fowler. Refactoring: Improving the Design of Existing Code, Second Edition, 2018.
Description: We have selected readings covering code smells.
Availability: The full text is online from the library via O’Reilly for Higher Education.

[FowlerUML03]

Martin Fowler. UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition, 2003.
Description: We use this book as a reference to UML. One of the useful features of the print version of the book is the quick reference diagrams printed on the inside cover, in the ebook you will find this material in the section called "Diagrams".
Availability: The full text is online from the library via O’Reilly for Higher Education.

[LarmanOOAD04]

Craig Larman. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, Third Edition, 2004.
Description: We have selected readings covering Agile, UP, domain analysis and GRASP.
Availability: The full text is online from the library via O’Reilly for Higher Education.

[MartinCleanArchitecture17]

Robert C. Martin. Clean Architecture: A Craftsman's Guide to Software Structure and Design, First Edition, 2017.
Description: We have selected readings covering SOLID.
Availability: The full text is online from the library via O’Reilly for Higher Education.

[RichardsArchitecture20]

Mark Richards. Fundamentals of Software Architecture: An Engineering Approach, 2020.
Description: We have selected readings covering architectural patterns.
Availability: The full text is online from the library via O’Reilly for Higher Education.

[ShvetsPatterns20]

Alexander Shvets. Dive Into Design Patterns, 2020.
Description: We use this book as a reference to the Gang of Four design patterns.
Availability: The contents of the book are available for free in a web format at https://refactoring.guru/design-patterns. If you prefer a book format or want to support the author, consider purchasing the ebook.

[WirfsBrockResponsibilityDriven03]

Rebecca Wirfs-Brock and Alan McKean. Object Design: Roles, Responsibilities, and Collaborations, 2003.
Description: We have selected readings covering responsibility-driven design and CRC cards.
Availability: The full text is online from the library via O’Reilly for Higher Education.

Optional Reading

[GammaPatterns95]

Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software, 1995.
Description: Known as the book written by the "Gang of Four", it catalogs 23 object-oriented design patterns that have become the most widely referenced collection of design patterns. The downside is that it uses an archaic (pre-UML) modeling notation and the examples are oriented to the C++ (prior to standardization and C++11) programming language, which makes it unsuitable for an undergraduate-level course. However, you may find it to be a valuable resource.
Availability: The full text is online from the library via O’Reilly for Higher Education.

[GrandPatterns02]

Mark Grand. Patterns in Java Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML, Second Edition, 2002.
Description: Although it has some flaws, among all books specifically using Java and UML, it has the best coverage of the Gang of Four design patterns.
Availability: The book is not available at the library but can be purchased as an ebook or in print from the publisher.

[MartinCleanCode08]

Robert C. Martin. Clean Code: A Handbook of Agile Software Craftsmanship, 2008.
Description: We expect the code you produce to conform to good coding practices, and we assume you have already learned how to do this in prerequisite courses. In any case, this book is a good resource.
Availability: The full text is online from the library via O’Reilly for Higher Education.

Acknowledgements

Robert Ward is responsible for much of the structure of this course in its current form. I had the privilege of co-teaching with him and learning an incredible amount about software engineering and teaching, during my first semester as a university lecturer.