From: "J-P. Rosen" <rosen@adalog.fr>
Subject: Re: Preventing type extensions
Date: Wed, 29 Sep 2010 18:47:13 +0200
Date: 2010-09-29T18:47:13+02:00 [thread overview]
Message-ID: <i7vqif$qhv$1@news.eternal-september.org> (raw)
In-Reply-To: <37ae2382-9f7d-4790-be5f-e380b9220d75@s19g2000vbr.googlegroups.com>
Le 24/09/2010 11:27, Cyrille a �crit :
> On Sep 24, 10:39 am, Cyrille <co...@eu.adacore.com> wrote:
>> OK, I kind of supposed you had something like that in mind. Many years
>> ago, we proposed a similar idea in a few papers, See for instancehttp://www.adacore.com/wp-content/uploads/2006/03/Certification_OO_Ad....
>> Another one written by Franco G. is even mentioned in Chelinsky's FAA
>> study on OO (seehttp://www.tc.faa.gov/its/worldpac/techrpt/ar0717.pdf).
>> The study is worth reading by the way... We had more automatic
>> translation in mind at the time but the idea is the same.
>> doing this
Thanks for the pointers, but they seem to be quite close to what I am
suggesting
> Suggesting to do such a transformation manually at the source code
> level as you do is particularly dubious since it is in the category of
> program transformations whose only purpose is to circumvent specific
> verifications.
Not at all, but I may not have clearly explained my line of reasoning.
1) (Most important) I think that a method should really be a "method",
i.e. an abstract operation that is implemented in different ways by
different objects belonging to a class; i.e. all drawable objects have a
"paint" method, but each objet has its own way, its own /method/, of
painting itself. Since this is closely linked to a single member of a
class, there is no reason to redispatch in such a method.
2) There is often a need to provide higher level operations, that are
/not/ methods, but that are generally implemented by a combination of
methods: Move=Erase, change position, Draw. Having these as class-wide
operations rather than redispatching methods guarantees that the same
behaviour is obtained for all members of the class.
3) I propose to enforce this strict separation, with the added benefit
that all dispatching calls are located in class-wide operations, and
thus reduce the coverage effort.
4) (this is the topic of my previous messages) If in some cases there is
a real need for redispatching, it is still possible to follow this
pattern by subcontracting the dispatching to a class-wide operation that
does nothing else. But this should be a rare exception.
There is no question of cheating, or maybe you consider that the
patterns for programming under the Ravenscar profile are a way of
cheating with the restrictions. The idea here is the same: provide a
well defined pattern to ease certification.
In some cases this pattern will make things more difficult? Sure.
Everything is simpler if you don't need certification ;-)
Note that this is quite close to Franco's approach, except that I don't
rely on a specific implementation, thus preserving portability.
[...]
> To conclude about differentiating T and T'Class, the trick you suggest
> here is easily implementable in other OO languages. There is nothing
> magic in creating a wrapper around a given dispatching call and use
> this wrapper at each dispatch point.
The benefit of class-wide operations is that they are easily
recognizable, and therefore my proposed pattern is easily checkable by
tools (read: will appear in AdaControl as soon as I get around to it).
I don't think it would be as easy in other languages to ensure that the
profile is followed.
--
---------------------------------------------------------
J-P. Rosen (rosen@adalog.fr)
Adalog a d�m�nag� / Adalog has moved:
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
next prev parent reply other threads:[~2010-09-29 16:47 UTC|newest]
Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-12 10:18 Preventing type extensions Florian Weimer
2010-09-12 11:59 ` Ludovic Brenta
2010-09-12 12:53 ` Florian Weimer
2010-09-12 21:23 ` Maciej Sobczak
2010-09-13 5:32 ` Florian Weimer
2010-09-13 7:13 ` Dmitry A. Kazakov
2010-09-13 9:19 ` Georg Bauhaus
2010-09-13 9:42 ` Dmitry A. Kazakov
2010-09-13 10:23 ` Niklas Holsti
2010-09-13 12:55 ` Cyrille
2010-09-13 13:55 ` Dmitry A. Kazakov
2010-09-13 21:13 ` J-P. Rosen
2010-09-21 13:57 ` Cyrille
2010-09-21 14:19 ` Dmitry A. Kazakov
2010-09-21 14:44 ` Cyrille
2010-09-21 16:25 ` Dmitry A. Kazakov
2010-09-21 17:11 ` Georg Bauhaus
2010-09-21 18:11 ` Dmitry A. Kazakov
2010-09-23 20:00 ` Simon Wright
2010-09-23 20:49 ` Dmitry A. Kazakov
2010-09-24 9:10 ` Georg Bauhaus
2010-09-24 10:24 ` Dmitry A. Kazakov
2010-09-24 13:30 ` Niklas Holsti
2010-09-24 16:27 ` Dmitry A. Kazakov
2010-09-24 17:47 ` Niklas Holsti
2010-09-24 19:42 ` Dmitry A. Kazakov
2010-09-21 14:32 ` J-P. Rosen
2010-09-21 15:02 ` Cyrille
2010-09-21 15:26 ` J-P. Rosen
2010-09-21 16:18 ` Cyrille
2010-09-22 8:01 ` J-P. Rosen
2010-09-22 17:28 ` Cyrille
2010-09-22 19:30 ` Ludovic Brenta
2010-09-22 19:51 ` Florian Weimer
2010-09-22 20:14 ` Dmitry A. Kazakov
2010-09-22 20:25 ` Florian Weimer
2010-09-22 20:38 ` Dmitry A. Kazakov
2010-09-22 21:25 ` Vinzent Hoefler
2010-09-22 21:20 ` Georg Bauhaus
2010-09-22 20:16 ` Ludovic Brenta
2010-09-22 20:34 ` Florian Weimer
2010-09-22 22:45 ` Britt Snodgrass
2010-09-23 8:02 ` Ludovic Brenta
2010-09-23 16:51 ` Pascal Obry
2010-09-23 18:37 ` Florian Weimer
2010-09-23 18:55 ` Pascal Obry
2010-09-23 20:28 ` Ludovic Brenta
2010-09-24 9:20 ` Ludovic Brenta
2010-09-24 14:49 ` Simon Wright
2010-09-24 15:09 ` Ludovic Brenta
2010-09-24 16:21 ` Robert A Duff
2010-09-25 7:10 ` Pascal Obry
2010-09-25 12:03 ` Brian Drummond
2010-09-24 8:16 ` J-P. Rosen
2010-09-24 8:39 ` Cyrille
2010-09-24 9:27 ` Cyrille
2010-09-29 16:47 ` J-P. Rosen [this message]
2010-09-30 10:08 ` Cyrille
2010-10-05 17:02 ` J-P. Rosen
2010-10-08 7:50 ` Cyrille
2010-10-08 13:58 ` Cyrille
2010-10-08 20:12 ` Dmitry A. Kazakov
2010-10-11 7:57 ` Cyrille
2010-10-11 8:24 ` Dmitry A. Kazakov
2010-10-12 5:23 ` Shark8
2010-10-13 9:06 ` J-P. Rosen
2010-10-13 17:37 ` Cyrille
2010-10-13 18:50 ` Dmitry A. Kazakov
2010-09-21 14:50 ` (see below)
2010-09-21 17:37 ` Cyrille
2010-09-21 19:07 ` (see below)
2010-09-13 13:05 ` Dmitry A. Kazakov
2010-09-13 20:21 ` Niklas Holsti
2010-09-13 21:00 ` Dmitry A. Kazakov
2010-09-13 21:10 ` J-P. Rosen
2010-09-14 12:16 ` Niklas Holsti
2010-09-14 16:46 ` Dmitry A. Kazakov
2010-09-14 18:08 ` Niklas Holsti
2010-09-14 18:32 ` Niklas Holsti
2010-09-15 8:18 ` Dmitry A. Kazakov
2010-09-14 17:04 ` J-P. Rosen
2010-09-13 15:12 ` Securing type extensions (was: Preventing type extensions) Georg Bauhaus
2010-09-13 15:29 ` Securing type extensions Dmitry A. Kazakov
2010-09-13 17:23 ` Simon Wright
2010-09-13 20:22 ` Georg Bauhaus
2010-09-13 20:41 ` Dmitry A. Kazakov
2010-09-14 10:02 ` Georg Bauhaus
2010-09-14 12:22 ` Dmitry A. Kazakov
2010-09-14 21:18 ` Georg Bauhaus
2010-09-15 8:15 ` Dmitry A. Kazakov
2010-09-15 20:47 ` Georg Bauhaus
2010-09-16 7:47 ` Dmitry A. Kazakov
2010-09-16 11:52 ` Georg Bauhaus
2010-09-16 12:45 ` Dmitry A. Kazakov
2010-09-16 20:53 ` Georg Bauhaus
2010-09-16 21:37 ` Dmitry A. Kazakov
2010-09-17 8:45 ` Georg Bauhaus
2010-09-17 9:39 ` Dmitry A. Kazakov
2010-10-05 5:59 ` Randy Brukardt
2010-09-13 18:32 ` Preventing " Florian Weimer
2010-09-13 20:30 ` Dmitry A. Kazakov
2010-09-22 19:41 ` Florian Weimer
2010-09-22 20:34 ` Dmitry A. Kazakov
2010-09-22 21:10 ` Georg Bauhaus
2010-09-17 0:16 ` Shark8
2010-09-17 7:04 ` AdaMagica
2010-09-17 21:05 ` Shark8
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox