From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Design of cross referring types/classes and proper usage of containers Date: Wed, 5 Aug 2015 09:37:33 +0200 Organization: cbb software GmbH Message-ID: References: <12wxvkghwgpw3.k4qf1rqnppjb$.dlg@40tude.net> <8b424e66-337a-4943-91d1-e421312b5c95@googlegroups.com> <186o8cox1jqwa.yahqsx8p0k84$.dlg@40tude.net> <3341271b-4926-40cb-a9aa-660522d56f24@googlegroups.com> Reply-To: mailbox@dmitry-kazakov.de NNTP-Posting-Host: enOx0b+nfqkc2k+TNpOejg.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: 40tude_Dialog/2.0.15.1 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:27362 Date: 2015-08-05T09:37:33+02:00 List-Id: On Tue, 4 Aug 2015 12:00:28 -0700 (PDT), Serge Robyns wrote: > Given static (immutable data) one one hand and dynamic data (changed > during the execution) on the other hand; stored in various containers. > What is actually the best approach? Shall I Storing the full element of > objects or references created through new T_xyz? That depends on the semantics of mutators. If the semantics is referential, e.g. you change the object in one place and all logical references get aware of the change, the only way (that does not involve global variables and distributed overhead) is having physical references. Things like MVC require referential semantics. > Shall I Storing the full element of > objects or references created through new T_xyz? You could have a constructing function that hides ugly allocator. E.g. when using strong references you might have: function Create (...) return Handle; which internally allocates some private limited object the tagged Handle points to. Handle can be copied around and stored into a container. [*] > If I want to use an access variables in the first method, do I need to > pass an aliased type? Aliased objects, yes. However some types have only aliased instances. ---------------- * Yet another possible reason against using aggregation is that you cannot put limited members into non-limited records, for obvious reasons. But a handle is non-limited. E.g. in GtkAda the widget type is non-limited. The effect is that you cannot put a task or a protected object or a limited container into a widget. In Ada "limitness" is transitive upon inheritance. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de