Java デザインパターン 〜Factory Method パターン〜

今回は、Androidアプリ作成のヒントとしてデザインパターンに関して記載します。

大まかに、Androidアプリのフレームワーク(アーキテクチャ)として下のような図が描けます。(Androidのサイト参照)

そして、このフレームワーウを理解するために「デザインパターン」の理解がいちばんの近道だと思うので記載します。MVCモデル(参考)の理解にも近いです。

基本はオブジェクト指向

オブジェクト指向と一言で言いますが、「ポリモーフィズム」のことです。「?」が頭に浮かんだ方は気にしなくて結構です。重要ではありません。イメージがつきやすいであろうと思い記載しました。

ポイント

オブジェクト指向の考え方に従い、色々考えていくと「デザインパターン」にたどり着きます。
早い話が、「こう設計すると、綺麗なデザインになります」というものです。

Factory Methodパターン

今回は、このパターンから入ります。
Factoet Methodパターンの理解から入りたいと思います。

親クラスをカスタムするパターン

このFactory Methodパターンは、すでに出来上がっている親子関係を使って新しい機能を実装する時に便利なパターンです。

具体的に

実装するクラスで「First Program is ...」という文言を出力するところを変更して、好きな文言を出力するプログラムを作ろうとした時、以下のような形で実装できます。
<親クラス>

class Parent {
  public Parent() {
  }

  public void sayHello() {
     System.out.println("First Program is ...);
  }

  public static void main(String[] args) {
      sayHello();
  }

<子クラス>

class Child {
  public Child() {
  }

  @Override
  public void sayHello() {
      System.out.println("Hello World!");
  }
}

これで、親クラスのメインメソッドを実行した時には「First Program is ..」と表示されますが、子クラスからメインメソッドを実行すると「Hello World」と表示されます。

ちょっと簡単でしたが、こんな感じです。

Androidアプリを作成する時には、一度作成したクラスの一部を変更したい時に使える方法と言えます。

でわでわ。。。



Java Android アーキテクチャ 〜デザインパターンを見る〜

題名にあるようにデザインパターンに関して記載していきます。
参考にするのはアンドロイド・デベロッパーサイトです

事の発端

前回、Java Basicと称して、Androidアプリの開発に使用するJavaの基本に関して記載し始めることにしました。
しかし、フレームワークとしてAndroidを見て見るとどうしても「デザインパターン」というものに出くわしてしまいます。なのでここら辺を穿って行こうと思いました。

デザインパターンとは?

「こんな感じで実装するとクールだ!」というものが「〜パターン」という形で表現されています。

代表的なものにGOFのデザインパターンというものがあります。早い話が以下のようなものです。

クラスの継承をうまく使ってこのデザインパターンという実装方法を行うことで、余計な処理を作成しなくてよくなります。

このデザインパターンを理解するとAndroidの開発も楽になります。というかすでに使用されているのでどんなデザインパターンを使用しているのか?を明確にするとあとが楽です。

推奨されるデザインパターン

依存性の注入(DI)インタンスを「new」演算子を使用しないで取得します。
サービスロケータ・パターン: これは DIと似たようなものらしいですが、DIより簡単らしいです。

調べた結果

結局のところはMVCモデルと同じような形で作成されているようです。
ここに「どのデザインパターンを使おうか?」という疑問が出てきて、「どれを使おうか?」と話を進めていくようになりそうです。

つまり、アーキテクチャは下のようになっているのでそこにどのようなデザインパターンを使用するか?というところがキモになりそうです。

Androidのアーキテクチャ

  1. Activity(Fragment)を基準(スタート地点)にして
  2. 読み込む画面(ViewModel)のデータ(layout.xmlに書いたデータ)を表示してから
  3. Repository(データアクセスモジュール)で必要なデータをデータソース(DBなど)から取得する

こんな感じで実装するようです。「アーキテクチャ」というのは実装するときの「思想」とか「概要(フレームワーク)」という意味です。

このアーキテクチャにこのパターン

早い話が、上記のように考えると答えが見つけやすいであろうというところです。
次回からは具体的にデザインパターンを使用する方向でコードを書きたいと思います。

でわでわ。。。。



Java Basic for Android 〜Android実装でのJavaベーシック〜

毎度おなじみ?のJavaBasicコーナーです。
今回は、Android実装で使用するJavaの考え方を中心に記載します。
ちなみに今までのJavaBasicはイチから全部を作成するためのもの。。。低レベルな実装からおこなっております。Androidでちょっと複雑なこと、例えば3Dモデルを描画するとか、。。。、をやろうとするときに使えるものです。つまり文法とファイル入出力などです。
キホンですね。よかったらどうぞ。

  1. Java Basic その1
  2. Java Basic その2

AndroidでのJava Basic

Androidでの実装は、Javaで作成される画面、アクション、通信などの実装が行われています。
いわゆる「フレームワーク」としての実装があるので前回作成した「MainActivity」クラスのみの実装でHello Worldが表示できます。

このフレームワークに関しては、こちらのページも参照して欲しいのですが、大まかに必要な部分のみを実装すれば動く便利アイテムというイメージです。

具体的に

Android Studioでプロジェクトを作成したときに自動生成されたファイルがたくさんあります。
主要な部分としては以下の通りです。

  1. activity_main.xml
  2. MainActivity.java
  3. AndroidManifest.xml

他にもありますが、フレームワークの中身を見るのが目的ではないので、この3ファイルに着目します。

1のactivity_main.xmlは以前記載した記事でHello Worldの文言を変更するときに触りました。

  1. 見た目の作りについて
  2. 見た目の変更

Androidフレームワークでは、このXMLファイルにかいたプロパティを読み込んでJava側で表示するものを作成しています。
そして、XMLを読み込む処理は下の部分です。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // 親クラスのonCreateを実行する
        super.onCreate(savedInstanceState);
        // activity_main.xmlを読み込む
        setContentView(R.layout.activity_main);
    }

なので、画面の見た目を作成する方法としては2通りあるということになります。

  1. XMLで作成する
  2. Javaコードで作成する

自分はJavaコードで作成する方に慣れているのでXMLはあまり使用しませんでしたが、ちょうど良い機会なので使ってみました。
設定するプロパティは変わらないのでXMLから入ってもJavaコードから入っても良いと思います。

しかし、世の中「GUIで実装する」ということもあるので。。。なんともいいがたし。。。

とりあえずはコードとXMLの関係がわかれば問題ないと思います。

クラスの継承関連

自動生成されたコードを見てみます。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

こんな感じだったと思います。
注目して欲しいのはextends AppCompatActivityの部分です。
フレームワークたる部分になるのでプログラミング初心者にはちょっと難しいかもですが、簡単にいうと『「extends」すると細かい処理は全部フレームワークがやってくれる』というところです。

クラスを継承する

ちなみに「extends」というのは日本語で「継承」と言います。クラスを継承するというのは、わかりづらい概念だと思います。自分は理解するのに結構時間がかかりました。

理解するポイントとしては、以下の通りです。

  1. 関係性を見て見る
  2. 実装して動かして見る
  3. どこがどのようになっているのか整理する

というわけで、簡単なアプリを作成して見るのが一番早いというわけです。
参考程度ですが、継承に関してOracleDocを引用して継承についてコードを交えて記載した記事があるので、それもよかったらどうぞ。

参考に下にリンクをつけておきます。

  1. オブジェクト指向の概念1〜OracleDocのチュートリアル1〜
  2. オブジェクト指向の概念3〜継承とは〜
  3. オブジェクト指向の概念4〜インターフェースとは〜

サンプル実装

ちょっと作成して見ました。
<親クラス>

public class ParentCls {
    private String parentName;
    protected int parentId;
    public String parentFunc;

    public ParentCls() {
        System.out.println("ParentCls is here");
    }

    private void say() {
        System.out.println("private: say parent");
    }

    protected void say(String message) {
        System.out.println("protected: " + message);
    }

    public void say(String message, int num) {
        System.out.println("public: " + message + " in " + num);
    }
}

<子クラス>

public class ChildCls extends ParentCls{
    public void sayChild() {
        say("Hello Parent");
    }
}

<実行したテストコード>

public class ExampleUnitTest {
    @Test
    public void testPrentChild() {
        ChildCls child = new ChildCls();
        // 子クラスから親クラスのメソッド
        child.say("Java Basic");
        // 子クラスのメソッド
        child.sayChild();
    }
}

実行結果

今回作成したのはAndroidでのテスト実行クラスです。
テスト実行処理は下のようなコードで実行しました。

public class ExampleUnitTest {
    @Test
    public void testPrentChild() {
        ChildCls child = new ChildCls();
        // 子クラスから親クラスのメソッド
        child.say("Java Basic");
        // 子クラスのメソッド
        child.sayChild();
    }
}

今回はここら辺で失礼します。

でわでわ。。。

関連ページ

Java学習フロー(こんなのどうでしょう?)

Javaでコンソールアプリを作る



Java Android 6〜計算アプリのJavaコードを書く〜

今回は、Javaコードで計算処理を作ります。
ちなみに前回は、計算アプリの画面を作成しました。

Javaコードを書く

前回作成した画面は下のようなものです。

そして、今回はJavaでプログラミングを行います。
一番初めのHello Worldを思い出します。

実装してあるのは下のようなコードでした。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

このコードに、作成したXMLの内容から画面の部品を取得するコードを追加します。

// 画面のコンポーネントを取得
TextView title = (TextView) findViewById(R.id.textView);
EditText firstData = (EditText) findViewById(R.id.editText1);
EditText secondData = (EditText) findViewById(R.id.editText2);
TextView answer = (TextView) findViewById(R.id.textView4);
// ボタンをクリックした時の動作
Button execute = (Button) findViewById(R.id.button);
execute.setOnClickListener(this);

そして「ボタンをクリックした時の動作」を実装します。
手順は以下の通りです。

  1. View.OnClickListenerをimplementsする
  2. OnClick()をオーバーライドする

実装したコードで下のような実装があります。

// ボタンをクリックした時の動作
Button execute = (Button) findViewById(R.id.button);
execute.setOnClickListener(this);

この実装は、「MainActivityクラスをOnClickListenerとして使用します」という意味です。

早い話が、OnClickListener#onClick()がクリックしたときに動くわけです。
なので下のように実装してみました。
今回は起動の確認を行いたいので、仮実装になります。

@Override
public void onClick(View textView4) {
    String text = ((TextView) textView4).getText().toString();
    System.out.println("Value: " + text);
}

この引数にある「textView4」というのは、XMLで定義した画面の部品(TextView)です。
自分は、ボタンが謳歌された時の引数には「textView4」が渡されると思ったからこのような名前にしました。
XML以下の通り

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello"
            android:textSize="30sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent" >

        </TextView>

        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="2"
            android:inputType="textPersonName"
            android:text="A"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.02"
            app:layout_constraintTop_toTopOf="@+id/textView"
            app:layout_constraintLeft_toLeftOf="@+id/textView"
            app:layout_constraintRight_toRightOf="@+id/textView"
            app:layout_constraintVertical_bias="0.521"
            />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="10dp"
            android:layout_height="20dp"
            android:text="+"
            app:layout_constraintTop_toTopOf="@+id/editText1"
            app:layout_constraintLeft_toRightOf="@+id/editText1"
            android:layout_margin="15dp"
            />

        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="28dp"
            android:ems="2"
            android:inputType="textPersonName"
            android:text="B"
            app:layout_constraintTop_toTopOf="@+id/editText1"
            app:layout_constraintLeft_toRightOf="@+id/textView2"
            />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=" = "
            app:layout_constraintTop_toTopOf="@+id/editText1"
            app:layout_constraintLeft_toRightOf="@+id/editText2"
            android:layout_margin="15dp"
            />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView"
            app:layout_constraintTop_toTopOf="@+id/editText1"
            app:layout_constraintLeft_toRightOf="@+id/textView3"
            android:layout_margin="15dp"
            />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="80dp"
            android:layout_marginLeft="76dp"
            android:text="計算"
            app:layout_constraintBottom_toBottomOf="@+id/textView2"
            app:layout_constraintLeft_toRightOf="@+id/editText1" />

</androidx.constraintlayout.widget.ConstraintLayout>

そして、実行してみます。
OnClickの実装は下の通りです。

@Override
public void onClick(View textView4) {
    String text = ((TextView) textView4).getText().toString();
    System.out.println("Value: " + text);
}

引数の文字列をコンソールに表示します。

それでは実行してみます。

色々と問題があります。が、今回はボタンをクリックした時の引数はなんなのか?を確かめるのが目的なので、ここに注力します。

実行した時のログで下のような文言が出力されていました。
com.zenryokuservice.myapplication I/System.out: Value: 計算
上のコードのSystem.out.println("Value: " + text);の部分がコンソール(Logcat)に出力されます。

そして、「計算」という文字の入った画面の部品があります。そーです。「ボタン」です。
なので、引数のViewは「Button」が入ってくるのです。

クラスが別?

「ViewとButtonは別クラスでわ?」と疑問に思った方、素晴らしい!
基本的には、別クラスなのでViewで受け取ることはできないのです。
ただし、インターフェースを実装していれば話は別になります。
ここで、ButtonクラスのJavaDocAPIをみてみます。

上のようにクラスの継承ツリーが書いてあります。
察しの良い方は気がついたと思いますが、「Button」クラスは「View」クラスの子供に当たるのです。
つまり、Viewクラスとして使用することができます。

(View) findViewById(R.id.button);

これでビルドエラーは出ません。ボタンとして使用できませんが。。。

とりあえずは、ここまでにします。
ここからちょっと複雑な話になります。

でわでわ。。。

## 関連ページ
カテゴリ別記事一覧
Java学習フロー(自分の提案するものです)
Javaでコンソールアプリを作る



Java Android 5〜計算アプリを作る〜

今回は、簡単な計算を行うアプリを作成しようと思います。
前回は、入力部品を作成しましたのでここに入力した数字を計算して、計算結果を表示するプログラムを作成します。

計算アプリを作る

今までは、プログラムというほどのものは触りませんでした。XMLのプロパティをいじっただけです。「Javaじゃねぇーだろ?」と思った方もいると思います。
しかし、XMLはJavaアプリケーションを作成するときによく出てくるので触っておいて損はありません。
XMLに慣れておけば、大体のフレームワークに対峙しても、立ち向かうことができるでしょう。。。

設計をする

アプリケーションを作るときに、はじめに「設計」を行います、これをやらないと。。。例えるならば

料理を作っているときに、塩加減を間違えたまま作ってしまう。

作ろうとしたものと違うものができてしまう

うんコードができてしまう

上記のような事態に陥る可能性が高くなります。熟練のプログラマーでも、ある程度の規模のアプリになれば、必ず設計をしなくては「うんコード」ができてしまいます(笑)

今回の設計

テキストボックスを2つ作ります。。。
早い話が、下のように画面を作ります。サンプル動画もつけています。

下のような、イメージです。

ここのAとBに値を入力して「TextView」の部分に計算結果を表示するという設計にしようと思います。

まぁ、このレベルならば「設計なんて。。。」と思うかもしれませんが、このレベルから始めれば理解もできるし、理解できれば応用もできます。

なんとかできた

とりあえず動くレベルですが。。。

まぁこんな感じです。ひどいもんです。。。

とりあえずは、入力部品の作成と配置のみでいっぱいいっぱいなので今回はここまでにします。

でわでわ。。。



Java Android 4〜入力部品を追加する〜

前回は、表示した文字(TextView)を変更する実装をやりました。今回は、テキストボックス(入力部品)を画面に追加する方法を学びます。

余談

Android Studioを立ち上げてLayoutEditorを開いてみると、黒くなっている時があります。
これは、リビルドすると治りました。

TextView

前回までの実装では下のようになっています。

これにテキストボックス(EditText)を追加します。

上記のリンク先にサンプルコード(XML)があるのでそいつをコピーしてきます。

<EditText
     android:id="@+id/plain_text_input"
     android:layout_height="wrap_content"
     android:layout_width="match_parent"
     android:inputType="text"/>

そして、すでに実装しているTextViewの下にコードを追記します。

参考にするサイトはAndroidデベロッパのガイドです。
ここにはLayoutEditorの開き方が載っていて、とてもわかりやすいです。

しかし、エラーが出ました。「This view is not Constrained ...」という内容でした。

結局のところは「レイアウトのポジション指定をしないと変な場所にコンポーネント(画面の部品)が表示されます。」という内容のエラーでした。
そんなわけで、ポジションを指定します。

<EditText
    android:id="@+id/editText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPersonName"
    android:text="Name"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    tools:layout_editor_absoluteX="222dp"
    tools:layout_editor_absoluteY="684dp" />

これでエラーは解消できましたが、指定したポジションがおかしいので、左下に移動してしまいました。

なので、これを適当な場所に移動します。今回は、はじめに表示した「プログラミングで遊ぼう!」の文言の下に配置したいので、こちら(まとめ)かこちら(AndroidDeveloppers)を参考にXMLにコードを追加します。

            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toTopOf="@+id/textView"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"

ポイントとしては、上下左右のポジションが確定するようにプロパティを指定してやらないとエラー(警告?)がAndroid Studioから出されます。

これでとりあえずは、以下のように表示できました。

動かしてみた動画は下です。

でわでわ。。。



Java Android 3〜Androidアプリの見た目を変更する〜

前回は、Hello Worldの文字列を変更して「プログラミングで遊ぼう!」に変更しました。

しかし、表示している文言が小さすぎて読みづらいです。なのでそれを変更しようと思います。
そして、入力部品の追加も行います。

文字の大きさを変える

ちなみに、前回作成したプログラムは下のようなwarning(注意)が出ています。

ファイルに追加する

今回修正するファイルはstrings.xmlです。

下のように修正します。

<resources>
    <string name="app_name">My First App</string>
    <string name="hello">プログラミングで遊ぼう!</string>
</resources>

細かいところはおいおい理解していくのでとりあえず書いておくというところで。。。

次に、activity_main.xmlファイルを編集します。下のようにcode>android:text="@string/hello"

しかし、ビルドエラーが出ます。(赤い文字列がそうです)これは、strings.xmlに追加したプロパティ(タグ)が読み込まれていないためです。

原因としては、参照しているディレクトリが違いました。appの下にあるものとmyapplicationの下にあるstrings.xmlを間違えておりました。

文字の大きさを変える

これも、決まった書き方があるのでそれに従います。
android:textSize="30dp"のコードを<TextView>タグの中に書きます。こんな風に実装しました。

<TextView
         android:id="@+id/textView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="@string/hello"
         android:textSize="30dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toTopOf="parent" />

ちょっといじって遊んで見ます。

こんな感じで値を変更できますので、自分の納得いくようにやって見てください。

でわでわ。。。



Android プロパティメモ 〜TextViewのプロパティ〜

Androidアプリの作成を行うのに、まとまっていた方が便利かな?と思い、TextViewのプロパティをまとめていきます。

今後も更新していきます。

TextViewのプロパティ=大きさとか位置とかを設定する項目名です。

XMLとプログラムコードの両方で設定ができます。参考にするサイトはこちらデベロッパサイトです。

TextViewプロパティ

layoutに関して

fill_parent: ドロップダウンは画面の高さに合うはずです。この定数は、APIレベル8以降では非推奨であり、match_parentに置き換えられています。

match_parent
ドロップダウンは画面の高さに合うはずです。 APIレベル8で導入されました。

wrap_content
ドロップダウンはコンテンツの高さに合わせてください。

主に使用するのは「match_parent」「wrap_content」のようです。

ちょっといじって見ました。

ConstraintLayout

参照先はこちら


code>app:layout_constraintLeft_toRightOf="@+id/buttonA"

layout_constraintLeft_toLeftOf
layout_constraintLeft_toRightOf
layout_constraintRight_toLeftOf
layout_constraintRight_toRightOf
layout_constraintTop_toTopOf
layout_constraintTop_toBottomOf
layout_constraintBottom_toTopOf
layout_constraintBottom_toBottomOf
layout_constraintBaseline_toBaselineOf
layout_constraintStart_toEndOf
layout_constraintStart_toStartOf
layout_constraintEnd_toStartOf
layout_constraintEnd_toEndOf


app:layout_constraintLeft_toLeftOf="parent"
                 app:layout_constraintRight_toRightOf="parent
android:layout_marginStart
android:layout_marginEnd
android:layout_marginLeft
android:layout_marginTop
android:layout_marginRight
android:layout_marginBottom
layout_constraintHorizontal_bias
layout_constraintVertical_bias

app:layout_constraintHorizontal_bias="0.3"
                 app:layout_constraintLeft_toLeftOf="parent"
                 app:layout_constraintRight_toRightOf="parent

でわでわ。。。



Java Android 〜スマホアプリではじめるJava〜

Javaと言うプログラミング言語があります。
これは、いろんな場所で使用されています。もちろん他にもいろんな言語があり、いろんな場所で使用されています。

しかし、その中でもJavaをすヽめるのにはわけがあります。
それは、習得難易度とライブラリの多さ、実装可能な範囲の大きさが理由です。
早い話が大体のことはできると言うことです。

プログラミング言語って?

プログラミング言語は高レベルなもの(言語)〜低レベルなもの(言語)があります。
低レベルなものの中で、有名なのは「C言語」です。
それに対し、高レベルなもの(言語)は「Python」が有名です、他にもScratchなどのようなブロックプログラミング言語があります。

高レベルなものは、(低レベルなものに比べ)簡単にものを作れます。習得するのも(低レベルなものに比べ)簡単です、有名なものとしてはWordPressとか、JavaScriptが代表例です。フレームワーク化して難しくなっているものもありますが(笑)プログラム言語自体は、難しくありません。

低レベルなものは、作るのが大変だけど、ほぼ大体のことができます。有名な人工知能も土台はC言語(C++)でできています。

スマホアプリ作成でJavaを習得

今回のメインになります。今まで上げたようなプログラミング言語の中で「高レベル」な部分と「低レベル」な部分を両方持っているのがこのプログラミング言語です。
具体的には、今回作成しようとしているAndroidアプリのように「フレームワーク」を使用してやれば簡単にできるものですが、深く作っていこうとするとだんだん難しくなっていくものです。
なんでもそうですが、Java言語に関してはこの言語の中だけでかなり深いところまでいけます。
母体がC言語なので。。。

スマホアプリを作成する

前回は、ハローワールドをAndroidでやりました
エミュレータを使用して起動したのでちょっと重いです。しかし、Android端末を持っているのであれば、そちらにインストールすることができるので重くありません。

前回作成したものは、AndroidStudioが作成(生成)してくれたので何もしていません。

ソースを見てみよう

前回作成したのは「MyFirstApp」と言うプロジェクトに作成(自動生成)されたアプリケーションです。

下のように、色々あって混乱しがちですが、まずは見るところがわかればオッケーです。
ズバリ、下のイメージにあるように「MainActivity.java」を見ます。

コードは下のようになっています。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

まずは、このコードの他には目もくれず下の1行に着目してください。
setContentView(R.layout.activity_main);

そして、layout.activity_mainの部分をコピーして、AndroidStudioを開き、「Shift」を2回押して、プロジェクト内を検索します。

すると下のような画面が見れます。

この「activity_main.xml」を表示しているのです。ここにHello World」と書いてある部分があるので、見つけて見てください。

そして、「Hello World」を違う文言に修正して見ましょう。
例えば「Rock and Roll!」と表示させてみるのも良いのではないでしょうか?

まずは、はじめの2歩目というところでした。

でわでわ。。。





Java 子供向け 〜AndroidアプリでJavaをすヽめる

Androidアプリの作成準備を始めました。
Android Studioのインストール〜ハローワールドの実行までやりました。

Javaをすヽめる

Androidをやるのには下心があります。それは近所の子供たちにJavaをやらせようというものです。
実際に自分はボランティアで近所の子供たちにプログラミングに関してアドバイスなんぞしていますが、まぁ一言で言うなら「子供たちは天才ばかり」と思い知らされています。実際にある中学生はSSLの通信ロジック(暗号処理の一部分)の内容を見事に説明してくれました。
他にも、企画を立て、仲間を集めコンテストに出場とか、コンテストに優勝とか。。。

そーなると、自分は、大人として黙ってはいられない気持ちになるわけです。

Javaワールドへ引き込みたい。。。

このような気持ちがふつふつと湧いて来ます。

しかし子供!

やはり「面白い」がないとやる気になってくれません。キーワードとしては「ゲーム」、「難問」など、キモになる穂は「達成感を得る」と言う部分です。ちなみに中学生くらいの子供たちを対象にしようと思っています。

昔ながらの方法で

早い話が「やってみせる」と言うところに行き着くわけです。具体的には。。。

座学をやっても意味がない

理論的に理解すると言うことは大事ですが、それよりも「結果」を重視する方法でないと「やる気」が出ないし、?がいっぱいになり興味も示してくれない状況です。
早い話が、ものを作って「これ面白いだろ?」とやってみせるのが一番の方法だと思うわけです。

Androidアプリ

これを作成し、動かしてみせる。何かしらのアクション(光る、鳴る、動く)を実装して見せてやれば人気者間違いなし!(作ったものです)なのでそれを作るためのアイディアを練るのがとても大変です。

要件

  1. 直感的に動かせるもの(アプリ)
  2. 動かして遊ぶとプログラミングの理解につながる
  3. Javaに興味を持ってもらう

上記のような要件を満たすようにサンプルアプリを作成したいと考えております。
パズルゲームなんぞはどうだろうか?

もちろん、一人で製造可能で、業後の時間帯で。。。となると大人向けプロジェクト共有(Gitリポジトリ)を作成、チーム開発を行うのがベストな方法なのかもしれない。。。
しかし主要になる技術がみんな違うんだなぁ。。。

なんか愚痴っぽくなったけど、これから作成しようと思うアプリの「要件」をまとめてみました。

でわでわ。。。

関連ページ

  1. [Androidアプリ開発 〜1.インストール〜]()
  2. [Android ライフサイクル 〜フレームワークって何?〜]()

サイトマップ