メルマガ ソフトウェア業界 新航海術 バックナンバー




ソフト会社の心臓

全バックナンバー


技術


開発プロセス

製品・サービス


組織


営業


財務


人事・労務


産業

 

第210号  2008/9/4 [銀の弾]

オブジェクトとは

 


**************************************************************
_/_/_/_/_/_/_/  ソフトウェア業界 新航海術  _/_/_/_/_/_/_/_/_/
**************************************************************
第209号  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/
(人気記事ランキングが見られます。)









<< [第209号]    [全バックナンバー]     [銀の弾]    [第211号] >>
   

メルマガ登録ページ


まぐまぐ!ソフトウェア業界 新航海術 (マガジンID:0000136030)

(c)Copyright Kei Co.,Ltd All Right Reserved