銀の弾

September 04, 2008

オブジェクトとは

**************************************************************
_/_/_/_/_/_/_/  ソフトウェア業界 新航海術  _/_/_/_/_/_/_/_/_/
**************************************************************
第210号  2008/9/4 『オブジェクトとは』
  ▼  おしらせ:Ruby研修サービスを開始
  ▼  まえがき:オブジェクトって何?
  ▼  [銀の弾] (1)Chris Pine著「初めてのプログラミング」
  ▼  [銀の弾] (2)「オブジェクト」とは「メソッド(処理)の対象となるもの」
  ▼  [銀の弾] (3)クラス、インスタンス、オブジェクト
  ▼  [銀の弾] (4)Rubyではクラス自体もオブジェクト
  ▼  [銀の弾] (5)「オブジェクト」の一般的な定義
  ▼  [銀の弾] (6)Javaでのオブジェクト
  ▼  [銀の弾] (7)難しいことを考えなくてもオブジェクト指向になる
  ▼  [銀の弾] (8)オブジェクト指向再入門シリーズ


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  おしらせ:Ruby研修サービスを開始
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

慶ではRuby研修サービスを開始しました。

次回Ruby研修は9月27日(土)、10月4日(土)です。
詳細は、http://www.kei-it.com/rubykenshuu.html を参照してください。

興味のある方は、koffice@kei-it.com までお問い合わせください。



*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  まえがき:オブジェクトって何?
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

蒲生嘉達(がもうよしさと)です。

さて、読者は「オブジェクトって何?」と聞かれてどのように答えますか?

今回はこの点についてお話します。

尚、上流工程(モデリング)で「オブジェクト」と言った場合、
「現実世界の人や物」を指しますが、ここではオブジェクト指向
プログラミング(OOP)での「オブジェクト」について扱います。



*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (1)Chris Pine著「初めてのプログラミング」
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

最近、Chris Pine著「初めてのプログラミング」を読みました。
Rubyを使ってプログラミングの基本を教えている本です。

「Rubyを使ったらオブジェクト指向の教え方はどのようになるのか」
ということに興味があったので読んでみました。

私はこの本を読んで初めて、Rubyでの「オブジェクト」がJavaでの
「オブジェクト」と少し違うことを知りました。



*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (2)「オブジェクト」とは「メソッド(処理)の対象となるもの」
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

Rubyの場合「オブジェクト」という概念は非常に分かりやすいです。

「メソッド(処理)の対象となるもの」というような概念です。

したがって、整数はオブジェクトです。
例えば、「 1 + 2 」と書いた場合、1 と 2 はオブジェクトで、
+ はメソッドです。

文字列もオブジェクトです。
例えば、「 'hello' + 'wolrd' 」と書いた場合、 'hello' と 'wolrd'
がオブジェクトで、+ はメソッドです。


(Javaでは文字列はオブジェクトですが整数はオブジェクトでは
ありません。)



*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (3)クラス、インスタンス、オブジェクト
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

クラス、インスタンス、オブジェクトの概念の関係も、Rubyでは
非常にシンプルです。

基本データ型はクラスでもあるので、上記例での整数の 1 と 2 は
整数クラス(Integer)のインスタンスでもあり、オブジェクトでもあります。

あるいは、上記例での 'hello' と 'wolrd' は文字列クラス(String)の
インスタンスでもあり、オブジェクトでもあります。



*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (4)Rubyではクラス自体もオブジェクト
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

同様に次のものもオブジェクトです。

・浮動小数点数、配列、特別なオブジェクト(true、false、nil)
・既存の様々なクラス(Timeクラス、Hashクラス・・・)のインスタンス
・自分で作ったクラスのインスタンス


さらに、クラス自体もオブジェクトです。

「 String.new 」と書いた場合は、new がメソッド、Stringクラス
そのものがオブジェクトです。

メソッドの対象となるが故に、クラスそのものもオブジェクトなのです。


では、逆にオブジェクトでないものは何でしょうか?

「 var = 8 」と書いた場合、8 はオブジェクトです。
しかし、var はオブジェクトを指すものであり、それ自体はオブジェクト
ではありません。



*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (5)「オブジェクト」の一般的な定義
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

上記のようなRubyでの「オブジェクト」の扱いは、一般によく言われる
次の定義とも一致します。

「オブジェクトとは振る舞い(メソッド)とデータとを1つにまとめたもの」


整数オブジェクトの 1 は整数オブジェクトであるが故に、それが
生成された時点で各種演算子メソッドと関連付けられているのです。



*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (6)Javaでのオブジェクト
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

上記はRubyでの「オブジェクト」の概念です。

Javaでの「オブジェクト」は少し違います。

その点について書くと長くなり過ぎるので「新航海術の補足ブログ」
の方に載せます。

興味のある方は下記記事を参照してください。

 [新航海術の補足ブログ] Javaでの「オブジェクト」
 http://www.gamou.jp/comment/2008/09/java-3c55.html



*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (7)難しいことを考えなくてもオブジェクト指向になる
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

Chris Pine著「初めてのプログラミング」は、他の言語を利用した
入門書と同じく次の流れで解説が進みます。

 単純な計算→文字列→変数→メソッド→配列→ファイル→クラス→・・・


他の言語を利用した場合との違いは、最初から「オブジェクト」という
言葉をごく自然に、しかも、頻繁に使っている点です。

次のように・・・。

> これまで、数種類のオブジェクト(つまり、整数、浮動小数点、
> そして文字列)について見てきました。そして、それらを指し示す
> 変数を作りました

> putsがオブジェクトを表示するときには、その前に密かにto_sを使って、
> そのオブジェクトを文字列に変換していたのでした。

> メソッドの技術的な定義は「何かを行うもの」です。(文字列や整数
> や浮動小数点のような)オブジェクトをRubyの名詞とするなら、
> メソッドは動詞のようなものです。

> Rubyにはプログラム全体を表す特別なオブジェクトが用意されていて、
> プログラムはいつも必ずその中に入っているということを覚えて
> おいて下さい。


私は、冒頭で「初めてのプログラミング」を読んだ理由を次のように
述べました。

> 「Rubyを使ったらオブジェクト指向の教え方はどのようになるのか」
> ということに興味があったので読んでみました。


読んでみて、「Rubyを使えば難しいことを考えなくても、オブジェクト
指向のプログラムを自然に書けるようになる」ということが分かりました。



*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (8)オブジェクト指向再入門シリーズ
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

オブジェクト指向については、以前「オブジェクト指向再入門シリーズ」
で解説したことがあります。

 オブジェクト指向再入門シリーズ:
 [HP版] http://www.kei-it.com/sailing/back_oop.html 
 [Blog版] http://www.gamou.jp/sailing/cat8101413/index.html


オブジェクト指向再入門シリーズは、平澤章著「オブジェクト指向で
なぜつくるのか」
を参考にして、メモリの側からクラス、インスタンス、
継承、ポリモーフィズムの仕組みについて解説しました。

興味のある方は参照してください。



*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  本メルマガについて
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

本メルマガの精神については、発行者サイト
http://www.kei-it.com/sailing/index.html を参照してください。


本メルマガの内容に興味を持つであろう方をご存知なら、是非、
本メルマガの存在を教えてあげてください。

(以下をそのまま転送するだけです。)
---------------------------------------------------
【お勧めメルマガ ソフトウェア業界 新航海術】
http://www.mag2.com/m/0000136030.htm または
 http://www.gampu.jp/sailing/ または
 http://www.kei-it.com/sailing/ 
--------------------------------------------------

このメールマガジンは『まぐまぐ!』 http://www.mag2.com/ を利用して
発行しています。配信中止はこちら http://www.mag2.com/m/0000136030.htm
(但し、慶社員には社内のメーリングリストで配信しています。)

「まぐまぐ!」での読者数は2008年9月7日現在、711名です。

バックナンバーは、発行者サイトまたはブログで、体系として
見てもらいたいので、「まぐまぐ!」でのバックナンバー公開は
最新号のみとなっています。

発行者サイト: http://www.kei-it.com/sailing/
(バックナンバーの全文検索も可能です。)

ブログ:http://www.gamou.jp/sailing/
(人気記事ランキングが見られます。)

|

July 22, 2008

Java技術者が時間を費やしていること

**************************************************************
_/_/_/_/_/_/_/  ソフトウェア業界 新航海術  _/_/_/_/_/_/_/_/_/
**************************************************************
第207号  2008/7/21 『Java技術者が時間を費やしていること』
  ▼  まえがき
  ▼  [銀の弾] (1)Javaに何が起きたのか?
  ▼  [銀の弾] (2)Java開発では各種フレームワークを組み合わせる
  ▼  [銀の弾] (3)Java技術者が時間を費やしていること
  ▼  [銀の弾] (4)銀の弾はない(No silver bullet)
  ▼  [銀の弾] (5)Ruby on Rails は「銀の弾」となり得るか
  ▼  [銀の弾] (6)注釈:マーチン・ファウラー、フレームワーク

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  まえがき
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

蒲生嘉達(がもうよしさと)です。

Bruce A.Tate著「JavaからRubyへ」を読みました。
http://www.amazon.co.jp/exec/obidos/ASIN/4873113202/keiitteanifty-22

これをヒントしにて、ソフトウェア開発の将来について考えていこうと
思います。


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (1)Javaに何が起きたのか?
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

「JavaからRubyへ」の中に「Javaに何が起きたのか?」という
マーチン・ファウラー氏(注1)へのインタビュー記事が掲載されて
います。

ファウラー氏はそこでJavaの現状を次のように批判しています。

Javaな人たちは、ビジネスの中核ではない、周辺を取り巻く
技術要素に時間を費やしすぎています。
技術的な複雑性は、ビジネス課題の解決の役には立ちません。
      ・・・(中略)・・・
「銀の弾はない」というのは、本質的複雑性と偶発的複雑性とを
区別するということです。
たとえば、給与支払システムの開発では、給与支払の業務ルールは
本質的な複雑性です。
しかし、Javaの労力のほとんどを占めているのは偶発的複雑性です。
EJBの大失敗はこの最たる例です。
      ・・・(中略)・・・
SpringとHibernateはEJBに比べれば格段に進歩していますが、
それでもまだ、偶発的複雑性に満ち満ちている印象を拭えません。

       ( Bruce A.Tate著「JavaからRubyへ」より )


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (2)Javaでは各種フレームワークを組み合わせる
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

ファウラー氏が言及している「Spring」と「Hibernate」はJavaの
フレームワーク(注2)の一種です。

Javaのフレームワークというと「Struts」が最も知られています。
Strutsはアプリケーションを、モデル、ビュー、コントローラに
分割することを主目的としたフレームワークです。

それに対し、Springは外部のオープンソースソフトウェアとの連携が
得意なフレームワーク、HibernateはJavaオブジェクトとリレーショナル
データベースとをマッピングするためのフレームワークです。

昨今のJava開発は様々なフレームワークを組み合わせて行われます。

典型的なJavaプロジェクトでは5から10のオープンソースのフレーム
ワークを使用します。
各フレームワークを連携させてアプリケーションを動作させることは、
Java開発での重要な作業です

       ( Bruce A.Tate著「JavaからRubyへ」より )


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (3)Java技術者が時間を費やしていること
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

上述のとおりファウラー氏は、Java技術者が周辺技術に時間を費やし
過ぎていることを批判しています。

「JavaからRubyへ」に出てくる、同様の批判をいくつか紹介します。

・EJBやSpringのようなアプリケーションを統合するグルーコードを
 提供するフレームワークは、開発の生産性を向上させるかもしれ
 ませんが、学習曲線の勾配も急になります

・彼らはフレームワークの複雑さを管理するためのツールや技法に
 時間を投資しています。

・Javaの良くないところは、もっと素朴なテクノロジを使うべき
 ユーザに対しても、エンタープライズフレームワークを使うように
 働きかけていることです。

・数え切れないほどの選択肢からフレームワークを正しく選ぶことは
 至難の技ですし、選んだフレームワークを使った開発を軌道に乗せる
 のもまた難しいです。

           (Bruce A.Tate著「JavaからRubyへ」より)


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (4)銀の弾はない(No silver bullet)
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

ファウラー氏がインタビューで述べている「銀の弾はない」
(No silver bullet)とは、「人月の神話」で有名なフレデリック・
ブルックスが1986年に著した論文のことです。

この論文のミソは、ファウラー氏も指摘しているとおり、本質的複雑性
( essential complexity )と偶発的複雑性( accidental complexity )
とを区別して考えているというところにあります。

「銀の弾はない」に興味のある方は、ブログ「新航海術の補足」の
下記の記事を参照してください。

 「『銀の弾はない』を深く知りたい方のために」
 http://www.gamou.jp/comment/2008/07/post_13bb.html


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (5)Ruby on Rails は「銀の弾」となり得るか
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

Javaもフレームワークも本来は偶発的複雑性(accidental complexity)
を排除するための技術でした。

しかし、皮肉なことに、それらとそれらの組み合わせが複雑化する
ことによって、新たな偶発的複雑性を生み出してしまったのです。

果たして、Ruby on Rails はその偶発的複雑性を打ち砕く「銀の弾」と
なり得るでしょうか?


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
[銀の弾] (6)注釈:マーチン・ファウラー、フレームワーク
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

【注1:マーチン・ファウラー】

マーチン・ファウラー(Martin Foeler)氏は、米国で活躍している
著名なソフトウェア技術者です。
アジャイルソフトウェア開発宣言の起草者の一人です。

本メルマガでも、第73号「ファウラー氏の請負契約観」で取り上げた
ことがあります。

 第73号:ファウラー氏の請負契約観
 [B] http://kei-it.tea-nifty.com/sailing/2005/05/post_deaf.html
 [H] http://www.kei-it.com/sailing/73-050502.html


【注2:フレームワーク】

フレームワークそのものについては、第202号の「(2)フレームワーク」
を参照してください。

 第202号:オブジェクト指向プログラミングは万能選手ではない
 [B] http://www.gamou.jp/sailing/2008/03/post_751c.html
 [H] http://www.kei-it.com/sailing/202-080324.html


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  本メルマガについて
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

本メルマガの精神については、発行者サイト
http://www.kei-it.com/sailing/index.html を参照してください。

本メルマガの内容に興味を持つであろう方をご存知なら、是非、
本メルマガの存在を教えてあげてください。

(以下をそのまま転送するだけです。)
---------------------------------------------------
【お勧めメルマガ ソフトウェア業界 新航海術】
http://www.mag2.com/m/0000136030.htm または
 http://www.gampu.jp/sailing/ または
 http://www.kei-it.com/sailing/ 
--------------------------------------------------

このメールマガジンは『まぐまぐ!』 http://www.mag2.com/ を利用して
発行しています。配信中止はこちら http://www.mag2.com/m/0000136030.htm
(但し、慶社員には社内のメーリングリストで配信しています。)

「まぐまぐ!」での読者数は2008年6月20日現在、688名です。

バックナンバーは、発行者サイトまたはブログで、体系として
見てもらいたいので、「まぐまぐ!」でのバックナンバー公開は
最新号のみとなっています。

発行者サイト: http://www.kei-it.com/sailing/
(バックナンバーの全文検索も可能です。)

ブログ:http://www.gamou.jp/sailing/
(人気記事ランキングが見られます。)

|