The majority of contemporary mainstream object-oriented (OO) software is written using statically-typed class-based OO programming languages (PLs) such as Java, C#, C++, Scala and others. Existing denotational models of OOP miss crucial features of these mainstream OO programming languages, such as nominality. This book presents the construction of NOOP as the first domain-theoretic model of OOP to include nominal information found in nominally-typed mainstream OO software. Inclusion of nominal information and asserting that type inheritance in statically-typed OO programming languages is an inherently nominal notion allow readily proving that inheritance and subtyping are completely identified in these languages. This conclusion is in full agreement with intuitions of OO developers using these languages, and contrary to the belief among PL researchers that “inheritance is not subtyping”, which came from developing structural non-nominal models of OOP. NOOP thus provides a firmer semantic foundation for analyzing and progressing nominally-typed mainstream OO programming languages.