‫お帰りなさい｡
‫このビデオでは､ プロパティを紹介し､ プロパティの仕組みをお教えしたいと思います｡
‫また､ 1つの動画では長くなりすぎるため､ 過去に物件に関する動画を作成したのですが､ 見た目通り少しわかりにくかったためです｡
‫このままではダメだと思い､ 分解して録音し直すことにしました｡
‫だから､ 全く分かりにくい別の動画を見つけても､ 全く役に立ちません｡
‫それから､ このコースを最高のコースにしたいので､ ぜひ教えてください｡
‫わかりました｡
‫そこで必要なことは､ まず､ 新しいクラスを作成することです｡
‫というのも､ プロパティはこれからたくさん使う重要な要素であり､
‫重要な概念だからです｡
‫だからこそ､ その全体像を理解することが本当に大切なのです｡
‫そこで､ まず新しいクラスを作成し､ このクラスをboxと呼ぶことにします｡
‫いいかい？
‫だから､ とてもシンプルなクラスでいいんです｡
‫つまり､ このボックスクラスは､ ある一定の変数を持つだけのクラスになるわけです｡
‫わかりました｡
‫例えば､ 箱の長さ､ 高さ､ 幅から箱の体積を計算したいだけなんですね｡
‫わかりました｡
‫では､ これらの変数を作ってみましょう｡ とりあえず､ 公開にしておきます｡
‫いいかい？
‫これをpublic lengthにして､ もう一つ､ これをheightにして､ あとはwidthが必要ですね｡
‫そして最後に､ ボリュームも欲しい｡
‫つまり､ ボリュームはこの箱の中に収まることになります｡
‫わかりました｡
‫だから今､ 私はたくさんの変数を持っています｡
‫さて､ これらの変数は単純な変数ではありません｡
‫これらは､ 実際には､ メンバー変数であり､ クラスのレベル､ この場合はクラスボックスのレベルの変数であることを意味します｡
‫つまり､ 箱全体の外観､ あるいは箱全体の構造に直接影響を与えるものなのです｡
‫わかりました｡
‫そして､ メンバー変数を別の方法で､ あるいは別の構造で使用することで､ さらに安全に使用できることを確認することになります｡
‫なぜなら､ ここでの問題は､ 公共の場であるため､ 安全でないことです｡
‫これをどう解決するかは､ これからです｡
‫ではまず､ ここで新しいメソッドを作ってみましょう｡
‫これは､ 長さ､ 幅､ 高さを表示し､ 体積を計算して､
‫その体積がどのくらいかを教えてくれるものです｡
‫わかりました｡
‫右の行の文章を短く書くだけです｡
‫そこで､ CWダブルタブを入力すると､ このコンソールの右側の行の文が作成されます｡
‫そしてここでは､ 長さが最初のエントリ､ 高さが2番目のエントリになるというようなことを言うことにしています｡
‫だから､ こんな風に使っています｡ withは3つ目の項目です｡
‫というわけで､ ボリュームは､ そして4つ目のエントリーです｡
‫さて､ これが右のラインステートメントで､ 次に使用する変数が length と height
‫です｡
‫とともに｡
‫そしてボリューム｡
‫さて､ 体積というのは､ 長さ､ 高さ､ 幅をもとに計算する必要がありますね｡
‫だから､ そうすることにしているんです｡
‫体積は､ 長さに高さを掛け､ 幅を掛けたものということになりますね｡
‫そうすることで､ この体積ができたり､ 体積が計算されたりします｡ なぜなら､ 体積はここで計算された結果だからです｡
‫長さ､ 時間､ 横の回数､ 幅､ それはボリュームになるんです｡
‫わかりました｡
‫それでは､ もう少し読みやすいように行に分割してみましょう｡
‫わかりました｡
‫これで､ このメソッドの表示情報ができました｡
‫では､ このファイルを保存して､ プログラムキーに移動してみましょう｡
‫ここでは､ このクラスを使用することにします｡
‫このクラスのオブジェクトを作成することになります｡
‫どのようにオブジェクトを作成するのか？
‫まあね｡
‫そこで､ それの新しいオブジェクトを作る｡
‫これを1つの箱と呼んで､ 新しい箱にするつもりです｡
‫このように､ クラスのオブジェクトやインスタンスを作成することができます｡
‫ということで､ このクラスboxのインスタンスを作成しています｡
‫だから､ かなりbox型の変数で､ boxは自分たちで作ったものです｡
‫つまり､ 長さが3､ 高さが4､
‫幅が5というように､ 値を割り当てることができるのです｡
‫もちろん､ 正しいコードにするためには､ ここにも等号が必要です｡
‫さて､ ここでできることは､ 先に進んでボックス・ドットを呼び出すことです｡
‫ディスプレイ情報を表示します｡
‫だから､ とてもクールなんです｡
‫もうこの明文化された文章は必要ないですね｡
‫これで､ このファイルを保存して実行することができるようになりました｡
‫このファイルを実行すると､ コンソールに情報が表示されます｡
‫つまり､ 長さが自由で高さが4､ 幅が5なので､ 体積は60になるわけです｡
‫わかりました｡
‫それでうまくいったんですね｡
‫それは素晴らしいことです｡
‫そのため､ この表示情報はうまく機能し､ 私たちが望んでいた詳細を表示してくれました｡
‫さて､ ここでできることは､ boxクラスのメンバ変数の値を変更すること､ またはその値を変更することです｡
‫そして､ 公開されているからこそできることです｡
‫そうだろ？
‫これは公開されているんですね｡
‫こちらは公開されています｡
‫こちらも公開されています｡
‫だから､ すべて公開されている｡
‫なぜなら､ この時点で､ 完全に公開されるメンバーラベルを書けば､ 誰もがいつでもそれを変更することができるからです｡
‫つまり､ オブジェクトを作成できるすべての人､ またはボックスのオブジェクトを作成できるすべてのクラスは､
‫ボックスのインスタンスのそれらの値をすべて変更できるようになります｡
‫そのため､ このボックスにアクセスできる人なら誰でも､ 今すぐ変更することができます｡
‫そしてそれは､ さまざまな問題を引き起こす可能性があることです｡
‫さらに進んで､ プログラミングやチーム編成をするようになると､ このようなやり方は本当に面倒になります｡
‫だから､ もっといい方法があるはずです｡
‫長さを調整するのではなく､ 長さが一定の値であることが望ましいのかもしれませんから､ もっときれいな実装方法があるはずです｡
‫誰も調整できない｡
‫では､ どうすればいいかというと､ これを作ればいいんです｡
‫バーバルプライベート｡
‫そこで､ メンバ変数lengthをprivateにして､ デフォルトの値である3を代入することにします｡
‫これで､ 私が作るすべてのボックスは､ 長さ3の値を持つことになります｡
‫ですから､ どのボックスも長さは3インチかメートル､ あるいはあなたが使っている測定基準にしたがってください｡
‫だから､ 今はもう長さを割り当てることができない｡
‫それでね､ ここでエラーが出るんです｡
‫箱の長さは保護レベルの関係でアクセスできません｡
‫そこで､ 非公開にすることで保護レベルを高めました｡
‫だから､ 今はもう調整できないのです｡
‫では､ それでもどうすれば変えられるのか｡
‫まあ､ 無理ですね｡
‫私たちがこうだからというわけではありません｡
‫だから､ 何かを実装する必要があるのです｡
‫ボックスの長さを変更する別の方法を実装する必要があります｡
‫わかりました｡
‫そのためには､ セッターやゲッターと呼ばれるものを実装すればいいのです｡
‫ですから､ この場合､ もう箱の長さにすらアクセスできません｡
‫では､ 長さを書きたいとします｡
‫だから､ 私は右の行のボックスの長さをコンソールしたいし､ ちょうどボックスのドット長にアクセスするつもりです｡
‫見ての通り､ 私のIDでは変数すら表示されません｡
‫boxのドット長にアクセスできないので､ 変更できない｡
‫でも､ 読めないのも事実です｡
‫わかりました｡
‫だから､ 取得も設定もできない｡
‫つまり､ これが設定､ これが変数の取得です｡
‫なぜなら､ boxクラスでメソッドを作成し､ 変数の長さを設定したり取得したりすることが可能になるからです｡
‫だから､ そうしよう｡
‫を作ろう｡
‫サターそう公開｡
‫ボイトのセット長｡
‫つまり､ この変数で長さを設定することになります｡
‫さて､ 何を設定するのでしょうか？
‫さて､ ここでは変数かパラメータが必要です｡
‫ここに設定できる値が必要です｡
‫だから､ そうなるんです｡
‫ここでは整数が必要なので､ これを長さと呼ぶことにします｡
‫だから､ 長さを設定することになる｡
‫今度は長さ､ 等長を設定します｡
‫さて､ これは紛らわしいし､ 不正解でもある｡
‫だから､ ここで警告が出るんです｡
‫ここでエラーにもならないように､ ご覧のように色が違いますよね？
‫だから､ この色とこの色は微妙に違うんです｡
‫こちらはこのとても薄い色で､ こちらは濃いめの青色です｡
‫では､ どうなっているのでしょうか？
‫なぜなら､ ここでは同じ言葉を使っているからです｡
‫ここでは長さを使っています｡
‫長さはこことここ､ ここも使っています｡
‫だから､ この長さは､ 実際にはこの長さであり､ あるいは上部のこの長さであるべきなのです｡
‫だから､ 正しくやろうと思えば､ このこのキーワードを使うことができるんだ｡
‫そうすることで､ よし､ 長さを変えたい､ と言うわけです｡
‫部品です｡
‫Boxと呼ばれるこのクラスの｡
‫そこで､ このオブジェクトの長さを変えたいのです｡
‫つまり､ この場合､ boxというクラスから生成されるオブジェクトの｡
‫よし､ どんな長さでもいいから､ 割り当てを受けるんだ｡
‫そのため､ set lengthが呼ばれたときに渡される長さは何でもよい｡
‫この方式になります｡
‫この変数には､ 私のボックスのプライベートなメンバー変数である長さが設定されます｡
‫これは非常に重要なことで､ このようにすることで､ ボックスの長さを変更することができるようになりました｡
‫セットの長さ
‫また､ 長さを例えば3にして､ もう一度コードを実行しても､ 全く問題なく動作します｡
‫そして､ 見てみましょう｡
‫わかりました｡
‫そこにいるのは､ 私たちです｡
‫長さは自由です｡
‫身長は4など｡
‫わかりました｡
‫では次に､ デフォルト値だったから3はいらないということにしましょう｡
‫さて､ 長さを4としたいところですが､ これで作業中であることがわかり､ ボリュームも調整されました｡
‫だから､ 計算までうまくいったのです｡
‫だからすごいんです｡
‫これで､ クラスのメンバ変数である変数を設定することができるようになりました｡
‫だから､ それが大事なんです｡
‫クラスが違うという話です｡
‫同じクラスではありません｡
‫さて､ この長さはプライベートなものなので､ アクセスしてみることができますね？
‫では､ どうすればアクセスできるのでしょうか？
‫なぜなら､ この変数が本当にどこかに必要なのかもしれないからです｡
‫長さにアクセスしたいのですが､ できません｡
‫そこで､ 私が実装できるのは､ ゲッターと呼ばれるものです｡
‫だから､ ゲットレングス公開｡
‫そしてこの場合､ 型は返したい変数と同じ型でなければならない｡
‫で､ この場合､ この長さの値を返したいのか､ 長さそのものを返したいのか､ どっちなんでしょうね？
‫だからint型なんですね｡
‫そのため､ このメソッドではint型を返す必要があります｡
‫これはget lengthになりますが､ これも大文字のGでget､ そしてgetしたい変数の名前を使うのが慣例です｡
‫そしてこの場合､ 変数の長さを取得したいのですが､ 今は長さを返すだけです｡
‫さて､ より正確に言うと､ このドットの長さを返すには､ もちろん長さだけを書いてもいいのですが､
‫これを追加すると､ ここでメンバ変数について話していることが完全に明らかになります｡
‫つまり､ このクラスの最上位に位置する変数の話です｡
‫だから､ どのメソッドの中にもないし､ だから､ この方法でアクセスすることもできなかったんだ｡
‫しかし､ ここでは､ この特定の長さについて話しているのです｡
‫そこでクリックすると､ 私のIDが自動的にマークされるのがわかると思います｡
‫そして､ この長さを底辺にマーキングしています｡
‫というわけで､ このパブリックメソッドを使ってget lengthで長さを取得することができるようになりました｡
‫そして､ 公開されていることが重要で､ もし公開されていなければ､ 私はアクセスすることができないからです｡
‫そこで､ この場合は､ もう一度箱を保存して､ 今度はこのメソッドget lengthを呼び出して長さを取得すると､
‫また突然動作するようになりました｡
‫それでは､ ここにももちろん正しく長さを書いて､ もう一度実行してみましょう｡
‫そして､ 箱の長さはと言われそうです｡
‫そして､ 今回は4つです｡
‫わかりました｡
‫つまり､ これはあくまでプロパティの準備なのですが､ 重要な考え方なのです｡
‫セッターとゲッター､ これもよく見かけるようになりましたね｡
‫でも､ もっと簡単で手っ取り早い方法があるはずです｡
‫だから､ これはあくまで一つの方法なんです｡
‫でも､ もっと早く､ 同じように保護する方法を2つ､ あるいは3つ紹介します｡
‫なぜなら､ ここでやっているのはカプセル化と呼ばれるものだからです｡
‫つまり､ 長さの軸をカプセル化しているわけです｡
‫Wikipediaの定義では､ カプセル化とは､ データをそのデータを操作するメソッドと一緒に構築すること､
‫またはオブジェクトの構成要素の一部への直接アクセスを制限することを指すとされている｡
‫まさにその通りなんですね｡
‫オブジェクトを作成できるクラスボックスの一部であるlengthというコンポーネントへのアクセスを制限しているのです｡
‫わかりました｡
‫そして､ それを調整するために､ このセッターとゲッターを作っているのです｡
‫さて､ 素晴らしいのは､ どのようにカプセル化するかを定義できることです｡
‫今回は､ その両方を公開しました｡
‫でも､ 公開したくない場合はどうすればいいのでしょうか？
‫もし､ これを望むならどうするか？
‫適さない｡
‫そこで､ 自分のボックスの長さを誰にも設定されないようにするとします｡
‫そこで､ 私ができることは､ これを非公開にすることです｡
‫だから今だけ｡
‫私たちのボックスまたはボックス自体を継承するクラスは､ 外側から長さを設定することができます｡
‫長さの設定はできなくなります｡
‫というのも､ 長さを設定するのは､ クラス自身か継承したクラスだけで､
‫自分以外のクラスは設定できないようにしたかったからです｡
‫これは､ ここから直接修正することができるものです｡
‫また､ 長さを得ることでさえ､ ここ以外では許されないと言うこともできます｡
‫わかりました｡
‫しかし､ 今､ クールなことは､ 先に進んでそれらを調整できることです｡
‫では､ 誰かがボリュームを手に入れたいとしましょう｡
‫そして今この時点では､ まだボリュームを設定していないのです｡
‫そこで､ 代わりに何ができるかというと､ public int, volumeを取得する､ ということです｡
‫そして今､ もしボリュームを手に入れたいと思う人がいれば､ 私たちはただボリュームを返すだけでなく､
‫何を返すかを考えています｡
‫このドット長に､ このドット高に､ このドット幅を掛けたものです｡
‫だから､ もしボリュームを手に入れたいと思う人がいても､ 直接手に入れることはできない｡
‫つまり､ この変数､ ボリューム変数に直接アクセスするのではなく､ 実際に計算結果を得ることになるのです｡
‫これを保存して､ 代わりに､ ここで､ get volumeを使い､ box volumeを使うと､ 箱の体積を表示することができます｡
‫だから､ ボックス､ ボリュームが60とします｡
‫一般的に､ セッターやゲッターで行うことは､
‫変数に直接アクセスするのではなく､
‫変数を調整するメソッドにアクセスすることです｡
‫あるいは､ よし､ ボリュームを取りたい人がいたら､ ボリュームの2倍とか､ そういう言い方をしようということです｡
‫あるいは､ 長さを設定したい人がいて､ それが何かネガティブなものであった場合｡
‫そこで､ これを再び public void にして､ 長さを設定し､ 今度は長さをダブルチェックするとします｡
‫はゼロ未満である｡
‫我々は､ エラーをスローするつもりです､ 新しい例外サイズをスローするか､ この1つは､ 長さがゼロより大きいはずです｡
‫わかりました｡
‫ですから､ もし長さが0より小さかったら､ 例外を投げて､ プログラムをクラッシュさせるのです｡
‫だから､ この行は決して実行されない｡
‫では次に､ これを試してみましょう｡
‫プログラムで､ ボックスの長さを負の値に設定してみましょう｡
‫マイナス4にしてみましょう｡
‫ここでもう一度実行すると､ 例外が発生することがわかります｡
‫そのため､ プログラムがクラッシュし､ ここで例外が発生します｡
‫システム例外の長さは0より大きい必要があります｡
‫つまり､ 例外を投げることで､ 独自の例外を投げることができることがおわかりいただけたと思います｡
‫例外が何を言うべきかを言うこともでき､ それは意味のあることであるべきです｡
‫役に立つもので､ 何がエラーなのかが明確になるものでなければなりません｡
‫この場合､ 長さを0より小さいものに設定したため､ エラーが発生しました｡
‫わかりました｡
‫なぜセッターやゲッターが必要なのか､ 不思議に思うかもしれません｡
‫セッターとゲッターを持つだけなのに､ なぜ単純に長さに直接アクセスできないのでしょうか？
‫なるほど､ これで何を設定し､ 何を忘れるかを能動的に決めることができるようになりましたね｡
‫誰かがこの変数にアクセスして変更しようとしたり､ あるいは単に取得しようとした場合｡
‫わかりました｡
‫というわけで､ 予想以上に長くなってしまったので､ この動画にしようと思っていたんです｡
‫しかし､ これは次のコンセプトであるプロパティの重要な足がかりになるので､
‫ぜひすべてを明らかにしておきたかったのです｡
‫つまり､ プロパティを使うことで､ これをまとめたり､ もっと短くしたりすることができるということがお分かりいただけると思います｡
‫では､ 次のビデオでは､ プロパティの使い方と､ このビデオで学んだこととの関連について確認しましょう｡
‫納得していただけたでしょうか｡
‫ご不明な点がありましたら､ お知らせください｡
‫そうそう､ コースのディスカッションにコメントを書けばいいんだよ｡
‫ところで､ フィードバックをくれる皆さん､ 本当にありがとうございます｡
‫ただ受動的にこのコースを見るだけなら､ 全く問題ありません｡
‫でも､ フィードバックがあれば本当にありがたいし､ 建設的で､ どの時点で何かが明確でないのかを知るのに本当に役立ちます｡
‫なぜなら､ もしあなたが､ よし､ このビデオは完全にゴミだ､ と言うだけなら､ もしあなたが､ よし､ 私はコンセプトAが5分目で理解できなかった､
‫とか言うなら､ 何が問題なのかがもっとよく理解できるだろう､ と言うのと同じくらい役に立たないだろうからです｡
‫それではまた､ 次のビデオでお会いしましょう｡