In this chapter, we quickly reviewed programming paradigms, including imperative, procedural, functional, and OO.
Then, we presented OOP principles, such as encapsulation, abstraction, classes and inheritance, interfaces, polymorphism, and composition. We also discussed the choice between composition and inheritance.
After that, we discussed UML and OO domain modeling. We saw what class diagrams look like and how they can easily present a design and help to prepare, discuss, and document domain models.
We also briefly reviewed how JavaScript inheritance works.
Afterward, we covered how TypeScript supports OO programming concepts and how to implement classes and interfaces in TypeScript.
We also saw how to define custom types and explained that interfaces have major advantages over custom types.
We learned that TypeScript interfaces only exist at compile time and also...