* Interface specification in Ada
@ 2008-06-11 12:46 Dennis Hoppe
2008-06-11 13:04 ` christoph.grein
0 siblings, 1 reply; 6+ messages in thread
From: Dennis Hoppe @ 2008-06-11 12:46 UTC (permalink / raw)
Hi,
my preferred programming language is Java and I'm used to declare in an
interface some common methods, that all subclasses have to implement.
For example:
interface Bicycle {
void changeCadence(int newValue);
void changeGear(int newValue);
void speedUp(int increment);
void applyBrakes(int decrement);
}
class RacingBicycle implements Bicycle {
// remainder of this class implemented as before
}
If I accidentially implement RacingBicycle without providing the four
methods mentioned above, the compiler would draw attention to this
situation.
In Ada, i found the keyword "interface" only in the context of multiple
inheritance. The usage would be:
package Bicycle is
type Object is interface;
procedure changeCadence (newValue : in Integer) is abstract;
procedure changeGear (newValue : in Integer) is abstract;
procedure speedUp (increment : in Integer) is abstract;
procedure applyBrakes (decrement : in Integer) is abstract;
end Bicycle;
with Bicycle;
package RacingBicycle is
type Object is new Bicycle.Object with null record;
-- omitted needed procedures to raise an error
end RacingBicycle;
Unfortunately, the build process runs through without any errors. In
this case, I want the compiler to notify me about missing procedure
implementations, because they are declared abstract in the interface.
I think, I missed something in the hierarchy, but I don't see it.
Thank you in advance,
Dennis Hoppe
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Interface specification in Ada
2008-06-11 12:46 Interface specification in Ada Dennis Hoppe
@ 2008-06-11 13:04 ` christoph.grein
2008-06-11 15:02 ` Georg Bauhaus
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: christoph.grein @ 2008-06-11 13:04 UTC (permalink / raw)
You missed the "this" parameter, which is implicit in Java, but
explicit in Ada:
package Bicycle is
type Object is interface;
procedure changeCadence (Ob: in out Object; newValue : in Integer)
is abstract;
etc.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Interface specification in Ada
2008-06-11 13:04 ` christoph.grein
@ 2008-06-11 15:02 ` Georg Bauhaus
2008-06-11 16:34 ` Robert A Duff
2008-06-11 21:23 ` Dennis Hoppe
2 siblings, 0 replies; 6+ messages in thread
From: Georg Bauhaus @ 2008-06-11 15:02 UTC (permalink / raw)
christoph.grein@eurocopter.com schrieb:
> You missed the "this" parameter, which is implicit in Java, but
> explicit in Ada:
>
> package Bicycle is
> type Object is interface;
>
> procedure changeCadence (Ob: in out Object; newValue : in Integer)
> is abstract;
And in Ada 2005 the "this" parameter can be suitably
named, and when used, it can be written just like in
Java,
Peugeot: Bicyle.Object;
Peugeot.changeCadence(27);
Incidentally, I'd suggest you consider defining distict integer
types that reflect gears etc. By doing so you can have the
compiler check that a cadence number is not inadvertently
used as a gear number. E.g.,
type Gear is range 1 .. 21;
...
procedure changeGear
(The_Bike: in out Object; newValue : in Gear) is abstract;
or
type Gear
(Front_Wheel: Wheel_Number;
Rear_Wheel: Wheel_Number)
is private;
and so on.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Interface specification in Ada
2008-06-11 13:04 ` christoph.grein
2008-06-11 15:02 ` Georg Bauhaus
@ 2008-06-11 16:34 ` Robert A Duff
2008-06-11 21:23 ` Dennis Hoppe
2 siblings, 0 replies; 6+ messages in thread
From: Robert A Duff @ 2008-06-11 16:34 UTC (permalink / raw)
christoph.grein@eurocopter.com writes:
> You missed the "this" parameter, which is implicit in Java, but
> explicit in Ada:
>
> package Bicycle is
> � type Object is interface;
>
> � procedure changeCadence (Ob: in out Object; newValue : in Integer)
> is abstract;
Also, it's a good idea to use the "overriding" keyword.
- Bob
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Interface specification in Ada
2008-06-11 13:04 ` christoph.grein
2008-06-11 15:02 ` Georg Bauhaus
2008-06-11 16:34 ` Robert A Duff
@ 2008-06-11 21:23 ` Dennis Hoppe
2008-06-12 8:37 ` Georg Bauhaus
2 siblings, 1 reply; 6+ messages in thread
From: Dennis Hoppe @ 2008-06-11 21:23 UTC (permalink / raw)
Hello Christoph, Georg and Robert,
thank you for your advices. Indeed Java relieves me of state "this".
christoph.grein@eurocopter.com wrote:
> You missed the "this" parameter, which is implicit in Java, but
> explicit in Ada:
>
> package Bicycle is
> type Object is interface;
>
> procedure changeCadence (Ob: in out Object; newValue : in Integer)
> is abstract;
>
> etc.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Interface specification in Ada
2008-06-11 21:23 ` Dennis Hoppe
@ 2008-06-12 8:37 ` Georg Bauhaus
0 siblings, 0 replies; 6+ messages in thread
From: Georg Bauhaus @ 2008-06-12 8:37 UTC (permalink / raw)
Dennis Hoppe wrote:
> Indeed Java relieves me of state "this".
When I started writing Java many years ago, I too thought that
like in the Java books, when I want to name an object's
component it is not neccessary to refer to the object.
So don't do that, leave out "this".
But now I find myself writing "this.a" and "this.b" all the
time, to make sure I can easily see what "a" actually stands
for: does it name a component or does it name a method parameter
or local variable? With "this" there is no question. There is
almost never a question in Ada because you always name the
object in some way.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-06-12 8:37 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-06-11 12:46 Interface specification in Ada Dennis Hoppe
2008-06-11 13:04 ` christoph.grein
2008-06-11 15:02 ` Georg Bauhaus
2008-06-11 16:34 ` Robert A Duff
2008-06-11 21:23 ` Dennis Hoppe
2008-06-12 8:37 ` Georg Bauhaus
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox