Help us understand the problem. What is going on with this article?

オブジェクト指向とは分析から始まるアルよ

More than 1 year has passed since last update.

TL;DR

  • オブジェクト指向とは3つの戦術を合わせた戦略である
    • 分析
    • 設計
    • 実装
  • 分析なくして設計や実装の知識を活かせない1

巷で説明されているオブジェクト指向

『車と部品』『たい焼きとアンコ』『動物と猫』などを例に示して、抽象化・継承・ポリモーフィズム・カプセル化を語っている記事が溢れている。しかし、これらはオブジェクト指向分析設計された後の最低限の実装理論2を語っているに過ぎない。

説明対象が既存のイメージがし易い実存物だから、分析設計の説明を省いているとも言えるが、プログラミングしたい/する必要がある時は『これが無いから作る』時なので、既存のイメージなど存在しない。似たようなモノを作る場合であっても、細部や用途が異なる場合が多い。よって、実務になった時にオブジェクト指向は難しいに至る。

料理人に例えるなら、刃物の扱いを覚えたレベル。調理補助を任せるなんてトンデモないアル。せっかくの分厚い肉をミンチにされるアルよ

SOLID原則やデザインパターンなどの設計理論

巷で説明されているオブジェクト指向実装を設計論として昇華したものが、SOLID原則デザインパターンであり、ある程度最善な設計理論2である。

抽象化・疎結合・柔軟性・堅牢性を備えられる知識を獲得し『どう作るのが最善か』が分かったところで『何を作るのか』が無ければ『どこで使うべきか』が分からず、実務になった時にオブジェクト指向は難しいに至る。

特に、部分的にリファクタリングしてキレイにしたところで、全体からしたら『設計思想が違う箇所』という扱いになり、継ぎ接ぎ感が増すだけである。

料理人に例えるなら、調理補助を任せられるレベル。しかし、沸騰後に出る肉のアクは取るアルが、鍋をよく熱してから油を入れないアル。工程の効果というものを理解してないアル。

戦略としてのオブジェクト指向

『何を作るか』の仕様を明確にするにはオブジェクト指向分析が必要となる。戦術の具体例を挙げると、DDDとICONIXの複合技。DDDの説明は経験則的な難しさがあるので書籍で独自研究して欲しい。

  1. DDDでビジネス自体3をざっくりとドメインモデルの形で抽出する
  2. ICONIXで
    1. ドメインモデルからユースケース4の作成
    2. ユースケースからロバストネス分析図5の作成
  3. 再度DDDに戻り、ドメインモデルの意味を補填していく

これを都度繰り返して、主要構成を分析する。6または、プロダクト変更時の構成見直しに再利用する。

この分析結果によって『何を作るか』の仕様が明確になり、ドメインモデルから『何をどう作るのが最善か』を判断でき、パターン外で『どの様に実装するべきか』を判断できる。

更に、DDDではクリーンアーキテクチャやヘキサゴナルアーキテクチャを用いて分析設計していくので、自ずと構成が整理されていくことになる。

DDD入門編として下記をオススメするが、飽くまで増田流DDDの参考程度と考えて欲しい。7

料理人に例えるなら、やっと厨房のスタッフに迎え入れられるアル。メインスタッフにはまだまだ先の話アル。

おわりに

オブジェクト指向実装やオブジェクト指向設計だけで書かれたコードと、オブジェクト指向分析から始めたコードとドキュメント群の継続開発のし易さ、チーム開発のし易さの対比を気が向いたら書いてみたい。

しかし、未だにドメインモデリングは難しいと感じている。というのも、該当ドメインが振る舞うべき操作か否かの判断や、そのドメインは抽象化が不足している可能性などを考えてしまい、つい分析麻痺に陥ってしまう。

ユースケース駆動実践開発ガイドに明記されている事だけれど、要点を抽出している方が居たので補記で書いておく。

のびーの食っちゃね~だらだらな日々。食っちゃ寝生活してても意外と平気だったりする。 -- Analysis paralysis (分析麻痺)

因みに、ピジン語じゃなくて役割語って言うんですねアルアル語は。そして彼が作らせているのは角煮です。


  1. 仕様書や設計思想が存在しない場合 

  2. 言語仕様に依存する。 

  3. 顧客の要求とか脳内の妄想 

  4. 実現を約束する事柄図。ユースケースを書きながらユーザーストーリーを書くのも良い。 

  5. 入力と処理と保存の関連図 

  6. ICONIXではシーケンス図まで書く事になっているが、ほぼ実装と言えるので私は書かない 

  7. DDD本とリーダブルコード本の水割り+増田流DB操作術 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away