プログラミングの抽象化、その方法を語る

574, 2022-10-24


所長:はい、今回はプログラミングの抽象化とは何なのかってところをちょっと解説したいと思いますが
所長:プログラミングの抽象化とは詳細なコードを抽象的なコードにすることですね
所長:でまあ具体的な内容を抽象的に扱うことということですね
所長:で、一連の処理に名前をつけることも抽象化の一つですね
所長:で、抽象化によって何がもとらされるか
所長:でいうところなんですが、生産性の向上ですね
所長:それからメンテナンス性の向上がもとらされるということですね
所長:抽象化を行うとですね、詳細なコードを抽象的なコードにするってことなので
所長:この具体的な内容を抽象的にするってことですね
所長:詳細なコードってのは例えば数値計算のコードとかですね
所長:何行にもわたって書かれている数値計算のコードを一行の関数にまとめるとか
所長:そういうのが抽象化の一つですね
所長:こういった抽象化を行うとですね
所長:まあそういった何行も書かれているコードを一行にまとめるってことなので
所長:それによって生産性が向上するということですね
所長:でまあそれと同時にですね
所長:そういった雑談なコードが抽象的にまとめられるので
所長:メンテナンス性も向上するということですね
所長:抽象化の注意事項としては抽象化失敗することがあるということですね
所長:抽象化はですねまあ何でもかんでも抽象化しようって思って抽象化することがあるんですが
所長:そうすると応援して失敗することがよくあります
所長:これ理由はですね色々あるんですが
所長:抽象化を行う際はですね
所長:抽象化は失敗することがあるということを覚えておいた方がいいかもしれませんね
所長:抽象化に失敗すると何が起こるかって言いますと
所長:生産性の低下それからコードの複雑性の増加ですね
所長:生産性の低下はですね
所長:抽象的なコードを具体的なコードを抽象的にするっていう抽象化を行うわけなんですが
所長:それは失敗しますとね変に抽象化されちゃうんですね
所長:具体的なコードが変に抽象化されて
所長:まあ取り扱いが結構面倒くさくなったりもするということですね
所長:抽象的にすることで
所長:まあそういった抽象化はまあ抽象化に失敗している例なんですが
所長:そういった失敗をするとですね生産性を逆に抽象化で上がるはずだった生産性が逆に低下してしまうということですね
所長:それからまあそのコードの複雑性の増加ですね
所長:抽象化に失敗しているコードっていうのはですね
所長:普通は抽象化を行うとコードがシンプルになるんですが
所長:まあ失敗するとですね逆にコードが複雑になってしまうということですね
所長:なのでまあ抽象化の失敗っていうのは結構よくあることなんですが
所長:まあ失敗するとこういったデメリットがあるということですね
所長:抽象化に失敗しないコツはどういうものかって言いますと
所長:まあ抽象化を行う前にコードをよく観察することですね
所長:それから抽象化できそうなコードが見つかるまで無理に抽象化しないこと
所長:あと抽象化の方針を立てることですね
所長:抽象化を行う前にテストを書くことということですね
所長:まあ抽象化を行う前にコードをよく観察することというのはですね
所長:まあその抽象化をやるぞって最初から生き込んでですね
所長:何でもコードを書く前にコードを書きながら片端に抽象化するっていうのは
所長:あんまり私は経験速としてあんまりいい結果が出たことがないんですね
所長:なのでまあ抽象化を行う朝は一回抽象化のことは無視してコードを書いてですね
所長:でそれからそのベタ書きしたコードを見ながら
所長:コードをよく観察して抽象化できそうなところを探すというのが
所長:まあ結構抽象化が成功するパターンとしては結構よくあるパターンかなと思いますね
所長:でまあ抽象化できそうなコードが見つかるまで無理に抽象化しないことですね
所長:抽象化しようとするとですね
所長:何でもかんでも抽象化すれば生産性上がるから
所長:何でもかんでも抽象化しちまえって感じで抽象化しようとするんですが
所長:それはですねあの抽象化できそうじゃないコードは無理やに抽象化するっていうのは
所長:あんまりいい方針じゃないですね
所長:まあ抽象化できそうなコードっていうのは観察してればですね抽象化できそうだなぁっていうのがだんだん見えてくるんですね
所長:でそういった抽象化できそうだなっていうのが見えてくるまでは無理に抽象化しない方がいいということですね
所長:この無理に抽象化するっていうのは結構コストがリスクがあることで
所長:無理にコード抽象化しなくてもいいコードを無理に抽象化してしまうと
所長:それは結構複雑性を持ってですね抽象化に失敗してしまうということもありますので注意が必要だと
所長:あと抽象化の方針を立てることですね抽象化の方針っていうのはつまりどういった感じで抽象化しようかっていう設計を行うってことですね
所長:抽象化コードを抜き出してそのコードを抽象化するっていう行為はある種設計に似ているところがあります
所長:新しい乾燥を作るとか新しいクラスを作るとかそういった抽象化ですよね
所長:まあそういうのは設計も入ってくるのでまあその方針を立てることですね
所長:あと抽象化を行う前にテストを書くことっていうのはですね抽象化っていうのはリファクタリングの性質も持ってますので
所長:まあコードをですねその振る舞を変えずにですね抽象化してコードを整理するということなので
所長:まあそうしますとですねそのどっかでミスタイプとかが発生してあの出力結果は異なってしまうことがあると
所長:出力結果は異なってしまうとですね困ることになりますので
所長:まあその前に抽象化を行う前にテストを書いて出力結果を検証できるようにしておくというのが大事かなと思いますね
所長:抽象化の思考方法はということですがまあ共通部分を見つけるということですね
所長:で共通部分を抽象的にできないか考えるで編数を観察し各編数に関連性がないか考えると
所長:で関連性のある編数は構造体クラスにまとめることができると
所長:で構造体クラスに編数をまとめると次はメソッドをかけるようになるということですね
所長:まあ共通部分を見つけるっていうのは抽象化の第一段階的なところですね
所長:まあそのコードが散らばってですねそのコードで各部分で共通部分が見つかるという場合ですね
所長:まあ共通化して抽象的にコードを抽象的にするという
所長:特化がになるということですね
所長:でまあ共通部分を抽象的にできないか考えるってのはそういうことですね
所長:編数を観察して各編数に関連性がないか考えるというのは
所長:編数ってのは一見すると関連性がないように見えるんですが編数の頭にですね
所長:名前をつけてみるとその編数はこのカテゴリーの編数なんだなってことがわかるということですね
所長:このカテゴリーですねカテゴリーっていうのが見えてくると抽象化やりやすいんですが
所長:まあ編数があってその編数のカテゴリーを意識してその編数がどのカテゴリーに属しているかってのを
所長:観察するとですね編数を共通化できない共通化できそうな編数が見えてくるということですね
所長:関連性のある編数が構造体クラスにまとめることができるというのはまあそういうことですね
所長:構造体に編数とかクラス編数とかをまとめて構造体とかクラスに編数をまとめて
所長:でそれを共通して取り扱うということですね
所長:構造体クラスに編数をまとめるとメソッタがかけるようになると
所長:編数を共通化しますとその編数に関連するメソッドをですねクラスにかけることができると
所長:いうことなのでそのメソッドによってさらに抽象化レベルが上がって生産性が上がるということですね
所長:今回は以上になりました
所長:抽象化っていうのは結構慣れるまではちょっと難しいところはあるんですが
所長:慣れてしまうとですね結構いろんなものを抽象化できるようになってきますので
所長:慣れるがミヤコ慣れるがミヤコじゃないな
所長:慣れるがホトケでもないな
所長:まあそんな感じですね
所長:今回以上になりますご視聴ありがとうございました



この記事のアンケートを送信する