Object-Oriented Programming languages such as C++, Java and Visual Basic were developed by computer scientists to speed programming and improve the quality of software. OOP software techniques break programs into functional blocks called objects, making frequently needed features such as control buttons, database management and math easier to use and share among programmers. However, the advantages come with tradeoffs such as added software complexity and reduced performance.
OOP techniques enforce rules on a programmer that, in the long run, help her get more work done; finished programs work better, have more features and are easier to read and maintain. Programs that don't use OOP tend to be large, continuous slabs of text like very long chapters in a book. When programmers step in to change it, the text eventually becomes disorganized and harder to follow. By contrast, OOP programmers take new and existing software objects and "stitch" them together to make new programs. Because object libraries contain many useful functions, software developers don't have to reinvent the wheel as often; more of their time goes into making the new program.
Lower Programming Costs
Especially for larger projects, OOP helps reduce the cost of programming labor. Staff working on a project can develop their own library of software objects, letting programmers use each other's work easily and reducing the hours needed to develop programs. With improved software quality, developers spend less time fixing malfunctioning programs, further reducing labor costs.
Steeper Learning Curve
To master OOP a beginner must learn new, abstract concepts such as polymorphism -- reusing objects while adding new features to them -- and encapsulation -- hiding parts of an object's internal data to improve security -- neither of which ideas are found in older styles of programming. Not only do these concepts take time to learn, they may be too complex for younger would-be programmers or those who program only occasionally.
Object-oriented software can entail extra housekeeping code not necessary in other computer languages; the computer must execute the additional programming, slowing an application's response time. For projects where speed is important, programmers may choose to write the most time-critical parts in non-OOP languages such as assembler or C, reserving OOP code for windows or buttons -- areas in which objects have a clear advantage.