移動

なんとなく、こっち に移動しました。

What is a Design Evolution?

ソフトウェアにおけるデザイン進化とは? まず、いくつかのレベルでのデザイン活動が考えられる。(全体としての)アーキテクチャレベルのデザイン、コンポーネント(クラスなど)レベルでのデザイン、コードレベルでのデザイン。実際には、コンポーネントの…

Completness of Large Refactoring and Structure Evolution

大きなリファクタリングとプログラムの構造進化との関係は? 「リファクタリング」によれば、個々の小さなリファクタリングは数分から数時間で終わるのに対して、大きなリファクタリングは数ヶ月から数年かかる。また、大きなリファクタリングの場合、どこで…

Dimensions of Design Evolution

ゼミ発表資料。内容の正確さの保障はしません。 http://www.ncfreak.com/asato/doc/ppt/design_evolution.ppt http://www.ncfreak.com/asato/doc/ppt/design_evolution.htm

Role based Evolution Dependency Structure Matrix

昨日学校のゼミで発表した資料。REDSM の構想から、資料の完成まで10時間ぐらいで作った内容なので色々と問題点あり。 http://www.ncfreak.com/asato/doc/ppt/redsm.ppt http://www.ncfreak.com/asato/doc/ppt/redsm.htm

Design Evolution in Software

ソフトウェアにおける設計の進化とは何か? なぜ設計の進化を考えることが重要なのか? 「誰のためのデザイン?」では、デザインの進化の例として、電話機をあげている。良いデザインと悪いデザインの例として、電話機を床に落としてしまった時に、電話が切…

Constructing and Exploring Design Spaces

設計者は、どうやって設計プロセスのアウトプットとして解決策を探し、決定する? グラスの「Software Conflict 2.0」によれば、設計の本質とは: The essence of design, then, is rapid modeling and simulation. つまり、設計者は、 (1) 問題に対する解決…

(Meta)Modeling Module Evolution Patterns

モジュールの構造は、外部や環境の要求に応じて、進化(or 変化)する。 たとえば、クラスにはメソッドが追加される。あるクラスのサブクラスが存在するように、「メソッドの追加」という進化にもサブクラス(サブ進化)が存在する。 たとえば、「メソッドの…

When a Decision is a Design Decision

設計とは? 設計における決定とは? 「マルチパラダイムデザイン」によれば、設計とは: 設計とは、ある問題に対して解決策となるような構造を与えるアクティビティのことである。 とある。「ModernC++ Design」によれば、設計とは: ソフトウェアシステムの…

Tyranny of the Dominant Concern

"tyranny of the dominant decomposition" と同じかもしれないけど、なんとなく。参考: N Degrees of Separation: Multi-Dimensional Separation of ConcernsDL: http://www.cs.ubc.ca/~gregor/teaching/papers/p107-tarr.pdf

Evolution Boundary of Design

モジュール(クラスやアスペクト)の構造の進化(あるいは発展・変化)を捉えようとしたときにどの範囲までその進化が及ぶことになることかを考える必要があると思う。なぜそもそも捉えなければいけないのか、捉えると何がうれしいのか、という疑問はとりあ…

Analyzing and Understanding Designs

設計自体を分析したり理解するためには、どうすればいいのか? ここで議論したいのは、ある問題領域に取り組んでいるときに、その問題に対してどのような設計がいいのかということでなく、ソフトウェアにおける設計という活動・行為やその設計から導かれるソ…

Design Patterns: Recurring Problem vs. Recurring Solution

デザインパターンの標準的な見方は「ある文脈において繰り返し発生する設計上の問題に対しての標準的な解法を明示的に記述したもの」という感じ。ある意味では、問題が繰り返し発生するだけでなく、解法も繰り返し発生する。この記事での焦点は、繰り返し発…

Modularity and Modularity Properties, or Design Choice

モジュラリティの向上と設計上の選択との関係は? そもそも モジュラリティ とは? については「デザイン・ルール」をぱっと調べても載っていなかったので省略。 質問を変えて モジュラリティが向上した という視点から考えてみる。 Hannemann と Kiczales …

De-Refactoring or Are Designs navigatable?

タイトルの意図は「リファクタリングの逆 or デザインはnavigatable?」 リファクタリングの一般的な定義(何も参照しながら書いてないので正確ではないけど)は「プログラムの振る舞いを保ったまま、設計(コード、プログラム)を改善する」という感じ。 じ…

Analyzing the History and Lifetime of Case Studies in Software Design Technologies

英語タイトルの意図するのは、ソフトウェア設計に関わる技術の有効性を評価・検証・比較する時に用いられるケーススタディや例題の歴史や寿命を分析しよう、という感じ。 ここでいう、ソフトウェア設計技術ってのは、プログラミング言語であったり、パターン…

Characterizing Modules from Structure Evolution Perspective

英語あってるのか不明。意図は、モジュール構造の進化の視点から、モジュールの種類を特徴づけよう、ということ。 ここでいうモジュールは、クラスとかアスペクトとか、ソフトウェアを構成する基本的な単位。 個々のモジュールは、変化 or 進化していく。ソ…

Bad Design is Good Design?

何がよい設計なのかは、議論がわかれるところ。一つ言えるのは、よい設計というのは、与えられた道具 or 言語やコンセプトに依存する。たとえば、オブジェクト指向設計の視点では、Observer パターンは、よい設計だといえる。というのも、通常、Observer以外…

Contextual Polymorphism?

最もよく知られているポリモーフィズムの形は、オブジェクト指向のもの。この場合、メソッドの振る舞いは、どのオブジェクトかに依存して決まる。最近、Mezini らの Caesar 言語によって、AOP 言語における新しいポリモーフィズムの形が提案されている。簡単…

Crosscutting in Advice/Pointcut Binding

AOP の本来の動機は、従来のモジュール化の方法(手続き型、オブジェクト指向、etc)では発生してしまう Crosscutting な要求をよりうまくクリーンモジュール化しようということ。 でも、アドバイスとポイントカットの定義自体にも、Crosscutting っぽいのが…

Aspectual Polymorphism

まだまだマイナな単語だと思うけど「Aspectual Polymorphism」についての覚書(なので or なのだけど、読者を限定した書き方になってしまうかも&用語とか適当に使う)。いつかどこかにちゃんとした形でまとめるかもしれないけど。"Polymorphism" という用語…

Library based Refactoring

ソフトウェア開発の世界は、ダイナミックっぽくて、日々様々な新しいツールや便利ライブラリが提案されていると思う。リファクタリングコミュニティは、このダイナミックっぷりについていけているか? 言い換えると 特定のライブラリを用いることによる、リ…

Inner Advice

AOP

微妙なアイデアだけど、メソッド内でアドバイスを定義できるとしたら? public class MyClass { public void method() { { methodA(); methodB(); } after() : call( void method*() ) { // ログとか } before() : call( void method*() ) { // ログとか } }…

Design Patterns and Evolution Scenarios

特定のデザインパターンになった後に、どんな要件があって、その要件はそのパターンにどう影響する? 例: Observer 新しい状態変化のメソッドの追加(setX(int), setY(int) --> setX(int), setY(int), setColor(Color)) ConcreteObserver の追加 新しい Obs…

Rethinking ObserverProtocol

AspectJ でデザインパターンの実装というと一番有名なのは Observer パターンだと思う。Hannemann らの提案した再利用可能な Observer パターンの ObserverProtocol が一番脚光を浴びているきがする。 でも、どのくらいこの ObserverProtocol が有効なんだろ…

AOP の貢献?

AOP

AOP が貢献したことって何だろう? 多くの人は、プログラミングに直接影響を与えるような部分を強調するかもしれない。たとえば、横断的関心事をうまくモジュールできるようになったとか。 でも、最近僕が感じているのは、もっと精神的というか意識的という…

Refactoring with Bad Design or Natural Design Evolution

Refactoring for Bad Design? 英語は良く分からないけど、、、リファクタリングの話。 Natural Design Evolution は、わざわざうそ臭い英語で書いてみたけど、設計の自然な進化、という雰囲気。 いつ(あるいは、どのような動機で)リファクタリングを適用 …

Annotation and Inter-type Declarations or Retroactive Abstraction

AOP

時には、あるアノテーション(@)を定義しているかどうかで、クラスの構成を自動的に決めたい場合がある。 たとえば、メソッドをアドバイスとして定義したら、そのクラスは、Aspect の interface を実装するなど: public class Logging implements Aspect {…

ありがとうの価値、拍手の価値、素晴らしいの価値

技術的な話とは関係なさそうだけど、技術的な内容(blogとか)からのネタ元の雑談。 この業界(ソフトウェア開発)では、日々次々と新しいアイデアやライブラリなんかが登場している。技術者の人が書く日記とか blog にも日々それらの新しさについていこう(…

アスペクト指向: 取り組む問題と解決するための技術

AOP

まず、僕自身がアスペクト指向を十分に理解しているとも、僕が言うことが正しい、とかも主張するつもりもない、ということに注意してもらって、以下の話。 アスペクト指向(or AspectJ)に触れ始めてからまだ2年(もう2年?)だけども、アスペクト指向研究者…