CS 236 Updated Course Content Outline (Fall 2025 Addendum)
If you have any concerns about teaching this updated material, contact Mark Van Gorp at mvangorp@jccc.edu.
SOLID Principles
Single Responsibility Principle (SRP)
Understand and apply the concept that a class should have only one reason to change.
Open-Closed Principle (OCP)
Grasp and utilize the notion that software entities should be open for extension, but closed for modification.
Liskov Substitution Principle (LSP)
Comprehend and employ the idea that objects of a derived class should be able to replace instances of the base class without affecting the correctness of the program.
Interface Segregation Principle (ISP)
Understand and apply the principle that clients should not be forced to depend on interfaces they do not use.
Dependency Inversion Principle (DIP)
Grasp and utilize the concept of depending on abstractions, not on concrete implementations.
Design Patterns
Strategy Pattern
Understand and apply the concept of defining a family of algorithms, encapsulating each one, and making them interchangeable.
Strategy lets the algorithm vary independently from clients that use it.
Decorator Pattern
Grasp and utilize the notion of adding new functionality to an object without altering its structure.
Factory Pattern
Comprehend and employ the idea of creating objects without specifying the exact class of object that will be created.
Unit Testing
Understanding Unit Testing
Grasp the basic principles and value of unit testing, and how it relates to good software design.
Writing Testable Code
Understand and apply practices that make code testable.
Discuss how well-designed code is inherently easier to test.
Creating and Running Unit Tests
Learn to write and run simple unit tests using frameworks like
MSTestorNUnit.Ensure that each part of the software behaves as it should.
Mocking and Stubbing
Delve into techniques for isolating code under test.
Create mock objects and understand the role of stubs.
Asynchronous Programming
Explain the concepts of asynchronous programming.
Discuss the role and usage of
asyncandawaitkeywords in C#.Explore
TaskandTask<T>return types.Discuss handling of exceptions in asynchronous programming.
Demonstrate usage of
asyncandawaitin File I/O, database operations, and web services.
Immutability in C#
Discuss the Concept of Immutability
Discuss the concept of immutability and its benefits.
Explore C# Records and the init Keyword
Explore C# records and the
initkeyword for creating immutable objects.
Discuss the with Keyword for Non-Destructive Mutation
Discuss the
withkeyword for non-destructive mutation.
Utilize Immutable Collections
Utilize
IImmutableListand other types in theSystem.Collections.Immutablenamespace for creating immutable collections.Demonstrate practical uses of immutability in C# code.
Introduction to Functional Programming
Discuss the Concept of Functional Programming
Discuss the concept of functional programming and how it differs from object-oriented programming.
Discuss the connection between functional programming and immutability.
Explore Side Effects and Pure Functions
Explore side effects and their impact in functional programming.
Discuss the principles of pure functions.
Demonstrate Functional Programming Concepts in C#
Demonstrate the usage of functional programming concepts in C#, including lambda expressions and
LINQ.