CSE332S Object oriented software development lab - bsiever/WUSTL-CSE-Curriculum GitHub Wiki
CSE 332S WUSTL
Prerequisites:
Proficiency with a general-purpose programming language
CSE 247 - taking concurrently is fine
Topics Covered:
- C++ programming language: Built-in data types, C++ STL data structures and algorithms, classes and structs, exception handling
- Functional programming: Call-stack, function overloading, recursion via the stack
- Systems programming: direct memory access via pointers, dynamic memory management
- Debugging using an IDE
- OOP: designing classes to meet interface requirements of the STL, copy control, OOP principles(encapsulation, abstraction, inheritance, polymorphism), programming to an interface, object composition and request forwarding, static vs. run-time relationships between objects, delegation, intro to design patterns.
What's missing:
going from a problem specification -> OOP software. Design process for determining what objects are needed, how those objects interact, UML diagram of the objects, etc..
How this is likely to differ from peers:
this course has other goals aside from OOP. I would expect peers focus an entire course strictly on OOP (maybe using purely OO language rather than C++)
Delivery:
lecture + active learning. Typically 40 minute lecture and 40 minute studio time per class.
Learning Objectives:
- Demonstrate proficiency with the C++ programming language, the STL, and functional programming. A student should be able to implement a functional program using C++.
- Ability to manage heap memory of a C++ program effectively, using direct memory allocation/deallocation or smart pointers (allocation library details are not taught)
- Gain awareness of memory lifetime errors and type safety issues introduced in C/C++.
- Ability to use the debugger (GUI, not terminal based) to trace and examine program execution.
- Design a class using the principles of OOP (encapsulation, abstraction)
- Combine several classes (via inheritance or object composition) to accomplish a more complex set of functionality
- Adopt a mindset of thinking about OOP design with goals of flexibility, reusability, and extensibility.
- Be able to identify, communicate about, and implement design patterns in OOP software.
Similar Peer Courses
None of the core courses at the peer institutions we looked at match this course fully. Many peer institution courses cover introductory functional programming, memory management, copy control, etc in a single course but go on to cover data structure implementations and complexity afterwards or more detailed systems programming rather than focus on OOP. Examples are: CS 225 at UIUC(moves on to data structures), CS107 at Stanford covers additional systems concepts(many that are covered in 132 I believe), CS 24000 at Purdue focuses on systems concepts
CS 251 at Vanderbilt course page is an example of a course that explores OOP software design in much more detail than CSE332.