Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [mdt-ocl.dev] Numeric values as notional singletons

Hi Ed,
 
I fully agree with your issue 14918. However, it doesn't clearly suggest whether 1 and 1.0 should be equal. IMO it is important to state whether numeric types are to be coerced when compared.
 
If they are then `Sequence{3, 3.0}->count(3.0) = 1.` becomes incorrect (must be 2).
 
Cheers,
- Alex.

 

From: mdt-ocl.dev-bounces@xxxxxxxxxxx [mailto:mdt-ocl.dev-bounces@xxxxxxxxxxx] On Behalf Of Ed Willink
Sent: Saturday, January 16, 2010 4:32 PM
To: MDT OCL mailing list
Subject: [mdt-ocl.dev] Numeric values as notional singletons

Hi

I've just appended the attached to OMG Issue 14918.

Any opinions on whether

Set{ 3.oclAsType(UnlimitedNatural), 3.oclAsType(Integer), 3.oclAsType(Real) }->size() = 1.

Sequence{3, 3.0}->count(3.0) = 1.

is the interpretation that we want?

Certainly not quite what I would have expected, but anything else seems much worse.

    Ed

-------- Original Message --------
Subject: Re: issue 14918 -- OCL 2.1 11.2.5 Numeric = and <> operations should compare values
Date: Sat, 16 Jan 2010 12:48:33 +0000
From: Ed Willink <ed@xxxxxxxxxxxxx>
To: ocl2-rtf@xxxxxxx


Hi

The problem of value object identity is much more widespread.

All the collection operations such as count(), includes() etc are based on objects, so it is unclear whether

Set{ 3.oclAsType(UnlimitedNatural), 3.oclAsType(Integer), 3.oclAsType(Real) }->size() is 1, 2 or 3.

and whether

Sequence{3, 3.0}->count(3.0) is 1 or 2.

For 3.oclAsType(UnlimitedNatural) and 3.oclAsType(Integer) to be different 'objects' would be very confusing,
so 3.oclAsType(Integer) and 3.oclAsType(Real) must be the same 'object' too.

It is presumably sufficient to specify that each distinct numeric value is notionally represented by a singleton value object of the narrowest possible PrimitiveType. Thus 3 and 3.0 are both represented by the 3.oclAsType(UnlimitedNatural) singleton. Implementations may use multiple non-singleton value objects, but these may not be observably distinct.

Therefore:

Set{ 3.oclAsType(UnlimitedNatural), 3.oclAsType(Integer), 3.oclAsType(Real) }->size() = 1.

Sequence{3, 3.0}->count(3.0) = 1.

    Regards

        Ed Willink

On 06/01/2010 21:44, Juergen Boldt wrote:

X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: ApoEAJklP0tUXebz/2dsb2JhbADRTIQxBA
Date: Sat, 02 Jan 2010 18:56:24 +0000
From: Ed Willink <ed@xxxxxxxxxxxxx>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1.5) Gecko/20091204 Thunderbird/3.0
To: issues@xxxxxxx
Subject: OCL 2.1 11.2.5 Numeric = and <> operations should compare values
 rather than objects
X-Plusnet-Relay: c7b893149f9e819f734970fb3019af3e

Hi

OCLAny::=() is defined as 'True if self is the same object as object2.'

This is not overloaded for numeric types, and it is not specified that a numeric value may not have multiple instances.

The definition therefore implies that:

1 = 1

may often evaluate to false, and that

1.0 = 1

must evaluate to false even though (1.0 <= 1) and (1.0 >= 1) will evaluate true

Suggest overload {Boolean, Real, String}::{=,<>} to use values rather than objects.

    Regards

        Ed Willink



Juergen Boldt
Director, Member Services
Object Management Group
140 Kendrick St
Building A Suite 300
Needham, MA 02494
USA

tel: +1 781 444 0404 x 132
fax: +1 781 444 0320
email: juergen@xxxxxxx
www.omg.org

[] 







Back to the top