オブジェクト指向やクラスの概念について多くの質問が来ます
初学者だとやはりここで躓く人は多くおられます
今回はそこに焦点をあてて解説していきたいと思います

まずは深く理解するのではなく、ざっくりとこういうものなんだなと知っておくと良いでしょう

今回はKotlinを使って書いて行きますが基本的にどの言語でも概念は同じです
概念を知るということに重きを置きたいのでぶっちゃけ言語の選定はどうだっていいのです

動画でみたい人はこっち

目次

概念を知ろう

まずは「オブジェクト指向」についてです
例えばゲームを作るとしましょうか
必要なものは下記としましょう

  • 主人公
  • アイテム

これを一つにまとめて作るのではなく、「主人公」「敵」「アイテム」といった部品(オブジェクト)ごとに分けて開発し、最後にその部品を組み合わせて一つにするといった概念だと思ってください

次にクラスとインスタンス
クラスは設計図で、インスタンスが設計図を元に実体化したものです
例えるなら、クラスはレシピ、インスタンスはレシピを元に作った料理になります

主人公クラスというものを作り、ここに主人公の設計図を書きます
例えば下記のようなものですね

  • 名前
  • タイプ
  • 年齢
  • セリフや行動

この設計図を元にインスタンスしていきます

少しクラスの特徴をみていきましょう

  • クラスは再利用できる
  • クラス内で定義された変数はプロパティと呼ぶ
  • クラス内で定義された関数はメソッドと呼ぶ

変数では値を、関数は処理を代入し再利用できるようにという感じですが、クラスではこれらを一つにまとめて再利用できるようにといった具合です

実際に書いてみよう

では書いていきましょう
同じようにKotlinで進めたい場合は「Paiza.io」というサイトをご利用ください
https://paiza.io/ja

まずはクラスを作ります

class Hero(val name: String, val type: String, val age: Int){
    
}

Heroクラスが作りました
「name」「type」「age」という情報を使ってこのクラスを実体化していきます
引数みたいに見えるこれをコンストラクタといいます

では中身を書いていきましょう

class Hero(val name: String, val type: String, val age: Int){
    init {
        println("新たなヒーローが誕生しました")
    }

    fun heroData(){
        println("勇者${name}${type}属性の${age}歳です")
    }

    fun voice(voice: String){
        println("${name}${voice}」")
    }
}

では解説していきます

init {
    println("新たなヒーローが誕生しました")
}

これはイニシャライザと言われてインスタンスされた時に自動で実行されるメソッドです

あとのheroDataとvoiceは任意で呼び出せるメソッドです

では続いてインスタンスしていきます
クラスのブロックから抜け出してこのように書いてください

fun main(){
    val takana = Hero("高菜こんぶ", "氷", 29)
    takana.heroData()
    takana.voice("一狩り行こうぜ")

    val yamada = Hero("フルーツポンチ侍", "ネバネバ", 30)
    yamada.heroData()
    takana.voice("将軍かよーーーーっ")
}

では解説

val takana = Hero("高菜こんぶ", "氷", 29)

インスタンス時に指定されているコンストラクタを渡します

takana.heroData()
takana.voice("一狩り行こうぜ")

こちらではメソッドを呼び出しています
voiceメソッドは引数が必要なので与えています

val yamadaでは再利用できるということを見せたいだけなので解説は省きます

実行結果はこうなります

このようになりました

では全体コードを確認します

class Hero(val name: String, val type: String, val age: Int){
    init {
        println("新たなヒーローが誕生しました")
    }

    fun heroData(){
        println("勇者${name}${type}属性の${age}歳です")
    }

    fun voice(voice: String){
        println("${name}${voice}」")
    }
}

fun main(){
    val takana = Hero("高菜こんぶ", "氷", 29)
    takana.heroData()
    takana.voice("一狩り行こうぜ")

    val yamada = Hero("フルーツポンチ侍", "ネバネバ", 30)
    yamada.heroData()
    takana.voice("将軍かよーーーーっ")
}

まとめ

最後に今日のポイントをまとめます

オブジェクト指向

部品(オブジェクト)こどに分けて開発する方法

クラスとインスタンス

クラスが設計図でそれに沿ってインスタンス(実体化)する
クラスは関連性のある変数や関数などひとまとめにしたもので再利用可能
クラスで定義された変数はプロパティ、関数はメソッドと呼ぶ