...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

クラス間依存関係の除去 第1回 - 継承とポリモーフィズムを使ったコードの基本形

次のコードは,オブジェクト指向における継承とポリモーフィズムを使った代表的な例です.
インタフェースと実装を分離する最も基本的な形ですね.
ただ,このままではまだ各クラス間および各ファイル間の依存関係が強いです.
そこで,このコードをベースとして,それらの依存関係を除去していきましょう.


なお,++ で始まるコメント行は,それ以降のコードが書かれているファイル名を示しています.
その次のコメントにおける import 文は,そのファイルが依存しているファイルを示すために書いてあります.
最初の import std.stdio; は,全部のファイルで共通して import していると思ってください.

import std.stdio;

// ++ animal.d
interface IAnimal
{
    void bark();
}
// ++ dog.d
//import animal;
class Dog : IAnimal
{
    void bark()
    {
        writefln("wan!wan!");
    }
}
// ++ cat.d
//import animal;
class Cat : IAnimal
{
    void bark()
    {
        writefln("nyan!nyan!");
    }
}
// ++ main.d
//import animal, dog, cat;
void main()
{
    IAnimal animal = new Dog;
    animal.bark();
    animal = new Cat;
    animal.bark();
}