Re: beginning java...nublet drowning. throw me a lifeline?
On 4/27/2012 7:20 PM, Justin Fondriest wrote:
//Reusing the implementation
//**The simplest way to reuse a class is to just use an object of that
class directly, but you can also place an object of that class inside
a new class. We call this "creating a member object." Your new class
can be made up of any number and type of other objects, in any
combination that you need to achieve the functionality desired in your
new class.
Because you are composing a new class from existing classes, this
concept is called COMPOSITION(if the composition happens dynamically,
it's usually called AGGREGATION). Composition is often referred to as
a "has-a" relationship, as in "A car has an engine."***//
Ok...so is this saying "a car has an engine", with regard to code
would be more like "a car (class)"--as in every car class--"has an
engine(object)"?
Now whether I am right or wrong...could someone take maybe 3 minutes
to explain what composition is in layman's terms?
"Car has an Engine" is pretty good. You might have an entire
hierarchy of different kinds of engines: The archetypical unspecialized
Engine, subclasses GasolineEngine and DieselEngine and SteamEngine,
and maybe OttoEngine and WankelEngine as further specializations of
GasolineEngine.
You might also have a hierarchy of different kinds of Car:
Automobile (with subclasses FamilyCar, RacingCar, StanleySteamer,
and RustBucket), TrolleyCar, TramCar, and so on.
But one thing every Car instance of whatever kind has is some
kind of power source: An Engine. So your generic Car might have
an internal Engine reference, and you might call theCar.getEngine()
to discover what particular kind of Engine a particular Car has.
If the Car is a RacingCar it (almost certainly) has an OttoEngine,
if it's a StanleySteamer it surely has a SteamEngine, but the point
is that every Car of whatever kind (in your program's view of the
world) has some kind of Engine.
It would not be correct to say "A Car *is* an Engine." It would
be correct to say "A Car *has* an Engine." If you see a need to
capture the fact in your program, it might also be correct to say
"An Engine *belongs to* a Car."
Note that these "is a" and "has a" and "belongs to a" relations
(and others) are not Immutable Facts About The Universe. Your program
works with a model, an abstraction of those features of reality that
you care about, and you may or may not give a rat's patootie about the
kind of Engine in a Car: You're a traffic cop, and all you need to know
is that the Car has just run a red light, using a source of power that
you care less than nothing about. But then again, maybe you're an
auto mechanic and vitally concerned not only with the kind of Engine
in the Car, but whether its serial number is or is not part of the
manufacturer's safety recall program. The features and relations you
decide to model in your program are governed by the problems you're
trying to solve.
does it have anything to do with the "import" feature that you put in
a program before you "instantiate"(?) the class?
No. "import" is a convenience, that's all. You could write all
the Java you like without ever using "import" -- at the cost of
writing out almost every class name in full. That is, you could
omit that "import java.util.ArrayList;" line altogether, but then
you'd have to write
java.util.ArrayList theList = new java.util.ArrayList();
instead of
ArrayList theList = new ArrayList();
The *only* thing "import" does is allow you to omit the "java.util."
(or "javax.swing." or whatever) when you mention a frequently-used
class. "import" has nothing to do with inheritance, or composition,
or the price of tea in China.
Thanks for anyone willing to help...I am trying to learn to code so,
hopefully, I can do something good for the world with it...but I think
I may be a good candidate for the slow bus when it comes to java...
Don't give up. I came to Java after forty-odd years of writing
in various other languages, and even with my vast (or half-vast)
experience I found there was a period where I simply didn't "get it."
But stick with it, and things will jell rather rapidly: The fog will
crystallize (that makes it snow, right?) and the air will clear. I
think you'll find that the "hump" for Java comes sooner rather than
later; Java is a lot less arcane than some other languages you'll
encounter.
--
Eric Sosman
esosman@ieee-dot-org.invalid