ソフトウェア開発メモ

日々のソフトウェア設計、実装で考えている、気づいた事を書いています。それが真実か否かは保証しません。悪しからず。

オブジェクト指向

依存、シングルトン、隠れインスタンス変数

メソッド中でインスタンス変数が毎回生成される形で関わりあいを持つクラスは関連ではなく依存になる。なぜならばその生成する方のの状態に影響を与えないからだ。 しかし、それがシングルトンとなると話は変わる。呼ばれる時にそのシングルトンがどういう状…

オブジェクトの責務について

オブジェクト指向についてよく言われる責務について、Mac付属の英英辞典で調べると以下の意味がある。 the state or fact of having a duty to deal with something or of having control over someone: women bear children and take responsibility for ch…

単一責務とクラス分割〜分割と振る舞いのチューニング

クラス合成とタスク合成 - 概念構築メモ クラス合成とタスク合成 - 概念構築メモ のつづき 最近、クラスは可能な限り細かく分けるべき方向に変わって来た。所謂、スモールオブジェクトプログラミングとかいう奴ですな。 ただ当たり前だけど、それだと何処か…

依存と関連について

関連(集約もそうだけど)、インスタンス変数を持つ事によって示される。 依存は引数経由のみで関わる場合が該当する。後、メソッドの内部で生成されて関わりを持たずに消滅するクラスも依存関係に属する。 関連はクラスの一部そのものでその状態をつかさどる…

クラス合成とタスク合成

昔、組み込みやっていて組み込み系の設計技法については多少知っているいるけど、その中の一つにタスク合成という手法がある。具体的にはリアルタイムOSでの設計ではタスクを分ける事によって並列処理を行なうが、逆にタスクを分けすぎると各タスクの構造化…

オブジェクトデザイン 3.5 候補を記述するについて

引き続き読書、オブジェクトデザイン 3.5 候補を記述するについてです。 名前とロールの実際の役割の整合性について評価します。ステレオロールタイプを当ててクラス候補を性格づけてみます。ステレオロールタイプについてですが、厳密に従う必要性はなくあ…

責務駆動設計:オブジェクトの命名方法

引き続きオブジェクトデザインです。 クラス名は大事です。クラス名によってどういう知識と行動を持たせるべきかが理解できます。また、 クラス名を言葉につねに表現する事によってどういう役割を果たすべきか自覚するようになります。 ただ、これが難しい。…

責務駆動設計:オブジェクトの発見方法

オブジェクトデザインの第3章 オブジェクトを見つけるについてです。 設計ストーリー 以下の観点で設計ストーリーを書きます。 ユースケース、要求、アーキテクチャ、ユーザー、予算責任者等様々な視点 アプリケーションが行なうべき事。 アプケーションで…

制御型スタイルについて。集中型と委譲型のバランスを取る。締める時には締める管理職

「オブジェクトデザイン」の第6章、制御スタイルを読んだ感想です。 6.2制御スタイルの選択肢の記述、「実際は集中型、委譲型、分散型のスタイルを結ぶ何れかに解決策があります〜」について。 部下の管理とおなじで単に仕事を委譲させるだけでは緊急時等、…

制御スタイル

はじめに 書籍「オブジェクトデザイン」の制御スタイルについて読んだ結果をまとめました。こうして書いてようやく理解できた感じ。この本は他のそれと違って読んだだけでは頭に入りにくい。 集中制御型 該当するステレオロールタイプは制御役 状態変数の多…

クラスのインスタンス変数について、属性、状態、コラボレータの違い

状態とコラボレータの違い 状態は属性=バリューオブジェクトになるだろう。 コラボレータは状態とその配下のコラボレータを保持しているクラス、つまり制御的性質を持つクラスになると思う。 ただ、この区別は明確にには区別できないし、大体の傾向で区別す…

プロトコルについて

クラスを独自に分類してみました。 分類例 AVVideoCompositing:責務を表す? UITableViewDataSource:ロール、人工品? UITableViewDelegate:ロール、人工品? NSTextLayoutOrientationProvider:責務を表す? NSURLAuthenticationChallengeSender:責務を表す…

コラボレーションのシミュレーション

はじめに オブジェクトデザインの5.5章、「コラボレーションをシミュレートする」に読んで纏めました。 目的 単にコラボレーションを設計しただけでは抜けが有ります。そこでレビューをします。ただ、責務駆動設計ではチームメンバーを集めて各人がオブジェ…

継承とコンポジション 長所、短所比較

この記事について 当時の雑感について書いた物です。今ではちょっと認識が変わった。 はじめに ネットにも色々情報があるけど。自分の頭で考えて咀嚼するのが必要。 継承 長所 プロテクトメソッド、変数を使って柔軟なアクセスを提供できる。 派生クラスは基…

機能強度モジュール(メソッド)の再帰的定義について?

機能強度を持つメソッド(要はコンストラクタ/デストラクタとかイベントハンドラー、フックメソッド以外)は複数の単機能メソッドで構成されなければいけないか? ん〜どうだろう。複合メソッドはそんな感じだが。。。

継承乱用の戒め

始めに 仕事で書いたコードを見直すと余計な所まで継承を使っている。ちゃんと設計を勉強して、有名なEffective Javaの「継承よりコンポジションを使え」の章を何度も何度も読みかえしたのに。自戒の念を込めておさらい。 歴史 という事で継承とコンポジショ…

オブジェクトの責務について

オブジェクト(クラス)の責務は以下の順番から考えると腹にうまく落ちて行く感じ。 情報(インスタンス変数、プリミティブ型やValue Object)を把握する責務。 協力者(関連オブジェクト)に仕事を指示する責務。 直接の協力者、あるいは外部のオブジェクトから…

オブジェクト指向と機能指向、オブジェクト指向開発で異彩を放つロバストネス図について

まず、私は業務系システムの専門家でも、百戦錬磨のオブジェクト指向開発で専門家でもないのを断っておきます。今、ICONIXプロセスについて学んでいます。他にも色々勉強しているけど。 他の方もAmazonのレビューやBlog等で触れているように、アジャイル系の…

SKPaymentQueueクラスの責務について考察

SKPaymentQueueには支払い行列管理の他にダウンロード商品のダウンロードを開始、一時停止、再開、中止するメソッドがある。いわば2つの顔がある。 クラスの責務が超過気味じゃないか?、SKPaymentQueueとSKDownloadQueueの2つに分けるべきじゃないと思う…

Objective-Cでの継承とオブジェクトコンポジション(デレゲート)について

UIScrollViewが提供しているデレゲートUIScrollViewDelegateで定義しているメソッドを継承でいうフックメソッドと看做して、UIScrollViewを継承、デレゲートとして継承したクラス(仮にSubscrollViewと呼ぶ)を指定し実装するのは間違ったやり方だろうか?要は…

Store Kit CRCカード

はじめに 書いて見た。実際に文章に起こすと難しい。 SKDownload 商品ダウンロード ロールステレオタイプ 情報提供役? 情報把握責務 App Storeからダウンロード可能な商品を表現します。 その商品のダウンロードの進捗状況、ダウンロード先のファイルパスを…

低凝集度は高結合を促す

書籍「実践UML」によると低凝集なクラス(=モジュール)は高結合を促すとある。そこで何がそうさせるのか、自分の経験と照らし合わせて考察してみた。例としてFacadeクラス内で使われている複数のクラスをFacacdeクラス毎統合した場合を考える。 統合当初、…

責務駆動設計について(責務駆動設計≠責務駆動分析)

はじめに 上記について、再度、本を読んだり調べたりした結果、責務からクラスを抽出するものと勘違いしていました。設計という名前の通り、責務を本格的に考えるのは設計フェーズのようです。他の手法同様、分析工程ではまずクラスを抽出します。 そこでど…

ロール名(役割)とクラス名の違い

よく忘れるので本やネットで調べた事を箇条書きにしてみる。というか頭の中を整理 ロール名とクラス名は同じでもよい。ただしクラスが別のロールを兼務する場合があるので注意する。 ロール名は責務を表すことがある。 ロール名はインターフェース名になる場…

Game Kitのクラス概念について

Gameプログラミングはやった事がなく。昔、Xevilというlinuxのオープンソースを勉強がてらに読んだのと、つい最近、仕事が暇だったのでSprite Kitを使ってブロックくずし(のようなものを)作ったぐらい。んで、Game Kitを構成するクラス概念は調査すると面…

NSOperationと逐次的凝集

今までクラスの凝集度は通信的凝集になるべきだと無意識に思いこんでいた。いわゆるデータ構造の詳細(=インスタンス変数)を見せないためのクラス。クラスを作る意味としてよく挙げられますね。そうではなくて、クラスは複雑な手続きや処理を隠すためにも…

機能と責務

オブジェクト指向によく出てくる(クラス、オブジェクトの)責務という用語について、よくよく考えたら曖昧な用語だと思う。 なぜ今迄気づかなかっただろうか? クラスのリファレンスマニュアルを見ても大抵「この責務とは〜」とは書いてないし、単にメソッ…

Objective-Cのコーディングについての課題

クラス設計はだいぶんうまくなったけど、メソッド内の実装が下手くそ。もっと綺麗に書きたい。実装関係の本を読んででてきた課題は以下の通り 複合メソッドを使ってメソッドを積極的に分割 条件文を読みやすく もっともっとうまいメソッド名の付け方を研究す…

iOSアプリでのドメイン貧血症について

iOSアプリでのドメインモデル貧血症について、自分なりに考えた。ここでいうドメインモデルはDDDで言うエンティティの事である。iOS固有の話であって、他のプラットホームについては知りません。 この問題の趣旨の通り、ドメインモデルにやらせる仕事はドメ…

間違って広まったオブジェクト指向。オブジェクト指向=かぶりものコント

もやもやが晴れたようにわかる 。 実行中のプログラムから作成したオブジェクト図とコミュニケーション図で学ぶオブジェクト指向 - Qiita にも書いたけど、大学入学から20年経って、それなりに実務経験と設計力がついた今となってはオブジェクト指向は誤っ…