Object-oriented modeling reduces the need for maintenance and increases both reliability and flexibility by building new behaviors with the use of existing objects. High code reusability is also an important advantage and allows new objects to automatically inherit data attributes from the spawning class.
The reduction in maintenance translates to less maintenance costs and because the processes are enclosed, previous behaviors may be built into newer behaviors as well as allowing for easier identification of the source of errors. These inherited behaviors allow code to be reused efficiently because there is no time restriction on when a new object can be created.
Object-oriented modeling is very useful in a dynamic environment such as engineering design systems; however, most systems, such as payroll and accounting, are unable to benefit from an object-oriented approach. These systems are also much larger, require much more planning before any code is written and do not function as fast due to their size.
More powerful computers are capable of running these systems efficiently, but a great amount of human effort is still involved in both planning and implementation. Many novice programmers will not work on object-oriented systems due to the time it takes to yield even small results.