comp.lang.ada
 help / color / mirror / Atom feed
From: mbk@inls1.ucsd.edu (Matt Kennel)
Subject: Re: Mut. Recurs. in Ada9X w/o Breaking Encaps.? (LONG)
Date: 30 Sep 1994 22:46:03 GMT
Date: 1994-09-30T22:46:03+00:00	[thread overview]
Message-ID: <36i4fb$hsn@network.ucsd.edu> (raw)
In-Reply-To: 1994Sep29.133526.2134@swlvx2.msd.ray.com

John Volan (jgv@swl.msd.ray.com) wrote:
: Not true.  The premise of my original question was that the binary association
: between Employee and Office is a public feature fully visible to their
: clients -- and they could even include each other as clients!  Maybe the
: *implementation* of this binary association is strictly internal to the
: abstraction (I agree that it should be), but the *existence* of this binary
: association should be a visible part of this abstraction.  In other words,
: the interface to the Employee class should include some subprogram(s) that
: allow(s) a client to fetch the identity of (a pointer to) the associated Office.
: Likewise the interface to the Office class should include some subprogram(s)
: that allow(s) a client to fetch the identity of (a pointer to) the associated
: Employee.  And the interface to both classes should include some subprogram(s)
: that allow a client to establish an association between a given Office and a
: given Employee, in such a way as to always guarantee the following invariant
: assertion:

: 	For any given Employee "E" and Office "O",
: 	E occupies O if and only if O is occupied by E.


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

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

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

	find_my_office : OFFICE is
		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?

--
-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".



  parent reply	other threads:[~1994-09-30 22:46 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 [this message]
1994-10-01  2:11         ` John Volan
replies disabled

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