Learn and practice C++ with SOLID object-oriented design principles
File Size :
4.25 GB
Total length :
9h 18m



Andrii Sh.


Last update

Last updated 1/2021




What you’ll learn

Discover how to design and write robust and maintainable object-oriented code
Develop an intuitive understanding of SOLID principles
Learn how to follow SOLID principles using appropriate abstractions and programming patterns
Learn how to follow SOLID principles using different C++ language features and idioms
Know how to structure C++ projects, test and refactor object-oriented code
Practice SOLID principles and C++ in assignments and final programming project (C++17)
Learn how to use CMake and Boost libraries in C++ projects
Learn how to use Google Test for unit testing
Get acquainted with UML (class and sequence diagrams)


SOLID C-screenshot


Beginner or intermediate C++ (used for examples and assignments)
Basic understanding of OOP (class, polymorphism, inheritance, etc.)
Ideally, you should have already worked on a few small hobby projects or have some commercial software development experience


Learning syntax of a programming language is not enough to become professional and build high quality software. One must also learn how to make good design and implement it properly so that software is robust, maintainable, flexible and testable. That’s why we need object-oriented design principles like SOLID:Single responsibilityOpen-closedLiskov substitutionInterface segregationDependency inversionThis is probably the most complete SOLID principles course on Udemy. But it’s also special in that it focuses on C++ programming language, which we use for examples and assignments. And this course covers both theory and practice.By the end of this course you shouldDevelop an intuitive understanding of all SOLID principlesUnderstand when SOLID principles are needed and when notLearn how to follow SOLID principles in general, regardless of a programming language, using appropriate abstractions and programming patternsLearn how to follow SOLID principles using different C++ language features and idiomsKnow how to structure C++ projects, test and refactorHowever, there should be no illusions about this or any other course. One cannot become a true master of object-oriented design and programming only by completing one or few courses – it takes years of practice. But this course is a good starting point and provides the needed foundations.So what exactly is covered in the course?Presentations (theory and concepts about the­ principles)Visual analogies from real world (to better understand and remember the principles)UML diagrams (mainly class diagrams with examples about the principles)Plenty of stand-alone code examples (at least a few for each principle)Almost a real-world project (server application that receives over TCP connection and processes tax reports in JSON or XML formats) with unit and high-level testsExplanations how to install the project’s dependencies, compile it and run tests (uses C++17, CMake, Boost libraries (asio, program options, etc.), Google test)Quizzes and final test (some have additional code examples)Programming assignments (work on the project, etc.)This course is for you if youAre a beginner or intermediate C++ programmer (but not complete beginner)Have a basic understanding of OOP (classes, polymorphism, inheritance, encapsulation, etc.)Want to learn more and become a better software engineer Ideally, before this course you should have already worked on a few small hobby projects or have some commercial software development experience.You should be able to pick up the rest of the materials and technologies during the course. At the same time, some applied technologies and examples are more advanced but optional to the main subject of this course.And even if you don’t primarily program in C++, you will still find that most of the code examples, as well as the principles, apply to many other programming languages.What is expected from you?Besides watching lectures and/or reading presentations, it’s expected that youCompile, read and understand code examples and the project source code (ability to read and work with somebody else’s code is very important and often underestimated)Refactor some of the provided code examples while doing assignmentsWork on the project source code in the final assignment, extend its functionality and add testsThe images in visual examples are from website pixabay and the audio in videos is from website bensound.


Section 1: Introduction

Lecture 1 What is SOLID

Lecture 2 Why focus on C++

Lecture 3 Repository, presentations, source code, tests, CI

Lecture 4 Project description with sequence diagram

Lecture 5 Project source code overview before SOLID

Lecture 6 Project source code overview after SOLID

Lecture 7 Additional remarks about project

Section 2: Installing, building and testing

Lecture 8 Windows: download and open project

Lecture 9 Windows: install MinGW distro (gcc, g++, boost libraries, etc.)

Lecture 10 Windows: install CMake

Lecture 11 Windows: install gtest and gmock

Lecture 12 Windows: compile project and run unit tests

Lecture 13 Windows: run high-level tests (optional, using Python3)

Lecture 14 Linux: dowload and open project

Lecture 15 Linux: install dependencies

Lecture 16 Linux: compile project and run unit tests

Lecture 17 Linux: run high-level tests (optional, using Python3)

Section 3: UML basics

Lecture 18 UML introduction

Lecture 19 Class diagrams

Lecture 20 Creating class diagrams with Umbrello

Section 4: Single Responsibility Principle (SRP)

Lecture 21 Introduction

Lecture 22 How to follow

Lecture 23 Visual analogy

Lecture 24 UML class diagrams

Lecture 25 Text editor example violating SRP

Lecture 26 Plant care example violating SRP

Lecture 27 Plant care example refactored

Lecture 28 Project source code before applying SRP

Lecture 29 Project source code after applying SRP and refactoring

Section 5: Open-Closed Principle (OCP)

Lecture 30 Introduction

Lecture 31 How to follow

Lecture 32 Additional remarks

Lecture 33 Visual analogy

Lecture 34 UML class diagrams

Lecture 35 Dynamic polymorphism and inheritance

Lecture 36 Static polymorphism and templates

Lecture 37 Template specialization

Lecture 38 Constraints and concepts (C++20)

Lecture 39 Decorator pattern (dynamic)

Lecture 40 Decorator pattern (static)

Lecture 41 Template method pattern

Lecture 42 Composition over inheritance

Lecture 43 Run-time concept idiom (advanced)

Lecture 44 Project source code before applying OCP

Lecture 45 Project source code after applying OCP and refactoring

Section 6: Liskov Substitution Principle (LSP)

Lecture 46 LSP introduction

Lecture 47 LSP underlying terminology and concepts

Lecture 48 LSP implications

Lecture 49 How to follow: IS-A relashionship and behavioural subtyping

Lecture 50 How to follow: design by contract (invariants, preconditions, postconditions)

Lecture 51 How to follow: language features to state and verify contracts

Lecture 52 Visual analogy

Lecture 53 UML class diagram

Lecture 54 Classic example

Lecture 55 Animal example

Lecture 56 Covariance example

Lecture 57 Queryset example

Lecture 58 Collection example

Lecture 59 Project source code changes (OCP + LSP)

Section 7: Interface segregation principle (ISP)

Lecture 60 Introduction

Lecture 61 Implications

Lecture 62 How to follow

Lecture 63 Visual analogy

Lecture 64 UML diagrams

Lecture 65 UML diagrams continued

Lecture 66 Classic door example (violating ISP + LSP)

Lecture 67 Classic door example continued (delegation, adapter, multiple inhertance)

Lecture 68 Printer class example (multiple inheritance)

Lecture 69 Multiple inheritance caveats

Lecture 70 Plant care example (ISP + LSP)

Lecture 71 Plant care example continued (follow ISP + LSP, multiple inheritance, threads)

Lecture 72 Project source code changes (new functionality + ISP)

Section 8: Dependency Inversion Principle (DIP)

Lecture 73 Introduction

Lecture 74 Introduction continued

Lecture 75 Implications

Lecture 76 How to follow

Lecture 77 Visual analogy

Lecture 78 UML class diagrams

Lecture 79 Classic lamp example

Lecture 80 Observer pattern example

Lecture 81 Observer pattern example continued

Lecture 82 Plant care example

Lecture 83 Project source code

Section 9: Final test and assignment

Beginner or intermediate C++ programmers who want to become better professionals

Course Information:

Udemy | English | 9h 18m | 4.25 GB
Created by: Andrii Sh.

You Can See More Courses in the IT & Software >> Greetings from

New Courses

Scroll to Top