Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

『クラス設計を理解するためのおすすめの書籍』を教えていただきたいです

解決したいこと

『クラス設計を理解するためのおすすめの書籍』を教えていただきたいです

来年、定年(60歳)を迎えるSEです。
汎用機COBOL&JCL(&たまにExcel VBA)の世界で保険システム保守の仕事に従事してきました。

昨今、汎用機がサーバに置き換えられる事例がいくつか発生していて、本業以外の技術についてもっと知識が必要になってきたと感じています。
いろいろ考えた結果、とりあえず「C/C++」を覚えておけば様々な言語技術には応用が利くのではないか?ということに思い至りました。(英語が話せればその他の似た言語も話せるようになるのでは?みたいな安易な考えですね。英語話せないですけど...)

そこで書籍を何冊か買い込み、ここ5~6か月で時間を作って読み漁り、Visual Studioを使用してお試しでアプリをいくつか作成してみました。書籍に書いてあることでのお試しなので出来るのが当たり前ですね。
・ 新·明解C言語 中級編、柴田 望洋著、SBクリエイティブ
・ 新·明解C言語 実践編、柴田 望洋著、SBクリエイティブ
・ C言語ポインタ完全制覇、前橋 和弥著、技術評論社
・ 新・明解C++入門編、柴田 望洋、SBクリエイティブ
・ 新・明解C++で学ぶオブジェクト指向プログラミング、柴田 望洋著、SBクリエイティブ
・ プログラミング言語C++ 第4版、ビャーネ・ストラウストラップ、SBクリエイティブ

それじゃあということで、本職で約25年前に自分でExcel VBAを使用して作成したアプリを、C++で作成してみようと思い、Visual Studioの画面に向かっては見たものの全く手が動きませんでした。
何が障害かというと「クラス設計ができない」ということです。
COBOLとかExcel VBAは、クラスは意識しなくても作り始めることができたのですが、C++はクラス設計を意識して作らないと手が動かない(と思っているだけ?)のです。
どのデータメンバーと関数をまとめるのか?とかデータメンバーは更新しないけど文字列編集する関数はどこに書けばいいのか?など。

そこで、諸先輩方に『クラス設計を理解するためのおすすめの書籍』を教えていただきたいです。
「とりあえずこれは読んどけ」とか「これが難しくなくて良い」とか「これが分かりやすかった」など何でも良いです。よろしくお願いいたします。

※一応、Qiita内を「クラス設計 書籍」で検索してみた結果、以下の2冊は購入して読んでみようと考えてます。
・ 良いコード/悪いコードで学ぶ設計入門、仙塲 大也著、技術評論社
・ 現場で役立つシステム設計の原則、増田 亨著、技術評論社

0 likes

1Answer

どのデータメンバーと関数をまとめるのか?とかデータメンバーは更新しないけど文字列編集する関数はどこに書けばいいのか?など。

が疑問点だというですね。

オブジェクト指向黎明期(数十年ほど昔)には、"従来の設計との違い"に重点を置いた書籍も沢山ありましたが、最近はオブジェクト指向ありきで開発するので、実装方法について書かれているものが多いように思われます。
なので、結構古い本を漁ってみるのがいいかと思います。

ですが、書籍を探さずとも、少しの慣れで解決できる程度の疑問点だと思いますよ。

従来とは設計の仕方が違うことを意識してみては?
 従来) 処理の流れで全体像をつくる。
 今後) オブジェクトを組み合わせて全体像を作る。
という事に慣れれば、自ずと設計できるようになります。

どのデータメンバーと関数をまとめるのか?

これは、設計の方針によって正解は変わります。
プログラムとして、一番効率がいいものが正解です。

実装的な考え方としては、「データに関連する処理は同じクラスに所属させる」です。
設計的には、外から見た動作が、オブジェクトとして独立していてわかりやすいか否か。です。

データメンバーは更新しないけど文字列編集する関数はどこに書けばいいのか

更新しなくても、取り出しの時に編集されるのならメソッドで実装するのもありです。
独立して「編集できる文字列」としてクラスを作るのが正解の場合もあります。
編集がプログラム中の主要な処理なら、「編集装置」的なクラスを作るのもありです。
(クラス名は実装に合わせて良い名前を使ってください)


慣れないうちは、こんな考え方で実装できるんだろうかと不安になると思いますが、
オブジェクト指向に慣れれば設計が単純化されて効果的な実装が思い浮かぶようになります。

1Like

Comments

  1. ありがとうございます。
    C++は、本業(COBOL&JCL)の世界から全く違う世界に来たような言語仕様なので、今のところつかみどころのない感じがしています。
    やはり慣れが必要ですよね。トライ&エラーでチャレンジしてみます。

Your answer might help someone💌