プログラミング何も知らないけどオブジェクト指向を用語から学んでみる【イチからアプリ開発 Part.3】【素人がAndroidアプリ開発】
どうもこんにちは。さのゆいたです。
何やらCy君とMys君ら高学歴チームが頭おかしい企画していますが
【お知らせ】テスト勉強12日でどこまでいけるか企画? - TORM
私はFラン大学御用達高校の者なので知らないふりをして、今回も開発ログを書いていこうと思います!
無謀すぎた挑戦
私、プログラミングは何もわかりません。Cって何でしょうか
今まで触ったのはHtmlとCSS、あとVBSとかいうスクリプトのみ
こんなのがアプリ開発を始めるというんだからわらっちゃいますよね
試しにプログラミングのネットの記事を見てみても、専門用語がわからな過ぎて途中で萎えます。
こんなの無謀すぎる!と思うのですが、あいにく私は暇人なので(テスト期間ですが)軽ーくまずはJavaの用語をまとめて、Kotlinでのプログラミングの形を「もやっと」つかみたいなと思います!
JavaとKotlinは家族だから、Javaの姿をつかめばいける!はず!
というわけで、プログラミングをするうえで必要なJavaの用語を一通りまとめていきます。
文字列
”(ダブルクォーテーション)で囲んだ文字のこと。
囲んでないとエラーが出る。やりがち
オブジェクト指向(object-oriented)
プログラミングを小さく部品のように分けてすることらしい。
多分これが理解できないと詰むなと思ったので、簡単にまとめてみます。
例えばあなたはキャラクターの多くいるアクションゲームを作っているとします。*1
とりあえず移動のプログラムを下のように書いてみたとしましょう
もしもCtrlを伏せの動作に変更するとなったらこれらのプログラムを全て書き直さなければいけないことになってしまいます。
それを防ぐにはどうしたらいいかというと、例えばA,B,Cを「キャラクター」と定義して以下のようにすればいいわけです。
A,B,Cの色やテクスチャは個別に設定すればいいわけですね
これがオブジェクト指向型のプログラミングであると私は考えています!
もっと詳しくしてみましょう。
オブジェクトとは「対象」「物」という意味ですが、これを見ているあなたも、スマホもオブジェクトなわけです。
お前は何を言っているんだという感じですが、今から紹介する用語を含めて理解してください。
クラス(Class)・インスタンス(instance)
クラスとは、オブジェクトの設計図らしいです。
これもまた例を交えて考えていきます。
例えばCy君が全自動卵割り機を作ろうとしているとします。
まず初めに設計図をつくりました。(天才なので頭の中で作った)
この設計図がクラスなのです。
そしてこの設計図によってできた実物がインスタンスです。
設計図は、実物がないのですが概念があります。
実際に作られたものと設計図は別物ですが、どちらもオブジェクトなのです。
プログラミング的に言うと、
クラス・・・属性(プロパティ)と操作(メソッド)を定義するもの
インスタンス・・・クラスをNewして実物にしたもの
ちなみにクラスの構造は以下のような感じです。
カプセル化
オブジェクトの構造を、外から見られないように、また触れないようにすること
そのオブジェクトに触れるには何かを用いなければならないらしいですが、そんな大規模な開発じゃないのでまた今度
継承
元となる要素(親)からその特徴を受け継いで使うこと
例えば私に子供ができたとして、私はとても温厚であるという性格だったとします。
そして私の子供にもその性格が受け継がれることを継承というのですね
ぼんやりと元ネタがあって、それを受け継ぐことだと考えるとよいと思います。
変数
これは大事だと思います
数学の変数と考え方自体はほぼ同じですが、ここではよく、何かを入れるための箱という表現をされます。
例えばInt(整数)専用の箱にaという名前を付けて数字(ここでは1)をいれます。
この箱が変数なのですね
そしてこの箱には一つのモノしか入りません。
先ほどの箱に2をいれると1は消えてしまうのです
中身は開けてみないとわからないので、推測しやすい名前にすることがコツですね
ちなみにKotlinだとvarで宣言します。
型
先ほどの変数の箱の形のこと
Intは整数でしたが、ほかにも文字列の入るものだったり、少数の入るものだったりします。
Kotlinでの型一覧は以下の通りです!
定数
変数がモノを出し入れするハコという表現をしたのに対し、こちらの定数は変わらないモノを入れる箱という表現をします。
こちらの定数は一度箱にモノを入れたらそれ以上中に入れられないという違いがあります。
変数はものが上書きされるのに対し、定数は上書きできないということですね
Kotlinではvarで宣言します。
ポリモーフィズム
日本では多様性などと訳されます
皆さんは家電を操作するとき、慣れているものであれば新しいものでも説明書を読まなくても操作できますよね?
家電の例から変えて、A君とB君の話にします。
・〇君の△は□だ。という構文を作ります。
- A君の利き手は右手だ。
- B君の利き手は左手だ。
このとき、△は同じですが、□の結果は違いますよね。
これをポリモーフィズムというのです。
プログラミング的に言うと、
〇・・・呼び出し元
△・・・関数
□・・・結果
ということになります。
要は同じ関数だけど、呼び出した人によって結果が変わりますよってことです。
null
よく聞くnullです。
あなたはかごを持っていて、かごの中には何かモノが入っています。
一つなら1
二つなら2
何も入ってなかったら0
ですよね
ではかごも持ってなかったらどうするか、
nullとします。
要はそこにはなにもありませんよということを表すモノなのですね。
if文
プログラムで使う構文の一つです。
「もしも〇だったら△する」という条件の分岐を書くときに使う文ですね
たとえば、下のような分岐を作りたいとします。
これをフローチャート風にすると下のようになります
これがif文です!
関数
関数とは、何かを入れると何かを返してくれるもののことです。
数学の関数とほぼ同じですが、ここでの関数は何かをまとめたものという考え方ができます
数学での関数の考え方はCy君が詳しく解説してくれています。
【数学・本質】関数とは何? - TORM
彼の用いた卵の例を使って、解説していきます。
卵を ゆでると ゆで卵になります。
これをプログラム的に分解してみると、
卵(を鍋の中に入れる)・・入力
ゆでる・・・処理
ゆで卵・・・出力
となります。
この操作を図にしたのが下です
先ほどの例を用いると、卵を入れる事を入力、ゆでることを処理、ゆで卵として取り出すことを出力といいます。
なぜこういうことをするかというと、例えば料理をするプログラミングを作るときにゆで卵を3つ使ったサラダを作りたいとします。
・はっぱを乗せる。
・卵を鍋の中に入れて、ゆでてゆで卵にして取り出す。
・卵を鍋の中に入れて、ゆでてゆで卵にして取り出す。
・卵を鍋の中に入れて、ゆでてゆで卵にして取り出す。
・ゆで卵を乗せる
メンドクサイですよね。
だから二行目から三行目までをゆで卵を作るという関数にしてしまうのです。
すると、
・はっぱを乗せる。
・ゆで卵をつくる。
・ゆで卵をつくる。
・ゆで卵をつくる。
・ゆで卵を乗せる。※ゆで卵をつくる{
卵を鍋に入れてゆでてゆで卵にして取り出す
};
すこしさっぱりしましたね
もし卵を一つ増やしたかったら、ゆで卵を作る。というのを足せばいいのです
日本語だと長めですが、プログラムなら雲泥の差です
これが関数です。メソッドに似ています。というかほぼ同じものとしていいです。
引数・戻り値
一個前の関数での、入力を引数、出力を戻り値と言います。
簡単ですね
ちなみに戻り値のある関数は関数(ファンクション)、戻り値のない関数はプロシージャといいます
おわりに
はい。まだまだ色々ありますが、もう私の処理能力が限界なので、本当に基本の基本に集中させていただきました。
またわからない単語があったら随時追記していきたいと思います。
次回からはサンプルアプリをいっぱい作って、アプリ開発になれていきたいなと思います。
それではここまでお読みいただき、本当にありがとうございました!
よければ読者登録、ツイッターのフォロー、ブログランキングバナーのクリックの方よろしくお願いいたします!
ブログランキングはこちら
Twitterはこちら
*1:ここでは便宜上A,B,C と呼ぶことにします。