This document compares procedure-oriented programming and object-oriented programming. Procedure-oriented programming divides programs into smaller subprograms called functions that can access shared global data, while object-oriented programming divides programs into objects that encapsulate both data and functions together and protect data from access by external functions. The document also discusses key object-oriented programming concepts like classes, encapsulation, inheritance, polymorphism, and messaging that provide benefits like code reuse and easier management of complex software projects.