0

クラス ZipFile とクラス Content があるとします。
ZipFile には、zip アーカイブ内のすべてのファイルの内容を読み取り、それを Content オブジェクトに入れるための load() メソッドがあります。
最も適切な OOP 設計は何ですか?

1) ZipFile.load() は Content オブジェクトを作成します

class ZipFile
{
    public function load()
    {
        // Load all files in zip
        // ...
        Content content = new Content();
        content->set(data);
        return( content );
    }
}
ZipFile zf = new ZipFile();
Content ct = zf->load();
ct->print();

B) ZipFile コンストラクターに Content オブジェクトを指定して入力する

class ZipFile
{
    private Content content;

    public function ZipFile(content) // constructor
    {
        this->content = content;
    }    
    public function load()
    {
        // Load all files in zip 
        // ...
        this->content->set(data);
    }
}
Content ct = new Content();
ZipFile zf = new ZipFile(ct);
zf->load();
ct->print();

基本的にオブジェクトは分離(疎結合)した方が良いのでしょうか?昔ながらの手続き型プログラマーとして、私は OOP を設計するいくつかの方法に疑問を抱くのを止めることはできません。「これをOOPする最良の方法は何ですか。それを熟考するためのアドバイスはありますか?本ですか?ウェブサイトですか?

ご協力いただきありがとうございます

4

1 に答える 1

2

2 つのケースの一般化は異なります。

最初のケースZipFileは、そのコンテンツの具体的なクラスを知り、インターフェイスの実装を返すことに一般化されます。

2 番目のケースZipFileは、そのコンテンツのインターフェイスを認識し、具象クラスを受け取ることに一般化します (後で初期化するため??)。

別の言い方をすれば、最初のケースの結合ZipFileと具体的なコンテンツ クラスが何であれ。ZipFile2 つ目は、クライアントと具体的なコンテンツ クラスを結合します。

ZipFileその内容が特定の具体的なクラスに当てはまる可能性が非常に高いことを考えると、最初の一般化はおそらくより自然なものです。

于 2010-12-17T18:39:33.053 に答える