Object-Oriented Programming and Software Engineering


Overview

This course develops intermediate proficiency in object-oriented programming and introduces disciplined software-engineering practice. Topics include classes and objects, encapsulation, constructors, inheritance, polymorphism, interfaces, composition, exception handling, generics or type systems, collections, and reusable libraries.

Students apply requirements elicitation, user stories, use cases, domain modeling, UML or equivalent design notation, modular architecture, cohesion, coupling, design patterns, code style, refactoring, documentation, and maintainability principles. Practical work emphasizes unit and integration testing, test-driven or test-first development, debugging, code review, version control, branching, issue tracking, continuous integration concepts, and collaborative workflows.

A team project requires students to progress from requirements through design, implementation, testing, documentation, and presentation. The course develops the ability to design coherent solutions, evaluate alternatives and trade-offs, produce reliable and readable code, use collaborative tools effectively, and apply iterative development processes.

Learning Outcomes

  • Design coherent object-oriented solutions using encapsulation, inheritance, polymorphism, interfaces, composition, and appropriate abstraction.
  • Implement reliable and maintainable software using collections, generics or type systems, exception handling, reusable libraries, and established coding conventions.
  • Analyze requirements using user stories, use cases, domain models, and UML or equivalent design notation.
  • Evaluate alternative architectures, design patterns, and implementation strategies with reference to cohesion, coupling, extensibility, and maintainability.
  • Construct unit and integration tests and apply test-driven or test-first techniques to verify software behavior.
  • Diagnose defects using systematic debugging, testing evidence, code inspection, and version-control history.
  • Apply branching, issue tracking, code review, and continuous integration practices in collaborative software development.
  • Synthesize requirements, design, implementation, testing, documentation, and presentation into a functioning team software project.

Timetable

TypeLengthFrequencyPeriod
Lecture2 hoursWeeklyAll semester
Lab2 hoursWeeklyAll semester
Tutorial1 hourFortnightlyAll semester
Workshop1 hourFortnightlySecond term

Assessment Schedule

TypeDescriptionWeighting
QuizQuizzes (5 × 2%)10.00%
AssignmentObject-oriented design assignment15.00%
TestPractical programming test15.00%
CapstoneTeam software project30.00%
DeliverableCode review and collaborative workflow record5.00%
ExamFinal examination25.00%

Prerequisites

Teaching Staff & Programs

This course is delivered jointly by faculty from the participating programs listed below. In line with the Douchewater Way, the University of Sexology tailors core instruction directly to each cohort's specific discipline — adapting curriculum to program needs rather than forcing students into a one-size-fits-all model. Learn more about our approach at The Douchewater Way.