2. SOME Specification

    技术2022-05-11  78

     

    SOME Specification   1 Type definitions Format: [TYPE DECLARATION] :[INHERITACE LIST] ->[REFERRENCE LIST], ->[REFERRENCE1 DECLARATION], ->[REFERRENCE2 DECLARATION]         …          [MEMBER1 DECLARATION]          [MEMBER2 DECLARATION]          [MEMBER3 DECLARATION]          … 1.1 Type declaration

    Sample NOTE(or sample as c#) Rules CSampleType class CSampleType   ASampleType abastract class CSampleType   ISampleInterface interface I SampleType   SSampleStruct struct SSampleStruct   CSampleType :CBaseType Inheritance   CSampleType :IInterface1 :IInterface2 Multi-Inheritance list Only for interfaces CSampleType ->CRefType1[_ref1] Referrence type “_ref” will be resolved as private member The type “CRefType1” should have been or will be defined by you in some other place CSampleType ->CRefType1[][_ref1] Collection type   CSampleType ->CRefType1[r_Ref] “Ref” is a property with get, “r_” means read-only In c#, This will be resolved as a field and a property with “get” accessor CSampleType ->CType1[_ref1], ->CType2[m_ref2] Referrence list “m_ref” will be resolved as protected member   CSampleType ->CRefType1[_ref1.()] “_ref1” will be created during the definition Equals to: private CRefType1 _ref = new CRefType1()” In referrence list, no parameter is allowed to be passed through constructor invoking CSampleType :I1 :I2 ->C1[_c1], ->C2[_c2.()] Inheritance and referrence list   CSampleType :I1 :I2 ->C1[_c1] ->C2[_c2<C3>.()] Multi-line defination of referrence list “C2[_c2<C3>.()]” equals to “C2 _c2 = new C3();”  

    1.2 Member declaration

    Sample NOTE(or sample as c#) Rules Fields and properties Int _number private int _number   string m_str protected string m_str   String s_Str Public static property   String s_str Private static field   String c_Str Public const field   String c_str Private const field   string Str Public property with getter and setter, the associated private member (_str) will also be generated   string r_Str Public property with getter S in“Str”must be captalized string w_Str Public property with setter S in“Str”must be captalized CType1 m_obj.() protected Type1 m_obj = new Type1()   CType1[] _objlist Collection defination   String _str.(“hello”) Type _obj1.(“hello”,2007) private string _str = new string(“hello”) In member declaration , only constant variables can be seen in the constructor invoking Methods func() protected void func()   _func() private void func()   Func() public void Func()   a_Func() public abstract void Func() Only abstract class or interface can have this v_Func() public virtual void Func()   o_Func() public override void Func()   s_Func() public static void Func()   s_run() private static void func()   CType1 Func() public void CType1 Func()   CType1[] Func(CType2[]) Collection   CType1 v_Func(CType2,CType3) Parameter list   Func(CType1 m_obj) 1)If “CType” has been defined by you, “m_obj” must have been defined in referrence list.in this context ,it equals to: public void Func(CType1 obj){ this.m_obj = obj;} 2)If “CType” isn’t defined, it will be resolved as a build-in type, in this context, this equals to 2 definitions: private CType1 m_obj; public void Func(CType1 obj){ this.m_obj = obj;} but m_obj” also may have been defined by its ancestors, in this situation , you should not redefine it   Func(CType1 Obj); Func(CType1 r_Obj); Func(CType1 g_Obj); Function definition with property definition   () Public constructor without parameters Constructor should not return anything _() Private constructor   v_() Protected constructor   (CType1,CType2) Constructor with parameter   (CType1 m_obj) Constructor with a parameter and a field definition, as well as an assignment while invoking   ~() destructor Should not contain parameters and returns

      1.3 common rules l          A SOME type must begin with either “A”, ”C”, “I” or ”S” l          In Type definition, every line will be resolved as a single statement l          You can place type definitions in any order, but if you want to end the definition for a certain type, you must provide at least a single blank line. 2 Sequence definitions

    Sample sample as c#) NOTE Rules Sequence declaration CSomeType.main { }   Main entrance defination Only “main” owns this kind of definition format, so “main” is the only “Keyword” in SOME CType.Method(obj1, obj2) { }   Definition of “Method” of class “CType” Parameters in the list should differentiate with each other obj.Method<CType> (CType1 obj1) { }   if you want to use “this” in the sequence, you should use “obj” to denote “this”   CType.SomeOverrideMethod<CSubType>() { }   Override function define   Object defination statement CType obj; CType obj;     CType obj.(); CType type = new CType(); Local object creation   CType obj.(obj1,obj2);   Constructor with parameters   CType obj.(m_obj1 = obj1);   Constructor with local member assigment   CType obj<CSubType>(); CType obj = new CSubType();   CSubType should be inherited from CType         Method invoking m_obj.(); m_obj = new CType(); Member object creation   m_obj<CSubType>.() m_obj = new CSubType();     myObj.Method1(); myObj.Method1(obj); myObj.Method1(m_obj = obj);       myObj.Method1(obj1);       myObj.Method1(str[“hello”]) { };   myObj.Method1(obj[obj1]) { };   another difination starts, obj is an alias of obj1, in the context of definition of “Method1”, “obj” will be a referrence of “obj1”, and “obj1” would not appear again if you don’t wanna start a new definition of a invoking method, do not use alias mechanism. You also can choose no-alias pass just like this: myObj.Metho1(obj) {  //do something with “obj” } _method1();   private method invoking   obj.SomeMethod<COtherType>() { }; 1)if obj’s type is COtherType’s offspring: class COtherType {          public void SomeMethod()          {          } } 2)if obj’s type is COtherType’s ancestor: class COtherType {    public override void SomeMethod()    {    } } Another difination “COtherType” must be either an offspring or an ancestor of the obj’s type If you don’t wanna define “SomeMethod”,you should remove “<COtherType>” CType1.SomeStaticMethod();   Static function   CType1 obj1.(); CType2 obj2.(); obj1.SetThisToType2(obj2) {  obj2.m_obj1 = obj1; } CType1 obj1 = new CType1(); CType2 obj2 = new CType2(); class CType1 {  public void SetThisToType2 (CType2 obj2)  {      obj2.m_obj1 = this;  } } assgin this to other type if in the context of a root definition(sequence), you also should not use “this”, you can do this: objA<CTypeA> .SomeMethod(obj) {  obj.m_obj1 = objA; } this is another way to define a sequence Assignment statement num = 1; str = “hello world”;   single assignment complex expressions are not be supported by SOME currently CType obj1 = obj2; obj = otherobj.Obj; CType obj1 = obj2.Obj1;   complex assignment   Return statement CType.(); CType.(obj1,obj2); CType.(m_obj1=obj1); return new CType();     obj; 1; “ok”; return obj; return 1; return “ok”;       only digits or const string can be here. any other expression will not be accepted obj1. Obj2; return obj1.Obj2;     Comments //   single line comment   /* */   muitl-line comment   Compound statement CType obj = [Method invoking]   defination and invoking   obj = [Method invoking]   invoking and assigning   Native code snippet <% int i=500*200; %>   single line all statements in the snippet area should be reserved as its original appearance <% for(int i=0;i<5;i++) {    //do something here } %>   multi-line  

    2.1 Common Rules l          Sequence Definition must begin after Type Declaration l          In a sequence definition, every statement will be ended with “;”, and if you place a pair of curly brackets, that only means you want to make a definition of a method. In this situation, you can place “{“ or “}” anywhere, but you must not forget to add a “;” after “}”. l          You may start with any method of any type that you’ve defined in the Type Declaration part, each definition seems just like a sequence diagram in UML. 3. Common Rules for all  

    最新回复(0)