Programming」という記事がありました。オブジェクト指向プログラミングで発生しがちな事柄を皮肉っています。最初は気がつきませんでしたが、原文のタイトルはObject-Orientedではなく、Abject-Orientedになっています。面白かったので訳してみました。一部良くわからなかったので省略してしまっているのと、間違っているかもしれないので、原文もご覧下さい。原文のコメントも面白かったので、もしよろしければご覧下さい。原文のコメントにはネタであることを理解していないと思われる人の書き込みがありました。絶望的な、悲惨な、惨めな、屈辱的な、ひどいだそうです。アブジェクト指向プログラミングとは、コードの再利用を促進し、長期間利用可能なコードをプログラマが生成していることを保障するための慣例集です。プログラミングにおいては、生成した行数はアプリケーションの重要度を測る重要な指標です。あるプログラマが日/週/月に生成可能な行数というのは、プロジェクト計画やリソース管理における有用な基準です。アブジェクト指向プログラミングは、短期間のうちに大量の行数を生成する最良の方法です。継承は古い機能を新しいコードとして維持する方法です。プログラマは、既存の機能や、複数行のコードをコピーしてから変更することによって、それらを派生させます。派生したコードは、オリジナルのコードに含まれない機能を実装することによってスペシャライズされます。これにより、古いコードは維持されたまま新しいコードとして継承できます。継承されたコードは、ちょっとした違いしかなく差異が少ないコードであるという特徴を持ちます。継承には、スタティックなメンバという特徴もあります。オリジナルとの整合性を保つためだけに存在し、新しいコードでは参照または利用が全く無い変数やコードが存在していません。以下が、継承を示すpseudo-codeです。custRec[17];}getCustEmailという関数は、メールアドレスがアプリケーションに追加されたときにgetCustNameから継承されています。このように継承を利用すると、新しいバグを産むリスクを軽減できます。サブタイピングサブタイピングは、オリジナルコードから利用する変数の型が変更されるときに行われる継承の一種です。モジュール化モジュール化されたプログラムとは、同様なコメントヘッダ部を持つ分けられたファイル群により構成されます。各モジュールは、以下のような要素を持っています。本来このモジュールがすべきだった事の説明3〜5行の追加アスタリスク各機能の名前、作者の名前、製作開始日などを含むアスタリスクやその他記号で囲まれた空白行の大きな塊コード本体モジュールは、結合動作を最小限に止めてモジュール強度を強化するために小さく保つ事が一般的です。モジュールが大きくなりすぎたら、コピーライトなどを複製しながら小さく分割しましょう。コメントの継承は必ず安全に行えるので、全てのオリジナルコメントをそのまま複製するのが最も安全な方法です。コンポーネントとライブラリアブジェクト指向プログラマは外部コンポーネントを活用します。外部コンポーネントは本の中やインターネット上で発見可能です。検索エンジンを活用することによって、賢いプログラマは時間を節約します。活用しやすいコンポーネントはブラックボックスです。プログラマは、その中で何が行われているかを知りませんし、興味もありません。巨大なプログラムの多くは、Web上で拾ってきたアプリケーションやコンポーネントから継承されたものの集合です。カプセル化カプセル化とは、コードとデータを分離することです。これは、データ隠蔽と呼ばれる事がありますが、データは本当に隠されているわけではありません。余計なコードの層に覆われているだけです。データベース参照をそこら中に書き散らすことは良いことではありません。アブジェクト的アプローチでは、データベースを参照するような機能は全てラップするか隠蔽します。データベースをカプセル化するということです。上記例では、getCustName関数は直接データベースを参照していません。他の関数を使ってデータベースを読んでいます。getCustNameやgetCustEmailが知っていることは、ちょっとしたデータの探し方だけです。やってデータベースを読むかは他の関数にカプセル化されています。ポリモーフィズムアブジェクト指向技術を習うときに必ず苦労するのがポリモーフィズムです。難しく聞こえますが、実装するのは容易です。入力の内容に応じて出力の種類が変わるコードはポリモーフィックであると言えます。前述した例は、以下のように既存のコードを継承したうえで新しい関数としてカプセル化することにより、ポリモーフィックなコードとして書き換えが可能です。*/}ポリモーフィズムは非決定性やチューリングマシンの考え方と関連しています。Has○○これは巧妙で良いアブジェクト指向的設計です。アブジェクト指向初心者は全てを継承で行おうとします(Is○○モデル)。モデルの方が適切である場合が多いことがわかってきます。バーチャルバーチャルクラスもしくはバーチャルメソッドとは、必要であるがまだ製作されていない機能のことです。一般的には、他のコードが依存するベース部分だけを定義しておいてあります。Classとは、アプリケーションに長く存在し続けており、ちょっとした変更でもアプリケーション全体を駄目にしてしまうクラスもしくはモジュールのことです。オーバーロードオーバーロードとは、モジュールもしくはコードの一部が一つ以上のことをするときのことです。顧客の名前とメールアドレスと税額を取得できるサブルーチンなどです。ドキュメンテーションコードは人が読めるように書くべきだと言われています。いうことは、ドキュメンテーションを読む人はいません。新しいモジュールが作成される度にドキュメンテーションに項目を追記し、内容の変更は製品化後もしくはプロジェクトが小康状態になって余裕ができたときに行いましょう。ドキュメンテーションを書く良いタイミングは、チームのメンバーが2週間の休みを取るときです。その期間中に全てのドキュメントをその人に書いてもらいましょう。コード中に大量のコメントを書く行為はコンパイラの速度を低下させます。そのため、アブジェクト的手法を好む人達はプログラマが間違って消せないところでドキュメンテーション管理します。バージョン管理たとえ一人でプログラムを書いていたとしても、バージョン管理は重要です。経験を積んだアブジェクトプログラマは、以下のようなバージョン管理を行っています。読者の皆様は、これらの手法の多くは既にご存知だと思います。アジャイルやエクストリームなどの流行は次々と発生しては消えていきますが、アブジェクト的手法は不変です。多くのマネージャは、これらのアブジェクト的手法を熟知しており、彼らが過去に書いたアブジェクト的コードを元に仕事をすることを強要するでしょう。すごいIPv6本を無料配布!プロフェッショナルIPv6解説動画シリーズ再生リスト動画で学ぶ「プロフェッショナルIPv6」を作っています。よろしければご覧ください。無断転載など、私的利用の範囲を逸脱した利用は禁止します.。