- 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 の冒頭にある感嘆符("!")で囲まれた部分が コメントであり、しかもそれがブラウザがテキスト保存時に 自動挿入したものだという事を知らないんだと思う 知らなきゃ、キモいという感想も自然ではないかと....
|
|