From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 109fba,b87849933931bc93 X-Google-Attributes: gid109fba,public X-Google-Thread: fac41,b87849933931bc93 X-Google-Attributes: gidfac41,public X-Google-Thread: 1108a1,b87849933931bc93 X-Google-Attributes: gid1108a1,public X-Google-Thread: 114809,b87849933931bc93 X-Google-Attributes: gid114809,public X-Google-Thread: f43e6,b87849933931bc93 X-Google-Attributes: gidf43e6,public X-Google-Thread: 103376,b87849933931bc93 X-Google-Attributes: gid103376,public From: mheaney@ni.net (Matthew Heaney) Subject: Re: OO, C++, and something much better! Date: 1997/01/16 Message-ID: #1/1 X-Deja-AN: 210452533 references: content-type: text/plain; charset=ISO-8859-1 organization: Estormza Software mime-version: 1.0 newsgroups: comp.lang.c++,comp.lang.smalltalk,comp.lang.eiffel,comp.lang.ada,comp.object,comp.software-eng Date: 1997-01-16T00:00:00+00:00 List-Id: In article , donh@syd.csa.com.au wrote: >:Where's the polymorphism of >:any form here? Subtypes are ways of defining constraints (simple >:"assertions") on the possible values of the type. Sub_Integer is not >:a new type and is not a type derivation. So, you only have one type >:here (Re: RM: 3.2(8)) >: >:The CE, is simply stating that you have violated the constraint >:(assertion). No polymorphism broken or otherwise involved. > >Yes, if you define subtypes as such, then I concede it may be more reasonable >to regard this as simply an assertion violation and declare the type system >free of holes. It's a question of definition. Precisely, Don. It *is* question of definition, and we're comparing apples and oranges. You may want to read any of Peter Wegner's papers, where he explains the difference between a "type" and a "class." A type has "range" semantics. Subtypes of the type constrain the range of values objects of the type can have. A class has "template" semantics. A subclass specializes the behavior of the parent. Jon is correct in pointing out that the example you gave is an example of the former. Sub_Integer is a subtype (in the Wegner sense) that denotes a subset of the values of its parent. There is no polymorphism, because we aren't dealing with classes (in the Wegner sense). (Note that the term class as used by Wegner is not the same as the Ada 95 meaning. In Ada, a class refers to a family of types.) And as far as your example "proving" that Ada is not type-safe: that is incorrect. In fact the behavior proves just the opposite. Constraint_Error was raised because the range constraint was violated. This behavior is similar to the Eiffel behavior when a precondition is not satisfied. The terms of the contract between the client (the caller) and server (the subprogram) were violated by the client, so an exception was raised. Isn't that what you would expect to happen? -------------------------------------------------------------------- Matthew Heaney Software Development Consultant (818) 985-1271