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
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
Course instructor(s)