これからのセッション |
これからしばらくのセッション(SESSION14~16、+ 1)は「プログラムの仕組み」を考えるセッションになります。今までもプログラムの仕組みは見てきましたが、もっと根本的に、深い所から見ていきます。
もちろん今までの学習も役に立ちます。
今までの学習は「プログラムの仕組み」を知る下地になります。
目的は、広大なコンピューターの知識の概要。全体像を把握することです。
コンピューターの世界は広大な知識の塊です。様々な知識が組み合わさって出来ています。プログラムの世界はこの世界の一部ですが、とても大きな、主要な一部です。学習中に自分のいる場所が分からない、迷子になっちゃうほどです。
ですから、まずは世界の「全体の形」を知りましょう。
皆さんは日本の形を描けますか?
なんとなーく、「北海道がここら辺でー、四国があってー」という感じで大まかに描けるんじゃないでしょうか?(描けない人は(アワアワ)・・・・一回地図を見て大まかに描いてみて!)
それです!まずは全体のイメージ。
「プログラムの仕組み(コンピューターの仕組み)」の輪郭を知りましょう。
それが分かれば、あとはコンパスがあれば、何となく自分のいる位置が分かるようになりますよね。
まずはどんなものなのか概念を理解するようにして下さい。
全体像は読み物形式ですので、気軽に読んで楽しんで下さいね。 |
|
その後(SESSION17~)で詳細。同じことをもっと詳しくやり直します。
詳細では「Javaではどうプログラムが動くのか」を実際に作りながら見ていきたいと思います。日本の形を理解したところで、都道府県を実際に見に行って、詳細な地図を描く感じでしょうか。 |
|
ここまでできれば後は繰り返しです。
同じようにして、日本から世界の形へとどんどん知識を広げていきましょう。(なんか「こと」みたいなこと言ってますが(汗)お伝えしたい事は、いきなり物事の詳細から勉強しても、ちんぷんかんぷんなのは当たり前ってことです。。。) |
|
これからしばらくのセッションでは、何となくしか分からない部分も出てくるかもしれません。
その時は「ふーん。そうなんだ。」でそのまま頭に入れて置いて下さい。
知識は後でつながりますから大丈夫です。
概要を理解することに重点を置いて下さいね。
|
|
|
オブジェクト指向 |
「プログラムの仕組み」の一回目は「オブジェクト指向」です。
「オブジェクト指向」という考え方自体は、オブジェクト指向開発言語以外には直接関係ありませんが、オブジェクト指向開発言語は現在プログラミングの世界では主流の開発言語ではあり、プログラムの仕組みを理解する上で大きく役に立ちます。
また、Javaはオブジェクト指向開発言語です。オブジェクト指向の全体像を理解することでJavaの学習の役に立ちます。
オブジェクト指向をプログラムの設計に適用することで柔軟な設計ができます。
反面、使い方によっては複雑にもしてしまいます。
今後ゆっくり理解していきましょう。
オブジェクト指向は、次回学習する「メモリの仕組み」にもいろいろ関係してきますので、全体像(概要)と、どんなものか(概念)を理解しておいて下さい。
(今回のセッションは、分かりやすく知識を一つにつなげる意図で「考え方」と「オブジェクト指向開発言語」の知識を明確に区分していません。(ごちゃまぜにやっています。)ご了承下さい。)
|
|
|
クラスとオブジェクト(インスタンス) |
オブジェクト指向の重要な概念は「クラス」と「オブジェクト(インスタンス)」です。
クラスの設計をする時はこの2つの状態を明確に意識して考えて下さい。
また、クラスの主な項目(アクセス権、継承、コンストラクタ・・・・)がどんなものか押さえて下さい。細かい点よりも「どんなことをするものか」理解して下さい。
そして、クラスの理解を深めるために、身の回りの「物」を使ってトレーニングしてみましょう。
この世界は「オブジェクト(物)」で出来ています。クラスを使って「オブジェクト」を自分なりに分解して設計してみましょう。いろいろ気づくことや再認識することがあると思います。
ただ、今回の内容は、筆者の主観でオブジェクト指向開発言語に共通だと考えることにしぼって説明しているため、Java固有の内容はあまりありません。
また、実際にクラスを使ってプログラムを作ったりした訳では無いので、いまいちよく分からない、実感できないという部分も多々あるかと思います。
今回は読み物的なものということで、もう少し我慢して下さいね(汗)
|
|
|
クラスの連携 |
「物(システム)」は「物」と「物」が連携して作られています。
そのため、クラスを設計する上で「クラスの連携」を理解することはとても重要です。
今回は「工場」を「大きな機能」として、クラスの連携を見ていきました。
連携には流れがあることとオブジェクトのタイプによる使い分けがあることを押さえておいて下さい。
ただ、今回は実際にクラスを使ってプログラムを作ったりした訳では無いので、
いまいちよく分からない、実感できないという部分も多々あるかと思います。
今後実際にプログラムを作りながら、いろいろな作り方を見ていきます。
今回は読み物的なものということで、もう少し我慢して下さいね(汗)(汗)
(それから、今回の図は概念の説明を優先して、少し曖昧にしている部分も
あります。次回もっと正確な説明をするので許して下さいね。)
なお、「クラスの連携」「オブジェクトのタイプ」と言う言葉は説明のための用語でプログラミング用語ではありません。念のため。
補足:
セッション中では「メインルーチン」と「サブルーチン」を「主要な流れ」と
呼び出される「個別の流れ」で説明していますが、
狭義の意味では「サブルーチン」は「関数」のことを言います。
|
|
|
練習 |
今回のセッションを読んで余裕のある方は以下の課題を試してみて下さい。
内容はクラスの設計のトレーニングです。
今の段階ではかなり難しいので出来なくても全く問題ありません。
特に「課題2」は難易度が高いので少し試す程度でも結構です。
トレーニングすることで理解が進みます。ぜひ試してみて下さい。 |
|
|
課題1:セッションの内容を一つの例で通して考えてみる
今回のセッションは、「自動車」「工場」「カードゲーム」の例を通して説明していきました。
実はこのセッションは以下のような構成になっています。
セッションの構成 |
|
自動車 |
工場 |
カードゲーム |
・クラスの概要
・クラスの詳細 |
○ |
|
|
・クラスの連携 |
|
○ |
|
・まとめのテスト |
|
|
○ |
|
○は説明に使った例 |
元々は今回のセッションは、内容全てを一つの例で通して説明する予定でした。(つまり「自動車」の例を使った場合なら、「クラスの連携」も「まとめのテスト」も「自動車」を使ってする。「自動車」の列が全て○の形。)
なぽは、ことの要望で全ての例を使うように変更したんですね。
つまり、どの内容も他の例に置き換えて説明することができます。
なので、もう一度セッションを読み返して、その時に同時に他の例に置き換えて考えてみてください。
そのまま単純に置き換えて説明できる場合もありますし、自分で説明に合わせて内容を変えないと上手く説明できない部分もあります。
例えば、「クラスの連携」の説明を「工場」ではなく「自動車」に置き換えたらどんな説明になるか?
自分でいろいろ自由に考えて見て下さい。
同じ説明内容でもいろいろな見方をすることで、オブジェクト指向の理解が深まります。
|
課題2:「カードゲーム」の仕様でクラスの設計をしてみる
「カードゲーム」の仕様を使って「クラスの連携」でやったことを試してみてください。
「カードゲーム」の仕様へのリンク
カードゲームでは、どれが「クラス=大きな機能(工場)」になり、
どんなメソッドが必要で、どんな流れで、どんな連携になるか、足りないものはないか・・・。
カードゲームの仕様に「クラスの連携」で見た方法を適用して、カードゲームのプロジェクトの工程表を考えてみましょう。
設計は人それぞれ。決まった答えはありませんので自由に試して下さい。
今回解説した「クラスの連携」の方法では、「設計」と「開発」が明確じゃない部分がありますが、細かいことは気にせずに(汗)そのまま流れをなぞって試してみて下さいね。
|
|
|
これからの心構え |
ここからはセッションの第二章。クラスを使う新たなスタートです。
一度頭を空っぽにして新しい気持ちで学習してくださいね。
ここから先は今までより少し難しい部分も増えていきます。
いろいろ自分で調べることも増えてくると思います。
自分で調べても分からない。そもそも何を調べれば分かるのかが分からない状況になるかもしれません。
プログラミングの場合、調べれば調べるほど、次から次に新しい用語が出てきてこんな状況になりやすいんですよね。
そんな時は深呼吸をして、「プログラミングなんかやーめた!」
・・・じゃなかった(笑)
「ここは置いておいて後にしよう!」と、すっ飛ばしましょう。
それでは続きが出来ない?いいえ、分からないまま続ければいいんです。
知識は後からつながってきますから大丈夫です。
続けることは無駄に思えても確実に力になります。楽しいことばかりじゃ無いかもしれませんが、解決した時の充実感もあるはずです。焦らずゆっくり。
お互いにがんばっていきましょうね。(筆者も皆さんをそんな状況にしてしまわないように心がけます。)
|
|
|
|
今回の用語 |
|
青文字は要約がある項目です。ざっと読み流すと学習に効果的です。 |
|
|
次回はコンピューターの仕組み、メモリの仕組みです。
コンピューターの深海に潜って行きましょう。 |