comp.lang.ada
 help / color / mirror / Atom feed
From: Matthew Heaney <matthewjheaney@earthlink.net>
Subject: Re: Idiom for a class and an object in Ada
Date: Wed, 20 Oct 2004 07:24:31 GMT
Date: 2004-10-20T07:24:31+00:00	[thread overview]
Message-ID: <uoeixvols.fsf@earthlink.net> (raw)
In-Reply-To: x7v4qkqrlr1.fsf@smaug.pushface.org

Simon Wright <simon@pushface.org> writes:

> I'm not so hung up as Matt about people using the word class (in
> conversation; I agree about use in Ada code). But I have to say,
> what's wrong with Matt's suggestion? seems to answer all your needs as
> stated so far ..

For reasons I can't fathom, many Ada95 developers still have a very
Ada83 mindset.

This is the canonical idiom in C++ for controlling instance creation:

class C {
public:

   static C* make( /* ... */ );
   static void free(C*);

   void f(); //whatever

private:

   C();
   C(const C&);

   ~C();

   C& operator=(const C&);
};

Here, the ctor (and dtor) is declared as private, so the only way to
make a C object is by calling factory function C::make().

This has a direct translation into Ada95:

package P is

   type T (<>) is limited private;

   procedure Op (O : in out T);

   type T_Access is access all T;

   function New_T (...) return T_Access;

private

   type T is limited record ...;

end P;


Here the package provides a factory function to dynamically create
instances (or possibly return a pointer to statically declared objects,
a la the Flyweight Pattern).

Functions in Ada95 return constant objects.  (In Ada83, functions
returned values.)  Types whose full view is limited are passed by
reference.  These two facts mean you can write the equivalent of a const
reference in C++:

   const C& f();

by using a function whose return type is limited:

package P is

   type T (<>) is limited private;

   procedure Op (O : in T);

   function Object1 return T;
   function Object2 return T;

private

   type T is limited record ...;

end P;


This is exactly how Text_IO works.  The objects returned by functions
Standard_Input, Standard_Output, etc, correspond to the functions
Object1 and Object2 above.

This is the canonical Ada95 idiom for controlling instance creation, and
for declaring well-known objects.




  reply	other threads:[~2004-10-20  7:24 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-18 11:47 Idiom for a class and an object in Ada Marin David Condic
2004-10-18 12:14 ` Martin Krischik
2004-10-18 19:40   ` Matthew Heaney
2004-10-19 12:59   ` Marin David Condic
2004-10-19 14:46     ` Martin Dowie
2004-10-19 15:55       ` Matthew Heaney
2004-10-19 18:31         ` Martin Dowie
2004-10-19 15:52     ` Matthew Heaney
2004-10-18 12:26 ` Marius Amado Alves
2004-10-19  2:09   ` Jeffrey Carter
2004-10-19  3:28     ` Matthew Heaney
2004-10-19 12:53       ` Marin David Condic
2004-10-19 14:44         ` Matthew Heaney
2004-10-19 15:01           ` Dmitry A. Kazakov
2004-10-19 15:40             ` Matthew Heaney
2004-10-20  7:58               ` Dmitry A. Kazakov
2004-10-20 12:31                 ` Marin David Condic
2004-10-20 13:53                   ` Dmitry A. Kazakov
2004-10-20 15:23                   ` Matthew Heaney
2004-10-21 12:24                     ` Marin David Condic
2004-10-21 17:15                       ` Matthew Heaney
2004-10-20  5:39         ` Simon Wright
2004-10-20  7:24           ` Matthew Heaney [this message]
2004-10-20  8:39             ` Dmitry A. Kazakov
2004-10-21  1:36             ` Jeffrey Carter
2004-10-21  1:46               ` Matthew Heaney
2004-10-21  7:51                 ` Dmitry A. Kazakov
2004-10-21 12:45                   ` Matthew Heaney
2004-10-21 14:11                     ` Dmitry A. Kazakov
2004-10-22  1:04                 ` Jeffrey Carter
2004-10-22  1:36                   ` Matthew Heaney
2004-10-21 19:31               ` Kevin Cline
2004-10-21 22:02                 ` Matthew Heaney
2004-10-22  0:10                   ` Matthew Heaney
2004-10-21  8:25             ` Martin Dowie
2004-10-20 17:04           ` Matthew Heaney
2004-10-20 19:37             ` Simon Wright
2004-10-20 20:04               ` Matthew Heaney
2004-10-22  5:37                 ` Simon Wright
2004-10-20  1:10       ` Jeffrey Carter
2004-10-20  7:04         ` Matthew Heaney
2004-10-20 12:42           ` Marin David Condic
2004-10-20 12:55             ` Matthew Heaney
2004-10-20 15:27             ` Matthew Heaney
2004-10-21  1:36               ` Matthew Heaney
2004-10-19 12:38   ` Marin David Condic
2004-10-18 16:59 ` Matthew Heaney
2004-10-18 18:02 ` Martin Dowie
2004-10-19 13:06   ` Marin David Condic
2004-10-19 14:51     ` Martin Dowie
2004-10-20 16:20 ` Michael Paus
2004-10-20 17:15   ` Matthew Heaney
2004-10-20 17:55     ` Michael Paus
2004-10-21 12:33   ` Marin David Condic
  -- strict thread matches above, loose matches on Subject: below --
2004-10-21 13:59 Stephen Leake
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox