Open5

オブジェクト指向でなぜつくるのか

philosophynotephilosophynote

第7章

  • システム開発の前段階の作業(業務分析や要件定義)のことを上流工程という
  • 上流工程においてオブジェクト指向は、2つの仕組みを提供する。一つは集合論。もう一つは役割分担。
  • この結果、オブジェクト指向は、物事を分類して整理する仕組みと、役割分担を表現する仕組みを備えた汎用の整理術になった。
philosophynotephilosophynote

第8章

  • UMLはソフトウェアの機能や内部構造を2次元の図に表現する形式を定めた世界標準。
  • UMLのダイアグラムを利用すれば、大規模なシステムから重要な部分を取り出して、論理的かつ直感的な形式に表現できる。
  • UMLはシステム開発の全工程をカバーする。プログラミング技術と汎用の整理術の共通の成果物として使われることに加えて、オブジェクト指向以前から使われてきた武式表現を取り込んだため。
  • UMLの使い方は以下の3つに分類される
  1. OOPのプログラムの構造や動作を表現する

  2. 汎用の整理術の成果物を表現

    • UMLは現実世界やコンピュータシステムで管理すべき情報の構造や、役割分担された人や組織が協調しあって全体の仕事を達成する様子を表現するためにも利用できる
    • 使われる図はクラス図,オブジェクト図,シーケンス図,コミュニケーション図
    • クラス図:集合論で分類・整理した現実世界の物事の関係を表現する。
    • UMLでは集合の要素間の結びつきを関連と呼ぶ。また、ある要素が最大いくつかの相手と結びつくことができるかを表現することを多重度と呼ぶ。
    • シーケンス図:役割分担された人や組織が協調して全体の仕事を達成する様子を時系列的に表現する。
    • コミュニケーション図;役割分担された人や組織が協調して全体の仕事を達成する様子を構造中心に表現する。

3.非オブジェクト指向を表現
- オブジェクト指向でカバーできなかったものがUMLに取り込まれた
- 使われる図はユースケース図,アクティビティ図,ステートマシン図
- ユースケース図:コンピュータに任せる仕事の範囲を表現する。
- アクティビティ図:現実世界の仕事の流れを表現する。
- ステートマシン図:外部からのイベントによる状態変化を表現する。

philosophynotephilosophynote

第9章

  • ソフトウェアを開発する際に必要なステップは次の3つ。
    ステップ1(業務分析):現実世界の仕事の進め方を整理する(why)
    ステップ2(要件定義):コンピュータに任せる仕事の範囲を決める(what)
    ステップ3(設計):ソフトウェアをどう作るのか決める(how)
  • UMLを使ってソフトウェアの機能や内部構造を2次元の図で表現することをモデリングという。
  • モデリングの目的は次の通り。
    業務分析:現実世界の様子をそのままとらえる。
    要件定義:コンピュータの性質を考慮して、肩代わりさせる仕事の範囲を決める。
    設計:ハードウェアの能力、OSやミドルウェアの特性、プログラミング言語の表現能力などを考慮して、ソフトウェアの構造を決める。
  • ビジネスアプリケーションの要件定義段階で作るべき図はクラス図である。システムで管理する情報を構造的に表現した図を概念データモデルと呼ぶ。
philosophynotephilosophynote

第10章

  • アプリケーションの規模の拡大・ソフトウェアの寿命の長期化を背景に、設計の目標として実行効率や保守性や再利用性が求められるようになった
  • 保守に強い・再利用しやすいソフトウェア構造の目標は次のようにまとめられる
    1)重複を排除する
    2)部品の独立性を高める
       凝集度が強く・結合度が弱い設計が良い設計とされる
    3)依存関係を循環させない
philosophynotephilosophynote

第11章

  • 反復型開発プロセスでは、要件定義から設計、プログラミング、テストまでの一連の作業を、「繰り返し」「反復」を意味するイテレーションと呼ぶ。1回のソフトウェア開発ではイテレーションを複数回実施して開発を行う。この思想のもとでXPやスクラム開発といった開発手法が生まれ、アジャイル開発手法と名付けて推進しようとする動きが生まれた。
  • アジャイル開発手法の代表的なプラクティスとして、テスト駆動開発(TDD)、リファクタリング、
    継続的インテグレーション(CI)の3つが挙げられる。
  • テスト駆動開発は、①テストコードを書く、②コンパイルを通す、③テストを実行して、失敗することを確認する、④コードを記述して、テストを成功させる、⑤コードの重複を取り除く、といった手順で行われる。あるメソッドやクラスを開発する時には、①から⑤のステップを数分から10分程度の短いサイクルで回しながら、少しずつ機能を作り込んでいく。
  • リファクタリングは、いったん完成したプログラムの外部仕様を変えずに、内部構造を安全に改善することを指す。
  • 継続的インテグレーションはコードを常に出荷できる状態に保ちながら品質を維持する仕組み。コンパイル、ビルドから単体テストまでの一連の作業を、ツールを使って数時間おきに自動実行する。