@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

「UML」を初めとする現在の「モデリング言語(手法)」の問題点は?

投稿者投稿内容
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-01 23:16
引用:

コブラさんの書き込み (2005-02-01 16:57) より:
>それはなぜですか?

それが「自己申告」というものだから。


答えが出ないことを敢えて聞いたと言う事ですか?
不毛ですよね。
引用:

>何をさして仕様書で、何をさしてアプローチなのですか?

自分で何を書き込んでるのか判ってないのか?
自己申告で談合が「無い」と言ってるだけで、少なくとも俺ともう一人は疑念を
抱いてる。その「自己申告」から逆の真実を導くアプローチ。


逆を正せば僕から見ればあなたともう一人が談合しているのでは?
この疑念をどのように払拭なさいますか?
引用:

>相手に確認を取って論点を整理

仕様書って、こういう風に作るんやなかったっけ?
自分の自己申告で仕様書ってできてまうもんやったっけ? (プ


あえて堂々巡りに突っ込んだんでしょ?
だから聞いたのに・・・。
引用:

>僕にはこの発言で溝を作られていると思うわけですが、

それは一体、どんな溝なのですか?


都合がよろしいようで・・・。
この議論もループすると言う事なんですが、
続けます?
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2005-02-02 00:13
初回投稿があった時からず〜と思っていた事。

『「UML」を初めとする現在の「モデリング言語(手法)」の問題点は?』
この問いに失敗を恐れずに答えるならば、モデリング言語(手法)自体の問題では無く、
自分が認識するべき物事をイキなりモデリング言語(手法)を通して見てしまう
(語ってしまう)現在の風潮。

自分が認識する物事は一旦、素のままの自分で理解する事が大切。
そして次に見落としている所を拾い集め深い認識を得る為に、
客観性や整合性をサポートする手段としてモデリング言語(手法)を活用する。

この際に発生した素の認識と技法を用いた認識のギャップが本来学ぶべき事であり
モデリング言語(手法)が学ぶべき最終知識では無いと思う。

しかしながら、何故かその事について触れられている文書が非常に少ない。
人なき技法になんの意味があるのやら。

ってな感じで能書きを垂れてみました。
本田@スミテム
常連さん
会議室デビュー日: 2004/01/22
投稿数: 21
お住まい・勤務地: 東京
投稿日時: 2005-02-02 03:57
はじめまして、本田@スミテムと申します。
この議論、非常に興味深く拝見させていただきました。
大体ですが私にもお話しが見えてきましたので、僭越ではありますが少しだけ交通整理をさせてくださいませ。
#はたして整理できるかどうか・・・。
#長文失礼します。

object様がこれまで説明されてきた内容は、以下の投稿の中に集約されていると考えます。

object様、投稿日時: 2005-01-29 14:25
>===================
>現在の状況
>全体の関係:
>「ドメイン空間」⊂「リアル空間」
>「ドメイン空間」→「ソフトウェア空間」
>#→:「ドメイン図」等で何らかの対応関係はあるが、「構造」的なものは余り意識されていない。
>-------------------
>内部の関係:
>「ドメイン空間」={情報、振る舞い}
>「ソフトウェア空間」 ={フィールド、メソッド=ファンクション}
>「フィールド、ファンクション」に対して、「独立」なものとして考えている。
>「ファンクション」の中では「フィールド」が使える。
>「フィールド」は単独でしか使えない。
>「フィールド、ファンクション」は、独立ではあるが、対等ではない。
>===================
>本来:
>全体の関係:
>「ドメイン空間1」⊂「リアル空間」
>「ドメイン空間2」⊂「ソフトウェア空間」
>「ドメイン空間1」⇒「ドメイン空間2」 …(1)
>#⇒は、「ドメイン空間1」での重要な関係を「ドメイン空間2」でも成立させる様にする写像。
>#最終的には、全く同じものも考えられるが、その場合はドメイン空間1,2間の制約が最も厳しくなる
>#(1)は「ドメイン空間」と「ソフトウェア空間」は全く独立であるが、無関係では役に立たないので導入する。
>#これによって、ドメイン空間1でのモデルが、ドメイン空間2でも成立し、
>#ビジネスモデルは、ドメイン空間1でソフトウエア空間とは独立に発展させる事が出来る。
>#また、⇒の内容によっては、「ソフトウエア空間」上での成果が殆ど直接的に「ドメイン空間」に反映出来る可能性がある。
>-------------------
>内部の関係:
>「ドメイン空間」={情報、振る舞い}
>「ソフトウェア空間」 ={プロパティ、メソッド}
>プロパティ=f(フィールド、ファンクション):フィールドどファンクションを使って実現される
>メソッド=g(フィールド、ファンクション):フィールドどファンクションを使って実現される
>#特別な場合として「プロパティ=フィールド」となる場合がある。
>===================

この内容を私が理解するのに助けとなったのが、以下の投稿です。

k-nak様、投稿日時: 2005-01-27 02:11
>ドメイン空間においてstateは常にpublic(なぜなら”認識可能な状態”を抽出したものだから)。
>fieldは(実装上必要ってだけなので)ソフトウェア空間にしか存在せず、さらに常にprivateであるべき。
>
>State---Field のマッピング関係が成立しないのは、派生属性のことを考えれば一目瞭然。

k-nak様、投稿日時: 2005-01-27 02:11
>ドメイン空間 ソフトウェア空間
> (DotNET)
>+----------+ +----------+---------+
>| Behavior | ---> | Method | |
>+----------+ +----------+ Field |
>| State | ---> | Property | |
>+----------+ +----------+---------+
>
>ドメイン空間 ソフトウェア空間
> (Java)
>+----------+ +----------+---------+
>| Behavior | -+-> | | |
>+----------+ | | Method | Field |
>| State | -+ | | |
>+----------+ +----------+---------+

ここで、k-nak様の言う「State・Behavior」は、object様の「状態・振舞」、「プロパティ・メソッド」と同じものです。
ただし、

object様、投稿日時: 2005-01-21 12:44
>兎に角、私が言っているのは、「構造的関係」であり、
>「情報・振舞」=「プロパティ・メソッド」=「フィールド・ファンクション」
>では無く
>「情報・振舞」=「プロパティ・メソッド」≠「フィールド・ファンクション」
>であると言っている訳です。

ですので、「フィールド、ファンクション」とは違います。
「情報・振舞」=「プロパティ・メソッド」はドメイン空間1に帰属しますが、「フィールド・ファンクション」はソフトウェア空間(もしくはドメイン空間2)に帰属します。
例として、このことをドメインクラス(ドメイン空間1の代表として)とコード(ソフトウェア空間またはドメイン空間2の代表として)で表現してみたいと思います。

ドメインクラス(注意、この図はUMLではありません。)
  ┌────┐
  │ Window │<--クラス名
  ├────┤
  │ Left │<--プロパティ(注意、UMLのフィールドではありません。)
  │ Right │
  ├────┤
  │ Show │<--メソッド
  └────┘

コード
  class Window //ウインドウクラス
  {
  /*プロパティ*/
    public int Left //ドメインモデルから導かれたLeftプロパティ
    {
      get
      {
        //省略
      }
      set
      {
        SetLeft(value); //LeftプロパティのsetをSetLeftファンクションが実現している
      }
    }
    public int Right //ドメインモデルから導かれたRightプロパティ
    {
      get
      {
        return GetRight(); //RightプロパティのgetをGetRightファンクションが実現している
      }
      set
      {
        //省略
      }
    }
  /*メソッド*/
    public void Show() //ドメインモデルから導かれたShowメソッド
    {
      DoShow(); //ShowメソッドをDoShowファンクションが実現している
    }
  /*フィールド*/
    private int m_nLeft; //ウインドウの左側面のx座標
    private int m_nWidth; //ウインドウの幅
  /*ファンクション*/
    private void SetLeft(int Left) //Leftプロパティのsetを実現するファンクション
    {
      //Leftに対する入力チェック
      m_nLeft = Left; //Leftプロパティの記憶をフィールドに実現させる
    }
    private int GetRight() //Rightプロパティ(派生属性の一例として)のgetを実現するファンクション
    {
      return m_nLeft + m_nWidth;//フィールドの演算によって実現させる
    }
    private void DoShow() //Showメソッドを実現するファンクション
    {
      //省略
    }
  }

プロパティもメソッドも、それらが帰属するドメイン空間1からソフトウェア空間(もしくはドメイン空間2)へシームレスにマッピングされ、かつ、これらをソフトウェア空間(もしくはドメイン空間2)に帰属するフィールドとファンクションが両方で実現しています。
この例では無理やり表現してみましたが、現状、ドメインクラスの表記におけるUMLも、コードにおけるJavaなどのOOPLも、きちんとこれを表現できません。

そこで、object様が主張されることは、以下の投稿から読み取れると考えます。

object様、投稿日時: 2005-01-20 12:34
>旧来の「ソフトウエア空間」を「ドメイン空間」を基準に再構築して
>「ソフトウエア空間をドメイン空間と同じ構造」にする必要があると言っている訳です。

具体的な例としては、
上の例のような構造でコードを書くように規定された文法に言語構造を改める。
言語に引きずられる形で構造に欠陥のあったUMLについても同様に構造を改める。
べきではないかといったところでしょうか。

#ただし、この具体例はobject様の主張の一部しか表現できていないと思われますので
#一例とお考えください。

また、この主張のスタンスについてobject様は以下のように考えていらっしゃるようです。

object様、投稿日時: 2005-01-31 16:01
>ええ、「プロパティ」は象徴的に取り上げています。
>私は
>「ドメイン」の定義
>と言うよりは、
>「パラダイムとしてのオブジェクト指向」の明確化
>というスタンスだと思います。

現時点で構造の確立していないオブジェクト指向はパラダイムとは言えないわけですね。

私のここまでの理解が概ね正しいとして、私はobject様の主張に基本的に同意いたしますが、この件に同意できる前提には、以下の投稿に同意できる必要があると考えています。

object様、投稿日時: 2005-01-20 12:34
>#私が問題にしているのは、「情報・振舞」という「オブジェクト指向の基本カテゴリ」です。

すなわち、オブジェクトが「情報・振舞」を持っているということに同意できるか否かです。

この件については、実際には、疑問をお持ちの方が少なからずいらっしゃるようです。
それが端的に現れている投稿を以下に並べてみます。

tak3様、投稿日時: 2005-01-28 13:16
># ドメイン空間での情報がpublicであるっていうのが無い考えです。
># 情報自体は必ずなんらかのアクセッサを経由して取得すると考えます。
># Field = 情報と思ってませんが、Property = 情報とも考えません。

H2様、投稿日時: 2005-01-31 23:43
>前にも誰かが言っていましたが、「プロパティ」は .net が提供するSyntax
>Sugarであり、オブジェクト指向のもとのモデリングとはまったく違うレベルの話かと思います(注4)。
#この方はモデリングではインターフェースを振舞だけで考えていらっしゃると、私は勝手に深読みしました。

少なくともこのお二方は、ドメインモデリングにおいて、クラスが外側に公開するインターフェースとして振舞しか認めていらっしゃらないようです。
他にもそういう方が多くいらっしゃることが、各人の投稿の文脈から推測できます。
私は、これはもう人間の認識や知覚の世界のお話かと考えます。
すなわち、人間がモノを認識するときに、モノが外部に対して提供しているインターフェースを単一的に振舞として知覚するか、情報と振舞にカテゴライズするかは、その人の認識方法次第だということです。
仮に認識方法がこの二種類しかないとすると、オブジェクト指向には、認識方法の違いによって、オブジェクト指向A(振舞のみ)とオブジェクト指向B(情報・振舞い)の二種類が存在するのかもしれません。

また、以下の投稿は、もう少し違った観点から考えるべき内容かもしれません。

はにまる様、投稿日時: 2005-01-28 18:00
> まず恥を覚悟で素人的な質問をしますが、そもそも振舞と情報の客観的な区分け手段は存在するのでしょうか?

説明が難しいのですが・・・。
オブジェクトが外部に公開しているインターフェースを振舞と情報に分ける以前に、インターフェースとは何かを問うべきではないかと暗示していらっしゃるように聞こえます。
私の定義で恐縮ですが、私は、「オブジェクト指向とは、対象領域をオブジェクトとメッセージ(オブジェクト間でやり取りされるもの)で表現しようとする考え方である。」と定義しています。
このとき、インターフェースは、オブジェクトが受容し、応答し得るメッセージの集合と考えることが出来ます。

#視点を内側から外側に切り替えています。

可能性の話で、しかも本題から外れてしまうのですが、モデリング記法も言語も含めて、オブジェクト指向はメッセージを表現できるようにすべきではないかといった議論が可能ではないでしょうか。
この議論を尽くした上で、認識論としてどちらが残るのか、あるいは両方残るのか考えてみるのもありかと思います。

交通整理すると言いながら、自ら話を横道にそらしてしまいました。
結論として、私は、オブジェクトに「情報・振舞」を知覚することが出来るのであれば、多くの方がobject様の主張に同意できるのではないかと考えます。
また、私は認識の違いと判断してしまいましたが、もしobject様が、オブジェクト指向A(振舞のみ)はNGで、オブジェクト指向B(情報・振舞)しかOKであり得ない事を何かの形で示して頂けたら、この主張の理解者は増え、大きなストリームになるかもしれないと予感しています。

#駄文ゆえ、至らぬ点等あるかと思いますが、ご容赦を。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-02 09:34
引用:

本田@スミテムさんの書き込み (2005-02-02 03:57) より:
コード
  class Window //ウインドウクラス
  {
  /*プロパティ*/
    public int Left //ドメインモデルから導かれたLeftプロパティ
    {
      get
      {
        //省略
      }
      set
      {
        SetLeft(value); //LeftプロパティのsetをSetLeftファンクションが実現している
      }
    }
    public int Right //ドメインモデルから導かれたRightプロパティ
    {
      get
      {
        return GetRight(); //RightプロパティのgetをGetRightファンクションが実現している
      }
      set
      {
        //省略
      }
    }
  /*メソッド*/
    public void Show() //ドメインモデルから導かれたShowメソッド
    {
      DoShow(); //ShowメソッドをDoShowファンクションが実現している
    }
  /*フィールド*/
    private int m_nLeft; //ウインドウの左側面のx座標
    private int m_nWidth; //ウインドウの幅
  /*ファンクション*/
    private void SetLeft(int Left) //Leftプロパティのsetを実現するファンクション
    {
      //Leftに対する入力チェック
      m_nLeft = Left; //Leftプロパティの記憶をフィールドに実現させる
    }
    private int GetRight() //Rightプロパティ(派生属性の一例として)のgetを実現するファンクション
    {
      return m_nLeft + m_nWidth;//フィールドの演算によって実現させる
    }
    private void DoShow() //Showメソッドを実現するファンクション
    {
      //省略
    }
  }


るぱんです。

プロパティの一件は言語実装レベルの話でUML構造の本質的な問題ではない・・・と言う話の流れになっていると思います。

たとえば、上記の言語実装があればそれでかまわない・・・と言う話と考えています。
これはUML側の問題ではないのではないでしょうか?

むしろ、.Netから見たJavaの欠点を指摘する内容と考えられます。
UMLがかかわってこない事が問題だと思います。

Java側から見れば、それは、Setter、Getterを出してやればかまわないんじゃないか?
と言う感じになると思います。
下のコードはだめですか?

コード:
    //Windowクラス
    class Window{
        private 状態 状態1;        //プロパティ用
        private 内部フィールド;     //内部で使いまわす変数としてのフィールド
                                    
        public int getPropertyLeft(){
            return 状態1.getPropertyLeft()
        }

        public void setPropertyLeft(int propertyLeft){
            this.状態1.setPropertyLeft(propertyLeft)
        }

        public int getPropertyRight(){
            return 状態1.getPropertyRight()
        }

        public void setPropertyRight(int propertyRight){
            this.状態1.setPropertyRight(propertyRight)
        }

        public void busuinessLogic(引数){
            
            引数と内部状態フィールドを使った計算
            
        }
    }
    
    //状態クラス
    class 状態{
        private int propertyLeft;
        private int propertyRight;
        private int 窓サイズ;
        private String lastSet;
        
        public int getPropertyLeft(){
            return propertyLeft;
        }

        public void setPropertyLeft(int propertyLeft){
            this.propertyLeft = propertyLeft;
            lastSet = "Left";
            位置調整();
        }

        public int getPropertyRight(){
            return propertyRight;
        }

        public void setPropertyRight(int propertyRight){
            this.propertyRight = propertyRight;
            lastSet = "Right";
            位置調整();
        }
        
        private 位置調整(){
            if(lastSet.equals("Left"){
                propertyRight = propertyLeft + 窓サイズ;
            }else if(lastSet.equals("Right"){
                propertyLeft = propertyRight - 窓サイズ
            }
        }
    }



コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-02-02 10:10
自分に対する疑念を払拭する最後の手段として、相手にも同じ疑念をぶつけて逃れようと
悪あがき (プ しかし、それはるぱん氏がその場の思いつき、行き当たりばったりで取った
「咄嗟の行動」という感が否めない。しかし、少なくとも俺以外にもう一人、あんた
を対象としたその類の疑念を持つ者が「複数」存在するという事実をどう捉えておられ
ますかな?

またトボけて煙に巻かれないように、再度指摘しておきましょか。。。。

>投稿日時: 2005-01-24 12:27
>-----------------------------------------------------------------------------
> objectです。

>>zaxx_MDさん
>「るばんさんへのレス(投稿日時: 2005-01-20 14:15)」が不可解です。
>私も以前にここでの議論に対する「PM(プライベートメッセージ)」
>を何人かから貰った事があります。
>「議論に勝つ」事だけを目的に、陰で「談合」するのは一種の「荒し」だと思います。
>「もし、そうであるのなら」止めた方が良いと思います。
>#この様に書くと、表面化しない様に継続する場合が多いですが、結局は自分にマイナスに
>なると思いますよ?

ただの思い込みで何の根拠も無い者同士が、偶然似たような発想する確率が、それほど
高いとお思いでしょうかね?

盗人猛々しいとはよう言うたもんや (オプ

で、どこがどうループするって?
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-02 10:34
引用:

コブラさんの書き込み (2005-02-02 10:10) より:
自分に対する疑念を払拭する最後の手段として、相手にも同じ疑念をぶつけて逃れようと
悪あがき (プ しかし、それはるぱん氏がその場の思いつき、行き当たりばったりで取った
「咄嗟の行動」という感が否めない。しかし、少なくとも俺以外にもう一人、あんた
を対象としたその類の疑念を持つ者が「複数」存在するという事実をどう捉えておられ
ますかな?

またトボけて煙に巻かれないように、再度指摘しておきましょか。。。。

>投稿日時: 2005-01-24 12:27
>-----------------------------------------------------------------------------
> objectです。

>>zaxx_MDさん
>「るばんさんへのレス(投稿日時: 2005-01-20 14:15)」が不可解です。
>私も以前にここでの議論に対する「PM(プライベートメッセージ)」
>を何人かから貰った事があります。
>「議論に勝つ」事だけを目的に、陰で「談合」するのは一種の「荒し」だと思います。
>「もし、そうであるのなら」止めた方が良いと思います。
>#この様に書くと、表面化しない様に継続する場合が多いですが、結局は自分にマイナスに
>なると思いますよ?

ただの思い込みで何の根拠も無い者同士が、偶然似たような発想する確率が、それほど
高いとお思いでしょうかね?


では、zaxx_MDさんに出てきていただく以外に無いですね。
今回も当然PMは飛ばしてませんし今後飛ばすつもりもありません。
と言うわけで、コブラさんがPM飛ばして出てきてもらってください。
引用:

で、どこがどうループするって?


溝を感じていて、お互い説明して理解し合えなければまた溝が広がります。
何度と無くコブラさんと僕の間には溝ができていると思っています。
これは過去の経験上での話です。

今後も繰り返されるだろうと思います。
そしてまた再び・・・になってますよね。

あなたが感じた溝とはなんですか?
説明していただけませんか?
maya
会議室デビュー日: 2004/07/21
投稿数: 2
投稿日時: 2005-02-02 11:47
プロパティの件ですが、

C#などはプロパティという言語構造があるのでストレート?に記述できますが
JavaなどはそういうSyntaxSugarがないので、メソッドで記述ことになるはずです。

確かにgetter,setter以外のメソッドと区別が実装上ではつきにくい
(setLeft とか getLeft とかで分かりますが)のかもしれないですが
それは、実装レベルの話で構造上はどちらでもかまわないと思います。

実装はともかくgetter,setterを他のメソッドと設計上区別できたら幸せになれるのかなー
というような内容だと思っています
本田@スミテム
常連さん
会議室デビュー日: 2004/01/22
投稿数: 21
お住まい・勤務地: 東京
投稿日時: 2005-02-02 11:55
本田@スミテムです。

引用:

るぱんさんの書き込み (2005-02-02 09:34) より:
るぱんです。



るぱん様は、オブジェクト指向分析において、リアル空間からモノを抽出してドメイン空間にオブジェクトを切り出すとき、オブジェクトのインターフェース(外側から見える部分)をどのように認識されますか。
すなわち、A.「振舞」だけですか。それとも、B.「情報」と「振舞」ですか。

スレ主であるobject様のお考えは今のところ分かりませんが、私はこの両者の違いを個々人の認識方法の違いと考えています。
したがって、私の現在の考えでは、Aもありだし、Bもありです。
そして、今までのお話ぶりから、るぱん様はAではないかと思っています。

その上で、Aの場合、以下のようになると私は考えます。

ドメイン空間1
コード:

┌─────────┐ この図はUMLです。
│ Window │
├─────────┤
│ │ <- 分析レベルでは外側から観測できるものだけを
├─────────┤ 扱いますので、フィールドはまだ書きません。
│ getPropertyLeft │ <- インターフェースはすべて「振舞」として
│ setPropertyLeft │ 認識しています。
│ getPropertyRight │
│ setPropertyRight │
│ busuinessLogic │
└─────────┘



ドメイン空間2
コード:

┌─────────┐ この図はUMLです。
│ Window │
├─────────┤
│ 状態1 │ <- 設計レベルでは内側を作りこみますので
│ 内部フィールド │ フィールドも書きます。
├─────────┤
│ getPropertyLeft │
│ setPropertyLeft │
│ getPropertyRight │
│ setPropertyRight │
│ busuinessLogic │
└─────────┘



k-nak様風に書くと
コード:

┌───────────────────┐ この図はUMLではありません。
│ Window │ 左側はドメイン空間1からシームレスにマッピングしました。
├─────────┬─────────┤ 右側は設計レベルで作りこんだものです。
│ getPropertyLeft │ 状態1 │ privateメソッドなども右側に入ってくるかと・・・。
│ setPropertyLeft │ 内部フィールド │
│ getPropertyRight │ │
│ setPropertyRight │ │
│ busuinessLogic │ │
└─────────┴─────────┘



ソフトウェア空間
引用:

るぱんさんの書き込み (2005-02-02 09:34) より:
コード:

//Windowクラス
class Window{
private 状態 状態1; //プロパティ用
private 内部フィールド; //内部で使いまわす変数としてのフィールド

public int getPropertyLeft(){
return 状態1.getPropertyLeft()
}

public void setPropertyLeft(int propertyLeft){
this.状態1.setPropertyLeft(propertyLeft)
}

public int getPropertyRight(){
return 状態1.getPropertyRight()
}

public void setPropertyRight(int propertyRight){
this.状態1.setPropertyRight(propertyRight)
}

public void busuinessLogic(引数){

引数と内部状態フィールドを使った計算

}
}





結論を言えば、Aなら従来のUMLとjavaでOKです。

ただ、状態1クラスは設計段階にならないと導けない気がしています。

#仮に分析段階でリアル空間から状態1クラスを切り出せたとしても
#Windowクラスとの関連が導出できそうにありません。
#何故なら、関連がprivateだからです。
#私は分析レベルでは、観測可能なものだけ抽出します。

次に、Bの場合、以下のようになります。

ドメイン空間1
コード:

┌─────────┐ この図はUMLではありません。
│ Window │
├─────────┤
│ Left │ <- ここはフィールドではなく、観測可能な「情報」
│ Right │ すなわち、「プロパティ」です。
├─────────┤
│ Show │ <- こちらは、「振舞」=「メソッド」です。
└─────────┘



ドメイン空間2
k-nak様風に書きます。
コード:

┌──────────┐ この図はUMLではありません。
│ Window │ 左側はドメイン空間1からシームレスにマッピングしました。
├────┬─────┤ 右側は設計レベルで作りこんだものです。
│ Left │ m_nLeft │
│ Right │ m_nWidth │ 左上が「プロパティ」、左下が「メソッド」
├────┼─────┤ 右上が「フィールド」、右下が「ファンクション」
│ Show │ SetLeft │
│ │ GetRight │ プロパティ = f(フィールド、ファンクション)
│ │ DoShow │ メソッド = g(フィールド、ファンクション)
└────┴─────┘



ソフトウェア空間
引用:

本田@スミテムの書き込み (2005-02-02 03:57) より:
コード:

  class Window //ウインドウクラス
  {
  /*プロパティ*/
    public int Left //ドメインモデルから導かれたLeftプロパティ
    {
      get
      {
        //省略
      }
      set
      {
        SetLeft(value); //LeftプロパティのsetをSetLeftファンクションが実現している
      }
    }
    public int Right //ドメインモデルから導かれたRightプロパティ
    {
      get
      {
        return GetRight(); //RightプロパティのgetをGetRightファンクションが実現している
      }
      set
      {
        //省略
      }
    }
  /*メソッド*/
    public void Show() //ドメインモデルから導かれたShowメソッド
    {
      DoShow(); //ShowメソッドをDoShowファンクションが実現している
    }
  /*フィールド*/
    private int m_nLeft; //ウインドウの左側面のx座標
    private int m_nWidth; //ウインドウの幅
  /*ファンクション*/
    private void SetLeft(int Left) //Leftプロパティのsetを実現するファンクション
    {
      //Leftに対する入力チェック
      m_nLeft = Left; //Leftプロパティの記憶をフィールドに実現させる
    }
    private int GetRight() //Rightプロパティ(派生属性の一例として)のgetを実現するファンクション
    {
      return m_nLeft + m_nWidth;//フィールドの演算によって実現させる
    }
    private void DoShow() //Showメソッドを実現するファンクション
    {
      //省略
    }
  }





結論として、Bだと従来のUMLでは表現できません。
したがいまして、

引用:

るぱんさんの書き込み (2005-02-02 09:34) より:
プロパティの一件は言語実装レベルの話でUML構造の本質的な問題ではない・・・と言う話の流れになっていると思います。



言語キーワードのプロパティはともかく、分析レベルでの「情報」=「プロパティ」は従来のUMLで表現できないため、その構造が本質的に問題だと説明したつもりです。

引用:

るぱんさんの書き込み (2005-02-02 09:34) より:
たとえば、上記の言語実装があればそれでかまわない・・・と言う話と考えています。
これはUML側の問題ではないのではないでしょうか?


分かって実装される方ならそれでも構いませんが、皆がそのように実装するならはじめから言語文法に取り入れるべきかと考えます。
言語にも変化が必要ですし、もちろん、記法にも変化が必要です。
UMLが標準という立場を確立していくために変化する気があるのなら、UML側の問題です。

#UMLにその気がないのなら、Bの方々は、k-nak様風の記法を採用するでしょう。

引用:

るぱんさんの書き込み (2005-02-02 09:34) より:
むしろ、.Netから見たJavaの欠点を指摘する内容と考えられます。
UMLがかかわってこない事が問題だと思います。



繰り返しになってしまいますが、私はUMLの問題として書き込んだつもりです。
うまく伝わらなかったとすれば、申し訳ないです。

最後に
引用:

るぱんさんの書き込み (2005-02-02 09:34) より:
Java側から見れば、それは、Setter、Getterを出してやればかまわないんじゃないか?
と言う感じになると思います。



Aの認識をされる方なら、それでOKだと思います。

結局、分析段階で、オブジェクトが持つインターフェースに「振舞」のみ認めるか、「情報・振舞」を認めるかで、このスレッドに同意し、議論を継続できるかどうかが決まってくるのだと思います。



m_nRight -> m_nWidthに修正

[ メッセージ編集済み 編集者: 本田@スミテム 編集日時 2005-02-02 13:54 ]

スキルアップ/キャリアアップ(JOB@IT)