Author:halw

Date:2010-12-20T21:11:38.000000Z


git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@719 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
halw
2010-12-21 17:10:14 +00:00
parent 7816c49343
commit ef1441a95e
2 changed files with 6 additions and 2 deletions

View File

@@ -8,7 +8,7 @@ Create a class POINT and its heir CIRCLE to demonstrate polymorphic attachment a
==Source==
Problem description from [http://rosettacode.org/wiki/Polymorphism Rosetta Code]
Problem description from [http://rosettacode.org/wiki/Polymorphism Rosetta Code: Polymorphism]
Solution varies from Rosetta Code description (e. g., feature <code>out</code> is redefined in this solution, versus feature <code>print</code>.)

View File

@@ -983,7 +983,11 @@ Likewise the compiler in EiffelStudio will produce warnings in cases in which ca
So far, our experience with inheritance is that of "conforming" inheritance ... the most commonly used type of inheritance. Conforming inheritance is what allows a direct instance (in the '''catcall''' example above) of <code>COW</code> to be attached at runtime to an entity of type <code>ANIMAL</code>. This can be a powerful modeling capability, but it is this same polymorphism facilitated by conforming inheritance that puts us in the danger of using polymorphic '''catcalls'''.
In cases in which polymorphic attachment is not anticipated, the possibility of catcalls can be avoided by using '''non-conforming inheritance'''. Non-conforming inheritance is just a more restrictive form of inheritance. It allows features to be inherited from parent to heir, but it disallows polymorphic attachment of a direct instance of an heir to an entity based on a non-conforming parent.
In cases in which polymorphic attachment is not anticipated, the possibility of catcalls can be avoided by using '''non-conforming inheritance'''. Non-conforming inheritance is just a more restrictive form of inheritance.
:'''Non-conforming inheritance allows features to be inherited from parent to heir, but it disallows polymorphic attachment of a direct instance of an heir to an entity based on a non-conforming parent.'''
In order to use non-conforming inheritance for a particular parent, we use the marker <code>{NONE}</code> in the appropriate inheritance part of the class: