Reputation: 72975
I've read a lot of people saying that some things shouldn't be written in an object orientated style - as a person learning the OO style coming from a C background, what do they mean by this?
What shouldn't be OO, why do some things fit this design better, and how do we know when it's best to do what?
Upvotes: 4
Views: 712
Reputation: 1799
If you're writing mobile applications (at least I can speak for .NET mobile), then you should try to be as non-OO as possible. As much as mobile has advanced, you don't want to waste system memory because you've tied up processing with abstraction layers, large datasets in memory, or other entities that will slow things down. You'll want to write things as straightforward as possible.
Upvotes: 0
Reputation: 30328
A simple rule of thumb is to encapsulate complex data and repeatedly used code, and to ignore what isn't. This lets you put complicated data structures together with their manipulative methods for greater portability and flexibility. Such as a list of database objects with intelligent sorting by property type.
OO code also obfuscates what you don't need to know. Such as, I don't need to know what my sort algorithm is until it slows me down, or if I'm already programming for a high performance environment.
Another great thing about OO code is its polymorphism, the way you can use subsequent types to change actions without the program knowing how or caring about it. An example is an archive format with multiple file-list types: the list may have an array of structures (records or structs) within it that changes between the types of list, but inherit from a base class and the complexity of knowing which underlying structure to use goes away. It would be quite difficult to manage that without object orientation, and quite frankly it's tough enough to manage as it is with object orientation.
OO and MVC do not solve your problems if you don't know how to solve them already, they merely give you more powerful ways to shoot yourself in the foot—only this time you might not know why. So remember that if it's anything, OO isn't the "magic bullet" ... but remember that it can be the magic bullet given the right situation and the right programmer.
Upvotes: 3
Reputation: 20794
I agree with most of the above (or below?) that OO exists to simplify complex problems and software design.
However, there are many times where it is extremely overdone. I can't tell you the number of times where I wish there was a Visual Studio Unrefactor button just to make sense of the code and put all base classes in one file for readability.
Upvotes: 2
Reputation: 2492
I can't think of anything other than stored procedures. Get yourself a copy of Reflector and use it to look at the .NET framework dll's as a good learning lesson. Alternately there are a ton of books on C++ and OO on the market since thats been around a while.
Upvotes: 0
Reputation: 62145
Object Oriented design is all about managing complexity as your system grows. Therefore OO design can be overkill for smaller less complex systems, or for systems that you know will never grow.
Of course the problem is that we rarely know with certainty that a system is not going to grow.
Upvotes: 2
Reputation: 391952
The real world is full of objects.
It's helpful to make the software world match the real world.
"What about 'system utilities'? They just deal with abstractions like sockets and processes and file systems." They sound like things to me. They have attributes and behaviors, they have associations.
If you're looking for proof that OO is better, there isn't any. Nothing is better because better is a gloriously vague term. Anyone who's clever can write any program in any style. You could adopt functional, procedural, object-oriented, or anything you feel like.
I use OO because I have a very small brain and must learn to live within its limits. OO is a crutch to help me struggle through programming. If I was smarter, richer and better-looking, I wouldn't need the help, and I could write non-OO programs. Sadly, I'm not smart. Without class definitions to isolate responsibility and structure an architecture, I'd still be writing single-file "hello world" variants.
Upvotes: 5