Tell me more ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I've read that object oriented programming was a major breakthrough in software development and made possible many new and exciting software.

  1. How valuable was this paradigm shift?
  2. Exactly how necessary is OOP for the development of large, complex and expensive software?
  3. How feasible would it be to write Microsoft Visual Studio, Wolfram Mathematica or a CAD software in an imperative-procedural programming language? Has it been done before?
  4. What is the effective size and complexity limit for software written in a non-object oriented language?
  5. What are the most impressive (large and complex) and important (highly used) softwares of this kind?
share|improve this question
3  
-1 This is a bunch of questions, and a broad topic. This could make an interesting book, or prolonged debate, but is too big to be a question here. I'd like to see this dissected apart into single-focus questions. – DarenW Mar 23 '11 at 4:46

closed as not constructive by MichaelT, gnat, Martijn Pieters, Giorgio, BЈовић Mar 7 at 12:05

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or specific expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, see the FAQ for guidance.

4 Answers

up vote 2 down vote accepted
  1. How valuable was this paradigm shift?
    Inheritance is nice for GUIs where there is an obvious hierarchy of controls - widgets - windows, but is often overused.

  2. Exactly how necessary is OOP for the development of large, complex and expensive software?
    Data hiding and encapsulation helps with large projects but can also do done in C with structs.

  3. How feasible would it be to write ..... in an imperative-procedural programming language?
    Just about every operating system is written in C

  4. What is the effective size and complexity limit for software written in a non-object oriented language? Exactly the same

  5. What are the most impressive (large and complex) and important (highly used) softwares of this kind?
    Unix, Windows, all mainframe OSes. Pretty much all compilers and even VMs are written in C

share|improve this answer
The OpenJDK JVM seems to be primarily written in C++. There is some C as well, but at least from what I've looked at, it's a distinct minority (and most of what I've seen is just a C-compatible wrapper, with the real implementation in C++). – Jerry Coffin Mar 23 '11 at 5:00
2  
Disagree about the compilers. Since 1970 or so, every decent compiler is of course written in the language it compiles. – Ingo Mar 23 '11 at 10:12
@jerry OpenJDK is one of the most recent VMs though – Martin Beckett Mar 23 '11 at 13:30
@Martin: I was under the impression that (nearly?) the only difference from the normal JVM was the license, not the code. It seems hard to imagine that they'd do a total rewrite (and the code I've looked at doesn't resemble C at all). – Jerry Coffin Mar 23 '11 at 13:52
@Jerry - I meant OpenJDK was a very recent project. The original Sun VM and most other system level programming is done in C. There's no reason not to use C++, especially for a new project, but OO doesn't magically make system programming much simpler. – Martin Beckett Mar 23 '11 at 15:41
show 3 more comments

How valuable was this paradigm shift?

What a silly question. In dollars? No one can measure that, can they?

The impact, however, is pervasive, so there must be considerable value in using OO instead of procedural.

Exactly how necessary is OOP for the development of large, complex and expensive software?

"Exactly"? What a silly word to use.

Clearly, large, complex and expensive software is built with non-OO languages. COBOL, VB and plain-old C are used heavily today to built large, complex and expensive software. So it's not exactly necessary at all.

How feasible would it be to write Microsoft Visual Studio, Wolfram Mathematica or a CAD software in an imperative-procedural programming language? Has it been done before?

What a silly question. The Mathematica kernel is written in C with some "OO extensions". Essentially C. Autocad is written in C.

What is the effective size and complexity limit for software written in a non-object oriented language?

What a silly question. There are no limits.

Let's think for a moment.

Pick an OO language at random.

Python. It's written in C. So you can always build an OO framework in a procedural language, then use the OO framework to build your application. You've used a non-object oriented language, and yet, you have the benefits of object-orientation.

Java. It's written in C.

C++. It's written in C.

All programming languages which are Turing-complete are equivalent.

The limits are mostly patience.

What are the most impressive (large and complex) and important (highly used) softwares of this kind?

"this kind"? What kind? Procedural code?

Linux. Apache. MySQL. Python. All written in C.

share|improve this answer
4  
-1 because your constant insulting of the OP undermined what would otherwise have been an informative answer – Carson63000 Mar 23 '11 at 10:13
"All programming languages which are Turing-complete are equivalent.": They are equivalent from the point of view of the functions they can express but not from the point of view of how effectively they can be used by humans. – Giorgio Mar 7 at 9:25
  1. It's impossible to say with certainty. Most OO languages had enhancements above and beyond OO itself, and it's rarely possible to figure out how much improvement came from what features.
  2. Quite a few people find it extremely useful, but it's much like item 1.
  3. Large, complex editors, CAD software, operating systems, real-time control systems, distributed databases., etc., have all been done without OOP. It's almost certainly faster and easier with OOP, but again see 1. above.
  4. That depends on the language, management, etc. There's not a point at which something simply changes from possible to impossible. Rather, there's a roughly exponential curve relating project size to effort. OOP tends to help reduce the amount of communication necessary between developers, thus keeping the curve closer to linear.
  5. Of which kind? What impresses you? What do you consider more important, the air traffic control system, or the control software for a pacemaker?

Edit: examples of software written in non-OO languages include most OSes, such as VMS, Windows (mostly), Linux, and IBM z/OS. Of those, VMS and z/OS were originally written primarily in assembly language. I believe as of OpenVMS, it was rewritten in C. I'd guess that z/OS still retains a substantial chunk of hand-written assembly language at its core. Windows has part of its graphics system written in C++, but the rest is primarily C. Linux is almost pure C (with some assembly language).

In applications, most of the MS Office predates most OO languages, and quite a bit is almost certainly still written in non-OO languages (though some recent additions may easily use newer languages).

Most of the really large systems I can think of (e.g., banking, credit card systems, airline reservation systems, air traffic control, etc.), predate widespread use of OO languages as well. In fact, a fair number of these go back to the '50s or so, and (at least originally) contained a fair amount of hand-written assembly language.

share|improve this answer
Regarding point #5 - I meant impressive from the perspective of size and complexity. I'm essentially asking for some specific examples from the set of software you reference in point #3. Sorry if that wasn't clear. – Ami Mar 23 '11 at 4:16

OOP is not a "major breakthrough", it is a major distraction and a pile of BS. So:

  1. This "shift" had a very negative impact
  2. OOP is not necessary for developing large systems - it is mainly counterproductive there. What is really necessary is a decent module system. And the best examples of an OO code is when classes are only used for simulating modules.
  3. Wolfram Mathematica is written without any notable use of OOP, it is predominantly functional (with a kernel in C). Some of the best CADs are not using any OOP as well.
  4. Some non-OOP approaches allows an unlimited level of abstraction, whereas in a pure OOP there are severe limitations.
  5. Almost all the successful products are far from the OO ideals. Even where OOP is used, it is used to simulate the other paradigms, not the zealous purist OO.
share|improve this answer
I would up-vote your answer if it were not so aggressive towards OOP. I think OOP does solve certain kinds of problems very well (e.g. GUI design) but I agree with you that after it became mainstream lots of people started to think that it is the best approach to programming. I think a professional programmer should know as many paradigms as possible and know which one to pick according to the problem to be solved. So, I agree with you that in many situations OOP is simply not needed and not the best tool. – Giorgio Mar 7 at 9:32
@Giorgio, all the so called "advantages" of the OOP are actually coming from much more fundamental concepts on which OOP is parasitising: modularity, for example. I cannot name a single adequate use of OOP besides agent-based simulations (and this is where I used OOP heavily). GUIs are definitely not well suited for OOP, and I deeply regret that OOP dominates in this area. I regret it mainly as a user, a user of all that clumsy, slow, rubbish UIs (but I was lucky enough to never code a single bit of UI myself). – SK-logic Mar 7 at 9:40
Once more: I agree with you that OOP is over-hyped (I often use other paradigms) and maybe my opinion wrt GUI's is biased because I have more experience implementing GUIs using OOP languages (Java / Swing, C++ / Qt). What are non-OOP approches for GUI implementation? – Giorgio Mar 7 at 9:59
@Giorgio, it is not just overhyped, it is misused in a vast majority of cases. As for GUIs, Tk is a nice non-OOPish approach. I'd rather call XAML a non-OOP solution (with OOP stuff being only an unneccessary underlying layer beneath DSL). And, of course, my favourite, functional reactive GUIs. – SK-logic Mar 7 at 10:08
"functional reactive": Do you mean this en.wikipedia.org/wiki/Reactive_programming, en.wikipedia.org/wiki/Functional_reactive_programming? I think it is not useful only for GUIs and I wish I had some time to try it out. I think it would have fit very well in a module I had to implement recently. Still, I think calling OOP a pile of BS is too hard. – Giorgio Mar 7 at 10:29
show 1 more comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.