comp.lang.ada
 help / color / mirror / Atom feed
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



  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