there were two kinds of problems one was the lack of correspondence between the program and the real worldand the other was the internal organization of the program poor modeling of the real world conceptualizing real-world problem using procedural languages is difficult methods carry out taskwhile data stores informationbut most real-world objects do both of these things the thermostat on your furnacefor examplecarries out tasks (turning the furnace on and offbut also stores information (the current temperature and the desired temperatureif you wrote thermostat control program in procedural languageyou might end up with two methodsfurnace_on(and furnace_off()but also two global variablescurrenttemp (supplied by thermometerand desiredtemp (set by the userhoweverthese methods and variables wouldn' form any sort of programming unitthere would be no unit in the program you could call thermostat the only such concept would be in the programmer' mind for large programswhich might contain hundreds of entities like thermostatsthis procedural approach made things chaoticerror-proneand sometimes impossible to implement at all what was needed was better match between things in the program and things in the outside world crude organizational units more subtlebut relatedproblem had to do with program' internal organization procedural programs were organized by dividing the code into methods one difficulty with this kind of method-based organization was that it focused on methods at the expense of data there weren' many options when it came to data to simplify slightlydata could be local to particular methodor it could be global--accessible to all methods there was no way (at least not flexible wayto specify that some methods could access variable and others couldn' this inflexibility caused problems when several methods needed to access the same data to be available to more than one methodsuch variables needed to be globalbut global data could be accessed inadvertently by any method in the program this lead to frequent programming errors what was needed was way to fine-tune data accessibilityallowing data to be available to methods with need to access itbut hiding it from other methods objects in nutshell the idea of objects arose in the programming community as solution to the problems with procedural languages