From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Constructing an object
Date: Fri, 23 Sep 2005 14:04:29 +0200
Date: 2005-09-23T14:04:25+02:00 [thread overview]
Message-ID: <d3jacjqp8gho.y4skgof4w51i.dlg@40tude.net> (raw)
In-Reply-To: dh0e16$ghc$1@sunnews.cern.ch
On Fri, 23 Sep 2005 10:23:02 +0200, Maciej Sobczak wrote:
> Is it really enough? Consider this:
>
> -- file shapes.ads
> package Shapes is
> type Color is (Black, White);
> type Shape is private; -- or tagged private
Replace it with:
type Shape (<>) is private;
BTW, private vs. tagged private is a huge difference.
> function New_Shape(C : in Color) return Shape;
> private
> type Shape is record -- or tagged
> C : Color;
> end record;
> end Shapes;
>
> -- file shapes.adb
> package body Shapes is
> function New_Shape(C : in Color) return Shape is
> begin
> return Shape'(C => C); -- I like this syntax :)
> end New_Shape;
> end Shapes;
>
> -- file hello.adb
> with Shapes;
> procedure Hello is
> S : Shapes.Shape; -- oops, uninitialized Shape
> begin
> null;
> end Hello;
>
> It compiles fine (GNAT) and it allows me to declare an uninitialized
> object of private type Shape. The only thing that private type gives me
> is that I cannot tinker with its internals directly. This is good in
> itself, but not enough to save me from having uninitialized objects.
It is enough if the public view is made up so that objects look
unconstrained. This is what (<>) does.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2005-09-23 12:04 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-21 8:46 Constructing an object Maciej Sobczak
2005-09-21 10:16 ` Georg Bauhaus
2005-09-22 7:21 ` Maciej Sobczak
2005-09-21 11:55 ` Dmitry A. Kazakov
2005-09-22 7:28 ` Maciej Sobczak
2005-09-22 7:45 ` Maciej Sobczak
2005-09-22 13:33 ` Dmitry A. Kazakov
2005-09-24 5:23 ` Randy Brukardt
2005-09-24 9:47 ` Dmitry A. Kazakov
2005-09-29 0:12 ` Randy Brukardt
2005-09-29 8:17 ` Dmitry A. Kazakov
2005-09-29 22:21 ` Randy Brukardt
2005-09-30 8:14 ` Jean-Pierre Rosen
2005-09-30 19:28 ` Dmitry A. Kazakov
2005-09-30 17:49 ` Robert A Duff
2005-10-01 0:44 ` Randy Brukardt
2005-10-01 10:49 ` Dmitry A. Kazakov
2005-10-01 11:06 ` Tapio Kelloniemi
2005-10-01 14:13 ` Robert A Duff
2005-10-02 11:52 ` Tapio Kelloniemi
2005-10-01 15:19 ` Georg Bauhaus
2005-09-23 5:40 ` Matthew Heaney
2005-09-23 7:18 ` tmoran
2005-09-23 8:23 ` Maciej Sobczak
2005-09-23 12:04 ` Dmitry A. Kazakov [this message]
2005-09-23 12:36 ` Matthew Heaney
2005-09-23 13:03 ` Hyman Rosen
2005-09-23 13:41 ` Maciej Sobczak
2005-09-23 14:23 ` Matthew Heaney
2006-01-17 6:28 ` [Offtopic] " James Dennett
2005-09-23 13:42 ` Dmitry A. Kazakov
2005-09-23 14:27 ` Matthew Heaney
2005-09-23 12:24 ` Matthew Heaney
2005-09-24 5:34 ` 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