comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Self pointer in limited record
Date: Thu, 6 Sep 2007 14:25:50 +0200
Date: 2007-09-06T14:25:18+02:00	[thread overview]
Message-ID: <13vaef9aa6hn8$.13mrgusdn917m.dlg@40tude.net> (raw)
In-Reply-To: 1189074405.2630.257.camel@kartoffel.vocalweb.de

On Thu, 06 Sep 2007 12:26:45 +0200, Georg Bauhaus wrote:

> On Thu, 2007-09-06 at 09:37 +0200, Dmitry A. Kazakov wrote:
>> On Wed, 05 Sep 2007 23:38:34 +0200, Georg Bauhaus wrote:
>> 
>>> They can avoid surprises and nasty issues because they enforce body
>>> visibility of data objects. Example:
>>> 
>>> <start of declarative part>
>>> 
>>>         package S is
>>>                 type T is limited private;
>>>                 procedure op(x: in out T);
>>>         private
>>>                 type T is limited record
>>>                         null;
>>>                 end record;
>>>         end S;
>> 
>> This is IMO bad design, it should be:
>> 
>> package S is   -- Stateless
>>    type T is limited private;
>>    ...
>> end S;
> 
> IIUC, this will still allow referencing S.T elsewhere.
> And even when S has only subprograms, they are visible to
> other parts of the program.
> But S was intended to be used by some procedure,
> and only by the procedure.

If you are paranoid about treacherous intentions of your colleges, then
make S a private child:

private package Data.S is
   type T(<>) is limited private;
   ...
end Data.S;

>> package Data is -- Stateful
>>    ... -- Operations having an instance of T as a hidden parameter
>> end Data;
>> 
>> with S;
>> package body Data is
>>    Singleton : S.T;
>>    ...
>> end Data;
>> 
>> There is no need to "with" S for anybody else,
> 
> Do you think that "No need to with S" will convince programmers
> to not touch it?

Yes, I do hope they would not do it if I'd ask them, as well as many other
things one could do being inspired by the things declared in System,
Ada.Unchecked_xxx etc.

> When I need to make sure that S is not going
> to be used elsewhere, it needs to be hidden. What are the options?

Safe and consistent design. Consider what is T in your model? Why there has
to be only one instance of? Which meaning has this in terms of the
operations on T? Who knows, you might come to a conclusion that this
constraint is not really necessary or maybe that it is enforced
automatically when T is properly used.

In real-life designs there are usually far more access levels than just
public/private/body with fuzzy boundaries between them. You have to rely on
your design and good will of people working with you.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2007-09-06 12:25 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-04 19:31 Self pointer in limited record Maciej Sobczak
2007-07-05  8:22 ` Dmitry A. Kazakov
2007-07-05 10:35   ` Maciej Sobczak
2007-07-05 11:01     ` Pascal Obry
2007-07-05 11:14     ` Georg Bauhaus
2007-07-05 12:36     ` Dmitry A. Kazakov
2007-08-31 16:47 ` amado.alves
2007-08-31 17:09   ` Pascal Obry
2007-08-31 17:37   ` Adam Beneschan
2007-08-31 18:26   ` Jeffrey R. Carter
2007-08-31 19:33   ` Dmitry A. Kazakov
2007-09-01 13:33     ` Georg Bauhaus
2007-09-01 13:46       ` Dmitry A. Kazakov
2007-09-01 14:15         ` Georg Bauhaus
2007-09-01 16:03           ` Dmitry A. Kazakov
2007-09-01 19:49             ` Georg Bauhaus
2007-09-01 20:09               ` Dmitry A. Kazakov
2007-09-02 21:37                 ` Georg Bauhaus
     [not found]                   ` <re7ei5lc7dzf$.11qtcnh35jmzg$.dlg@40tude.net>
2007-09-03 10:51                     ` Georg Bauhaus
2007-09-03 14:17                       ` Dmitry A. Kazakov
2007-09-03 15:55                         ` Jean-Pierre Rosen
2007-09-03 19:17                           ` Dmitry A. Kazakov
2007-09-03 19:32                             ` Markus E L
2007-09-03 20:14                             ` Georg Bauhaus
2007-09-04  8:24                               ` Dmitry A. Kazakov
2007-09-04  9:36                                 ` Jean-Pierre Rosen
2007-09-04 10:14                                   ` Dmitry A. Kazakov
2007-09-05 10:49                                 ` Georg Bauhaus
2007-09-05 12:04                                   ` Dmitry A. Kazakov
2007-09-05 13:12                                     ` Jean-Pierre Rosen
2007-09-05 15:10                                       ` Dmitry A. Kazakov
2007-09-05 16:25                                         ` Jean-Pierre Rosen
2007-09-05 19:52                                           ` Dmitry A. Kazakov
2007-09-06  7:19                                             ` Jean-Pierre Rosen
2007-09-06  9:28                                               ` Dmitry A. Kazakov
2007-09-06 11:53                                                 ` Jean-Pierre Rosen
2007-09-06 15:35                                                   ` Dmitry A. Kazakov
2007-09-05 18:31                                     ` Georg Bauhaus
2007-09-05 19:52                                       ` Dmitry A. Kazakov
2007-09-05 21:38                                         ` Georg Bauhaus
2007-09-06  7:37                                           ` Dmitry A. Kazakov
2007-09-06 10:26                                             ` Georg Bauhaus
2007-09-06 12:25                                               ` Dmitry A. Kazakov [this message]
2007-09-08  1:27                                               ` Randy Brukardt
2007-09-06  9:14                                         ` Markus E L
2007-09-06  9:48                                           ` Dmitry A. Kazakov
2007-09-04  8:23                             ` Jean-Pierre Rosen
2007-10-31 23:59                           ` adaworks
2007-09-03 20:38                         ` Georg Bauhaus
2007-09-04  8:24                           ` Dmitry A. Kazakov
2007-09-03  7:54             ` Jean-Pierre Rosen
2007-09-01 15:33         ` Markus E L
2007-09-04 14:55           ` Adam Beneschan
2007-09-04 15:09             ` Jean-Pierre Rosen
2007-09-08  1:36               ` Randy Brukardt
2007-09-04 17:31             ` Georg Bauhaus
2007-09-08  1:16     ` Randy Brukardt
2007-09-10 16:27       ` amado.alves
2007-09-10 17:13         ` Adam Beneschan
2007-09-10 19:00         ` Dmitry A. Kazakov
2007-09-11  3:12           ` Randy Brukardt
2007-09-11  9:38             ` Dmitry A. Kazakov
2007-09-12 21:57               ` Randy Brukardt
2007-09-13  8:03                 ` Dmitry A. Kazakov
2007-09-13 21:37                   ` Randy Brukardt
replies disabled

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