comp.lang.ada
 help / color / mirror / Atom feed
From: jsa@organon.com (Jon S Anthony)
Subject: Re: Real OO
Date: 1996/04/30
Date: 1996-04-30T00:00:00+00:00	[thread overview]
Message-ID: <JSA.96Apr29202942@organon.com> (raw)
In-Reply-To: DqAyLG.D47@assip.csasyd.oz


In article <DqAyLG.D47@assip.csasyd.oz> donh@syd.csa.com.au (Don Harrison) writes:

> :>a) a type has been redefined to a non-conformant type, or
> :>b) a routine has been made inaccessible due to a change in it's export status.
> :>
> :>At first sight, it seems silly to permit such things if they can
> :>cause problems with polymorphism but there is a worthy motivation for
> :>providing such flexibility:
> :>
> :>allowing reuse of legacy code that does not exactly fit your requirements.
> :^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> :I don't quite follow this.  It does not seem to have much of anything
> :to do with the problem of system validity checks.  I suppose you can
> :claim that overiding export policies and making covariant routine
> :signatures (I think you mean conforming, not non-conforming) is
> :is necessary to the emphasized goal, but I don't see it.
>
> Yes, I was wrong. It should be conforming signatures, as you say. (I
> was trying to avoid looking it up). A good example illustrating both
> a) and b) is in ETL, 22.6 - Notes on the type policy.
>
>[Eiffel example snipped]
>
> :  This goal is
> :trivial to achieve in Ada, do in large part to separation of
> :specifications (interfaces) and implementations (yeah, that old
> :argument).  Add to this separation of interface and implementation
> :inheritance, and these problems disappear.
> 
> Can you explain how these avoid the problem?

First, this is a really bad design (even for an example) as it
violates any of the (several) reasonable definitions of is-a
semantics.  Second, this example has nothing to do with "legacy" code
or reuse (which is what you claimed was important and I was refering
to).  But, let's take it at face value.  Neither the a) no b) case is
a problem - not even an issue - in Ada.  This is mainly due to the
separation of specific and classwide types.

The example in Ada:

package Drivers is
    type Driver is tagged private;
...
end Drivers;

package Drivers.Cars is
    type Car_Driver is new Driver with private;
...
end Drivers.Cars;

package Drivers.Trucks is
    type Truck_Driver is new Driver with private;
...
end Drivers.Trucks;



with Drivers;  use Drivers;
package Vehicles is
    type Vehicle is tagged private;

    procedure Register_Driver (V: Vehicle; D: Driver);
    procedure Renew_Rego_By_Mail (V: Vehicle);
...
end Vehicles;

with Drivers.Cars; use Drivers.Cars;
package Vehicles.Cars is
    type Car is new Vehicle with private;

    procedure Register_Driver (V: Vehicle; D: Car_Driver);
...
end Vehicles.Cars;

with Drivers.Trucks; use Drivers.Trucks;
package Vehicles.Trucks is
    type Truck is new Vehicle with private;

    procedure Register_Driver (T: Truck; D: Truck_Driver);
    procedure Renew_Rego_By_Inspection(T: Truck);
...
end Vehicles.Trucks;


-- In a client somewhere
--
    D: Driver;
    Cd: Car_Driver;
    V: Vehicle;
    T: Truck;
...
    -- Option 1.
    --
    D := Cd; -- Illegal, compile time error
    V := T;  -- Illegal, compile time error

    -- Option 2.
    --
    D := Driver(Cd); -- OK, convert toward root
    V := Vehicle(T); -- OK, convert toward root
    Register_Driver(V, D); -- just fine and no dispatch needed

    -- Option 3.
    --
    Register_Driver(Vehicle'Class(T),Cd); -- Compile error, no primitive ops

    -- Option 4.
    --
    Register_Driver(Truck'Class(T), Cd);  -- Compile error, no primitive ops

    -- Option 5.
    --
    Register_Driver(Car'Class(T), Cd);    -- Compile error, trucks not in
                                          -- Car'Class

    -- Option 6.
    --
    Register_Driver(Vehicle'Class(V), D); -- Fine
    Register_Driver(Vehicle'Class(T), D); -- Fine (calls inherited op!!)


As you can see, you can't get the invalid system stuff in the Ada model.
In particular, you should note that the Truck type has _two_ primitive
operations Register_Driver:

  procedure Register_Driver(V: Truck; D: Driver); -- Inherited from Vehicle
  procedure Register_Driver(V: Truck; D: Truck_Driver); -- *New* primitive op


WRT b), note that in Ada, you cannot remove operations from derived
types - they can always be used in any context where a parent can be
used.  To achieve this sort of effect, you would need to define Truck
differently:

package Vehicles.Trucks is

    type Truck is tagged private; -- Interface indicates new type

    procedure Register_Driver (T: Truck; D: Truck_Driver);
    procedure Renew_Rego_By_Inspection(T: Truck);
...
end Vehicles.Trucks;

Lastly, if you really wanted to do an a) like thing, a _client_ could
define the exact semantics of it so that it "works" (at least to the
extent that the client i) knowingly forced the issue, ii) had to
supply semantics that did not violate the rules, and iii) knows what
he's doing...)  For example,

-- in client...
--

procedure Register_Driver (V: Vehicle'Class; D: Driver'Class) is
--
-- Eats anything...
...
begin
...
    if V in Truck'Class and not D in Truck_Driver'Class then
        --
        -- Do something "appropriate"... Hope I know what I'm doing!
        ...
    elsif V in Car'Class and not D in Car_Driver'Class then
        --
        -- Similar special sort of stuff...
    else
        --
        Register_Driver(V, Driver(D));
    end if;
...
end Register_Driver;


> :> for runtime. (Yes, I know that few, if any, Eiffel vendors implement
> :> it). Don't know what you mean here.
> :
> :I mean simply that invalid Eiffel systems are knowingly accepted by
> :these implementations.
> 
> Correct.

Note that this does _not_ happen in the Ada case and you loose no
"flexibility" or what-have-you.  In fact the Ada model seems to be
significantly more flexible (this is not surprising as you have more
semantic information to work with!)


> :> :  And the reason it is a problem
> :> :is that Eiffel source does not have as much semantic information in it
> :> :in this area.
> :> 
> :> What might that be?
> :
> :Specifically, the distinction and use of the difference between class
> :and type.  The funny thing is, all this brouhaha about system validity
> :concerns this distinction and an attempt to try to separate them
> :again.
> 
> No. This is not why. It's due to the distinction between static and dynamic
> types. 

Hmmm, Meyer seems to disagree:

ETL 22.4 (System Level Validity)

"...but with generic derivation, expansion and anchored types we will
 need to reintroduce the distinction between types and classes."


> : Meyer's "dynamic type set" is pretty much an Ada class and his
> :"dynamic class set" is pretty much a class-wide type.
>
> No. There is not really an equivalent concept in Ada because it does not 
> support generic tagged types (as far as I'm aware) or anchored types.

Sure it does, and as for anchored - they are _subsumed_ by classwide types


> The dynamic type set is the set of all possible dynamic types whereas the 
> dynamic class set is the set of all classes these are derived from.
> A generic class in the dynamic class set becomes numerous types in the 
> dynamic type set.

I didn't say they were _identical_ concepts, I was trying to point out
some similarity so that you might notice that basically, in Ada, the
two concepts are made explicit in the notion of classwide types.  For
a given specific type T, T'Class is defined at the set of types rooted
at T in a type derivation tree.  If we have an object

X : T'Class := some_value;

X can take on any value of any type in T'Class (including T'Class).
This also holds in the case of generic formals.  That pretty much
covers all that can be said about dynamic type/class sets.  It's
really very nice to be able to explicitly have control over how,
where, and when these things are used.


/Jon
-- 
Jon Anthony
Organon Motives, Inc.
1 Williston Road, Suite 4
Belmont, MA 02178

617.484.3383
jsa@organon.com





  parent reply	other threads:[~1996-04-30  0:00 UTC|newest]

Thread overview: 218+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4id031$cf9@dayuc.dayton.saic.com>
1996-03-18  0:00 ` Real OO Norman H. Cohen
1996-03-18  0:00   ` The Right Reverend Colin James III
1996-03-19  0:00     ` Norman H. Cohen
1996-03-20  0:00       ` Norman Cohen giving IBM a bad name The Right Reverend Colin James III
1996-03-20  0:00         ` Real OO Dale Stanbrough
1996-03-21  0:00           ` Richard Pitre
1996-03-20  0:00         ` Norman Cohen giving IBM a bad name Brian & Karen Bell
1996-03-20  0:00         ` Colin James III giving humans a bad name (was Re: Norman Cohen giving IBM a bad name) David Emery
1996-03-20  0:00           ` Mark R Okern - F95
1996-03-20  0:00             ` Real OO John G. Volan
1996-03-21  0:00               ` Scott Leschke
1996-03-21  0:00                 ` Robert A Duff
1996-03-21  0:00                 ` Norman H. Cohen
1996-03-22  0:00                 ` Don Harrison
1996-03-21  0:00             ` Colin James III giving humans a bad name (was Re: Norman Cohen giving IBM a bad name) Richard A. O'Keefe
1996-03-21  0:00               ` Robert Dewar
1996-03-20  0:00         ` Norman Cohen giving IBM a bad name Dave Retherford
1996-03-21  0:00         ` Kent Mitchell
1996-03-22  0:00         ` Robert Munck
1996-03-22  0:00           ` Mark Brennan
1996-03-22  0:00             ` David Curry
1996-03-23  0:00         ` Tom Reid
1996-03-21  0:00       ` Real OO Don Harrison
1996-03-21  0:00   ` Colin James III giving humans a bad name (was Re: Norman Cohen giving IBM a bad name) Ulrich Windl
1996-03-20  0:00 ` Real OO Don Harrison
1996-03-22  0:00 ` Don Harrison
1996-03-22  0:00   ` Norman H. Cohen
1996-03-26  0:00     ` Don Harrison
1996-03-26  0:00       ` Norman H. Cohen
1996-03-29  0:00         ` Don Harrison
1996-03-27  0:00       ` Thomas Beale
1996-03-28  0:00         ` Don Harrison
1996-03-22  0:00   ` Norman H. Cohen
1996-03-27  0:00     ` Don Harrison
1996-03-27  0:00       ` Norman H. Cohen
1996-03-28  0:00         ` Jacob Gore
1996-04-04  0:00         ` Don Harrison
1996-04-04  0:00           ` Jon S Anthony
1996-04-04  0:00           ` Tucker Taft
1996-04-04  0:00             ` Tucker Taft
1996-04-12  0:00               ` Don Harrison
1996-04-12  0:00             ` Don Harrison
1996-04-15  0:00               ` Robert I. Eachus
1996-04-19  0:00                 ` Don Harrison
1996-04-19  0:00                   ` Matt Kennel
1996-04-20  0:00                     ` Bob Hathaway
1996-04-23  0:00                     ` Don Harrison
1996-04-04  0:00           ` Laurent Guerby
1996-04-04  0:00           ` Robb Nebbe
1996-03-23  0:00   ` Joachim Durchholz
1996-03-26  0:00     ` Norman H. Cohen
1996-04-04  0:00       ` Don Harrison
1996-04-04  0:00         ` Jon S Anthony
1996-04-12  0:00           ` Don Harrison
1996-04-17  0:00             ` Jon S Anthony
1996-04-19  0:00               ` Don Harrison
1996-04-19  0:00                 ` Jon S Anthony
1996-04-23  0:00                   ` Don Harrison
1996-04-24  0:00                     ` Don Harrison
1996-04-29  0:00                     ` Jon S Anthony
1996-04-30  0:00                       ` Robert Dewar
1996-04-30  0:00                         ` Robert A Duff
1996-04-30  0:00                           ` Amit Patel
1996-04-30  0:00                           ` Robert Dewar
1996-05-01  0:00                             ` Richard Bielak
1996-05-01  0:00                           ` Adam Beneschan
1996-05-02  0:00                             ` Ell
1996-04-30  0:00                         ` Amit Patel
1996-04-30  0:00                           ` Robert A Duff
1996-05-07  0:00                             ` Amit Patel
1996-05-01  0:00                           ` Norman H. Cohen
1996-05-01  0:00                             ` Colin James III (The Rt Rev'd)
1996-05-07  0:00                             ` Amit Patel
1996-05-01  0:00                         ` Don Harrison
1996-05-01  0:00                           ` Don Harrison
1996-05-02  0:00                             ` Robert A Duff
1996-05-03  0:00                               ` Don Harrison
1996-05-03  0:00                                 ` Robert A Duff
1996-05-06  0:00                                   ` Don Harrison
1996-05-06  0:00                                     ` Robb Nebbe
1996-05-06  0:00                                     ` Robert A Duff
1996-05-01  0:00                           ` David Hopwood
1996-05-03  0:00                             ` Don Harrison
1996-05-02  0:00                           ` Robert A Duff
1996-05-03  0:00                             ` Don Harrison
1996-05-10  0:00                             ` Don Harrison
1996-05-01  0:00                         ` AdaWorks
1996-05-08  0:00                         ` Joachim Durchholz
1996-05-03  0:00                       ` Don Harrison
1996-05-03  0:00                         ` Dave Fitch
1996-05-07  0:00                         ` Jon S Anthony
1996-04-30  0:00                     ` Joachim Durchholz
1996-04-30  0:00                     ` Jon S Anthony [this message]
1996-05-01  0:00                       ` Matt Kennel
1996-05-03  0:00                         ` Don Harrison
1996-05-02  0:00                       ` Don Harrison
1996-05-02  0:00                         ` Robert I. Eachus
1996-05-02  0:00                         ` Jon S Anthony
1996-05-03  0:00                           ` Don Harrison
1996-05-06  0:00                             ` Jon S Anthony
1996-05-06  0:00                         ` Jon S Anthony
1996-05-06  0:00                       ` Don Harrison
1996-05-06  0:00                         ` Don Harrison
1996-05-07  0:00                         ` Jon S Anthony
1996-05-13  0:00                           ` Don Harrison
1996-05-09  0:00                         ` Jon S Anthony
1996-04-19  0:00                 ` Multiple Dispatch in Ada 95 (Was Re: Real OO) Brian Rogoff
1996-04-21  0:00                   ` Brian Rogoff
1996-04-19  0:00                 ` Robert I. Eachus
1996-04-20  0:00                 ` Brian Rogoff
1996-04-21  0:00                   ` Robert A Duff
1996-04-24  0:00                 ` Real OO Joachim Durchholz
1996-05-01  0:00                   ` Matt Kennel
1996-05-02  0:00                     ` Don Harrison
1996-05-07  0:00                   ` Joachim Durchholz
1996-05-08  0:00                   ` Jon S Anthony
1996-05-09  0:00                   ` Robert I. Eachus
1996-04-30  0:00                 ` Jon S Anthony
1996-05-03  0:00                   ` Don Harrison
1996-05-07  0:00                     ` Jon S Anthony
1996-04-30  0:00                 ` Joachim Durchholz
1996-05-08  0:00                   ` Joachim Durchholz
1996-05-10  0:00                   ` Jon S Anthony
1996-05-02  0:00                 ` Jon S Anthony
1996-05-06  0:00                 ` Jon S Anthony
1996-04-08  0:00         ` Norman H. Cohen
1996-04-08  0:00           ` Robert A Duff
1996-04-09  0:00             ` Norman H. Cohen
1996-04-10  0:00           ` Don Harrison
1996-04-11  0:00           ` Jacob Gore
1996-04-12  0:00           ` Don Harrison
1996-04-12  0:00             ` Jon S Anthony
1996-04-13  0:00               ` Robert A Duff
1996-04-12  0:00             ` Matt Kennel
1996-04-15  0:00               ` Don Harrison
1996-04-16  0:00             ` Jon S Anthony
1996-04-12  0:00           ` Don Harrison
1996-04-12  0:00             ` Jacob Gore
1996-04-16  0:00               ` Don Harrison
1996-04-09  0:00         ` Jon S Anthony
1996-04-09  0:00         ` Valery CROIZIER
1996-04-09  0:00       ` Joachim Durchholz
1996-05-02  0:00       ` Joachim Durchholz
1996-05-05  0:00         ` Robert A Duff
1996-05-05  0:00           ` Robert Dewar
1996-05-06  0:00         ` Norman H. Cohen
1996-05-07  0:00           ` Don Harrison
1996-05-07  0:00             ` Jon S Anthony
1996-05-08  0:00               ` Don Harrison
1996-05-08  0:00             ` Norman H. Cohen
1996-05-08  0:00               ` Robert A Duff
1996-05-10  0:00                 ` Matt Kennel
1996-05-10  0:00                   ` Robert A Duff
1996-05-14  0:00                     ` Matt Kennel
1996-05-15  0:00                       ` Robert A Duff
1996-05-07  0:00           ` Ada terminology (was Re: Real OO) David Hopwood
1996-05-07  0:00             ` The Right Reverend Colin James III
1996-05-07  0:00             ` Dave Jones
1996-05-07  0:00             ` Tucker Taft
1996-05-07  0:00               ` The Right Reverend Colin James III
1996-05-08  0:00               ` bill.williams
1996-05-07  0:00         ` Real OO Amit Patel
1996-05-07  0:00           ` The Right Reverend Colin James III
1996-05-08  0:00           ` Don Harrison
1996-05-08  0:00             ` Juergen Schlegelmilch
     [not found]               ` <Dr4538.D27@assip.csasyd.oz>
1996-05-09  0:00                 ` Richard Riehle
1996-05-10  0:00                   ` Tucker Taft
1996-05-13  0:00                     ` Don Harrison
1996-05-13  0:00                       ` Tucker Taft
1996-05-14  0:00                         ` Roger Browne
1996-05-14  0:00                         ` Joachim Durchholz
1996-05-14  0:00                         ` Don Harrison
1996-05-14  0:00                           ` Steve Tynor
1996-05-14  0:00                             ` Robert A Duff
1996-05-15  0:00                             ` Don Harrison
1996-05-14  0:00                           ` Robert A Duff
1996-05-15  0:00                           ` Steve Tynor
1996-05-15  0:00                             ` Robert A Duff
1996-05-16  0:00                           ` James McKim
1996-05-18  0:00                             ` Matt Kennel
1996-05-20  0:00                               ` James McKim
1996-05-22  0:00                                 ` Matt Kennel
1996-05-15  0:00                         ` Steve Tynor
1996-05-15  0:00                         ` Alexander Kjeldaas
1996-05-19  0:00                         ` Piercarlo Grandi
1996-05-14  0:00                   ` James McKim
1996-05-15  0:00                     ` Juergen Schlegelmilch
1996-05-09  0:00                 ` Juergen Schlegelmilch
1996-05-20  0:00               ` Joachim Durchholz
1996-05-07  0:00       ` Joachim Durchholz
1996-05-09  0:00         ` Don Harrison
1996-05-09  0:00           ` Jon S Anthony
1996-05-09  0:00           ` Joachim Durchholz
1996-04-02  0:00     ` Detecting type mismatch at compile time (was Re: Real OO) Robert I. Eachus
1996-04-03  0:00       ` Richard Bielak
1996-04-04  0:00       ` Don Harrison
1996-03-28  0:00   ` Real OO Joachim Durchholz
1996-03-29  0:00     ` Norman H. Cohen
1996-03-30  0:00       ` John G. Volan
1996-03-26  0:00 ` Jon S Anthony
1996-03-29  0:00 ` Joachim Durchholz
1996-04-04  0:00   ` Don Harrison
1996-04-04  0:00     ` Dominique Colnet
1996-04-04  0:00     ` Steve Tynor
1996-04-08  0:00       ` Norman H. Cohen
1996-04-09  0:00         ` Matt Kennel
1996-04-08  0:00     ` Matt Kennel
1996-04-09  0:00       ` Norman H. Cohen
1996-04-09  0:00     ` Robert C. Martin
1996-04-10  0:00     ` J. Kanze
1996-05-02  0:00 Bob Crispen
     [not found] <DoDLr7.JDB@world.std.com>
     [not found] ` <4if7s5$bfk@ra.nrl.navy.mil>
     [not found]   ` <DoDqH4.29v@world.std.com>
1996-03-26  0:00     ` AdaWorks
1996-03-29  0:00   ` Brian Rogoff
     [not found] <4hneps$1238@watnews1.watson.ibm.com>
     [not found] ` <Do3F1K.4xG@assip.csasyd.oz>
     [not found]   ` <4i455s$ijq@watnews1.watson.ibm.com>
1996-03-15  0:00     ` Don Harrison
     [not found]       ` <DoBH80.9u9@world.std.com>
1996-03-15  0:00         ` Mark A Biggar
1996-03-15  0:00         ` Richard Pitre
1996-03-16  0:00     ` Des  Kenny
     [not found] <JSA.96Mar13143956@organon.com>
1996-03-15  0:00 ` Don Harrison
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox