Overview

Course Number EN.601.421/621
Course Title Object-Oriented Software Engineering
Term Spring 2024
Instructor https://www.cs.jhu.edu/faculty/ali-madooei/, (email: [email protected])
Department Computer Science
Level Upper-Level Undergraduate / Graduate
Credit 3
Homepage: https://cs421sp24.github.io

Course Description

This course covers object-oriented software construction methodologies and their application. The main component of the course is a large team project on a topic of students' choosing. Course topics covered include object-oriented analysis and design, UML, design patterns, refactoring, program testing, code repositories, team programming, and code reviews.

<aside> 📌 Prerequisites [Official]

EN.601.280 Full-Stack JavaScript or EN.601.290 User Interfaces & Mobile Applications.

</aside>

<aside> 🎯 Prerequisites [in plain English]

Experience building web or mobile software applications!

</aside>

Course Learning Outcomes

Upon successful completion of this course, students will be able to:

  1. Integrate Object-Oriented Principles and Software Engineering Practices: Apply object-oriented analysis and design principles, utilizing UML and design patterns, to develop robust software systems. Understand and implement software engineering best practices, including refactoring, program testing, and use of code repositories.
  2. Develop and Manage Software Projects: Engage in the agile software development process for medium-size projects, demonstrating skills in short iteration, continuous delivery, and version control. Effectively use software tools to support software development.
  3. Collaborate and Communicate in Team Environments: Demonstrate the ability to work effectively as part of a team, contributing to a large team project. Develop presentation skills through project presentations and communicate complex software engineering concepts clearly.
  4. Design and Implement Software Systems: Create a software requirements specification for a medium-sized software system and prioritize functional requirements. Design, implement, document, and test an API for a simple software system, considering data persistence strategies.
  5. Apply Theoretical Concepts to Practical Problems: Recognize and distinguish between different software process models, including plan-driven models and incremental development approaches. Describe and apply the SOLID design principles and various design patterns to real-world software problems.
  6. Critical Analysis and Problem-Solving: Analyze a complex computing problem, evaluate computing-based solutions, and provide examples of refactoring to improve software design. Implement software components that are resilient to input and runtime errors and create a comprehensive set of tests for code segments.

These outcomes are aligned with the Computer Science BS Program Student Outcomes (SO1, SO2, SO3, SO5, SO6) and reflect the core competencies outlined in the ACM's Computer Science Curricula.

Course Topics

Here is a bulleted list of topics that will be covered in this course: