Object Oriented Programming (OOP)

P

Pmb

Hi. I'm new to this group. I'm refreshing/learning C++ and am starting to
learn Object Oriented Programming (OOP). In discussing this with people I
came up short as to what the benefits of OOP are. For example: As I
understand it, OOP has its main benefit in software reuse. Thus one develops
a software library of classes and this cuts down the overhead of reinventing
the wheel. Someone might say that this can be done with structured
programming with function libraries. So I have a few questions.

1) For those of you who like OOP, why do you like it?
2) Can OOP be accomplished with non-object oriented languages such as C?
3) If you're not part of a software engineering team but are programming
from your own use and don't need to reuse code would you bother with OOP?

Thanks

Pmb
 
A

Allan Bruce

Pmb said:
Hi. I'm new to this group. I'm refreshing/learning C++ and am starting to
learn Object Oriented Programming (OOP). In discussing this with people I
came up short as to what the benefits of OOP are. For example: As I
understand it, OOP has its main benefit in software reuse. Thus one develops
a software library of classes and this cuts down the overhead of reinventing
the wheel. Someone might say that this can be done with structured
programming with function libraries. So I have a few questions.

1) For those of you who like OOP, why do you like it?

It forces a better design in my opinion, and offers data hiding. Another
advantage is the reduced amount of parameters transferred to and from
functions, since many methods access member variables within a class
2) Can OOP be accomplished with non-object oriented languages such as C?

It can be emulated, but from what I have seen is very messy, and isnt
readable.
3) If you're not part of a software engineering team but are programming
from your own use and don't need to reuse code would you bother with OOP?

I program for pleasure and use it for many reasons, here is an example:

I have a game which I am programming. The entities in my game follow a
simple heirarchy:

class GameEntity // specifies interface for Step() and Draw(). Has one
member variable "bool Valid"

class Ship : public GameEntity // define a ship which has Shoot(), Die()
etc.

class PlayerShip : publilc Ship // defines the player ship which has input
controls etc.

I follow a similar heirarchy for scenery, for powerups etc. It makes things
a lot neater, and if you incorporate the methods as high up the hierarchy as
possible, the less duplicate code there is.

Allan
 
N

nevyn

Hi, this will be my first post to this group as well...

I've only just started using OOP myself. It's kind of interesting the sort
of mind set you get into. Although I still believe that alot of OOP
implementation is done just plain badly it does make it easier to relate
your code to real 'objects'.

Personally I think both have their place but OOP allows you encapsulate
things a hell of alot better than just straight stuctured.

C doesn't allow for the encapsulation that OOP pushes and so is unsuitable
for OOP - but if you aren't one for the rules and want to make things a
hell of alot harder on yourself, seeing as OOP seems to be a mentality
more than anything, C and possibly even pascal should be able to do it to
some strange and wierd extent.

If programming for your own use, I still think OOP is worthwhile. If at
some later date you wish you go over the code again, it's alot easier
looking at the individual objects and knowing exactly what they relate to
rather than trying to figure out each of the functions. This could of
course be fixed with comments but why bother if you can just code it in?

From working with a friend on the occassional little project, I've found
that we can each work on an object each, pull them together and get it all
working together with very little work involved.

Hope this at least answers some of your questions...

regards, Nevyn.
 
P

Pmb

Hi, this will be my first post to this group as well...

I've only just started using OOP myself. It's kind of interesting the sort
of mind set you get into. Although I still believe that alot of OOP
implementation is done just plain badly it does make it easier to relate
your code to real 'objects'.

Personally I think both have their place but OOP allows you encapsulate
things a hell of alot better than just straight stuctured.

C doesn't allow for the encapsulation that OOP pushes and so is unsuitable
for OOP - but if you aren't one for the rules and want to make things a
hell of alot harder on yourself, seeing as OOP seems to be a mentality
more than anything, C and possibly even pascal should be able to do it to
some strange and wierd extent.

If programming for your own use, I still think OOP is worthwhile. If at
some later date you wish you go over the code again, it's alot easier
looking at the individual objects and knowing exactly what they relate to
rather than trying to figure out each of the functions. This could of
course be fixed with comments but why bother if you can just code it in?

From working with a friend on the occassional little project, I've found
that we can each work on an object each, pull them together and get it all
working together with very little work involved.

Hope this at least answers some of your questions...

Yes. Thanks.

Would you use OOP if you were writing a program to do some number crunching,
e.g. solving a differential equation etc.?

Pmb
 
P

Pmb

Allan Bruce said:
It forces a better design in my opinion, and offers data hiding. Another
advantage is the reduced amount of parameters transferred to and from
functions, since many methods access member variables within a class


It can be emulated, but from what I have seen is very messy, and isnt
readable.


I program for pleasure and use it for many reasons, here is an example:

I have a game which I am programming. The entities in my game follow a
simple heirarchy:

class GameEntity // specifies interface for Step() and Draw(). Has one
member variable "bool Valid"

class Ship : public GameEntity // define a ship which has Shoot(), Die()
etc.

class PlayerShip : publilc Ship // defines the player ship which has input
controls etc.

I follow a similar heirarchy for scenery, for powerups etc. It makes things
a lot neater, and if you incorporate the methods as high up the hierarchy as
possible, the less duplicate code there is.

Thanks.

As I asked Nevyn, would you use OOP if you were writing a program to do some
number crunching, e.g. solving a differential equation etc.?

Pmb
 
A

Allan Bruce

Thanks.
As I asked Nevyn, would you use OOP if you were writing a program to do some
number crunching, e.g. solving a differential equation etc.?

Pmb

It entirely depends!

I would use OOP if it were part of a bigger project, no two ways about it.
For example, one class may be a solver for differenial equations. One could
have linear ODEs and others done within this class.

If you mean, would I program an OOP just to solve one equation, then the
answer is no. I would do it in Matlab!

Basically, what I am trying to say is, if I am programming something of
medium scale or larger, then I would do it using OOP, if it is small scale,
i.e. a few lines of code, then I wouldn't program it in a low-level
language, I would use other tools, e.g. Matalab.

Allan
 
B

bartek

(...)
Would you use OOP if you were writing a program to do some number
crunching, e.g. solving a differential equation etc.?

Why not? http://www.oonumerics.org/

"Object oriented" describes a programming paradigm. As all other paradigms,
you can see it in different perspectives, depending on your own point of
view.

C++ being a multi-paradigm language, allows you to freely mix OO concepts
with plain imperative 'C' programming style, and even functional style.
On one hand, it's much more versatile and powerful. On the other, it gives
*a lot* of opportunities for misuse. This is all obvious, though. :)
 
S

Shashank

Hi Pmb,

I like component programming in C++. I also like programming OOP. Simply because
it allows you to comprehend the problems/ solution in terms of objects rather
then functions. It just allows you to structure your program better then what is
possible using even C but in a easier way.

Encapsulation, polymorphism, inheritance are features are OOAD and can be
achieved using C as well, but yeah simple to achieve or design in C++.

Similarly re-use or not you may do in C as well as C++. Its just because you can
comprehend the problem and solution easier in OO methodology that enhances
chances of writing code that may be re-used.

So you will find, moving from C to C++ (or object oriented) is primarily because
it allows to create well structured software easily (because of some features as
mentioned above, that are by default part of objects then in structure where
you will have to code for it!!) compared to structure language.

regards,
Shashank
 
J

Jeff Relf

Hi Pmb, a.k.a. Pete,

In an e-mail, you asked me why I think OOP is modal.

Google, " define:modal ":
http://www.google.com/search?q=define:modal&btnG=Search
" Pertaining to modes. "
...
" A dialog is modal if its parent application
is blocked from further activity
^^^^^^^
until the dialog has completed. See non-modal. "

OOP is a hierarchy,
and, like all hierarchies, it's usually overdone.

The flatter one can keep one's data
the more accessible it becomes.

For example, take a perfectly flat map of the world,
a user simply pans and zooms to see what he wants.
No need to go browsing through
some absurd tree of rigid directories,
branching here and there, going ever deeper,
getting ever more lost.

That's the problem with OOP, it's too convoluted.

I hate pop-ups for the same reason,
as each dialog window pops up, you enter another mode,
it's annoying. Flat is where it's at.

In my programs I make a real effort to
eliminate All pop-ups.
I also don't like sub-sub-sub-sub menus.

So I replace them with a maximized window
( where my Win98 taskbar is the only other window ).

Then I navigate using different combinations and durations
of buttons on my 5 button wheel mouse ...
So that everything is accessible all the time,
no need to consider what mode I might be in.

The terrain ( i.e. the data ) is keep flat like a map ...
I just pan and zoom.
 
C

Claudio Puviani

Pmb said:
Hi. I'm new to this group. I'm refreshing/learning C++ and am starting to
learn Object Oriented Programming (OOP). In discussing this with people I
came up short as to what the benefits of OOP are. For example: As I
understand it, OOP has its main benefit in software reuse. Thus one develops
a software library of classes and this cuts down the overhead of reinventing
the wheel. Someone might say that this can be done with structured
programming with function libraries. So I have a few questions.

1) For those of you who like OOP, why do you like it?

Managing complexity is a cornerstone of programming and OOP is one tool that
helps do that. C++ offers other paradigms, including structured and generic
programming, that also help in managing complexity.
2) Can OOP be accomplished with non-object oriented languages
such as C?

Yes it can. It's just less automated. In the same vein, you can do functional,
declarative, and symbolic programming with C++. The language just doesn't give
you shortcuts to do so.
3) If you're not part of a software engineering team but are
programming from your own use and don't need to reuse
code would you bother with OOP?

If you're not a professional carpenter, but you have to put in a screw, will you
use a hammer just because it's only for your personal use? Of course not. You use
the tool that's most appropriate to what you're doing. You use OOP if the
solution can be best expressed in an OO manner. If it can best be expressed
otherwise, you don't use OOP.

Claudio Puviani
 
T

tom_usenet

Hi. I'm new to this group. I'm refreshing/learning C++ and am starting to
learn Object Oriented Programming (OOP). In discussing this with people I
came up short as to what the benefits of OOP are. For example: As I
understand it, OOP has its main benefit in software reuse. Thus one develops
a software library of classes and this cuts down the overhead of reinventing
the wheel. Someone might say that this can be done with structured
programming with function libraries. So I have a few questions.

1) For those of you who like OOP, why do you like it?

It makes it much easier to modify behaviour in large projects (and to
think about what should be modifiable), and also gives a reasonable
way of structuring such projects.
2) Can OOP be accomplished with non-object oriented languages such as C?

Yes, but the syntax is a mess.
3) If you're not part of a software engineering team but are programming
from your own use and don't need to reuse code would you bother with OOP?

For small projects I sometimes use "object based" programming, using
classes to divide the program into modules. Many small projects (as in
just a few thousand LOC) have little scope to use polymorphism
themselves, but even then I'll usually use OOP libraries at some
point. Any time you write "std::cout" you are using OOP...

Tom
 
P

Pmb

Allan Bruce said:
It entirely depends!

I would use OOP if it were part of a bigger project, no two ways about it.
For example, one class may be a solver for differenial equations. One could
have linear ODEs and others done within this class.

If you mean, would I program an OOP just to solve one equation, then the
answer is no. I would do it in Matlab!

No. I'm thinking more or less number crunching with C++. E.g. suppose you
were tasked with creating a library function for the confluent
hypergeometric function of the first kind, or something as equally
obnoxious. :)

One can't always turn to Mathlab, especially if you don't have it.
Basically, what I am trying to say is, if I am programming something of
medium scale or larger, then I would do it using OOP, if it is small scale,
i.e. a few lines of code, then I wouldn't program it in a low-level
language, I would use other tools, e.g. Matalab.

and if you were someone like me who didn't have Matlab?

Thanks

Pmb
 
A

Allan Bruce

Pmb said:
No. I'm thinking more or less number crunching with C++. E.g. suppose you
were tasked with creating a library function for the confluent
hypergeometric function of the first kind, or something as equally
obnoxious. :)

One can't always turn to Mathlab, especially if you don't have it.


and if you were someone like me who didn't have Matlab?

Thanks

Pmb

I think what you are trying to get at, is, OOP is slower for number
crunching. If so, then this is rubbish. Why would it be slower? OOP is
just as fast as any other programming paradigm for number crunching. If
this is not what you are trying to get at, then perhaps rephrasing your
question is needed?

OOP is about design, number crunching is an implementation within a design.
Cant say much more without clarification of what you want to know...

Allan
 
D

Derek

Pmb said:
Hi. I'm new to this group. I'm refreshing/learning C++
and am starting to learn Object Oriented Programming
(OOP). In discussing this with people I came up short
as to what the benefits of OOP are. For example: As I
understand it, OOP has its main benefit in software
reuse. Thus one develops a software library of classes
and this cuts down the overhead of reinventing the
wheel. Someone might say that this can be done with
structured programming with function libraries. So I have
a few questions.

1) For those of you who like OOP, why do you like it?

The big three reasons to use it (encapsulation,
inheritance, polymorphism) help me structure code in a
well-defined, maintainable, and (usually) reusable way.
2) Can OOP be accomplished with non-object oriented
languages such as C?

Absolutely, but it's not pretty. There are whole C
libraries that are OO by convention, but it's not a pretty
sight. If you want OOP, it's best to use a language that
supports it directly.
3) If you're not part of a software engineering team but
are programming from your own use and don't need to reuse
code would you bother with OOP?

See #1. Even if I don't plan to reuse code, OOP helps me
organize problems in a well-defined, maintainable form.
This has value even if I'm the only customer, so to speak.
Also remember that C++ is a multi-paradigm language:
it support OOP, but doesn't require it. If structured
programming makes more sense than OOP for a part of your
problem, then C++ lets you mix SP and OOP freely. That's a
big reason it's so powerful.
 
P

Pmb

Allan Bruce said:
I think what you are trying to get at, is, OOP is slower for number
crunching. If so, then this is rubbish. Why would it be slower? OOP is
just as fast as any other programming paradigm for number crunching. If
this is not what you are trying to get at, then perhaps rephrasing your
question is needed?

That wasn't what I was getting to. I was wondering if some problems more
readily lend themselves to structured programming in that they are easier to
write etc. Speed was not what I had in mind. OOP works best when you're
modeling real world objects right? What about abstract things for which
there may be no real world thing which to model.? Area under a curve etc.
Perhaps math wasn't the best example to use but it was what came to mind.
I'll have better questions as I learn.

Pmb
 
P

Pmb

Derek said:
If structured
programming makes more sense..

That's what I'm thinking. Do you know of a way to describe in general when
to use OOP rather than structured programming? I.e. are some types of tasks
better left to structured programming?

Thanks

Pmb
 
O

osmium

Claudio said:
If you're not a professional carpenter, but you have to put in a screw, will you
use a hammer just because it's only for your personal use? Of course not. You use
the tool that's most appropriate to what you're doing. You use OOP if the
solution can be best expressed in an OO manner. If it can best be expressed
otherwise, you don't use OOP.

As I understood the OPs question, and if you wish to use analogies, ISTM a
more appropriate analogy would be "Would you build a skyscraper out of
wood?"

People working alone produce small programs. A group of a 100 or so
programmers face a new set of problems.

I have been thinking of posting a longer message to this thread if I get
around to it, but for now I would say that if a problem has a lot of
"state", it is probably time to use OOP. Continuing the C vs. C++ base, (as
opposed to a generic OOP base): if you find yourself using more than a very
few static variables, I think you've got an OOP problem on your hands.
 
A

Allan Bruce

Pmb said:
That wasn't what I was getting to. I was wondering if some problems more
readily lend themselves to structured programming in that they are easier to
write etc. Speed was not what I had in mind. OOP works best when you're
modeling real world objects right? What about abstract things for which
there may be no real world thing which to model.? Area under a curve etc.
Perhaps math wasn't the best example to use but it was what came to mind.
I'll have better questions as I learn.

Pmb

Ok, I understand now. There are definately some examples that are obvious to
be implemented in OOP. Other problems may not be as obvious, for example
your maths example. Here, there are no 'objects' as such, but this is when
I use OOP for modules. For example, I would create a class for my Maths
Module, and one for my GUI.. This isnt OOP as such, but you can still
benefit from the advantages of OOP.
Allan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top