2017-07-06 6 views
1

私はインタフェース(MyController)を持っています。 2つのクラスがそのインタフェースを実装しています(ControllerTypeAControllerTypeB)。別のクラス(MyFinal)のフィールドはMyControllerなので、ControllerTypeAまたはControllerTypeBのいずれかを含むことができます。 MyController,ControllerTypeAControllerTypeB、およびMyFinalのUMLでの関係をどのようにモデル化しますか?あなたがここに関連を持っているので、クラスにインタフェースを実現する属性がある場合にUMLでモデル化する方法

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ScratchApp 
{ 
    public interface MyController 
    { 
     void method1(String str); 
     void method2(int num); 
    } 

    public class ControllerTypeA : MyController 
    { 
     public void method1(String str) 
     { 
      Console.WriteLine("This is controller type A and the string is: " + str); 
     } 

     public void method2(int num) 
     { 
      Console.WriteLine("This is controller type A and the number is: " + num); 
     } 
    } 

    public class ControllerTypeB : MyController 
    { 
     public void method1(String str) 
     { 
      Console.WriteLine("This is controller type B and the string is: " + str); 
     } 

     public void method2(int num) 
     { 
      Console.WriteLine("This is controller type B and the number is: " + num); 
     } 
    } 

    public class MyFinal 
    { 
     public MyController myController; 

     public MyFinal(MyController mc) 
     { 
      myController = mc; 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 

      MyFinal mf1 = new MyFinal(new ControllerTypeA()); 
      MyFinal mf2 = new MyFinal(new ControllerTypeB()); 

      mf1.myController.method1("From mf1"); 
      mf1.myController.method2(1); 
      mf2.myController.method1("From mf2"); 
      mf2.myController.method2(2); 
      Console.ReadKey(); 
     } 
    } 

} 

答えて

2

あなたの属性は、タイプMyControllerは次のとおりです。ここで私が何を意味するか示すために働いてC#プログラムです。両方ともControllerTypeがこれを実現しますMyController。グラフィカルに、それは次のようになります。

enter image description here

をサイドノートとして:属性myControllerは、図に二回表示されます。 Mea culpa。それは、アソシエーションの最後のロール名として、またはMyFinalの中のアトリビュートとして(そしてロール名なしで)表示されるべきです。これは本当に間違っていません。しかし、スタイルの問題として、コンパートメント内の属性に対してロール名を優先する必要があります。このように、識別された型付き属性であることがより明白です。

関連する問題