Object-oriented programming (or OOP) is one of the most poorly understood things in computer programming. It is especially challenging for beginners who seem unable to apply OOP concepts in practice. They may understand variable assignment, if-then-else, loops, functions, even modules, but what the heck are classes, objects, and methods for??? Why do we need inheritance and polymorphism? How do you use these things when writing programs?

main program:
======================
======================
======================
if ===================
===================
===================
===================
======================
======================
======================
while ================
===================
===================
===================
===================
======================
======================
======================
======================
======================
for ==================
===================
===================
===================
======================
======================
======================
======================
if ===================
===================
===================
===================
else =================
===================
===================
===================
======================
======================
======================
...
main program:
======================
======================
======================
call fred
======================
======================
if ===================
===================
===================
call eric
======================
======================
======================
x := bob()
======================
======================
while ================
===================
===================
======================
======================
call eric
======================
======================
======================
procedure fred:
======================
======================
======================
procedure eric:
if ===================
===================
===================
======================
======================
======================
function bob:
======================
======================
return ===============
main program:
======================
======================
======================
call fred
======================
======================
if ===================
===================
===================
call eric
======================
======================
======================
x := bob()
======================
======================
while ================
===================
===================
======================
======================
call eric
======================
======================
======================
module Tom:data:
======================
======================
procedure fred:
======================
======================
======================
procedure eric:
if ===================
===================
===================
======================
======================
======================
end module Tomfunction bob:
======================
======================
return ===============

An object is not an Abstract Data Type

…where Abstract Data Type is a highfalutin term for a type of data structure.

main program:
======================
======================
aDick := new Dick # instantiate using class Dick
aDick.fred() # send message fred to aDick
======================
======================
if ===================
===================
===================
aDick.eric()
======================
======================
======================
x := bob()
======================
======================
while ================
===================
===================
======================
======================
aDick.eric()
======================
======================
======================
define class Dick:data:
======================
======================
method fred:
======================
======================
======================
method eric:
if ===================
===================
===================
======================
======================
======================
end class Dickfunction bob:
======================
======================
return ===============