Object Oriented Programming involves modeling real-world entities as objects that encapsulate both data and behavior. Classes define these objects by grouping the data (attributes) and functions (methods) that operate on that data. In C++, classes use access specifiers like public and private to control whether data and methods can be accessed from outside the class or only within the class. Methods are defined either inside or outside the class using the scope resolution operator. Objects are instantiated from classes and their methods and data can be accessed using dot or arrow operators.