Japanese subtitles

← Inheriting Behavior

Get Embed Code
13 Languages

Showing Revision 17 created 10/09/2015 by tama_ino.

  1. ちょっとだけ JustJava アプリに戻りましょう
  2. 「 MainActivity 」クラスの
    「 displayMessage 」メソッドを見ましょう
  3. そのものはここから始まって
    少し分かりやすく書いてあります
  4. 創作中の変数「 orderSummaryTextView 」を
    見分けられますね
  5. この変数データタイプは
    「 TextView 」でした
  6. まだ ここの部分は理解していないのですけどね
  7. 次の行は TextView オブジェクトの
    メソッドをコールするものです
  8. 今回は上に書いてある変数名と
    同じものを使います
  9. ですから「 orderSummaryTextView.setText 」
    をコールします
  10. それから メソッド入力により
    ストリングを渡します
  11. このストリングメッセージは元々は
    入力パラメーターとして
  12. ディスプレイの
    メッセージメソッドになりました
  13. ここで まだ理解していない
    この部分のコードを詳しく見ていきましょう
  14. 「 findViewById 」とあるのは
    メソッドコードのようです
  15. なぜなら これはカッコ囲みの
    入力引数っぽい箇所の前にあるからです
  16. しかし 奇妙なことに このメソッドは
    このクラスの中のどこにも見当たらないです
  17. この名前をダブルクリックして
    コマンド+ F もしくは
  18. Windows で Ctrl + F を押すと
    ファイル内を検索できます
  19. 2つだけ「 findViewById 」を見つけました
  20. 2つとも似たように使われています
  21. 他に「 findViewById 」という
    メソッドは無いですね
  22. そういえば 前に MainActivity クラスで
  23. setContentView をコールする場面に
    出会いましたが ファイル内検索をしても
  24. 今回と同様に MainActivity 内に
    見つかりませんでした
  25. では どこにそのメソッドが
    定義されているのでしょうか?
  26. まず MainActivity は
    実はとても小さいファイルなのです
  27. たった約 90 行の長さです
  28. しかし 実はそこには目に見えない
    より多くのクラスがあるのです
  29. ここに「 extends AppCompatActivity 」と
    命じるコードがあります
  30. これは MainActivity が
    AppCompatActivity クラス内の
  31. 機能的拡張子だという意味です
  32. コンピューター上のここに
    「 ActionBarActibity 」とあっても大丈夫です
  33. バージョンが古いだけです
  34. 使うべき最新バージョンは
    AppCompatActivity ですが
  35. AppCompatActivity は
    古いアンドロイドデバイスを
  36. サポートする上位互換性がありますので
  37. AppCompatActivity は
    アンドロイドサポートライブラリの一部です
  38. そこならアンドロイドに適応した最新の
    ユーザーインターフェイスを使えます
  39. 古いアンドロイドデバイスを
    使っていたとしても
  40. AppCompatActivity クラスを
    拡張することによって
  41. MainActivity の無料範囲で
    全ての機能、ステート、メソッドを
  42. そこから手に入れることができます
  43. ここからコードをコピー&ペースト
    する必要はないのです
  44. シンプルにクラスを拡張できます
  45. 興味がありましたら
  46. AppCompatActivity に関する情報を
    Google 検索で見つけ出せます
  47. ここには AppCompatActivity クラスの
    参考ドキュメントがあります
  48. Chrome 拡張子を
    インストールしていると
  49. ソースも見ることができます
  50. これが AppCompatActivity クラスが
    定義されたコードです
  51. 多くの機能がここにあるのが
    分かると思いますが
  52. その実行機序を理解する必要はありません
  53. 理解してもらいたいのは
    AppCompatActivity を拡張した時に
  54. 全ての機能を無料で手に入れられる
    ということです
  55. ハイレベルになると
    この様に視覚化ができます
  56. これは MainActivity のクラスを
    定義したものです
  57. いくつかのメソッドの定義はここです
  58. AppCompatActivity を拡張したら
    このステートにアクセスしたり
  59. AppCompatActivity から
    メソッドにアクセスもできます
  60. 今 物理的に MainActivity クラスに
    書きこむことはできませんが
  61. それらをここに想像することはできます
  62. なぜなら ここに参照ステートも
    参照メソッドもあるからです
  63. これがコードが setContentView や
    findViewById などを
  64. 参照できる方法です
  65. 私たちはこれらのメソッドを継承したので
    MainActivity の中には定義しませんでした
  66. MainActivity はデバイス上
    スクリーンとして示されます
  67. MainActivity の中でそれに向けた
    コードを書かずとも 同様に継承しています
  68. ステートやメソッドを AppCompatActivity から
    クラスに直接は持っていきませんが
  69. 今ならそれらがそこにあると知っているし
    参照することも可能です
  70. 継承といえば
    そこには長所と短所があります
  71. ある時は 動作をそのまま
    継承したいでしょうし
  72. 別の時には
    少し改変したいかも知れません
  73. もし 継承したクラスから
    いくつか動作を変えたいなら
  74. メソッドの上書きができます
  75. 「 @override 」をメソッドの最初に加えれば
  76. AppCompatActivity の
    メソッドを使わず 代わりに
  77. ここに定義したバージョンにしたいのだ
    とコンピューターが理解します
  78. これは難解ですし
    多くの実践を必要とします
  79. 実は 私たちは 既に
    AppCompatActivity クラスから
  80. 上書きされたメソッドの例を見ています
  81. そのメソッドとは
    onCreate メソッド です
  82. MainActivity 内での
    上書きされた onCreate メソッドは
  83. コールして実行したいメソッドを示しています
  84. 今すぐ理解できなくても心配しないでください
  85. 私は今 オブジェクト指向プログラミングの
    概念的展望を
  86. かいつまんで紹介しているだけです
  87. このことについて
    あなたが手間取る問題を抱え込んだり
  88. 全てを把握するにはもっと関連したものを
    読みこむ必要があることは
  89. 承知しています
  90. MainActivity クラスと
    AppCompatActivity クラスの
  91. 関係を視覚化する他の方法は
    Class Hierarchy Diagram を描くことです
  92. これは View Hierarchy Diagram
    とは違います
  93. View Hierarchy Diagram は
    ツリー状で表示されますが
  94. Class Hierarchy Diagram は
    異なった Java クラスの間にある
  95. 関係性を示します
  96. AppCompatActivity は
    スーパークラスとなります
  97. MainActivity は
    AppCompatActivity から拡張したので
  98. サブクラスだとみなされます
  99. クラスの定義を見る時はいつでも
    拡張元は全て
  100. スーパークラスと言われます
  101. こちらがサブクラスになります
  102. もし あなたが もう1つ
    「 Detail Activity 」なるものを創って
  103. AppCompatActivity を拡張したなら
    これがサブクラスになり
  104. これはスーパークラスとなります
  105. ここにもう1つ Java クラス継承の
    例があります
  106. ここでは「 TextView 」も
    「ImageView 」も
  107. 「 Button 」も 全て共通要素を
    持っていると思ってください
  108. それら全てのビューは
    スクリーン上に幅と高さを持っています
  109. まだ学んでいませんが
    これらには可視性ステートもあるのです
  110. これらは全て可視化にも
    不可視化にもできるのです
  111. 他にもこれらに共通するものが
    数プロパティあります
  112. この「TextView 」クラスにある
    プロパティコードを 書き出すのではなく
  113. 「 ImageView 」や「 Button 」の
    クラスにコピーします
  114. そうするともう少しスマートにできます
  115. また「View 」クラスも作れます
  116. これら全てのビューに共通する
    プロパティを抜き取って
  117. この「View 」クラスの中に置く
    こうすればコードを書くのは一度で済みます
  118. では どうやってこの「 TextView 」クラスと
    「View 」クラスの間につながりを
  119. 作るのでしょうか?
  120. 継承を考えているのなら
    その考えで合っています
  121. 「 TextView.java 」ファイルの中に
    「 TextView 」クラスを定義します
  122. こうして 「 View 」クラスからのデータと
    メソッドを全て継承します
  123. すると この「 TextView 」クラスと
    同じコードは入れなくてもよくなります
  124. なぜなら 機能性の一部は 既に
    「 View 」クラスの中にあるからです
  125. 同じことが「 ImageView 」など
    下位クラスにも適応されます
  126. 沢山のコードを書く必要はありません
  127. これらのファイルである
    「 ImageView.java 」と
  128. 「 View.java 」を比べて
    違う箇所のみを書けばよいのです
  129. 上下関係を明確にする意味では
    「 ImageView 」クラスは
  130. 「 View 」と違うものだけが
    入ってなくてはなりません
  131. もし 「 View 」の中にある
    ある動作を継承したくないなら
  132. 書き換えた動作を「 ImageView 」や
    他のクラスの中に示すことが
  133. できます
  134. 用語を思い出しましょう
    この場合
  135. 「 TextView 」はサブクラスで
    「 View 」はスーパークラスです
  136. 「 TextView 」クラス用の
    ドキュメントに戻って
  137. 私たちは今 ここの部分を理解しました
  138. 「 TextView が View を拡張する」とあります
  139. 今なら その意味が分かります
    ステートとメソッドを
  140. ViewClass から継承している
    ということですね
  141. 下には「 Class Hierarchy Diagram 」があります
  142. これは「 TextView クラスが View クラスから
    継承されている」ことを示しています
  143. その上 「 View クラスは
    Object クラスから継承しています」
  144. もっと探索すると
    他のクラスたちも発見できます
  145. 「 EditText クラスは TextView クラスから
    拡張している」といった具合に
  146. これは動作を
    TextView クラスから持ってきて
  147. 機能を少し加えたものです
  148. つまり EditText は TextView から
    拡張しています
  149. TextView は View から拡張していますし
    View は Object から拡張しています
  150. そして これが
    その Class Hierarchy Diagram です
  151. 沢山ありますので
    何時間でも見ていられますが
  152. 今回は TextView ドキュメントの
    ページの紹介だけで ご勘弁ください
  153. ここからは setVisibility のメソッドを
    ご紹介したいと思います
  154. TextView クラス内に
    setVisibility 用 Java メソッドがあります
  155. これはビューの可視化と不可視化を
    切り替えるものです
  156. このメソッドをクリックすると
    View クラスに飛びます
  157. そして これはメソッドの説明です
  158. TextView オブジェクトが setVisibility メソッドを
    伴っているのが分かります
  159. そして それは View クラスから
    継承されたものです
  160. この機能は無料で View クラスから
    得たものです
  161. さて 大量にある新概念を網羅しました
  162. これは通常ならコンピューターサイエンスの
    コースで 1学期間かけて行うものです
  163. これから 少し練習をします
  164. あなたにとって 点と点を
    つなぐことになると良いのですが
  165. しかし これらの概念を
    完全に把握するには より多くの時間と
  166. 練習が必要だということを
    知っておいてください
  167. OK 最初の練習です
    新たなアンドロイドアプリを作ってください
  168. ここで Java アプリの
    まとめをしておきたいのです
  169. 作り終わったら
    そのアプリを実行してください
  170. アプリを一度作ったら
    MainActivity ファイルを見てください
  171. MainActivity ファイルは
    AppCompatActivity から拡張しています
  172. Android Studio のバージョンによっては
    MainActivity が ActionBarActivity から
  173. 拡張しているかもしれませんが
    それでも構いません
  174. それは AppCompatActivity の
    古いバージョンなだけです
  175. AppCompatActivity クラス内に表示された
  176. onCreate メソッドを
    取り除きながら戻って行って下さい
  177. 今 このメソッドは「 MainActivity 内の動作は
    onCreate メソッドのために異なっている」
  178. と告げています
  179. なので これを取り除いて
    AppCompatActivity クラスを
  180. 元の動作に戻してください
  181. アプリを実行したら
  182. 最初にアプリを実行した時と
    何が違うか気づきましたか?
  183. このテキストボックスに答えを書き入れてください