50.001 Object-Oriented Software Design: Principles and Practice
Previously known as “50.001 Information Systems & Programming”.
This course is an introduction to software development using Java. It teaches object-oriented programming, design principles and design patterns within a mobile application context to help students build flexible and maintainable software.
Prerequisites
- 10.014 Computational Thinking for Design (For AY2020 to AY2024) or
- 10.025 Computational Thinking for Design (For AY2025) or
- 10.027 Algorithmic Thinking and Object-Based Abstraction (For AY2026 and subsequent batches)
Learning objectives
- Identify and describe the requirements for an information system.
- Use object-oriented methodology to produce a modular and testable design.
- Work as part of a team to produce a working system on time.
Measurable outcomes
- Apply the key concepts of Object Oriented Programming. [exams]
- Apply key concepts of Object Oriented Programming and Design Principles to design software systems for flexibility and maintainability. [projects, homework, exams]
- Identify classes, members of a class and the relationships among them needed for a specific problem. [projects, homework, exams]
- Implement and test basic algorithms and data structures. [projects, homework, exams]
- Use GUI frameworks to design and develop a user interface. [projects]
- Develop skills in systematic testing and debugging. [projects]
- Work together in a team. [projects]
- Use AI-based software libraries and tools to assist in the design and implementation of software systems. [projects]
Topics covered
- Basic Object-Oriented Programming with Java
- Basic Principles: Abstraction, Encapsulation, Inheritance, Polymorphism
- Classes, Abstract Classes, Interfaces, Inner classes, Generics
- Introduction to OO Design Principles and Patterns
- SOLID Principles (first three are discussed)
- Design Patterns: Strategy, Template Method, Decorator, Singleton, Factory, Builder, Observer, Adapter
- Applications in the Android Framework
- Parts of an Android app, basic widgets, Activities
- Design Patterns used
- Applications in later versions of Java
- Switch Expressions, Records
- Lambda expressions, Functional Interfaces, Optiona