配列、コレクションで抽象化

抽象化とは

抽象化するという言葉そのものが、自分にとってはなじみが無くてあまり使わないので、「抽象化」を調べてみました。

抽象化という言葉の反対に具象化(具体化)という言葉があります。具象とは、「具体的」って意味とほとんど同じです。「詳しく」とか「細かく」ということになります。その逆なわけですから、抽象とは「大雑把に」とか「全体的に」とかの意味になります。Wikipediaには、

「対象から注目すべき要素を重点的に抜き出して他は無視する方法である。」

とあります。無視するのか!とちょっと驚きました。私的には無視は言いすぎじゃないのかなと。頭の片隅に置いとくくらいで、注目しなくてもどうでもよいもの程度です(それを無視するというのかも)。

抽象的思考がもともと持っている人には簡単なことかもしれません。愛と世界平和なんて考えを持っている人は、抽象化の達人です。物事の目的や意味を理解しようとし、本質を導くことができる、そうしようとすることができる人であるといえます。
「何がいいたいのか?」とと言っている人は、抽象的思考の人でしょう。具象的思考人は物事の細部を理解しようとし考えることが得意です。「具体的には?」と言ってる人がいたら具象的思考の人でしょう。

どちらが良いのかというと、一長一短です。
あまりにも抽象化すぎると細かいところを無視しすぎてしまう傾向にあり、トラブルの原因をつかみきれないかもしれません。その逆で具象化すぎると、もっと詳細を詰めてからでないと進めないと思っていても、それはどっちでもよかったってことがあります。

バランスよく。自分を知る。ということが大事だと言えます。

配列・コレクション

プログラミングにおいてコードを書くとき、配列とかコレクションという言葉が出てきます。ここが実は抽象化のポイントです。配列・コレクションを使えないプログラマーがいるんですね。知らないのにプログラマーと呼んでいいのかというのは置いといて。^_^

同じ処理を繰り返す場合、同じ処理を何度もプログラムで書いていてはだめですよね。なぜだめなのかってことは説明不要かと思いましたが、一応書いておきます。

たとえば、
コンビニで同じお菓子を10個、レジでお菓子をバーコードスキャンします。一つとってスキャンして、また一つスキャンして、また、また、と10回繰り返して、お会計としました。これって、ちょっと面倒ですよね。まったく同じ動作を10回繰り返しています。これを簡単にするには、簡単です。お菓子を1つバーコードスキャンして、X10個と入力します。
たったこれだけの作業になります。(え!なんでそうするといいの?って思わないと思うんですが、もし思う方がいましたらコメントください)

これが抽象化思考の一歩目とも言えるでしょう。

プログラミング言語においては、配列を用意するとか、クラス化(サブルーチン、関数化)するということですね。抽象化の対象があいまいだったり、もっと複雑な場合もあります。抽象化しない場合を想像すると上記の例のとおり、お菓子を買った時のように長い処理で、レシートも長くなってくるでしょうね。

まとめると、なぜ、プログラミングにおいて抽象化が必要なのかというと

  1. コーディングミスが起きにくい
  2. 修正が容易
  3. 全体のコード量が少なくなり読みやすい

ということであり、バグの原因をなくすことにつながるわけですね。

※かならずそうしなければならないというわけでもなく、コンパイラの特性を知っておりここはべたに書いたほうが実はマシン語レベルでは早くなるんだ、ということもありました。20年前くらいはよく聞く話でした。さすがに今のご時世は、ハードウェアもコンパイラも進化しているのでナノ秒レベルの速度を求める必要もなくなってきていますので心配しなくてもいいと思いますけどね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です