We all extol the benefits of our favourite programming language whilst denigrating other languages less attractive to us. In truth, published data from around the world of which Table 2 is a subset shows that there is no clear relationship between programming language and the defect density of systems implemented in that language. Ada, for example, supposedly far more secure than other languages produces systems of comparable defect density. In contrast, C is reviled by many safety-related developers and yet it is responsible for some of the most reliable systems ever written. We can conclude that programming language choice is at best weakly related to reliability.However, I doubt his conclusion from
a recent study comparing two similar systems of similar size, (around 50,000 lines each), one in C and one in object-designed C++, the resulting defect densities were shown to be around the same at 2.4 and 2.9 per 1000 lines respectively,that
that language has little effect on reliability, object-oriented or not and that the massive drive to object-orientation is another giant leap sideways in which the software industry appears to specialise.It is unfair to conclude a programming paradigm is defective or fail to live up to its touted benefit from observation on a programming language. This is particularly true for C++ which actually is hybrid in nature - a better-C and Object-Oriented programming language.
From my personal development experience and reviewing code, a person using an object-oriented language, be it C++, C# or Java, does not necessary mean that the developer is apply sound OO principles to their creation. It is the use of these principles that give rise to the touted benefit.
If they are not applied, C++ and other object-oriented language can result in system with far worse defects and undesirable features than say a procedural language like C. Lakos echos similar sentiment:
It is completely wrong, however, to think that just using C++ will ensure success in a large project.
C++ is not just an extension of C: it supports an entirely new paradigm. The object-oriented paradigm is notorious for demanding more design effort and savy than its procedural counterpart. C++ is more difficult to master than C, and there are innumerable ways to shoot yourself in the foot. Often you won't realize a serious error until it is too late to fix it and still meet your schedule, such as indiscriminate use of virtual functions or passing of user-defined types by value, can result in perfectly C++ programs that run ten times slower than they would have had you written them in C.
Unfortunately, the undisciplined techniques used to create small programs in C++ are totally inadequate for tackling larger projects. That's to say, a naive application of C++ technology does not scale well to larger projects. The consequences for the uninitiated are many.
"Large-Scale C++ Software Design" by John Lakos, page 2, Anddison Wesley Longman Inc. 1996