Japanese subtitles

← Inheriting Behavior

Get Embed Code
13 Languages

Showing Revision 14 created 10/08/2015 by tama_ino.

  1. ちょっとだけ JustJava アプリに戻りましょう
  2. 「 MainActivity 」クラスの
    「 displayMessage 」メソッドを見ましょう
  3. そのものはここから始まって
    少し分かりやすく書いてあります
  4. 創作中の変数「 orderSummaryTextView 」を
    見分けられますね
  5. この変数データタイプは
    「 TextView 」でした
  6. まだ ここの部分は理解していないのですけどね
  7. 次の行はテキストビュー上の
    メソッドをコールします
  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. そのメソッドは
    the on create method です
  82. MainActivity 内の the on create method を
    上書きすることは
  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. これについて考える時
    テキストビューもイメージビューも
  107. ボタンビューも
    全てが共通要素を持っています
  108. それら全てのビューは
    スクリーン上に幅と高さを持っています
  109. まだ学んでいませんが
    それらには可視性ステートもあるのです
  110. それらは全て可視化にも
    不可視化にもできるのです
  111. 他にもそれらに共通するものが
    数プロパティあります
  112. テキストビュークラス内で それらの
    プロパティ用コードを書き出す代わりに
  113. 次のイメージビューやボタンクラスで
    それをコピーします
  114. そうするともう少しスマートにできます
  115. ビュークラスを作れます
  116. 全てのビューに共通する
    プロパティを抜き取って
  117. このビュークラスの中に置く
    こうすればコード書くのは一度だけで済みます
  118. では どうやってこのテキストビュークラスと
    ビュークラスの間につながりを
  119. 作るのでしょうか?
  120. 継承を考えているのなら
    その考えは正しいです
  121. 「 TextView.java 」ファイルの中に
    テキストビュークラスを定義していきます
  122. こうして ビュークラスのデータと
    メソッドを全て継承します
  123. すると この「 TextView.jsva 」クラスに
    多くのコードを入れなくてもよくなります
  124. なぜなら 機能性の一部は既に
    この「 View.java 」クラスの中だからです
  125. 同じことが「 ImageView.java 」など
    下のクラスにも適応されます
  126. 沢山のコードを書く必要はありません
  127. このファイルの中には
    「 ImageView.java 」と
  128. 「 View.java 」で違う箇所のみを
    書けばよいのです
  129. データを明示すると考えると
    「 ImageView.java 」クラスは
  130. 「 ImageView.java 」と「 View.java 」で
    違う箇所のみを明確にする必要があります
  131. もし 「 View.java 」内の
    ある動作を継承したくないなら
  132. 書き換えた動作を「 ImageView.java 」や
    他のクラスの中に明示することが
  133. できます
  134. 用語を思い出すために
    この場合
  135. 「 TextView.java 」はサブクラスで
    「 View.java 」はスーパークラスです
  136. TextView クラスのドキュメントに
    戻ったとしたら
  137. その部分を今 理解しました
  138. 「 TextView が view を拡張する」とあります
  139. 今なら その意味を知っています
    ステートとメソッドを
  140. ViewClass から継承している
    ということですね
  141. 下には a 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 最初の練習です