comp.lang.ada
 help / color / mirror / Atom feed
From: jgv@swl.msd.ray.com (John Volan)
Subject: Re: Mut. Recurs. in Ada9X w/o Breaking Encaps.? (LONG)
Date: Sat, 1 Oct 1994 02:11:00 GMT
Date: 1994-10-01T02:11:00+00:00	[thread overview]
Message-ID: <1994Oct1.021100.11030@swlvx2.msd.ray.com> (raw)
In-Reply-To: 36i4fb$hsn@network.ucsd.edu

mbk@inls1.ucsd.edu (Matt Kennel) writes:

>How about this kind solution?  I'm going to have to write in ersatz
>Eiffel/Sather:


Ah, you beat me to it, Matt!  Or did my post get out first?  Anyway...


>class TWO_WAY_RELATION{T1,T2} is
>      private map_1_to_2:MAP{T1,T2}; -- MAP{T1,T2} is a hash table
>			             -- data structure that finds T2's given
>				     -- T1's as keys.
>      private map_2_to_1:MAP{T2,T1};
>
>      create is
>	map_1_to_2 := #MAP{T1,T2};
>	map_2_to_1 := #MAP{T1,T2}; end;
>
>      add_pair(x:T1,y:T2) is
>	 map_1_to_2.insert(x,y);
>	 map_2_to_1.insert(y,x);
>      end;
>
>      find_one_given_two(y:T2):T1 is
>	return map_2_to_1.find(y); end;
>
>      find_one_given_two(x:T1):T2 is
>	return map_1_to_2.find(x); end;
>
>end; -- class TWO_WAY_RELATION


Absolutely right.  Ada can certainly do that too, with generic packages.


>class EMPLOYEE is
>	private shared mapper:TWO_WAY_RELATION{EMPLOYEE,OFFICE};
>		-- shared so all instances access the same object
>
>	find_my_office : OFFICE is
                         ^^^^^^

Ah, but you see, this is precisely my point.  You are in the midst of writing
the interface (and implementation -- Eiffel does it all at once) of class
EMPLOYEE.  Class OFFICE has not yet been written!  I'll assume that this truly 
works in Eiffel and that these three classes are three separate compilation
units, not just one file.  If so, then Eiffel is able to manage the 
Identity/Interface/Implementation Trichotomy I talked about a couple posts ago.

 
>		mapper.find_two_given_one(self); end;
>
>	set_my_office(o:OFFICE) is
>		mapper.add_pair(self,o); end;
>
>end; -- EMPLOYEE
>
>class OFFICE is
>	private shared mapper:TWO_WAY_RELATION{EMPLOYEE,OFFICE}
>		-- shared so all instances access the same object
>
>	find_my_employee : OFFICE is
>		mapper.find_one_given_two(self); end;
>
>	set_my_employee(e:EMPLOYEE) is
>		mapper.add_pair(e,self); end;
>end; -- OFFICE
>
>---
>
>Now, both Office and Employee present interfaces that can find
>and set each one's counterpart.  Neither knows how to do this
>except through the 'mapper' object, which presents a clean interface
>for managing pairs.
>
>Comments?


If this works, it's not because the mapper object did it for them.  It's because
Eiffel can deal with two classes that are mutually dependent even in their
interfaces!  (Matt, can you or some other Eiffel person confirm this?)

Well, Ada folks, if this works ... need I say more?


>--
>-Matt Kennel  		mbk@inls1.ucsd.edu
>-Institute for Nonlinear Science, University of California, San Diego
>-*** AD: Archive for nonlinear dynamics papers & programs: FTP to
>-***     lyapunov.ucsd.edu, username "anonymous".

--John Volan

--------------------------------------------------------------------------------
--  Me : Person := (Name                => "John Volan",
--                  Company             => "Raytheon Missile Systems Division",
--                  E_Mail_Address      => "jgv@swl.msd.ray.com",
--                  Affiliation         => "Enthusiastic member of Team Ada!",
--                  Humorous_Disclaimer => "These opinions are undefined " &
--                                         "by my employer and therefore " &
--                                         "any use of them would be "     &
--                                         "totally erroneous.");
--------------------------------------------------------------------------------




      reply	other threads:[~1994-10-01  2:11 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1994-09-27 16:52 Mut. Recurs. in Ada9X w/o Breaking Encaps.? (LONG) John Volan
1994-09-27 18:48 ` Mark A Biggar
1994-09-29  1:46   ` John Volan
1994-09-29 13:57     ` Tucker Taft
1994-09-29 17:20       ` Bjarne Stroustrup <9758-26353> 0112760
1994-09-30  1:38         ` Tucker Taft
1994-09-30 12:33           ` Bjarne Stroustrup <9758-26353> 0112760
1994-09-29 18:37       ` John Volan
1994-09-29 19:34         ` David Weller
1994-09-30 22:13           ` John Volan
1994-10-02  3:31             ` Andrew Lees
1994-09-30  1:47         ` Tucker Taft
1994-09-30 13:30           ` John Volan
1994-09-29 18:10     ` R. William Beckwith
1994-10-03  0:33     ` Cyrille Comar
1994-09-28 14:01 ` Norman H. Cohen
1994-09-29  2:12   ` John Volan
1994-09-29 14:01     ` Tucker Taft
1994-09-29 18:37     ` Norman H. Cohen
1994-09-29  9:48   ` Magnus Kempe
1994-09-29 13:10     ` Magnus Kempe
1994-09-29 18:05       ` Tucker Taft
1994-09-30 10:20         ` Mut. Recurs. in Ada9X w/o Breaking Encaps.? Magnus Kempe
1994-09-30 13:22           ` Tucker Taft
1994-10-01  1:24       ` Mut. Recurs. in Ada9X w/o Breaking Encaps.? (LONG) Adam Beneschan
1994-10-01 12:01         ` Magnus Kempe
1994-10-01 18:43         ` Mark A Biggar
1994-10-02 16:41         ` John Volan
1994-10-02 23:33           ` Matt Kennel
1994-10-03  8:07           ` Mut. Recurs. in Ada9X w/o Breaking Encaps.? Magnus Kempe
1994-10-03 12:14           ` Mut. Recurs. in Ada9X w/o Breaking Encaps.? (LONG) Robert I. Eachus
1994-10-04  2:12             ` R. William Beckwith
1994-10-04 16:00             ` John Volan
1994-10-05 11:42               ` Robert I. Eachus
1994-10-05 21:09               ` Matt Kennel
1994-10-03 20:29           ` Harry Koehnemann
1994-09-29 13:35     ` John Volan
1994-09-30 20:27       ` Norman H. Cohen
1994-10-01  1:47         ` John Volan
1994-10-01 20:44           ` Tucker Taft
1994-10-03 11:29           ` Robert I. Eachus
1994-09-30 22:46       ` Matt Kennel
1994-10-01  2:11         ` John Volan [this message]
replies disabled

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