JJ:ジャンのジャバ学習日誌

私のJava学習の記録です。ジャバ学習日記からジャバ学習日誌に名称を変更しました。

末広ページへ このコーナの目次昨年のJJ日誌


☆ 2002年10月24日(火)

 「オブジェクト指向」に関してJマガを書くにあたって,かってどのレベルまで,自分でまとめたか確認しようと思い,末広ページ全体に対して,「オブジェクト指向」で検索を書けたら,99ページあり,262カ所に「オブジェクト指向」という用語が登場していた。どこかに,オブジェクト指向の核はこれであると,ぎりぎりに考えた記述がどこかにあるので,ここから探さなくてはいけない。これから,自分でもすぐに分かるようにJava用語辞典に書いておくことにする。

 最近書いたものは,Jマガ17号にあった。

 ここで,クラスとインスタンスを説明しましょう。

 元来,クラスは,集合(グループ)を表します。運動場などで,「2年1組の人は,鉄棒のところに集合!」と号令をかけて,集まるものが,一つのクラスです。そのクラスに所属している一人一人は,一般にはメンバと言われます。しかし,オブジェクト指向の世界では,メンバと言わずに,インスタンスといいます。オブジェクト指向でメンバーというと別の意味になり,これはまた別の号で解説をします。

 クラスの一員になるインスタンスですが,インスタンスという英語自体は,実例という意味です。たとえば,果物というクラスを考えると,その果物に属する,そこのリンゴ,ここのミカンというのがインスタンス(実例)です。クラスというものを抽象的な概念と考えて,それを具体化したものとしてインスタンス(実例)と言っています。先の運動場に集まった2年2組のクラスの人の例でいうと,2年2組というクラスは抽象的なもので,そこに属する一人一人の学生がインスタンス(実例)であると考えます。
 このようにクラスは,ある時は,集合全体を指し,また,ある時は,その集合を抽象的なものとして指します。

 オブジェクト指向関係の用語では,オブジェクトというと,クラスとインスタンスの両方を表します。Jマガでは,クラス,インスタンスと区別出来るときは,できるだけオブジェクトという用語は避けて,クラスやインスタンスという用語を今後使っていくことにします。

 抽象的なものとしてクラス,それを具体化したもとしてインスタンスととらえるということで,クラスを設計書,インスタンスをそれから作られ製品のイメージで説明されることも多いです。また,オブジェクト指向のメリットして,現実のものを抽象化しているので,わかりやすいという説明が多くあります。

 私はこの2つの見方を良くないと考えています。

 クラスとインスタンスは,設計書とそれを元にした製品という感じではなく,両方とも体と意志を持ったものとしてとらえます。クラスとインスタンスは,クラスが本物で,インスタンスは分身という関係です。例えると,分身の術を使う忍者,パーマンのコピーロボット,ヤッターマンの大型ロボットの中から出てくる小型ロボット,また,妖怪や密教の菩薩や観音様のような感じです。例えば,

 Graphics xg;

 は,Graphics が忍者で,xg がその分身です。また,Graphics がパーマンで,xg が パーマンのコピーロボットのようなものです。絵を描く Graphics という大型ロボットがおり,そこの口の中から,小型ロボットが登場して,それが筆の格好をしているという感じを想像してもいいです。

 現実の世界のものを抽象化しているからオブジェクト指向は分かりやすいという説明に対しては,オブジェクト指向のオブジェクは,「もの」というには,あまりにも意志を持ちすぎであると反論します。現実にあるものを抽象化したというレベルではなく,さらに,その物に魂を吹き込む感じです。Graphics xg; としたときの xg は,人がそのペンを持って絵を描くまで,じっとしている筆ではなく,筆の形をしたロボットで,スィッチを入れたら,勝手にどんどん描いていく感じです。

 クラスは本物で,インスタンスをそれの分身というイメージでプログラムにもどって説明を続けましょう。

 岐阜大学のJavaの授業で解説したものが,まとめてあった。

 「オブジェクト指向とは何か」は,プログラム経験が豊富な人向けの解説である。

 また,以下のようなメモがあった。

 継承 extends
 クラスとインスタンス
 型からクラス

 メソッド
 メッセージ

 オブジェクト指向の特色は,カプセル化(データ+関数),インスタンス生成,継承の3つとして解説を書いてみることにする。イベントドリブン,メッセージパッシングは本質的なものでなく,付属的なものとして扱うことにする。

 本日購入した本は,『Javaデザインパターン徹底攻略』である。Java初心者にデザインパターンを説明しようとしている意欲的な書籍である。

 

☆ 2002年10月23日(月)

 またまた,この学習日誌を久しぶりに書く。これから,久ぶりに書いてもこの買い出しで始めることはやめにする。そうしないと,毎回こんな始まりの文になってしまう。

 秋の情報処理技術者試験の日程が近づいてきている。基本情報処理技術者受験する学生に説明してほしい項目のリクエストをとったところ,オブジェクト指向を説明してほしいと言われた。それで,Jマガの第29号では,オブジェクト指向をさっそく扱うことにした。オブジェクト指向に関して,私は,10年ほどまえに,「わっかった」という瞬間があった。それは,今までの自分のソフトウェア工学上のバックグランドの上に向かえた瞬間出会った。それを学生の諸君にうまく説明するのは,正直難しい。学生がリクエストしてきたとき,「先生,困った顔をしているよ」と言われてしまった。しかし,今は,過去からつながりでオブジェクト指向を説明しなくても,あるがままに説明することが可能ではないかと考えている。Jマガ29号ではなんかうまく説明できそうな気がしている。

 最近,『Javaチュートリアル第3版』を読んでいる。この本は,チュートリアル(入門)と題がついているが,題名は妥当ではない。Javaをある程度知っている,さらに,オブジェクト指向に関してある程度知っていないと読んでも分からない内容が,ばんばん登場する。題名から言うと,日本語訳の題名でも入門とせずに,「チュートリアル」としているので,入門であると誤解する日本人は少ないので実害はないであろう。また660ページもあるの本であるので,入門書と思って購入する人もいなであろう。

 題名はともかく,この本はおもしろ。私は,Javaのインターフェースに関して,かねてから不思議な感じがしている。私の理解は,Javaのインターフェースは,多重継承を実現する手段,さらに,定義と実装をモジュールレベルで分離する手段である。この分離する手段というのは,Modula-2の定義モジュールと実現モジュールのようなイメージである。この本では,インターフェースは,他のオブジェクトから利用されるときの「インターフェース」であると説明がしてある。なるほど,だから「インターフェース」という英語が使われたのである。やっとこの用語の意味が理解できた。インターフェースに関する疑問の一つが解決した。(まだインターフェースに関する疑問は別にあるが)

 この本では,コンストラクターの特色として,「return がない」と書いてある。この視点は私には無かった。言われてみればその通りである。コンストラクタは,メソッド名がクラス名と同一で,返値がないと説明したある本が多いし,この本もそうである。そこまでなら,普通の記述であるが,この本は,そこに return がないと書いてあるのが,凄いところである。けっこう本質的な解説である。私は,コンストラクタの返値はそのクラスであるという考えである。return がないという記述は私の主張に対してかなりの痛手?である。

 この本は,abstract の説明のところで,「修飾子abstractは,そのクラスがインスタンス化不能であることを宣言します」と説明しているが,なぜ,こんな説明が許されるのか驚きである。これは,私に言わせると「女性とは男性トイレに入れない人です」という説明と同じである。しかし,この説明をもとに展開していく内容は私にはかなりおもしろい。今,Java関連の本の中で私には一番おもしろい本となっている。

☆ 2002年8月25日(日)

 この学習日誌を久しぶりに書く。

 Jマガは,第24号を昨日出す。4月から,Javaの授業が,専門学校でも本格的に開始され,Jマガを授業の副教材として位置づけ,専門学校・大学の私の授業で利用する方向で出している。そのため,教科書の順に合わせている。第24号では,フレームやパネルなどを扱うことにしていたが,かなり複雑で大変である。いっきにまとめようとしたところが,失敗であった。原則に立ち戻り,小さいテーマで,頻繁にJマガを出していく方向,さらに,教科書に順番を準拠する方針を守るべきであった。

 Jマガの発行をお願いしている,えぐっちさんから,Jマガで,Robocodeを扱ったらどうかと,提案があった。Robocodeは,専門学校の授業ですでに,やっているが,インストールをして,軽く紹介した程度である。Jマガで扱うにはさらに研究する必要がある。ソフトバンクの発行している『ジャバデベロッパー』でも創刊号から最新号の10号まで連続して記事がなるのほど,ブームの兆しである。教材としても面白いので,扱っていく方向で検討することにする。

 参考 Robocode関連記事リンク集@ibm(日本語)

 授業やJマガで利用するエディターは,メモ帳を暗黙の前提としている。専門学校の授業でもメモ帳を使用している学生が多く,少しかわいそうである。「ジャバデベロッパー10月号」では,「フープ!FREE」という無料のJava専用のエディターの紹介があった。ぜひ,エディターも検討したい。

☆ 2001年12月2日(日)

 Jマガ8号は,試験問題の解説,そこで,クラス関係をどう表現するかで,継承,実装,利用の表現に挑戦した。

 継承と実装は,基本的には,上下関係がある。親を上,子を下にする。利用関係は,横に位置づけて,矢印を増やした。

 Jマガ9号は,選択文を扱った。else { } の部分を,else 節と呼ぶことにした。本によっては,else 句と呼んでいるものがある。句よりも節の方がいいと判断した。節だと,節の内部に文が入っているというのが自然のような気がする。多重 if 文のことを,階段 if 文と呼ぶことにした。多重if文だと,if 文のブロックの中に単純にif文がはいていると思いやすいが,階段 if 文だと,else if で階段上につなげている感じがする。ぶら下がり if という表現をみたこともあるが,こちらは,else if をさしているかどうかは覚えがない。else if のブロックを else-if 節と呼んだ。本によっては,else-if 文と呼んでいるものもあったように思う。これを文と呼ぶのはよくないなと思っていた。『JavaScript第3版』(オライリー・ジャパン発行)のp94等で,else if 文 呼んでいる。ここらへんが else if 文と呼ぶもとであろう。

<script>
    age = 18;
    if (age < 7) {
        document.write("入場料は,無料です。");
    } else if (age<14){
        document.write("入場料は,500 円です。");
    } else if (age<19){
        document.write("入場料は,1000 円です。");
    } else {
        document.write("入場料は,1500 円です。");
    }
</script>

 この例は,Jマガ9号で公開したサンプルである。else if は,if 文を構成している要素であり,単体では用いられることはない。else if の else は,if (age < 7 ) のelseであるので,else if 文と呼ぶよりは,else if 節と呼ぶ方が自然であろう。この本では,他のところでは,else 節と呼ばずに,else 句と呼んでいる。この本は,たぶん JavaScriptの原典にあたるような本というかそういうイメージである。読んでいると,かなり勉強になるが,この if 文の呼び方は,よくないと思う。

 Jマガ10号では,Java の型の分類に挑戦した。

 文字型を数値型の一部に入れるか,入れずに,直接に 基本型の一部とするかであるが,私は,数値型の一部にした。
 基本型をブール型,文字型,数値型と3つに分けるやり方は,Wrapperクラスの継承関係をみると,そのようになっている。多くのJava関連の本もそのようになっている。しかし,私は,基本型を,ブール型と数値型の2分し,文字型は,数値型に含むとした。『Java言語仕様第2版』(ピアソン発行)p34 は私の考えと同じである。文字(char)型は,数値型の特殊な型ととらえたほうが自然と思う。

 クラス型を3段階解説を採用した。広い意味でのクラス型,中間の意味でのクラス型,狭い意味でのクラス型である。

Java クラス型変数の3つの意味
広い意味でのクラス型 参照型全体 参照型の構成要素は,クラス,インターフェース,配列である。extend という用語からみると,どれも対象である。
中間の意味でのクラス型 配列,文字列,一般的なクラス 配列と文字列を含めて,中間的なクラスを想定するといいと思う。参照型全体からインターフェース型をのぞいたもの
狭い意味でのクラス型 一般的なクラス 参照型全体から,インターフェース型,配列型,文字列型をのぞいたもの

 『Java言語仕様第2版』では,一般的なクラス型+インターフェース型をあわせて,「クラス型あるいはインターフェース型」,「配列型」と2分している。配列型の要素として,インターフェース型も取り込まれるので,配列型をクラス型とインターフェース型とは別のものとしてとらえてもいいかもしれない。私は,配列は,一般的なクラス型から発生した特殊なクラスと捉えて説明をしていくことにする。

最近購入した本

初体験 JavaScript』丸の内とら箸,技術評論社,

 最初しか読んでいないが,「Webブラウザはオブジェクトの会社」と解説してある。プログラを作る人がその会社の社長で,部下としてオブジェクトを使うという発想である。オブジェクトをロボットと捉える私の発想と似ている。プロパティをノートに書いてあるものというとらえ方をしている。私は,プロパティは,ロボットの持ち物,メモ用紙と捉えているので,こちらも近い。

日経ソフトウェア 2002年1月号』日経BP社

 知り合いの原稿が載っているので購入した。毎号ではないが,時々購入している雑誌である。知り合いの原稿が載っていると読むのも張り合いがある。少なくともそこの原稿は読んでおこうと思う。日経ソフトウェアを毎号端から端まで読むと私のような仕事の人間には視野が広がっていいかなって思った。特定の雑誌の端から端まで継続的に学習すると基礎力が付いていいかもしれない。

☆ 2001年11月26日(月)

 学生から,「先生に提出した合格ノートが返却されていない」と言われたので,職員室の自分の机の上を探したら,『Java 500 の技』技術評論社,\?が本棚の奥で見つかった。サンプル集として,たいへんよくできていて重宝にしていた本であったので,見つかってうれしかった。てっきり,自宅の本の海に沈んでいると思ったら,こんなところにあった。

 今朝,学校にいくバスの中で,『直前必修問題集Java2』IDGジャパン,¥?を読んでいたら,基本型変数のバイト数は,実際の記憶域サイズとしては,規定されていない,見かけの振る舞いのみが規定されているとあった。boolean の記憶サイズは,1ビットか1バイトか疑問であったが,Java の中では,1 ビットとして振舞うように規定されており,実際の記憶域ではJVM次第という話である。ところどころにある,Note のコーナは,読み応えがある。この本は,サン社が主催している,サン技術者認定資格の一つの Sun Certifies Programmer for the Java 2 Platform のための参考書である。題名が「問題集」であるが,われわれの高校時代の受験勉強の感覚だと参考書といったほうがよい本である。

 今日は,これから,Jマガ8号で,基本情報技術者試験の問12を題材にして,文法の解説文を書き上げる予定である。

☆ 2001年11月25日(日)

 Jマガの第7号の原稿を仕上げた。長くなるので,文法の解説は第8号に回すことにした。

 3段の本棚を一つ追加して,本を片づけていたら,やっと探していた,『Java言語ハンドブック』池田誠箸,ナツメ社,出てきた。なかなか見つからないので,本屋で見つけ次第再度購入予定の本であった。この本で,インタフェースのところを読んでいたら,インタフェース型の変数の説明あった。インタフェースをクラスととらえて,クラス型の変数と同等に扱えることができるという説明であった。簡単なサンプルもついており,確認できる。この用語辞典は,お勧めであるが,在庫切れの書籍のようである。

昨日購入した書籍

月刊『ジャバワールド』1月号,\1419

 特集は,「Generics徹底検証」私の全然知らない話題であった。

いきなりJava2入門塚越 一雄著,ナツメ社,\2200

よくわかる最新Java2の基本と仕組み榊原 大輔著,秀和システム,\1800

☆ 2001年11月24日(土)

 Jマガの第6号を発行した。生成子(コンストラクタ)へ,返値の型が省略ではなくて,メソッド名が省略されているという説を書いた。たぶん,日本で出されている書籍にはないと思う。

 Jマガ第6号では,この前の基本情報技術者試験の問8を解説した。この問題のテーマは,継承,生成子,参照型と等値判断だった。Jマガ第7号では,問12を解説する予定である。こちらは,インタフェースと継承がテーマである。

 Javaが出題された2題(問8,問12)とも,Java の文法のいかにもオブジェクト指向部分をテーマにしていることが分かる。情報処理技術者試験の解説をこういう観点で書きなさいという親心がある問題だったと言える。

 問12で使用してある,インタフェース型の変数の定義であるが,よく分からない。各種書籍を当たっているが,説明がカットされている部分である。だから,意図的に出題したのかなとも思ってします。今日は,とにかくこの問12の解説を書き上げる予定である。

最近購入した書籍

JAVAPRESS vol 21技術評論社,\1280

 

プログラム言語Javaピアソン・エデュケーション,\3800,ケン アーノルド (著), Ken Arnold (原著), ジェームズ ゴスリン (著), James Gosling (原著), デビッド ホームズ (著), David Holmes (原著), 柴田 芳樹 (翻訳)

 この本『プログラム言語Java』と,『Java言語仕様』,『Java仮想マシン仕様』で,三部作のようですね。

プログラムはなぜ動くのか矢沢 久雄日経BP社,\2400

  この本,入門者向けにしたら,少し高くないですか?

☆ 2001年11月18日(日)

 Javaの学習はしばらく休んでいたが。今年10月から基本情報技術者試験(二種の新しい名前)に採用され,また学習を開始している。ジャバ学習日記を昨日,久しぶりに読み直した,自分の勉強の道筋を見てみると勉強になる。また,復活をして,学習した記録を残すことにした。

 復活を記念して,「日記」から「日誌」に名称を変更することにした。スタートレックの航海日誌のようにしていくつもりである。

 『Javaの哲学』岩谷宏著,ソフトバンク発行,\2000 を読み直す。この本は,今年の夏,発売と同時に購入し,読みかけたが,すぐにバスのなかかどここかに置き忘れて紛失した。2,3ヶ月前に再度購入しなおした。本の山に埋もれていたが,昨日の整理で発見したので,読むことにした。自分の興味と似ているので,興味深く呼んでいる。文字列,配列等の不自然な扱い,New の面倒なところ,抽象型クラスとインターフェースの洞察など,私とよく似た考えである。私は,「クラスの鯛焼きの型説」を捨てて,「クラス孫悟空説」「クラスロボット説」をとっている。岩谷さんは,「クラスの鯛焼きの型説」である。

 リンクを張ろうと,amazon.com をのぞいたら,読者のレビューで,「お勧めしない」とあったので,急いで,私のコメントも書き込みをした。基本情報技術者試験合格レベルでないと読むのがつらい本でしょう。

 本日購入したJava・オブジェクト指向関係の本,他

 『JavaプログラミングFAQ』,(株)テンアートニ 著,日本実業出版社 \1800

 テンアートニは,Javaをイントラネット対応製品の開発に利用している会社で有名なところである。intranet を逆読みすると会社名となる。@IT のサイトで公開された原稿を元に書籍化されたものである。私も末広ページで原稿を公開している。授業では,黒板に自由に図を描いて説明できるが,ウェブだと,文字以外を使用すると面倒である。この本も文字が多いのは,そのせいであろうか。

 『プログラミング作法』Brian W.Kernighan, Bob Pike 著,福崎俊博 訳, アスキ,\2800

 ベル研のカーニハンは,プログラミングの作法関係では,著名な人(『プログラミング言語C』の著者)である。共立出版から何冊か出版されている。20年前にカーニハンさんの本を購入したもののあまり,しっかりと読んでいない。今回のこの『プログラミング作法』は,時代を反映してか,C/C++/Javaのコーディングが例として採用されている。昨年の2000年11月に出版されている本であるので,すでに購入済みかもしれない。

 『Javaプログラミング集中講座(サーバ編)』月刊DBマガジン12月号増刊,翔泳社,\1400

 ちょっと間が抜けた犬が顔がアップの表示である。購入して,ミスタードーナッツでコーヒーを飲みながらこれを書いているが,(サーバ編)とついているのを見過ごして購入してしまった。サーバ編と書いてあってもたいてい購入したと思うが,ちょっとコーヒーを飲みながらに,チェックしたい内容ではなかった残念であった。

 『合格HELPER vol 1』 ,ソフトバンク,\952

 ソフトバンクがやっている情報処理技術者試験関係の有名サイトが満を期して発行したムック。Java 入門の記事もあったので,どう説明しているかさっそくチェックした。

 いきなり,クラスの説明から始まっている。ユーザ定義型の発展としてクラスを捉えて説明している。インスタンス,コンストラクタを扱い,基本情報処理技術者試験の問12レベルの例題を提示されての説明である。なかなかの力作であった。 著者は,原一郎さんである。

 

 中断していたときの主な出来事

 ・ 技術評論社が出版している雑誌『JAVA PRESS』 vol 20 に原稿を書いた。

   「基本情報処理技術者試験Java直前模試」を執筆

 ・ Jマガを創刊した。現在第5号まで発行。

 ・ パソコンクラブ FDE で,毎週金曜日にJavaの学習会を実施している。秋に出題されてJavaの問題を解説していた。今後は,Java All Samples を復活する予定。



このページの作成方針

 書籍の画像・雑誌の号数をクリックすると,アマゾンコムの注文ページへ
 雑誌の題名は雑誌の紹介ウェブへ

spage@yscon.co.jp

末広ページへ このコーなの目次 以前のJJ日誌