The definitions of object-oriented programming are disputed. In the most general sense, object-oriented programming refers to the practice of viewing software primarily in terms of the "things" (objects) it manipulates, rather than the actions it performs. Other paradigms such as functional and procedural programming focus primarily on the actions, with the objects being secondary considerations; in OOP, the situation is converse.

Widely-used terminology distinguishes object-oriented programming from object-based. The former is held to include inheritance, encapsulation, and polymorphism, while the latter does not.

Arguments for strict definitions

In computer programming a window class is a structure fundamental to the Microsoft Windows (Win16 and Win32) operating systems and its Application Programming Interface (API). The structure provides a template, from which a window may be created, by specifying a window's icon, menu, background color and a few other features. It also holds a pointer to a procedure (a callback function) that controls how the window behaves in response to user interaction.

Although a windows class bears some similarity to the concept of a class in object-oriented programming, the API of the Windows operating system does not follow the object-oriented paradigm and was designed around 1983, a time which predates wide use of OOP. At the time, abstract data types were a relatively new concept being taught in universities and efficient mainstream OOP systems didn't exist. More recent students of programming, taught OOP and Windows in terms of OOP, are sometimes unaware of the difference between OOP and structured programming and assume that the design is object-oriented because that's the current terminology used in the modern Windows API. The lack of abstraction and inheritance in the API reveals its structured programming base.

Microsoft uses the Windows Foundation Classes as a layer over the Windows API to provide a more OOP-oriented interface to the system. Use of MFC is far from universal even among those using C++ and other object-oriented langages, in part because MFC inhibits portability of applicatons which must run on many operating systems.