Udemy
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Development
Web Development Data Science Mobile Development Programming Languages Game Development Database Design & Development Software Testing Software Engineering Development Tools No-Code Development
Business
Entrepreneurship Communications Management Sales Business Strategy Operations Project Management Business Law Business Analytics & Intelligence Human Resources Industry E-Commerce Media Real Estate Other Business
Finance & Accounting
Accounting & Bookkeeping Compliance Cryptocurrency & Blockchain Economics Finance Finance Cert & Exam Prep Financial Modeling & Analysis Investing & Trading Money Management Tools Taxes Other Finance & Accounting
IT & Software
IT Certification Network & Security Hardware Operating Systems Other IT & Software
Office Productivity
Microsoft Apple Google SAP Oracle Other Office Productivity
Personal Development
Personal Transformation Personal Productivity Leadership Career Development Parenting & Relationships Happiness Esoteric Practices Religion & Spirituality Personal Brand Building Creativity Influence Self Esteem & Confidence Stress Management Memory & Study Skills Motivation Other Personal Development
Design
Web Design Graphic Design & Illustration Design Tools User Experience Design Game Design Design Thinking 3D & Animation Fashion Design Architectural Design Interior Design Other Design
Marketing
Digital Marketing Search Engine Optimization Social Media Marketing Branding Marketing Fundamentals Marketing Analytics & Automation Public Relations Advertising Video & Mobile Marketing Content Marketing Growth Hacking Affiliate Marketing Product Marketing Other Marketing
Lifestyle
Arts & Crafts Beauty & Makeup Esoteric Practices Food & Beverage Gaming Home Improvement Pet Care & Training Travel Other Lifestyle
Photography & Video
Digital Photography Photography Portrait Photography Photography Tools Commercial Photography Video Design Other Photography & Video
Health & Fitness
Fitness General Health Sports Nutrition Yoga Mental Health Dieting Self Defense Safety & First Aid Dance Meditation Other Health & Fitness
Music
Instruments Music Production Music Fundamentals Vocal Music Techniques Music Software Other Music
Teaching & Academics
Engineering Humanities Math Science Online Education Social Science Language Teacher Training Test Prep Other Teaching & Academics
AWS Certification Microsoft Certification AWS Certified Solutions Architect - Associate AWS Certified Cloud Practitioner CompTIA A+ Cisco CCNA Amazon AWS CompTIA Security+ Microsoft AZ-900
Graphic Design Photoshop Adobe Illustrator Drawing Digital Painting InDesign Character Design Canva Figure Drawing
Life Coach Training Neuro-Linguistic Programming Personal Development Personal Transformation Mindfulness Life Purpose Meditation CBT Emotional Intelligence
Web Development JavaScript React CSS Angular PHP Node.Js WordPress Vue JS
Google Flutter Android Development iOS Development React Native Swift Dart Programming Language Mobile Development Kotlin SwiftUI
Digital Marketing Google Ads (Adwords) Social Media Marketing Google Ads (AdWords) Certification Marketing Strategy Internet Marketing YouTube Marketing Email Marketing Retargeting
Microsoft Power BI SQL Tableau Business Analysis Data Modeling Business Intelligence MySQL Data Analysis Blockchain
Business Fundamentals Entrepreneurship Fundamentals Business Strategy Business Plan Startup Freelancing Online Business Blogging Home Business
Unity Game Development Fundamentals Unreal Engine C# 3D Game Development C++ 2D Game Development Unreal Engine Blueprints Blender
30-Day Money-Back Guarantee
IT & Software Other IT & Software Object Oriented Design

SOLID C++

Learn and practice C++ with SOLID object-oriented design principles
Rating: 4.3 out of 54.3 (52 ratings)
18,890 students
Created by Andrii Shostatskyi
Last updated 1/2021
English
30-Day Money-Back Guarantee

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)

Requirements

  • 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

Description

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 responsibility

  • Open-closed

  • Liskov substitution

  • Interface segregation

  • Dependency inversion

This 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 should

  • Develop an intuitive understanding of all SOLID principles

  • Understand when SOLID principles are needed and when not

  • Learn how to follow SOLID principles in general, regardless of a programming language, 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

However, 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 tests

  • Explanations 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 you

  • Are 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 you

  • Compile, 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 assignments

  • Work on the project source code in the final assignment, extend its functionality and add tests


The images in visual examples are from website pixabay and the audio in videos is from website bensound.

Who this course is for:

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

Course content

9 sections • 83 lectures • 9h 17m total length

  • Preview05:50
  • Preview03:02
  • Preview08:34
  • Preview09:52
  • Preview09:59
  • Preview13:30
  • Preview05:55
  • Test introduction
    5 questions

  • Windows: download and open project
    03:30
  • Windows: install MinGW distro (gcc, g++, boost libraries, etc.)
    08:35
  • Windows: install CMake
    07:08
  • Windows: install gtest and gmock
    05:57
  • Windows: compile project and run unit tests
    04:24
  • Windows: run high-level tests (optional, using Python3)
    05:56
  • Linux: dowload and open project
    02:43
  • Linux: install dependencies
    12:07
  • Linux: compile project and run unit tests
    15:29
  • Linux: run high-level tests (optional, using Python3)
    06:20

  • UML introduction
    04:05
  • Class diagrams
    05:12
  • Creating class diagrams with Umbrello
    08:19
  • Test UML basics
    4 questions

  • Introduction
    05:05
  • How to follow
    03:50
  • Visual analogy
    03:25
  • UML class diagrams
    04:02
  • Preview04:51
  • Plant care example violating SRP
    10:03
  • Practicing SRP
    1 question
  • Plant care example refactored
    08:27
  • Project source code before applying SRP
    05:25
  • Project source code after applying SRP and refactoring
    08:47
  • Test SRP
    6 questions

  • Introduction
    03:57
  • How to follow
    07:14
  • Additional remarks
    03:39
  • Visual analogy
    02:44
  • UML class diagrams
    05:28
  • Dynamic polymorphism and inheritance
    06:53
  • Static polymorphism and templates
    06:38
  • Template specialization
    04:47
  • Constraints and concepts (C++20)
    04:30
  • Decorator pattern (dynamic)
    06:29
  • Preview05:38
  • Template method pattern
    04:32
  • Composition over inheritance
    06:56
  • Run-time concept idiom (advanced)
    11:34
  • Project source code before applying OCP
    07:31
  • Project source code after applying OCP and refactoring
    14:33
  • Test OCP
    6 questions
  • Practice OCP
    1 question

  • LSP introduction
    05:55
  • LSP underlying terminology and concepts
    08:44
  • LSP implications
    05:35
  • How to follow: IS-A relashionship and behavioural subtyping
    03:07
  • How to follow: design by contract (invariants, preconditions, postconditions)
    08:37
  • How to follow: language features to state and verify contracts
    05:09
  • Visual analogy
    03:37
  • UML class diagram
    04:41
  • Classic example
    03:55
  • Animal example
    12:50
  • Covariance example
    05:49
  • Queryset example
    06:14
  • Collection example
    05:32
  • Project source code changes (OCP + LSP)
    08:17
  • Test LSP
    5 questions

  • Introduction
    04:16
  • Implications
    06:28
  • How to follow
    05:08
  • Visual analogy
    03:12
  • UML diagrams
    05:02
  • UML diagrams continued
    05:26
  • Classic door example (violating ISP + LSP)
    05:27
  • Classic door example continued (delegation, adapter, multiple inhertance)
    09:11
  • Printer class example (multiple inheritance)
    04:49
  • Multiple inheritance caveats
    05:53
  • Plant care example (ISP + LSP)
    13:57
  • Practice ISP
    1 question
  • Plant care example continued (follow ISP + LSP, multiple inheritance, threads)
    07:12
  • Project source code changes (new functionality + ISP)
    15:39
  • Test ISP
    5 questions

  • Introduction
    04:47
  • Introduction continued
    05:26
  • Implications
    04:19
  • How to follow
    11:01
  • Visual analogy
    03:28
  • UML class diagrams
    04:31
  • Classic lamp example
    08:56
  • Observer pattern example
    08:59
  • Observer pattern example continued
    07:21
  • Plant care example
    07:08
  • Project source code
    08:28
  • Test DIP
    8 questions

  • Final test
    8 questions
  • Final assignment
    2 questions
  • Test
    1 question

Instructor

Andrii Shostatskyi
Software Engineer
Andrii Shostatskyi
  • 4.3 Instructor Rating
  • 110 Reviews
  • 24,953 Students
  • 3 Courses

I am a software engineer and currently working in a 5G mobile technology project, programming in C++ on a daily basis.

My programming skills encompass mainly C++, TTCN3, Python, Django, JavaScript, Vue.js, PostgreSQL, Elasticsearch, etc.

In my free time I work on building own platform in the domain of legaltech or learn new technologies and algorithmic.

  • Udemy for Business
  • Teach on Udemy
  • Get the app
  • About us
  • Contact us
  • Careers
  • Blog
  • Help and Support
  • Affiliate
  • Impressum Kontakt
  • Terms
  • Privacy policy
  • Cookie settings
  • Sitemap
  • Featured courses
Udemy
© 2021 Udemy, Inc.