• 締切済み

C++のクラス設計について

Webや書籍をあたってみたのですが、なかなか解決しないので こちらで相談させいただこうと思い立ちました。 C++で書かれたプログラムを解析しているのですが、 ドキュメントは外部仕様書のみであとはソースコードだけ、という状態です。 コメントもほとんど書かれていないコードについて、リバースエンジニアリングを する必要があり、手始めにクラス図を作成してみました。 すると、複数のクラスでメンバ変数が重複しているのです。 クラスAに、クラスB・C・Dの変数の一部が宣言されていて、 クラスAとクラスBの間で重複している変数はすべてどちらのクラスもprotectedのstatic、 クラスAとクラスC・Dの間で重複している変数はクラスAではprotectedのstatic、 C・Dではprivateです。 クラスBとC・Dは継承関係にありますが、メンバ変数の重複はありません。 クラスAと他クラスは継承関係がなく、メンバ変数が多数重複しています。 クラスAの変数は20個ほどありますが、9割以上がB・C・Dで宣言されている変数と 重複している状態で、かつstaticのprotectedです。 Cはわかるのですが、C++はほとんど書いたことがありません。 アンチパターンなどもあたってみたのですが、上記のような設計についての記述は 見つけられませんでした。こういったクラス間での変数重複は「あり」なのでしょうか? これで情報が足りているかわかりませんが、何卒よろしくお願い致します。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

それぞれのクラスがどのような機能を持っているかわからないしメンバ変数の名前や意味も分からないようでは判断のしようがない.

bell1107
質問者

補足

やはりそうですか・・・ 重複しているメンバ変数は、ほとんどが入力データ項目を表しているものです。 実際には異なりますが、例えば、身長・体重・年齢など。 クラスC(仮称:CalcData)のコンストラクタの引数にクラスA(仮称:StockData)のポインタを渡していて、 コンストラクタの中でStockDataのメンバ変数の値をCalcDataのメンバ変数にコピーしています。 しかし、StockDataにはget系のメソッドしか定義されておらず、set系はCalcDataに定義されています。 入力データはクラスAの中で読み込んでいるようです。 なぜget系もCalcDataに定義しないのかがわかりませんし、入力データについても StockDataを経由せずCalcDataで読み込めば良いと思うのですが。 プログラムの概要をものすごく簡略化すると、1回exeを走らせる度に、 入力されたデータ(上記の例えで言うと一人分)がある条件を満たしているか否か いろいろ計算して判定する、というものです。 その入力データを表す変数が2つのクラスで別々に宣言されている状態です。