From: mheaney@ni.net (Matthew Heaney)
Subject: Re: Distinguishing type names from other identifiers
Date: 1998/01/28
Date: 1998-01-28T00:00:00+00:00 [thread overview]
Message-ID: <mheaney-ya023680002801981901590001@news.ni.net> (raw)
In-Reply-To: Pine.BSF.3.96.980128085901.28109A-100000@shell5.ba.best.com
In article <Pine.BSF.3.96.980128085901.28109A-100000@shell5.ba.best.com>,
Brian Rogoff <bpr@shell5.ba.best.com> wrote:
>> Another example is importing an active iterator as a generic formal type:
>>
>> generic
>> Max_Depth : in Positive;
>> package Stacks.Bounded is
>>
>> type Bounded_Stack is new Root_Stack with private;
>> ...
>> generic
>> type Source_Stack is new Root_Stack with private;
>>
>> type Source_Stack_Iterator (Stack : access Source_Stack'Class) is
>> new Root_Stack_Iterator with private;
>>
>> procedure Generic_Copy
>> (From : access Source_Stack'Class;
>> To : in out Bounded_Stack);
>>
>> end Stacks.Bounded;
>
>This is also OK, but I still don't see why you find the redundant _Type
>to be "noise" and the redundant _Stack, not-noisy. I find qualifiers like
>_Stack worse, since qualified package names already have that information.
>What's your thinking on this?
I always use adjective+noun. A tagged type hierarchy always has this
convention: each derivation has a different adjective, but the noun is the
same. I never use package qualification to get the "real" name, because
the real name is always the name of the type. A package is just a
namespace - it is not a type.
The Root_<type> convention comes out the RM, and I have adopted it for
consistency with that document. The adjective+noun style also comes out of
the RM: it's what is used for types Bounded_String and Unbounded_String.
So you'd have something like
type Root_Stack is abstract tagged null record;
type Bounded_Stack is new Root_Stack with private;
type Unbounded_Stack is new Root_Stack with private;
type AVL_Set is new Root_Set with private;
type Prioritized_Queue is new Root_Queue with private;
In my generic example, I chose Source_Stack as the name because some stack
type named <something>_Stack that inherits from Root_Stack is the source of
the data for the copy.
I suppose you could argue that _Stack is redundant, but 1) I always use
adjective+noun consistently, and 2) the type name stands alone, and doesn't
require package name qualification.
Consider another example:
package Bank_Accounts is
type Bank_Account is abstract tagged null record;
...
end Bank_Accounts;
package Bank_Accounts.Checking is
type Checking_Account is new Bank_Account with private;
...
end Bank_Accounts.Checking;
package Bank_Accounts.Savings is
type Savings_Account is new Bank_Account with private;
...
end Bank_Accounts.Savings;
You get the idea. Some guys name their abstract data type "Object" or
"Instance," but this is a horrible convention because it confuses the
concepts of type and module. Some Ada programmers actually think that a
class in C++ or Eiffel maps to an Ada package! A sure sign of confusion.
A class in C++ is the equivalent of an Ada tagged type. Yes, I know that
in other languages a class does double-duty as a module and type, but in
Ada they are orthogonal language features.
--------------------------------------------------------------------
Matthew Heaney
Software Development Consultant
<mailto:matthew_heaney@acm.org>
(818) 985-1271
next prev parent reply other threads:[~1998-01-28 0:00 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
1998-01-07 0:00 Two simple language questions Chip Richards
1998-01-07 0:00 ` Dale Stanbrough
1998-01-07 0:00 ` Robert Dewar
1998-01-07 0:00 ` Matthew Heaney
1998-01-10 0:00 ` Two simple language questions (plural types) Michael F Brenner
1998-01-10 0:00 ` Robert Dewar
1998-01-10 0:00 ` Matthew Heaney
1998-01-10 0:00 ` Robert Dewar
1998-01-12 0:00 ` Anonymous
1998-01-12 0:00 ` Brian Rogoff
1998-01-12 0:00 ` Matthew Heaney
1998-01-12 0:00 ` Brian Rogoff
1998-01-13 0:00 ` Robert Dewar
1998-01-13 0:00 ` Distinguishing type names from other identifiers Nick Roberts
1998-01-13 0:00 ` Matthew Heaney
1998-01-14 0:00 ` Stephen Leake
1998-01-24 0:00 ` Matthew Heaney
1998-01-15 0:00 ` Anonymous
1998-01-24 0:00 ` Matthew Heaney
1998-01-24 0:00 ` Martin M Dowie
1998-01-24 0:00 ` Pred Nick Roberts
1998-01-25 0:00 ` Distinguishing type names from other identifiers Matthew Heaney
1998-01-24 0:00 ` Martin M Dowie
1998-01-15 0:00 ` Aaro Koskinen
1998-01-17 0:00 ` Martin M Dowie
1998-01-17 0:00 ` Martin M Dowie
1998-01-25 0:00 ` Matthew Heaney
1998-01-25 0:00 ` Brian Rogoff
[not found] ` <n5rs5FAStOz0Ew2+@dowie-cs.demon.co.uk>
1998-01-26 0:00 ` Brian Rogoff
1998-01-27 0:00 ` Martin M Dowie
1998-01-27 0:00 ` Brian Rogoff
1998-01-27 0:00 ` Matthew Heaney
1998-01-28 0:00 ` Brian Rogoff
1998-01-28 0:00 ` Matthew Heaney [this message]
1998-01-29 0:00 ` Brian Rogoff
1998-01-30 0:00 ` Mats Weber
1998-01-28 0:00 ` Martin M Dowie
1998-01-11 0:00 ` Two simple language questions (plural types) Brian Rogoff
1998-01-07 0:00 ` Two simple language questions Tucker Taft
-- strict thread matches above, loose matches on Subject: below --
1998-01-13 0:00 Distinguishing type names from other identifiers Adam Beneschan
1998-01-14 0:00 ` Brian Rogoff
1998-01-15 0:00 ` Michael F Brenner
1998-01-15 0:00 ` Nick Roberts
1998-01-16 0:00 ` Robert Dewar
1998-01-16 0:00 ` Michael F Brenner
1998-01-16 0:00 ` Robert Dewar
1998-01-16 0:00 ` Brian Rogoff
1998-01-17 0:00 ` nabbasi
1998-01-18 0:00 ` Robert Dewar
1998-01-16 0:00 ` Robert Dewar
1998-01-21 0:00 ` Philip Brashear
1998-01-20 0:00 ` Benoit Jauvin-Girard
1998-01-20 0:00 ` Robert Dewar
1998-01-14 0:00 tmoran
1998-01-14 0:00 ` Robert Dewar
1998-01-14 0:00 ` Brian Rogoff
1998-01-14 0:00 ` nabbasi
1998-01-15 0:00 ` Brian Rogoff
1998-01-25 0:00 tmoran
1998-01-25 0:00 ` Brian Rogoff
1998-01-26 0:00 ` Nick Roberts
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox