オブジェクト指向のクラスとは?

本日、私の仕事のプロジェクトメンバーと勉強会を実施しました。

当プロジェクトでは、オブジェクト指向言語ではなく、C言語・アセンブラ言語を使って組み込み開発していますが、ソースコードを見る限り、かなり難解なコードが出来上がっています。

数千のグローバルの構造体

当プロジェクトのソースコードでは、プロジェクトを私が担当した時点で、数千個のメンバ変数を持つグローバルの構造体があり、それを使って制御しているという、異常なコードです。

このコードが出来上がった理由は、開発の都合上、外部に委託し、アセンブラ言語のコードを無理やりC言語化し、コンパイルされて出来上がったHEXファイルに違いが出ないことで、問題なしとするコードができました。

私が担当した当初は、目先の期間短縮を理由に”そのプログラムを使う”という判断をしてしまいました。

そこから、地獄のような日々が続いてしまいました。今ではその判断が大きな間違いであることを痛感しています。

勉強会の開催のきっかけ

さて、この闇の深いコードを2年かけて、煮込み、ソース(新しい仕様)を継ぎ足し(つぎはぎ)で追加し、完成した結果、バグにバグを生むソースコードが出来上がりました。

当プロジェクトメンバーには、オブジェクト指向的な設計やソースコードを書く人がおらず、結果、酷いコードをひどいまま使い、今やお祭り状態になっていました。

このままではマジでやばいということで、まず、メンバーのオブジェクト指向的考え方を醸成し、やばいモノをよりヤバい状態にしていることを、自覚し、リファクタリングに目覚めてもらうべく、私がメンバーの成長に人肌脱ぎまして、メンバーの方々の時間的かつ精神的な余裕を作るべく、全力をつぎ込んでいます。

オブジェクト指向とは

「ある役割を持ったモノ」毎にクラスを分割し、モノとモノとの関係性を定義してくことで、システムを作り上げようとするシステム構成の考え方のこと

ということで、オブジェクト指向プログラムを作成した人以外には、意味の分からない、なんとなくよさげカッコイイ程度に聞こえる内容ですね。(かく言う私も学生時代に聞いたときはそんな感じでした。。。)

ですが、自身が闇のコードを解析するうちに、ものすごく必要な考え方であることがわかりました。

次はオブジェクト指向の肝であるクラスについて、簡単に説明します。

クラスとは

クラスとは、オブジェクト指向プログラミングにおいて、オブジェクトの設計図に相当するもの

イマイチこの定義では、私は理解できませんでした。次に見た定義は、かなりしっくり来たものでした。

作ろうとしている「モノ(オブジェクト)の定義」

具体的には、、、

  • 作ろうとしているモノは何を記憶するのか?
  • 作ろうとしているモノはどんなことをするのか?

まず、クラス図を書く前に、クラスとは何たるかを理解しておく必要があると感じました。

プロジェクトメンバーに現状のプログラムから、クラスを書いてみてと言いましたが、とりあえず、クラス図的なモノを頑張って書こうとしていました。

ですが、そもそも、クラスとは何かを理解していないので、あまり書けない様子でした。

最後に

今回、クラスとは?ということで勉強会をしましたが、やはり、分かりにくいかもしれないですが、それができないと、プログラマーとしては、もう、品質の良いプログラムは書けないことを、初めて実感しています。

もし、プログラムを生業にしようとしている方に読んでいただけましたら、ぜひ、オブジェクト指向について勉強し、闇の深くないコードを書いていただければと思います。

コメント

タイトルとURLをコピーしました