プログラムの話 オブジェクト指向を理解する

2018年8月23日

それでは、スマートフォンのアプリケーションを作るために必要なことを考えてみます。

Androidで使われる言語はJava(新しくできたKotlinに主力が移っています)で、iOSで使われる言語はSwiftです。そして、どちらもオブジェクト指向言語です。そのため、ある程度はオブジェクト指向を理解しないと、プログラムを組むことができません。

しかし、オブジェクト指向の本を読んで挫折してしまう人も多いのではないでしょうか。プログラムを仕事とするなら理解しないと駄目ですが、プログラムを趣味とする程度なら、全部覚える必要はないと思います。

そこで、プログラムを趣味とする人向けにオブジェクト指向の紹介をしたいと思います。

アプリケーションの開発に使われる開発ツールには、さまざまな支援機能があるため、オブジェクト指向の全てを理解する必要がありません。開発ツールがオブジェクト指向でソースを作ってくれるので、深いところまで理解する必要がないのです。

でも、何をやっているかをある程度は理解しておく必要があります。

それでは、オブジェクト指向について紹介しましょう。(説明にはJava言語を使います)

1.クラスを理解する

クラスは、変数や関数をひとまとめにしたものです。例を示します。

public class myClass {
private int myvalue ;
private static String mystr ;

// コンストラクタ
public myClass() {
myvalue = 3 ;
mystr = “kunimiyasoft" ;
}

public int GetMyValue() {
return myvalue ;
}
public String GetMystr() {
return mystr ;
}
}
クラスは、定義をしても実体を持っていないため、使う時に確保する必要があります。

myClass myclass_ins = new myClass() ;

newで実体を作った後で、myClassのメンバを使うことができます。実体ができたタイミングでコンストラクタが動作します。初期化の処理を記述すると良いでしょう。

メンバ変数

クラス内には変数を用意することができます。例では、整数のmyvalueという変数と、文字列のmystrという変数があります。

変数の型の前には、privateとありますが、これはmyClass以外では使えないという宣言になります。通常は、変数を外部からアクセスさせないようにします。プログラムの動作の品質を高めるには、アクセスの権限を考える必要があります。どこからでもアクセスできると、バグがあった時に問題の箇所を探すのに時間が掛かってしまいます。

メンバ関数(メソッド)

処理を定義するには、関数を使います。

関数にも権限の宣言が付いていますが、ここではpublicなので、どこからでもアクセスできます。外部に値を渡す時は、関数で渡すことが普通です。

myclass_ins.GetMyValue() ;
myclass_ins.GetMystr() ;

とすることで、外部からmyClassの値を取得することができます。

2.継承

クラスに必要な変数や関数を何でも揃えると、とても大きなリソースになってしまいます。そこで、共通な機能は親クラスに用意して、それぞれ個別な機能は子クラスに用意することが多いです。これを継承と言います。

public class parentClass {
private int parentvalue ;

public parentClass(){
parentvalue = 2 ;
} ;

public int GetParentValue() {
return parentvalue ;
}
}

public class childClass extends parentClass {
private int childvalue ;

public childClass(){
childvalue = 5 ;
} ;

public int GetChildValue() {
return childvalue ;
}
}

childClass childclass_ins = new childClass() ;
childclass_ins.GetParentValue() ;

子クラスでは、親クラスのメンバ関数を使用することができます。このように、親クラスに共通の機能を用意しておけば、子クラスには実装の必要がありません。

人間で例えると、人間クラスを親クラスで用意して、子クラスに、男クラスと女クラスを用意すれば、効率の良いクラスの定義ができます。

ここまで、権限にprivateとpublicが出てきましたが、protectedとすると、継承された仲間のクラスの中でだけ使えるという権限になります。

3.ポリモーフィズム

これは、呼び出し側の共通化で行われるオブジェクト指向の機能ですが、これは覚えなくて良いです。もちろん、ポリモーフィズムは使われているのですが、開発ツールが自動的に出力する部分で行われますので、自分が作る部分で無理に使う必要はないです。

個人の趣味程度であれば、ポリモーフィズムを駆使したプログラムは必要ないでしょう。

※あくまでも、私の個人的な意見ですので、ご了承ください。

4.オブジェクト志向のまとめ

このように、個人レベルのプログラムでは、クラスの理解とクラスの継承が分かれば何とかなると思います。

実際のプログラムでは、オブジェクト指向よりもAndroid特有の仕様を理解する方が大変です。私の作成した「さっぽろ周辺マップ」にしても、位置情報の取得や権限などの仕様を調べる方が大変でした。Windowsとは違って、スマートフォンはデバイスによる性能差が大きいため、プログラムが複雑で大変です。また、バージョンの違いにって仕様が変わるのも大変なところです。

もし時間があれば、いきなりスマートフォンのプログラムを行わずに、Windowsのフォームアプリケーションから始めると、基本を理解できると思います。Visual StudioでC#を使ってプログラムを組んでみてはいかがでしょうか。

備考:オブジェクト指向の参考本について

将来プログラムを仕事にしようという人、もしくは既にプログラムの仕事をしている人には、読んでおきたいオブジェクト指向の本があります。

kunimiyasoftの別サイトである「kunimiyasoftアイテムセンター」で紹介しているので、よろしかったらどうぞ。

kunimiyasoftアイテムセンターへ移動