C++ソフトウェア設計 読書会vol.15
https://scrapbox.io/files/677e58cd6851aa4933a854f0.jpeg
開催日時
2025年8月20日(水) 21:00~22:30
開催URL
参加人数
6人
ウォーミングアップ
intからenumへ安全にキャストする方法
intの値がenumの範囲外だった場合に検知できる仕組みが欲しい
用語集
ISP
インタフェース分離の原則
ISP は SRP の特殊なケースと捉える。
SRP
単一責任の原則
OCP
開放/閉鎖原則
LSP
サブタイプ(派生クラス)が満たすべきふるまい
リスコフの置換原則 (ガイドライン6)
サブタイプでは事前条件を強化してはならない
サブタイプは事後条件を弱めてはならない
サブタイプの関数の戻り型は共変(covariance)でなければならない
サブタイプの関数パラメータは反変(contravariance)でなければならない
スーパタイプの不変条件はサブタイプでも維持されなければならない
DIP
依存関係逆転の原則(ガイドライン9)
依存関係を管理するには、具象型や実装詳細ではなく抽象化に依存すべきである
ガイドライン12:デザインパターンを誤解してはいけない
デザインパターンは最終目的ではない
デザインパターンはただの手段
それは目的ではない
やりすぎなコード
やりすぎなカプセル化を見たことはある
追うのが大変だった
複雑なJavaコード
やってることはHello Worldなのにめっちゃクラスがいっぱいある
デザインパターンは実装詳細に関するものではない
この描画を例として出されるとゲーム業界に近い人は「???」となるかも
そこまで動的に描画APIを差し替えたいことなんてある?
こういう作り(Strategyパターン)にするとコード量が多くなりがち
他の人触れない状態になりがち
関数をoverloadさせると実行時にこれどれが動いているのかわからなくなって大変だった
統合開発環境の補助はなかったの・・・?
コード量が多すぎて効かなくなった
デザインパターンはオブジェクト指向プログラミングにも動的多態性にも限定されない
これstd::vector,set以降の話は冗長なのでは・・・?
大事なことなので2回言いました
accumulateは関数の例、vector,setはクラスの例として出したのでは
int{0}
なんでこう書いたの?
書いてある通り、(読者への)誤解の余地を排除するため
0ってint型になると規定されているのか?
「The type of the literal」の表で適合する最初の型が選ばれるので必然的にsuffixなしの0はintになる
code: cpp
int i = 0;
char c = 0;
unsigned int ui = 0u;
ガイドライン13:デザインパターンはどこにもある
次回ここから
お悩み雑談室
おたくの離職率どうですか?
採用を重視するよりも期日を伸ばすなど今いる人の方も考えてほしい