* Re: ada and final/sealed classes
[not found] <1c2f5137.0410130438.3ea08553@posting.google.com>
@ 2004-10-13 13:31 ` Dmitry A. Kazakov
2004-10-17 15:36 ` Matthew Heaney
2004-10-18 7:46 ` Martin Krischik
2 siblings, 0 replies; 4+ messages in thread
From: Dmitry A. Kazakov @ 2004-10-13 13:31 UTC (permalink / raw)
On 13 Oct 2004 05:38:32 -0700, Hans Van den Eynden wrote:
> I want to prevent that someone inherits from a type I made (for
> security purposes).
1. When the public view of the type is untagged, then it is impossible to
extend it publicly:
package Foo is
type Final is private;
procedure Baz (Object : Final);
private
type Final is tagged null record;
Only children of the package Foo know that Final is tagged. Therefore:
with Foo;
package Unrelated is
type Illegal is new Foo.Final with null record; -- Error
2. A less brutal approach: a) The primitive operations can be made private;
b) other operations, especially class-wide ones, are always "final":
package Foo is
type Has_Secret_Methods is tagged ...;
procedure Final (Object : in out Has_Secret_Methods'Class);
private
procedure Secret (Object : in out Has_Secret_Methods);
Here Final is a class-wide procedure. As such it cannot be overridden.
Secret is not visible for public clients and so cannot be overridden by
those.
3. For happy owners of ergonomic keyboards: you can always use aggregation.
However the language will not help you in creating wrappers, so train your
fingers:
package Private_Foo is
type Unsealed is tagged ...;
procedure Baz (X : Unsealed);
end Private_Foo;
with Private_Foo;
package Public_Foo is
type Sealed is private; -- non-tagged wrapper
procedure Baz (X : Sealed); -- Proxy
pragma Inline (Baz);
private
use Private_Foo;
type Sealed is record
Thing : Unsealed;
end record;
----
procedure Baz (X : Sealed) is
begin
Baz (X.Thing);
end Baz;
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: ada and final/sealed classes
[not found] <1c2f5137.0410130438.3ea08553@posting.google.com>
2004-10-13 13:31 ` ada and final/sealed classes Dmitry A. Kazakov
@ 2004-10-17 15:36 ` Matthew Heaney
2004-10-18 0:20 ` Brian May
2004-10-18 7:46 ` Martin Krischik
2 siblings, 1 reply; 4+ messages in thread
From: Matthew Heaney @ 2004-10-17 15:36 UTC (permalink / raw)
onsbomma@hotmail.com (Hans Van den Eynden) writes:
> I want to prevent someone from inheriting from a type I made (for
> security purposes). I am a junior Ada programmer and I know this
> possible in Java (final class) and C# (sealed class). Is this also
> possible in Ada???
Not really, no.
Ada is designed such that there is a lexical distinction for a type that
has visibility to the representation of another type.
The way this works is that derived types in a class that have access to
the representation of the parent type must be declared in child
packages:
package P is
type T is tagged limited private;
...
private
type T is tagged limited record
... -- lots of secret stuff here
end record;
end P;
package P.C is
type NT is new T with private;
...
private
type NT is new T with record
... -- more secret stuff here
end record;
end P.C;
Here, type P.C.NT has visibility to the private presentation of type
P.T. That fact is ennunciated since NT is declared in the same
subsystem (rooted at package P) as type T.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: ada and final/sealed classes
2004-10-17 15:36 ` Matthew Heaney
@ 2004-10-18 0:20 ` Brian May
0 siblings, 0 replies; 4+ messages in thread
From: Brian May @ 2004-10-18 0:20 UTC (permalink / raw)
>>>>> "Matthew" == Matthew Heaney <matthewjheaney@earthlink.net> writes:
Matthew> onsbomma@hotmail.com (Hans Van den Eynden) writes:
>> I want to prevent someone from inheriting from a type I made (for
>> security purposes). I am a junior Ada programmer and I know this
>> possible in Java (final class) and C# (sealed class). Is this also
>> possible in Ada???
Matthew> Not really, no.
Also, Ada scoping rules were designed to prevent programming errors
from occurring when you accidently refer to a value without using the
correct interface.
Ada scoping rules were not designed to prevent an intruder from
deliberately doing malicious activities, as everything runs in the
same Unix process. Any security measures must be implemented by you,
the programmer. e.g. split into multiple, independent processes,
communicating via CORBA, SOAP, or some other protocol.
This is unlike Java, where everything runs in a secure sandbox, and it
is possible to check the code to ensure it doesn't break set rules.
Then again, I may have misunderstood what you are trying to do. I
can't see any security value in stopping someone from inheriting from
a type, as creating new types has to happen at compile time (unlike
Java), and if you have access to compile the code, you probably have
access to everything anyway.
--
Brian May <bam@snoopy.apana.org.au>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: ada and final/sealed classes
[not found] <1c2f5137.0410130438.3ea08553@posting.google.com>
2004-10-13 13:31 ` ada and final/sealed classes Dmitry A. Kazakov
2004-10-17 15:36 ` Matthew Heaney
@ 2004-10-18 7:46 ` Martin Krischik
2 siblings, 0 replies; 4+ messages in thread
From: Martin Krischik @ 2004-10-18 7:46 UTC (permalink / raw)
Hans Van den Eynden wrote:
> Hallo
>
> I want to prevent that someone inherits from a type I made (for
> security purposes). I am a junior Ada programmer and I know this
> possible in Java (final class) and C# (sealed class). Is this also
> possible in Ada???
You could hide the tag:
package P
type T is private;
private
type T is tagged ...;
end P;
Of course it does not stop the determinted - since Ada private is C++
protected.
With Regards
Martin
--
mailto://krischik@users.sourceforge.net
http://www.ada.krischik.com
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2004-10-18 7:46 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <1c2f5137.0410130438.3ea08553@posting.google.com>
2004-10-13 13:31 ` ada and final/sealed classes Dmitry A. Kazakov
2004-10-17 15:36 ` Matthew Heaney
2004-10-18 0:20 ` Brian May
2004-10-18 7:46 ` Martin Krischik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox