ummmm.... I just don't know how else to explain! If using multiple similar classes it can tie them together in a way that:

1.  Helps autocomplete
2. Helps the compiler catch errors in its tracks, so you don't get runtime errors

I can't explain any better than what I've done!  Sorry I can't be more help
ben

Omar Fouad wrote:
Ok, but how does an Interface help in this case?

On Tue, Aug 26, 2008 at 4:10 AM, ben gomez farrell <[EMAIL PROTECTED]>wrote:

Hmmmm, not sure what you're stumbling on - of course all this stuff is a
mouthful, so my point is I could've been unclear in ANYTHING!

Anyway - so typecasting variables -
Lets say you have a variable...in AS3 the compiler needs to know what type
of variable it is.

so var x = 4 will just throw a compiler error if I recall correctly.
What you need to to is: var x:Number = 4;

This way the compiler knows what you're type casting your variable as.

Now - say you don't know what type of object to cast your variable as....
This may come up if you are throwing a bunch of different types of objects
or classes into a variable with the same code.

So you could do var x:Object = whatever or var x:* = whatever.

The problem here is when you assume do really generic things like that, IF
there is a bug, you'll only find out about it at runtime.

Like lets say you had two classes MObjectA.as  and MyObjectB.as.   Let's
also say I'm somewhere in my code, where I need to throw them into the same
variable one after another (it can happen, in like a for loop when you have
a bunch of different objects in an array, and you're looping through)

Anyway, I want to do:

var x = new MyObjectA();
x.doSomething();
x.doSomethingElse();

x = new MyObjectB();
x.doSomething();
x.doSomethingElse();

But that's not quite right....You need to typecast x - but if it's the same
class, you COULD either generically type it with an object: var x:Object or
a wildcard var x:*

But lets say you call a method that isn't there (or you mispelled your
method name).  With such generic typecasting, it'll just compile, and you
won't catch this error until runtime. The compiler will just say "Well, it's
generic, it could be anything - so I'll just compile it, and hope the
programmer knows what they're doing!".

But, if MyObjectA and MyObjectB have a common set of methods, like
doSomething() and doSomethingElse(), I could create and interface with these
two methods, and make MyObject A and B implement these two methods.

Then I can type x as:
var x:IMyObject = new MyObjectA or B()

Now if I'm using something like Flex builder, I'll get full autocomplete
when i start using my variable.  If I misspell a method, or try to use one
that isn't there my COMPILER will complain before I even run it.

So typecasting is just a little more organized and lets you know whats
going on, and interfaces help if you have the above situation.

And I don't know if i'd call it MORE OOP - i'd say it makes use of more
spiffy things that OOP has to offer, but I don't think there really needs to
be a contest on who's programming is more OOP, whatever works for the
situation works for the situation.   It's like saying my backyard is more
outdoors than your because you have a tree, but I have a tree and a bush and
a flower garden.  We both have backyards, but I have more things in mine.
 That's my opinion anyway!

good luck!
ben



Omar Fouad wrote:

Wow... Thanks!
Ben, would you please explain the last part that talks about type casting?
Another Question: I've also read that using interface is more OOP. How?

Cordially

On Tue, Aug 26, 2008 at 2:23 AM, ben gomez farrell <[EMAIL PROTECTED]
wrote:

Hey I don't know what kind of development teams your working with, but
I've
found that on small one off projects done with a small team, they aren't
that important.  It's more of a big team, long term project, lotsa code
type
thing.

You can absolutely go with never using them, but it's a nice thing to
learn, and starts to get useful with AS3 type checking.

So, an interface file is like a contract you are setting up with your
code.
 An interface (and you can see the syntax in your books), consists of
public
variables and functions and their return types.  These functions don't do
anything in the interface itself, that is they don't run.

Where your interfaces get used is when you have a class that "implements"
one of your interfaces.  So lets say you have MyClass extends
MySuperClass
implements IMyInterface. (by convention interface files start with
I....etc,
but of course you don't have to)

So, for your project to even compile (when you implement an interface),
you'd better be damn sure that your "MyClass" has all the functions and
variables YOU defined in IMyInterface
It seems limiting, but, on a large team, you might have a dozen
developers
creating a hundred or so classes that are all supposed to plugin
somewhere
in your main project.  If you create an interface, and make it known that
all developers must implement your interface, you can be sure that your
dozen developers and your hundred classes are going to have the methods
that
YOU need to work in your project.

And then if you make a large scale change to your project - you can just
change the interface - maybe add another method to it that you need for
additional functionality.  If your dozen developers update to the new
interface file, all their code won't compile anymore - and they'll have
to
update to your new methods before they get a compile!

So it's handy on large teams.

I've also found it handy for typecasting in AS3.  Sometimes I might have
2
classes that do sort of the same thing, but not quite. Maybe I have a mix
of
several similar (but not identical) objects in an array, and I want to
loop
through.

So for example: list = [ myClassA, myClassB, myClassC, myClassA,
myClassB,
myClassC, myClassA, myClassB, myClassC ];
Now I loop through my objects, and I want to assign them to like a
temporary variable and perform an action on them.

So.... var temp = list[c];
But what do you type temp...you could do
var temp:* = list[c]

And you could put anything you wanted in the variable.  But we have type
casting in AS3 for a reason!

You could create an interface full of the common methods and variables
uses
by myClass A,B and C, make those classes implement your interface, and
then
do your typecasting as this:

var temp:IMyClasss = list[c];

Then you aren't using the wildcard to type your object AND you'll get
auto-complete for code, and compile time checking of anything you're
trying
to do to your class that isn't supported.

Hope this helps!
ben



Omar Fouad wrote:



This could seem weird...
But what the hell is an interface!!!???????? I've read lots of books and
posts without getting the answer. I bought "Essential AS3" to read about
interfaces and he says that helps for multi inheritance. In other places
I
read that it is a "deal" to ensure that a class has some methods and so
on.
But what is the real benefit that I can come out with using
interfaces????

Maybe that is stupidity or I am not smart enough to get the concept but
believe me... its is been two years now!!

Please Help!!!





_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders






_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders




_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to