‫お帰りなさい｡
‫またチャレンジの時期がやってきましたが､ なんとか全継続ビデオをチェックして､ 何が起こっていたのか､
‫どのようにポストとイメージポストを作成し､ それらがどのように相関しているのかを理解していただけたと思います｡
‫つまり､ その画像postが派生クラスで､ postが基底クラスです｡
‫なぜなら今､ ちょっとした挑戦は､ Video Postという新しいクラスを作ることです｡ これは､ ビデオのURLと長さというプロパティを持つ駆動クラスです｡
‫つまり､ これらはその動画投稿に固有のプロパティなのです｡
‫つまり､ このような投稿タイプのもので､ テキストだけの通常の投稿もあれば､ テキストだけでなくその他のものもあると想像してください｡
‫次に､ 画像投稿には画像URLを指定します｡ そして､ 動画投稿には､ 画像URLの代わりに動画URLを指定し､
‫動画の長さも指定します｡
‫つまり､ これらはすべての動画投稿について欲しい情報なのです｡
‫我々は､ 2つの文字列メソッドは､ すでにここに送信された情報に基づいて､ いくつかのより多くの情報を追加することを画像の投稿で見たので､
‫今それに応じて文字列メソッドに調整ビデオポストを作成するために必要なコンストラクタを作成します｡
‫しかし､ 私たちは､ 投稿について知っている以上に､ 動画投稿について知りたいのです｡
‫そこで､ 2つの文字列メソッドで､ video postのインスタンスを作成します｡
‫つまり､ ここでの画像投稿とほとんど同じことです｡
‫作ってからコンソールに書き込めばいい｡
‫だから､ それを追加して､ 2ストリング・メソッドを使うべきかもしれない｡
‫そして､ 本当にチャレンジしたいと感じたら､ より高度なものに進んでいけばいいのです｡
‫そこで､ ここではタイマーとコールバックメソッドを使用します｡
‫ググってみてください｡
‫単純にええから､ 自分でやってみるか､ ググってみるか｡
‫つまり､ 動画の投稿には play と stop というメソッドがあり､ play が呼ばれたときに動画の現在の継続時間を書き込む必要があるということです｡
‫そのため､ 1秒ごとに､ 現在が動画の何秒目であるかを書き込む必要があります｡
‫そして､ 1回ストップが押されると､ タイマーが止まり､ テキストで書かれたstop thatもあり､ それはダブルPで最高､
‫そう､ ほとんどそうなんです｡
‫そこで､ インスタンスを作成した後に動画を再生し､ ユーザーが何らかのキーを押したときに一時停止するようにしました｡
‫あるいは､ ユーザーが何かキーを押したときに停止させるとか｡
‫だから､ キーを押すということは､ そこに実際の線があるということです｡
‫だから､ シンプルにするか､ キーをよく読めばいいんです｡
‫ここで見たことは､ 後々ビデオプレーヤーを作る際に役立つと思います｡
‫これは本当に基本的な考え方で､ ここではタイマーを使用します｡
‫でも､ やっぱりこっちの方が高度な部分なんですよね｡
‫やる気が起きない､ 難しいというのであれば､ それもまた良し｡
‫ビデオで確認するだけでもいいのですが､ ググるだけでタイマーやコールバックの使い方がわかるので､
‫本当にお勧めします｡
‫そして､ 自分で試してみて､ どのように動作しているかを体験するのが一番です｡ そうすれば､ 次にタイマーを使いたいときに､
‫必ず覚えているはずです｡
‫わかりました｡
‫だから､ 今すぐビデオを一時停止して､ このチャレンジに挑戦してください｡
‫もうね｡
‫ぜひ試してみてください｡
‫まず､ 当然ながら新しいクラスが必要です｡
‫そして､ 私たちのビデオ投稿になるのです｡
‫そして今､ その動画投稿はpostを継承しているはずです｡
‫そして､ ここでは､ 先ほど申し上げたように､ 以前にはなかった別のプロパティ､ 実際には2つの異なるプロパティが存在することになるのです｡
‫そして､ そのうちの1つは､ ビデオURL保護文字列のvideo u r URLで､ これは､ getとsetです｡
‫それから､ 同じように長さを大文字のlで表したint lengthを保護するために､ getとsetも行うのがベストです｡
‫次にコンストラクタが必要なので､ ここでコンストラクタを作成しましょう｡
‫公開された動画投稿､ またもや空振りです｡
‫画像投稿で行ったのと同じ方法で､ どちらのコンストラクタもベース句を呼び出さないので､ 単にこの空のコンストラクタを作成しました｡
‫ポストから出た方が呼ばれます｡
‫では､ こちらのあれを｡
‫そのため､ 空の動画投稿がある場合は､ post メソッドが呼び出されるか､ デフォルトの post コンストラクタが呼び出されます｡
‫しかし､ 実際に必要な情報を手渡しするものもあります｡
‫例えば､ 動画の投稿の場合､ 興味深いのは､
‫タイトル､ ユーザー名､ URL､ 動画のURL､ 公開の有無､
‫そして長さです｡
‫そこで､ ここでもインレングスが有効です｡
‫わかりました｡
‫というわけで､ パラメータの点から見てかなり長いコンストラクタです｡
‫そして､ もちろん､ このドットを使う必要があります｡ そして､ もちろん､ このドットget IDまたはget next IDは､
‫ここでも必要になります｡
‫だから､ すでにあるIDを作らないようにしたいのです｡
‫先に次のIDを使いたい｡
‫そして､ 思い出すかもしれませんが､ このget next IDは､ 静的変数である現在の投稿IDを増加または増分して返しているのです｡
‫つまり､ このプログラム全体で一意であり､ 新しい値で上書きされるか､ あるいは単に新しい値を取得するだけで､
‫常に一度だけ一つのIDになるのです｡
‫そのため､ 各IDは一意でなければならず､ ここが非常に重要です｡
‫そして､ タイトルはタイトルになります｡ 実は､ 同じアプローチなので､ ここからコピーして行くこともできます｡
‫そうですね｡
‫と｡
‫これをインポートして､ 独自のURLを作成することができます｡
‫つまり､ プロパティビデオのURLは､ ビデオ投稿のメンバーであり､ 実際には､ 偶然に公開されていると呼んでいますが､ それはあなたの投稿と同じように公開されるべきであり､
‫投稿のものではありません｡
‫そしてそれは､ このビデオのURLはビデオのURLになり､ この長さは長さになります｡
‫つまり､ ここで引数として与えられたものはすべて､ オブジェクトのプロパティである長さビデオURLと､ もちろんpostから受け継いだものに取り込まれるはずです｡
‫さて､ これがコンストラクタです｡
‫そして､ 今度は2つの文字列のメソッドを用意する必要があります｡
‫先ほども言ったように､ 具体的な2文字列のメソッドが必要になるのです｡
‫そして､ 画像投稿からそれをコピーして､ 再び上書きするのが最も簡単です｡
‫だから､ 文字列を文字列に上書きするパブリック｡
‫つまり､ このメソッドをオーバーライドし､ そのオブジェクトをシステムからオーバーライドするのです｡
‫これが継承の良いところで､ どんどん上書きしていくことができるんです｡
‫では､ 今度は文字列のフォーマットですが､ ちょっと違うかもしれませんね｡
‫まあ､ 違うんですけどね｡
‫それを望むか望まないかは､ 私たちが決めればいいのです｡
‫長さをここに送るか､ このままにしておくか｡
‫つまり､ 画像のURLではなく､ 動画のURLが必要になるだけの違いです｡
‫そして､ 気が向いたら､ ここにも長さを足してください｡
‫ということで､ もしよろしければ､ そのことについて教えてください｡
‫だから､ そうしましょうか｡
‫そうするのが一番簡単なのかもしれませんね｡
‫そして､ この中にドット長を追加し､ コンマで区切っています｡
‫そこで､ 今度は読みやすくするために､ ここで2行目を使うことにします｡
‫さて､ これで2つの文字列メソッドができました｡
‫そして､ 投稿や実際のプログラムクラスに進むことができます｡
‫そして､ この中で動画投稿を作成することができます｡
‫ビデオポスト......ビデオポストと呼ぶことにします｡
‫1つは新しいビデオ投稿になるので､ そのように進めていくことも可能です｡
‫しかし､ その場合､ 空の投稿､ つまり私たちのIDゼロの投稿になります｡
‫公開されているのはデニス・パネッタのものですが､ あまり面白いものではありません｡
‫そこで､ この方法で作成したため､ 一意のIDを持つ独自の値を持つものを作成することにします｡
‫では､ ここで､ これは失敗したビデオで､ アップロードしたということにしておきましょう｡
‫デニス・パネッタがアップロードしたもので､ https video dot com slash fail videoとかいうところで見ることができます｡
‫ただの偽IDか偽リンク動画ドットコムスラッシュ失敗動画だろ｡
‫そして､ これは一列には長すぎるので､ 次の一列にかぶせます｡
‫今必要なのは､ ここで確認すると､ オーバーロードが2つあるので､ オーバーロードを確認してみましょう｡
‫アクセスについて､ あるいは公開されているかどうかについての追加情報が必要です｡
‫そしてまたここで公開､ 今度は長さが必要です｡
‫では､ この動画が15秒､ あるいは10秒だとしましょう｡
‫10個でいいんです｡
‫だから､ 10秒にすればいいんです｡
‫そして､ 今｡
‫それは結構なことです｡
‫そのため､ すでにプログラムを開始することができ､ ビデオ投稿に関する情報を見ることができるはずです｡
‫もちろん､ より難易度の高い部分は､ まだまだ不足しています｡
‫私たちはcheck out my new shoes that images dot comで､ 実はこのメソッドはまだ2つの文字列メソッドと呼んでいないので､
‫そうする必要があるかもしれません｡
‫そして次に､ この video posts to string メソッドを呼び出す必要があります｡
‫わかりました｡
‫だからところで､ あなたが見ることができるビデオ不思議だった場合､ ここですでに複数のメソッドがあります｡
‫そして､ その数字を作ったのは私たちではありません｡
‫ただそこにいるだけだった｡
‫そしてそれは､ postを継承しているからであり､ postもまた､ そのオブジェクトをシステムから継承しているのである｡
‫ちなみに､ ポスト1についても､ ポスト1ドットで確認すると､ そこにもそれらの方法が載っています｡
‫つまり､ イコールget hashCode get type updateです｡
‫つまり､ これらのメソッドは､ システム・オブジェクト・クラスから継承されているのです｡
‫さて､ これで2つの文字列が揃いましたね｡
‫そこで､ 今度はもちろん､ それをコンソールの右の行に入れる必要があります｡
‫実際に､ このコードをここにコピーして､ 画像投稿を動画投稿に置き換えてみましょう｡
‫わかりました｡
‫そして､ 今､ 私たちはそれを起動することができ､ そこにいます｡
‫つまり､ 誕生日祝いのためのものが1つ､ それから3つ ご覧のように､ ビデオの投稿は､ 私たちの画像の投稿とは異なるIDを持っています｡
‫だから､ 1､ 3､ 2があるんです｡
‫これは､ コンソールに書き込む順番を変えただけです｡
‫ですから､ このビデオポストをご覧いただくと､ 先ほどプリントアウトしたイメージポストの後に作成されているにもかかわらず､
‫このような間違った順番になってしまっているのです｡
‫でも､ 順番はまあ､ 何を見せたいかによるので､ そんなに重要ではありません｡
‫ですから､ 画像を作成した順番で表示したいとか､ 投稿全般を作成した順番で表示したいとか､
‫最新の1/1を表示したいとか､ そういうことはもちろん順番が重要です｡
‫でも､ 私たちの場合は､ そういう形にしておいて本当によかったと思います｡
‫つまり､ IDが設定され､ オブジェクトが作成された瞬間に､ ID 3とID 2､ そしてここのように2つの文字列メソッドのように呼び出された瞬間に別のものが設定されていることがわかります｡
‫だから､ もしあなたが正しいものを持ちたいのなら｡
‫作成する順番は､ このように進めていくだけです｡
‫そして､ 1､ 2､ 3が見えるようになりました｡
‫だから､ 誕生日のお祝いをありがとうございます｡
‫そして､ デニス・パネッタ氏による失敗ビデオよりも､ 新しい靴を履いた私たちのイメージ｡
‫そして､ ここにあるように､ 10の長さも送ります｡
‫わかりました｡
‫というわけで､ 前編でした｡
‫そして､ より高度な課題として､ タイマーとコールバックメソッドを作成し､ 1秒ごとに呼び出され､
‫動画の持続時間または現在の動画の持続時間を通知する必要があることです｡
‫そしてもちろん､ 必要なフィールドを作成する必要があります｡
‫そこで､ ここにいくつかのフィールドを追加する必要があります｡
‫例えば､ 映像のどの地点にいるのかを知る必要があります｡
‫では､ 実際にプロパティの前にフィールドを作成してみましょう｡
‫では､ ここのプロパティと､ 今度はメモリフィールドを作成してみましょう｡
‫そして､ 保護されたブーリアンであるplayingは､ ビデオが再生されている場合､ それを一時停止することができるため便利です｡
‫再生していないのであれば､ 停止､ 起動が可能です｡
‫だから､ それは本当に重要なことなんです｡
‫ですから､ すでに動画が再生されている場合は､ 再生を開始させない方がいいでしょう｡
‫そのため､ このヘルパー boolean をここに置き､ さらに保護された int cur duration を必要とします｡
‫タイマーを呼び出すために､ 今は0です｡
‫新しいメソッドを作成します｡ public void play メソッドを作成し､ stop メソッドも作成しましょう｡
‫だから､ パブリックボイドは､ やめろ｡
‫さて､ ここで何をしたいのか？
‫まあ､ まずはゲーム機に何か書き込んで､ 遊ぶような感じにしてみましょう｡
‫だから､ 私たちは｡
‫なるほど｡
‫プレイが開始された､ またはプレイ中である｡
‫動画がスタートしました｡
‫そして､ この中にタイマーをセットしたいのです｡
‫そして､ まずはタイマーを作りましょう｡
‫そこで､ ここにタイマーを用意します､ timerです｡
‫さて､ タイマーを使うためには､ system dot threadingを使う必要があります｡
‫それは､ システムスレッドを使用して必要なものです｡
‫そして､ 次に行うことは､ 場所が押されるたびにタイマーを初期化することです｡
‫だからタイマーは新しいものになる｡
‫タイマーです｡
‫タイマーコールバックは､ その後に呼び出されるメソッドである必要があります｡
‫ここで述べるべきことは､ ただ単に「ノー」ということです｡
‫このように､ タイマーのコールバックが必要で､ 次にオブジェクトが必要で､ 時間と期間が必要で､
‫期限はいつ開始するか､ 期間は何回繰り返すか､ またはどの時間帯に繰り返すかを指定します｡
‫そこで､ デュータイムを0とし､ ピリオドを1000ミリ秒とすることにします｡
‫もちろん､ タイマーのコールバック・メソッドは必要です｡
‫そして､ このメソッドはプライベートメソッドであるべきです｡ なぜなら､ 他の誰にも､ このクラス自身だけに呼び出して欲しくないからです｡
‫そのため､ void 動画投稿のみがこのタイマー コールバックを呼び出すことができ､ オブジェクトをパラメータとして必要としながらタイマー
‫コールバックを呼び出すことができるようにする必要があります｡
‫そして､ ohと呼ぶことにして､ 現在のデュレーションがビデオの長さを下回っているかどうかをチェックできるようになりました｡
‫そして､ 先に進んで､ 現在のデュレーションを1つ増やしてコンソールに表示したいのです｡
‫このように0秒の動画を見て､ 現在のデュレーションを把握する必要があります｡
‫つまり､ これが何をするかというと､ 単純にゲーム機の上に置くだけなのです｡
‫このビデオでは､ ガベージコレクタを強制的に使用するために､ GCドットコレクションを使用して､
‫混乱を一掃しています｡
‫ちなみに､ それ以外の場合は､ 現在のデュレーションが長さを下回っていなければ､ その動画は終わったということになりますね｡
‫stopメソッドを呼び出したい｡
‫だからここでは､ ストップと呼ぶことにします｡
‫そして今､ 停止はもちろん実行される必要があります｡
‫そこで､ stop console dot right lineで必要なものをチェックしましょう｡ これは､ stop atになります｡ そして､ 何秒後にビデオを止めるかを言うだけで､
‫私は勇気､ durationと言うつもりです｡
‫もちろん､ 現在の継続時間をゼロにリセットして､ タイマーを停止し､ 時間を止める必要があります｡
‫私たちはこのポストメソッドと呼んでいます｡
‫こちらは､ タイマーを掃除したり､ タイマーを止めてリセットするだけです｡
‫さて､ これをさらにきれいにするために｡
‫先ほども言いましたが､ これがプレイング・フィールドであり､ それをプレイメソッドに生かすことができるのです｡
‫だから､ ifだけがこの偽りを演じていると言えるのです｡
‫そこで､ 感嘆符のatを使い､ スタートします｡
‫その時だけは､ こうしていたい｡
‫そうして初めて､ 演奏を始めたいと思うのです｡
‫その時だけ､ タイマーを初期化したいのです｡
‫そして､ 再生されていないのであれば､ 何も起こらないはずです｡
‫そして､ ここでも私たちは同じことができるのです｡
‫そこで､ stopメソッドでは､ is playingがtrueかどうかをチェックします｡
‫だから､ プレイヤーがプレイしているときだけ､ 止められるようにすればいいんです｡
‫わかりました｡
‫というわけで､ 動画投稿講座はここまでです｡
‫これで､ プログラムにアクセスして､ ある時点でビデオの作成を開始したり､ 再生を開始したりして､ チェックできるはずです｡
‫ではどうするかというと､ ビデオ投稿を作成した後､ それを再生するのです｡
‫そして､ 先ほど申し上げたように､ ビデオの再生を残すか､ 実際に停止させたいと思います｡
‫その読み取ったキーをコンソールで操作して､ その後にstopメソッドを呼び出すのですが､ その間にもちろん､ ユーザーが何をすべきかを知らせたいと思います｡
‫だから､ Cを使うことにした｡ W. ここで､ コンソールの右側の行に､ 何かキーを押してビデオを停止してくださいと書いています｡
‫わかりました｡
‫そして今､ 私たちはそれを確認することができます｡
‫そして､ 私たちが作ったものが､ 実際にどのキーを押してもビデオを止められるかどうかを確認してください｡
‫ご覧の通り､ 動画が開始され､ 実行されている状態で､ 何かキーを押そうとすると､ 実は遅すぎたとします｡
‫それで映像が流れて､ 10秒後に止まったんです｡
‫それはなぜか？
‫それは､ 私たちの動画が10秒しかないからです｡
‫そこで､ 動画の長さを示すlengthプロパティを用意しました｡
‫例えば､ 別のビデオを作成し､ このビデオ､ または実際にビデオ投稿の持続時間をちょうど5秒になるように変更したとします｡
‫では､ そうしてもう一度実行してみましょう｡
‫そして､ 5秒後に停止するのがわかると思います｡
‫そして､ そこに私たちはいます｡
‫動画は終了しました｡
‫では､ 今度は手動で止めてみましょう｡
‫もう一度実行してみましょう｡
‫そこにいるのは､ 私たちです｡
‫そして､ 何かキーを押して､ 映像を止めてみましょう｡
‫そして､ うまくいっていない｡
‫そしてそれは､ クラウスが演奏しているポストを確認すると､ 間違っているからです｡
‫だからこそ､ is playingは決して真実ではないのです｡
‫そこで､ ここで必要なのは､ 当然ながらis playingをtrueに設定することです｡
‫そして､ ここに立ち寄ったことも同じです｡
‫だから､ 私たちは "is playing is false "と言っているのです｡
‫では､ ここに戻って､ もう一度実行してみましょう｡
‫そして今ビデオが動いていて､ 投稿したり､ 止めたりすると､ Stopped at fourと表示され､
‫このようにその4秒を止めるように変更することも可能です｡
‫そして､ より多くの時間を確保するために､ ご覧の通り､ かなりギリギリのところだったのです｡
‫また10秒を目安にする｡
‫だから､ ドラッグで寄せているんです｡
‫ここで､ 私はそれを止めます｡
‫そこで､ 私はエンターキーを押した｡
‫Okey dokey
‫だから､ かなりのチャレンジでしたね｡
‫もっと高度なことでも､ なんとかやってほしいですね｡
‫しかし､ 本当に面白いのは､ これまであまり触れてこなかったのですが､ このタイマーという方法です｡
‫だから､ それを使ったのであれば､ 何が起こっているのか､ 今回の授業は理解できたということです｡
‫そこで､ timerというクラスがあり､ タイマーのメソッドを使うため､ あるいはタイマーを使うために使うことができるのです｡
‫タイマー・コールバックは､ タイマーが終了するたびに呼び出されたり､
‫コードを実行したりすることができます｡
‫つまり､ ここで割り当てた時間枠（私の場合は1000ミリ秒）が経過するたびに､ このタイマー・コールバックが呼び出されるわけです｡
‫だから､ 私の場合は1秒ごとに呼び出されることになる｡
‫そのため､ 1/2､ 2秒などで動画と書かれています｡
‫タイマーを使ったメソッドやタイマーを使ったプログラムを作ることができるようになり､ とてもクールです｡
‫そして､ ユーザーが遊べるタイマー全体を作成し､ ここで行った以上のことを行うことができます｡
‫一般的なアイデアは､ 新しいタイマーを作成し､ タイマー・コールバックを作成します｡ このタイマー・コールバック・メソッドは､
‫重要なオブジェクトを必要とします｡
‫そしてこの中で､ 先に進むか､ 中括弧の中で､ 先に進み､ コードを定期的に実行することができます｡
‫そして､ それは何秒にもわたるでしょう｡
‫そしてもちろん､ タイマーオブジェクトには､ 割り当て可能な時間（これはここにあるもの）と､
‫割り当て可能な状態があります｡
‫そして､ 状態のnullを使うだけです｡
‫わかりました｡
‫そうだったんですね｡
‫そして､ 次のビデオでは､ 継承とオブジェクト指向プログラミングで何ができるかをさらに詳しく見ていきたいと思います｡
‫では､ 現地でお会いしましょう｡