Difference between revisions of "XCSG:Method"

From AtlasWiki
Jump to: navigation, search
(switching to node template)
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
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].
+
A Method is either a [[ClassMethod]] or an [[InstanceMethod]], it is a [[Function]] [[Contains|contained]] in a [[Classifier]].
  
If the operation is a query, then the body of the method must not produce any side effects.
+
== Specification ==
 +
{{Node
 +
| extends = Function
 +
| description = A [[Function]] associated with a [[Classifier]] or an instance of a Classifier.
 +
| 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]
 +
}}
  
The signature of the method must “match” that of the operation it implements.
+
{{XCSGTag
 +
| name = abstractMethod
 +
| description = Present if the method is unimplemented, in which case it must be [[Contains|contained]] in an [[Interface]] or [[abstractClass]].
 +
}}
  
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).
+
{{XCSGTag
 +
| name = java.finalMethod
 +
| description = Present if the method may not be overriden by subtypes of the class in which the method is found
 +
}}
  
The visibility of the method must be the same as the operation it implements.
+
{{XCSGTag
 +
| name = java.lambdaMethod
 +
| description = Indicates that a method corresponds to a lambda or method reference expression.
 +
}}
  
The operation implemented by the method must either be defined by or inherited by the classifier that owns the method.
+
{{XCSGTag
 +
| name = java.defaultMethod
 +
| description = Indicates that a method defines a default implementation for an interface.
 +
}}
  
The method must implement the last overridden definition of the operation.
+
{{XCSGTag
 +
| name = java.synchronizedMethod
 +
| description = Indicates that a method is synchronized by locking on the instance it was called on (for an [[XCSG:InstanceMethod|InstanceMethod]]), or, in the case of a [[XCSG:ClassMethod|ClassMethod]], that it locks on the associated Class object.
 +
}}
  
There may be at most one method defined for each operation in a given classifier.
+
{{XCSGTag
 
+
| name = java.nativeMethod
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.
+
| description = Indicates that a method's implementation is provided in another language, typically C or C++, via the Java Native Interface (JNI).
 
+
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 ==
+
{{Node
+
| extends = BehavioralFeature, MethodType
+
| 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]
+
 
}}
 
}}
 
{| class="atlaswikitable"  style="width:100%"
 
! width="160"|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.
 

Latest revision as of 15:21, 15 December 2015

A Method is either a ClassMethod or an InstanceMethod, it is a Function contained in a Classifier.

Specification

Metaclass Method
Extends Function
Description A Function associated with a Classifier or an instance of a Classifier.
Direct Subkinds ClassMethod, Constructor, InstanceMethod
All Superkinds Function, Node, ModelElement
Specified In Edges
In Edge Predecessor Multiplicity Description
InvokedSignature DynamicDispatchCallSite Connects a DynamicDispatchCallSite to the definition of the invoked Method of the InvokedType; if the Method is not defined or overridden in the InvokedType, it points to the inherited Method.

Inherited From In Edge Predecessor Multiplicity Description
Function Call Function Indicates the possibility of one or more calls to the Function pointed to within the Function that the edge comes from.

InvokedFunction StaticCallSite Connects a StaticCallSite to the exact Function called.
ReadsFunctionAddress Function 1 Connects a Function to a Function that it takes the address of.
Specified Out Edges
Out Edge Successor Multiplicity Description
Java:AnnotatedWith Java:Annotation Connects a Java element to an annotation on that Java element.

Inherited From Out Edge Successor Multiplicity Description
Function Call Function Indicates the possibility of one or more calls to the Function pointed to within the Function that the edge comes from.

HasControlFlow ControlFlow (Node) Connects a Function to any ControlFlow (Node)s it contains.
HasParameter Parameter Connects a Function to a Parameter of that Function.
HasReturnValue ReturnValue 0..1 Connects a (non-void) Function to its MasterReturn node.
ReadsFunctionAddress Function Connects a Function to a Function that it takes the address of.
ReadsVariable InstanceVariable Connects a Function to a InstanceVariable or ProgramVariable that it reads.

ProgramVariable
Returns Type 1 Connects a Function to the Type of its return value (which may be Void).
Known Possible In Edges

Inherited From In Edge Predecessor Multiplicity Description
Node Contains Node 1 Indicates that the predecessor contains the successor in a sense specified by the specific type of Contains edge.
Known Possible Out Edges
Out Edge Successor Multiplicity Description
Java:ThrowsClause Java:Class Indicates a Java Method specifies that it may throw an exception of the indicated type (which must extend java.lang.Throwable).

Inherited From Out Edge Successor Multiplicity Description
Node Contains Node Indicates that the predecessor contains the successor in a sense specified by the specific type of Contains edge.
Tag abstractMethod
Description Present if the method is unimplemented, in which case it must be contained in an Interface or abstractClass.
Tag java.finalMethod
Description Present if the method may not be overriden by subtypes of the class in which the method is found
Tag java.lambdaMethod
Description Indicates that a method corresponds to a lambda or method reference expression.
Tag java.defaultMethod
Description Indicates that a method defines a default implementation for an interface.
Tag java.synchronizedMethod
Description Indicates that a method is synchronized by locking on the instance it was called on (for an InstanceMethod), or, in the case of a ClassMethod, that it locks on the associated Class object.
Tag java.nativeMethod
Description Indicates that a method's implementation is provided in another language, typically C or C++, via the Java Native Interface (JNI).