  NOOP is a mathematical model of nominally-typed OOP that proves the
identification of inheritance and subtyping in mainstream nominally-typed OO
programming languages and the validity of this identification. This report
gives an overview of the main notions in OOP relevant to constructing a
mathematical model of OOP such as NOOP. The emphasis in this report is on
defining nominality, nominal typing and nominal subtyping of mainstream
nominally-typed OO languages, and on contrasting the three notions with their
counterparts in structurally-typed OO languages, i.e., with structurality,
structural typing and structural subtyping, respectively. An additional
appendix demonstrates these notions and other related notions, and the
differences between them, using some simple code examples. A detailed, more
technical comparison between nominal typing and structural typing in OOP is
presented in other publications.
