第3回 2002/08/19
復刻第33弾!!4年まえ
━━━━━━━━━━━━━━━━━━━━━━ 2002.08.19 Vol.554 ━━━━━━ □■□ ■□■□■□■□■ 日刊「WEBのツボ!!」 □■□ http://www.soho-union.com/ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 配信部数 2844部 【○】本日のお題 「システムはオブジェクト指向、そしてRubyで」(#003) ━━━━ 福井修@Fsys 暑いですが、オブジェクト指向とRuby の時間です。 前回は、オブジェクト指向のメリットとして『部品化』しやすい点を挙げました。 システムは、その設置環境(外部仕様、内部構造)によって同じものはありません。 建物も同じですね。共通に使えるものは部品化して、部品を使うことで、作るコスト を下げようという自然な発想に「オブジェクト指向」はよく似合うわけです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ オブジェクト指向ってそもそも何なんだ?! ────────────────────────────────────── もともと「オブジェクト指向(の方式)」というのは、従来の方法の問題点を分析し、 それに「手続き型(の方式)」という名前をつけて、それに対する、改善された新し い方式として名付けられて登場しました。これも前回説明済みですね。 いちど『オブジェクト指向って何?』という問いにも、正面から答えて見ます。 オブジェクト指向とは、次の認知概念によってモデル化し、実装する技術です。 「もの」の持つ機能による認知(これは何ができるものか) 「もの」の分類を行うことによる認知(これは何に似ているのか) 「もの」の構造による認知(これは何からできているのか) そしてオブジェクトに対するメッセージ(メソッドという)によって駆動するしかけが オブジェクト指向の方式です。 【参考】 浅海 智晴さんの 「オブジェクト指向分析/設計概論」 http://www.asahi-net.or.jp/~dp8t-asm/java/articles/OOAD/article.html 【補足】↑には、咲本さんお得意の『暗黙知』の話も登場します(^-^v ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ ではオブジェクト指向分析・設計は? ────────────────────────────────────── オブジェクト指向には、ものの認知、モデル化という本質があります。 これを具体的に実施するオブジェクト指向分析・設計に、UMLを利用しようというの が最近のトレンドです。 UMLとはオブジェクト指向を使ってモデリングする際に使われる統一的な表現(言語)で す。 UML(Unified Modeling Langage) の説明は最近頻出しています。 ・ 5分で絶対に分かるUML http://www.atmarkit.co.jp/fjava/devs/01fivemin/fivemin00.html ・ UML入門<基礎編> http://www.mamezou.com/tec/Tips/umlForBeginner/index.html まあ UML は 図を書く(これすなわちモデリング)際のお約束事なだけです。 ただしここから 開発方法論や、プログラムの実装へのさまざまな道筋がつながって 行きます。 真正面からシステム全部を網羅してUMLで書こうとするとその膨大さに圧倒されてし まいます。 冗長さを避け、いかに必要なポイントを押さえて作図するかは、まさに『職人技』の 世界になります。もともと『モデル化』自体が高度に知的な作業ですし。 現実の作図には、紙と鉛筆のスケッチがありなのですが、ソフトを使う場合、Visio という選択もあります。しかし Free でとてもすばらしい描画ソフトがリリースされ ているので ご紹介します。作者の福代 昌之さんや 貢献している皆様には、感謝です。 (従来 Molips と呼んでいたものが VersionUPで DynamicDraw と変更になりましたの でMolips という 旧呼称 もしばしば出てきますが混乱のないように。) ・ DynamicDraw http://www.molips.com/jp/ ・ MolipDraw Fun Club http://shibaguchi.com/molip/index.html ・ Dynamic Draw Supporters (UMLテンプレート 取扱説明書など) http://www3.to/d-d-s ・ Dynamic Draw 関連プラグイン http://www.cam.hi-ho.ne.jp/~hirosawa/DynamicDraw/ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ オブジェクト指向プログラミング ────────────────────────────────────── オブジェクト指向の特長(前回の復習) 1) カプセル化 (encapsulation) 2) 継承 (inheritance) 3) 多態性 (polymorphism) Javaは、これらの機能を言語仕様でサポートしていますので、評価を得ています。 VBは、メソッドとかは、オブジェクト指向風になっていますが、継承の機能は、もっ ていませんでした。VB.NETではサポートされたようです。 オブジェクト指向スクリプト言語 Rubyでは、もちろん全部サポートされています。 オブジェクト指向プログラミングの話では、Javaが頻出します。もともとC++向けに 書かれた分をJava向けにリライトしたものも多く、オブジェクト指向の本質は、言語 に依存しません。もちろん実装は、言語にておこなわれますので、言語による特徴が 現れます。 ではいよいよ総論と並行して、実際の Rubyプログラミングの話も進めましょう。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■■ Rubyプログラミングの基礎 ────────────────────────────────────── サーバサイドで、JavaやPHP,Perl の位置づけで オブジェクト指向をおいしく頂きな がら Ruby を使おう というのがターゲットなのですが、まずは最初の一歩からです。 ────────────────────────────────────── ■ 環境整備 ────────────────────────────────────── ・ Linux版ダウンロード http://www.ruby-lang.org/ja/download.html ・ Rubyインストール http://www.ruby-lang.org/ja/install.html ・ Windowsユーザの為のWindows版のてっとりばやい方法 ActiveScriptRuby http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/ からActiveRuby.msiをダウンロードして.msiファイルをクリックするだけです。 ・ Ruby 稼働の確認 (これはWindowsでの例。Linuxでも同様) プロンプト>ruby -v と入力して プロンプト>ruby 1.6.7 (2002-03-01) [i586-mswin32] とかバージョンが、正しく返ってくればOKです。 ────────────────────────────────────── ■ はじめの一歩 スクリプト言語としての Ruby ────────────────────────────────────── 【 Linuxの場合 】 ・ hello.rb ソースファイル作成 #!/usr/local/bin/ruby puts "Hello, Webのツボ!" ・ 実行 $ ./hello.rb bash: ./hello.rb: bad interpreter: Permission denied 実行権限がないと怒られます。 実行権限を付与してやります。 $ sudo chmod 755 hello.rb Password: では再度実行します。 ・ 実行 $ ./hello.rb Hello, Webのツボ! 【 Windowsの場合 】 ・ hello.rb ソースファイル作成 #!c:\program files\ruby\ruby.exe puts "Hello, Webのツボ!" ・ 実行 > ruby hello.rb Hello, Webのツボ! 簡単ですね(^^ゞ では 次のステップへ進みましょう。 ────────────────────────────────────── ■ オブジェクト指向 (class を使った) Ruby ────────────────────────────────────── 【 Linuxの場合 】 ・ oo.rb ソースファイル作成 #!/usr/local/bin/ruby -ke class Oo def initialize(x) @string = x end def println print @string, "\n" end end hello = Oo.new("オブジェクト指向スクリプトRuby!") hello.println ・ 実行 $ ./oo.rb オブジェクト指向スクリプトRuby! 【 Windowsの場合 】 ・ oo.rb ソースファイル作成 #!c:\program files\ruby\ruby.exe class Oo def initialize(x) @string = x end def println print @string, "\n" end end hello = Oo.new("オブジェクト指向スクリプトRuby!") hello.println ・ 実行 >ruby oo.rb オブジェクト指向スクリプトRuby! 何で1行文字を出力するのに、こんなに面倒なことをするのかは次に説明を進めます。 ・ クラスの定義 クラスの定義は、class と end で囲みます。 class クラス名 〜 end です。 ・ メソッドの定義 メソッドの定義は、 def と end で囲みます。 def メソッド名 〜 end 初期化メソッドのメソッド名は、initialize と決まっています。 この初期化メソッドは、インスタンスの生成 ( new )の 際に実行されます。 メソッド名は、自由に決定します。 ここでは、文字列出力メソッドとして println を定義します。 メソッドを決めて、その中の処理を記述してゆくのが、オブジェクト指向プログラ ミングのスタイルです。 ・ インスタンス変数の定義 @hoge = fuga クラスを使うと何がうれしいのかは、「継承」をつかって「差分プログラミング」 ができることです。 続く.... 【おまけ】 ■ Webテクノロジーの基礎知識 http://www-6.ibm.com/jp/software/websphere/developer/pdf/webtech.pdf Webサービスに至るまで、網羅的によく説明されています。 若干オブジェクト指向の説明もあります。 【プロフィール】 福井 修 ( FUKUI Osamu )o-fukui@po.iijnet.or.jp 福井システムリサーチ http://fsys.net/ 主幹。システム構築歴25年。 日本リヌクス協会、神戸商工会議所、情報処理学会 会員 関西ソーホ・デジタルコンテンツ事業協同組合員 流通科学大学 委託SE http://www.umds.ac.jp/ デジタルハリウッド三宮校 Java講師