XCSG:Method

From AtlasWiki
Revision as of 12:07, 4 April 2014 by TheodoreMurdock (Talk | contribs) (Specification: spelling)

Jump to: navigation, search

The semantics of Method are those common to UML [5, pp. 2-47, 2-66], MS-IL [27, p. 14], and the JVM [36, p. 34, 2.6].

If the operation is a query, then the body of the method must not produce any side effects.

The signature of the method must “match” that of the operation it implements.

Compared to the pre and postconditions for the operation it implements, the method’s precondition must be weaker than or the same as that associated with the operation, and the method’s postcondition must be stronger than or the same (in accordance with LSP).

The visibility of the method must be the same as the operation it implements.

The operation implemented by the method must either be defined by or inherited by the classifier that owns the method.

The method must implement the last overridden definition of the operation.

There may be at most one method defined for each operation in a given classifier.

Additional constraints, however, are required to ensure the body of the method is well-formed and consistent with the specification. For example, if the signature of the operation specifies a return parameter, the method body must terminate with the execution of a MethodReturn that generates a value of the appropriate type. If the operation permits the throwing of only certain exceptions, then the throwing of an exception that is not in this list should not be permitted. And so on.

The attribute implicitOverride indicates whether the method implicitly overrides an inherited method with a matching signature. If the method does not override an inherited method at all, or if the overriding is explicitly specified by the user (as in C#), this property should be set to false. Otherwise, if the method does override an inherited method and this is implied by language rules for matching signatures (as in C++ and Java), this property should be set to true.

The attribute inline is regarded as a hint to the compiler that the method should be considered as a candidate for inlining. It does not gurantee that calls to the method will always be inlined. In particular, calls that involve dynamic dispatch are generally not inlined irrespective of the value of this attribute. The inlining of a method should not affect its semantics.

Specification

Metaclass Method
Extends BehavioralFeatureMethodType
Description The implementation of an operation.
References [5, p. 2-14, Figure 2-5], [5, pp. 2-47, 2-66], [5, p. B-11, method], [26, CodeMemberMethod], .method [27, p. 14], .method [36, p. 34, 2.6]
Direct Subkinds ClassMethod, Constructor, InstanceMethod
Tag inline
Description Present if calls to the method should be inlined whenever possible.

A method provides an implementation for an operation. Often a number of methods (associated with different classifiers) provide alternate implementations for the same operation. The body of the method consists of a series of statements.

Language mappings

Member functions in C++ and methods in Java that are concrete (are not declared pure virtual or abstract) map to methods.