- PR -

.NET開発者のためのリファクタリング入門について

投稿者投稿内容
ノリック
会議室デビュー日: 2004/12/16
投稿数: 8
投稿日時: 2004-12-16 09:14
こんにちは。
件名の記事を読んでいるときに良くわからないことがあったので質問させてください。

この記事の4ページ目の一番上に「データに関する書き換え」という段落があります。
ここでフィールドのカプセル化を行う場合、getXXXやsetXXXというメソッドに書き換えるよりも.Netではプロパティにすることが望ましいとあります。
なぜ.Netではプロパティにすることが望ましいのでしょうか?
またなぜJAVAではメソッドにするのが望ましいのでしょうか?
ご教授お願いします。
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2004-12-16 09:16
見やすいから?

++SomeProperty;

SetSomeProperty(GetSomeProperty()+1);
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-12-16 09:55
プロパティ構文があるかないかの違いだと思います。
また、プロパティは単にメソッドの略記ではなく、Reflection で
プロパティが要求されることが多いのも理由でしょうか。
ノリック
会議室デビュー日: 2004/12/16
投稿数: 8
投稿日時: 2004-12-17 08:04
参考になりました。これで後輩からつっこまれても何とかなりそうです。
ありがとうございました。
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2004-12-17 11:23
objectです。

>ノリックさん
>なぜ.Netではプロパティにすることが望ましいのでしょうか?
>またなぜJAVAではメソッドにするのが望ましいのでしょうか?
少し遅れレス気味ですが、

オブジェクト指向は、「情報、振舞」を「基本カテゴリ」として展開されます。

そして、「.NET」に於いては、
「情報」の本質は、「フィールド」では無く「プロパティ」である
と考えている

また、「Java」に於いては、
「カプセル化・柔軟性」その他の事を根拠に、結局は
「情報」の本質は、「振舞」である
と考えている
#要するに、「Java」はオブジェクト指向の「基本カテゴリ」は「振舞」であると考えている事になる!

と解釈するのが妥当だと、私は考えています。

[ メッセージ編集済み 編集者: object 編集日時 2004-12-18 23:42 ]
guion
常連さん
会議室デビュー日: 2004/12/24
投稿数: 30
投稿日時: 2004-12-31 13:55
こんにちわ。
# UML:関連クラスの誤解について
でobjectさんに案内されました(^^;

ノリックさん、2004-12-16 09:14
>JAVAではメソッドにするのが望ましい

望ましいんじゃなく、Javaではそれしか手が無いっていうだけだと思います。

つまり、.NETでもメソッドにするのが望ましいけど、
プロパティにするほうが「もっと望ましい」のだろうと思います。

まあ実際、属性を管理する手段としては、プロパティのほうが断然便利ですしね。
有るならば是非使いたいものです。

ちなみにプロパティかメソッドかという違いは、文法上の些事でしかない、ともいえます。
見た目がちょびっと違うだけ。そして言語制定者がどう制定したかの違いでしかない。

判りやすい例はruby言語あたりだと思います。
メソッドの引数に括弧を必要としなかったり、
メソッド名の末尾に「=」という文字が入ることを許したりしてるんで、
(更に、メソッド名末尾の「=」と、それより前の文字との間は、空白を空けてもOKらしいです。文法を小細工してますねー。)
一見プロパティに見えるものが実はメソッドだったりするわけです。
まあそんな言語も有ります(そして作れます)。それだけのことだと思います。


----
objectさん、2004-12-17 11:23
> そして、「.NET」に於いては、
>「情報」の本質は、「フィールド」では無く「プロパティ」である

>また、「Java」に於いては、
(中略)
>「情報」の本質は、「振舞」である

うーん。そこまで高邁な意識を彼らが持っていたかどうか疑問です。

そして、どうせ.NET(やDelphi)のプロパティは、その背後にフィールドだけじゃなく振る舞いも持ち得るんで、
プロパティ方式の言語のほうも、
「「情報」の本質は、「振舞」である」
と(も)言えてしまいます。

上でRubyの例も出しましたが、プロパティってのは要するに「構文糖」だと思います。
(構文だけじゃなくRefrectionなどの方面へも糖分を出していますが。)

ちなみにJavaの姿勢は、単純に
「CやC++から用意に類推できる構文要素しか、用意する気が無い」
という後ろ向きなものだ、と言っていいのだと思います。
OOPに対する高邁な思想とかなんとかといったものではなく、単に(狙った市場が※)ショボイだけ。

※つまりC/C++ユーザからの乗り換え客を狙った商売戦術という奴です。
乗り換え客がショボイというわけではないんですが、
それだけしか狙わないという戦術はショボイと思います。言語の近代化を阻害しますからね。

もしかするとJavaのほうも、「「情報」の本質は、「振舞」である」などと言うツモリは更々無かったけど、
たまたま対応する文法要素(プロパティのような)を用意する根性が無かったもんだから、
世間ではそのように解釈(誤解)されちゃってる、ということなのかも知れません。


なお、上記スレでも出てきましたが、
UMLの「クラス」が「属性」と「メソッド」しかサポートしてなくて、
それ以外の要素(たとえばプロパティのような)をサポートしてないってのは、
なんとも寂しい話だと思います。

object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2005-01-01 14:02
objectです。

>guionさん
>>こんにちわ。
>># UML:関連クラスの誤解について
>>でobjectさんに案内されました(^^;
明けましておめでとう御座います。
丁寧に経緯を書いて頂いて有難う御座います。
本年も宜しくお願い致します。

>ちなみにプロパティかメソッドかという違いは、文法上の些事でしかない、ともいえます。
>見た目がちょびっと違うだけ。そして言語制定者がどう制定したかの違いでしかない。
「言語制定者の制定次第」という一面は、確かにあると思います。
#この観点を採用すると、全てのモノに蓋然性が導入されてしまいますが…。
しかし、「オブジェクト指向」で言われる
「情報・振舞」
という「カテゴリ」は、
普通にソフトウエア技術者が考えている以上に本質的で重要な概念
であると私は考えています。


>そして、どうせ.NET(やDelphi)のプロパティは、その背後にフィールドだけじゃなく振る舞いも持ち得るんで、
>プロパティ方式の言語のほうも、
>「「情報」の本質は、「振舞」である」
>と(も)言えてしまいます。
この判断は、
「プロパティ・メソッド」と「フィールド・ファンクション(含プロシジャー)」を同じレベルで考える
事で起きていると私は考えています。

少し大袈裟な事をいう様ですが、
私は、今の「ソフトウエア科学」はある種の「ドグマ」に陥っていると思っています。
そして、そのドグマを克服しない限り、
「モデリング言語」はスタート地点に先ず立つ事が出来ない
のではないかと思っています。

「ドグマ」の一例をあげると、
「メソッド」の記述で「フィールド」を利用する -> 「可」
「プロパティ」の記述で「ファンクション」を利用する -> 「非」
という、一方的な差別です。

「プロパティ」に対する先入観をベースに考え直してみると、
「メソッド」の記述に「フィールド」利用するのは駄目
という結論に、本来ならなるべきではないでしょうか?

私は、
「プロパティ・メソッド」

「フィールド・ファンクション」
を同じレベルで考えるべきでは無いし、
「これらの関係を整理し直す事」
が重要だと思っています。

これらの概念を支える視点を強いてあげれば、
「プロパティ・メソッド」->「モデリング言語」
「フィールド・ファンクション」->「プログラミング言語」
と言えると思います。

以上の要約を述べると、
「プロパティ」->「フィールド・ファンクション」で記述
「メソッド」->「フィールド・ファンクション」で記述
#詰まり、
#「フィールド・ファンクション」は「実装概念」と言っても良いと思います。

取り合えず、以上の内容を纏めてみました。

[ メッセージ編集済み 編集者: object 編集日時 2005-01-01 15:05 ]
ノリック
会議室デビュー日: 2004/12/16
投稿数: 8
投稿日時: 2005-01-04 10:40
あけましておめでとうございます。
guion様、object様、回答をいただきありがとうございました。
JAVAにはプロパティ構文が無いということを全く失念しておりました。勉強不足でした。

たしかにメソッドでもいいけどプロパティのほうがよりよいということで納得できました。
会社の先輩にも確認したところ、プロパティのほうがUMLで書いた場合にわかりやすくなるという意見もありました。JAVAの場合UMLを書いているとメソッドだらけになるので見づらくなって困るとのことでした。

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