トップページ > プログラム > 2014年07月23日 > EONIR3QI

書き込み順位&時間帯一覧

9 位/201 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000010225



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Rubyについて Part49
【Python】スクリプト バトルロワイヤル45【pl,rb,php,js】

書き込みレス一覧

Rubyについて Part49
686 :デフォルトの名無しさん[sage]:2014/07/23(水) 20:43:00.51 ID:EONIR3QI
>>685
横レスするけど、間違ってるよ
UML 2 で名前空間を表現するのはパッケージ図の役目になる
だから Ruby のモジュールは、
・名前空間であれば、パッケージ図上のパッケージとして描き、
・Mix-in であれば、クラス図上のインターフェイスとして描く
ことになる
ここで UML の標準言語である Java とは異なり、
Ruby ではClassクラスはModuleクラスのサブクラスである
(Java は UML と同様にパッケージ/インターフェイス/クラスを明確に使い分ける)
だから Ruby のクラスはクラス図上でクラスとして描くのに加えて、
・名前空間であれば、パッケージ図上のパッケージとしても描く
ことになる

Ruby の標準ライブラリの中では、Webサーバ・フレームワークである WEBrick が
上手にオブジェクト指向設計されているので、これを例としてみる
http://www.h6.dion.ne.jp/~machan/tmdoc/example/webrick.book/html/tmdoc.div.overview.html#tmdoc.div.ov-m-structure
・パッケージ図上でパッケージとして描く(=名前空間を持つ)モジュール/クラス
  クラス WEBrick::HTTPServer, モジュール WEBrick::HTTPServlet,
  モジュール WEBrick::HTTPStatus, モジュール WEBrick::HTTPUtils,
  モジュール WEBrick::HTTPAuth, モジュール WEBrick::Config,
  モジュール WEBrick::Utils, モジュール WEBrick::HTMLUtils,
  クラス WEBrick::CGI, モジュール WEBrick::AccessLog
・クラス図上でインターフェイスとして描く(= Mix-in である)モジュール
  Comparable, Enumerable, WEBrick::HTTPAuth::Authenticator,
  WEBrick::HTTPAuth::ProxyAuthenticator, WEBrick::HTTPAuth::UserDB
Rubyについて Part49
688 :デフォルトの名無しさん[sage]:2014/07/23(水) 22:35:32.47 ID:EONIR3QI
>>687
> その場合 WEBrick::HTTPServer クラスのメンバについては
> クラス図には書かない(書けない?)といった感じになるのでしょうか?

クラス図もメンバ(属性やメソッド)は書くし(書かざるをえないし)、書けるはずだと思う
Ruby のクラスはデータ型という本質的な役割があるけど、
それに加えて名前空間を提供するパッケージの役割も併せ持っている、という意味

> また、モジュールの場合でも名前空間 + Mix-in の場合など、
> インターフェースを実装している事を表したい場合は
> クラス図に登場させたくなるような気がします。

モジュールの場合も同様に、パッケージ図とクラス図のどちらにも書く(書かざるをえない)

なお、「書かざるを....」という言い回しは、書いて分かりづらくなるほうが
書かずに情報を欠落させるよりもずっとマシだ、というニュアンス

# 長くなるので、ここで一旦カキコを切る
Rubyについて Part49
690 :デフォルトの名無しさん[sage]:2014/07/23(水) 22:47:23.59 ID:EONIR3QI
(>>688の続き)

> 名前空間は名前空間、インターフェースはインターフェースと完全に分けて
> 設計・実装する感じになるんでしょうか?

個人的には、以下の「三つの役割を(意識的に)使い分けて設計する」のが望ましいと考える
・名前空間としてのモジュール
・Mix-in としてのモジュール
・データ型としてのクラス
この指針に従えば、たとえば
・(名前空間上の)下位モジュールを持つモジュールをMix-in すべきでは無いし、
・クラスは(名前空間上の)下位モジュール/下位クラスを持つべきではない
ことになる(WEBrick::HTTPServer のケースは(数少ない)指針違反に該当する)

なお、「望ましい(MAY)」というのは推奨であって、もしこの屁理屈に納得できたなら採用すればいい
という意味であり、決して「すべき(SHOULD)」とか「しなければならない(MUST)」ではない

Ruby コミュニティーの文化は「コードが設計である」という哲学が支配的なので、
こうしたオブジェクト指向設計論のたぐいは、国内外を通じほとんど浸透していない
(Rubyならコードとして書けるから使っているのに、一体何が問題なのよ?という空気....)
WEBrick は(Ruby 設計水準としては)「良くできた設計」であると思うけど、
Ruby の代表格である Rails を含めて、上記の指針をお気楽に無視したコードが巷に溢れている

# まだ続く
Rubyについて Part49
691 :デフォルトの名無しさん[sage]:2014/07/23(水) 23:09:49.61 ID:EONIR3QI
(>>690 の続き、これで終わり)

もしこうした「(UML による視覚化にも対応した)オブジェクト指向設計論」に興味があれば、
前記の指針に加えて「抽象クラスと具象クラスの使い分け」にも気を配ることが望ましい
これに関しては、他スレで議論していたので、参考になるかもしれない

・クラス名・変数名に迷ったら書き込むスレ。Part24
 http://peace.2ch.net/test/read.cgi/tech/1390230345/55-92
 例外(exception)クラスの命名を巡って、名前空間と抽象クラスの活用を提案

・オブジェクト指向なんて今すぐやめてください
 http://peace.2ch.net/test/read.cgi/tech/1384136223/193-382
 2D図形クラスの継承設計に関する問題を提示した
【Python】スクリプト バトルロワイヤル45【pl,rb,php,js】
93 :デフォルトの名無しさん[sage]:2014/07/23(水) 23:17:07.80 ID:EONIR3QI
>>88,91
おそらく >>90 は、>>88 の冒頭にある感嘆符("!")で囲まれた部分が
コメントであり、しかもそれがブラウザがテキスト保存時に
自動挿入したものだという事を知らないんだと思う

知らなきゃ、キモいという感想も自然ではないかと....


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。