C++ソフトウェア設計 読書会vol.18
https://scrapbox.io/files/677e58cd6851aa4933a854f0.jpeg
#C++ソフトウェア設計
開催日時
2025年10月8日(水) 21:00~22:30
開催URL
https://cpp-osaka.connpass.com/event/370241/
参加人数
5人
読み進め方
ウォーミングアップ
用語集
ISP
インタフェース分離の原則
ISP は SRP の特殊なケースと捉える。
SRP
単一責任の原則
OCP
開放/閉鎖原則
LSP
サブタイプ(派生クラス)が満たすべきふるまい
リスコフの置換原則 (ガイドライン6)
サブタイプでは事前条件を強化してはならない
サブタイプは事後条件を弱めてはならない
サブタイプの関数の戻り型は共変(covariance)でなければならない
サブタイプの関数パラメータは反変(contravariance)でなければならない
スーパタイプの不変条件はサブタイプでも維持されなければならない
DIP
依存関係逆転の原則(ガイドライン9)
依存関係を管理するには、具象型や実装詳細ではなく抽象化に依存すべきである
ガイドライン15:型または処理の追加に備え設計する
オブジェクト指向の解
基底を変えると再コンパイルが発生する
オブジェクト指向だとクラスに閉じている安心感
多重継承
今や多重継承できるのはC++だけ
実はpythonも多重継承できる
動的多態性の設計上の判断には要注意
手続き型の処理を書くのに賛同できない・・・
あちこちswitch文を書き足していきたくない・・・
getType()の返り値でswitchすること自体はやったりする
GCCは手続き型プログラミングらしい
手続き型でもtypeidを使ってswitchケースなしで書けないものか
typeidを使うくらいならdynamic_castつかえばいい
https://stackoverflow.com/questions/63065783/how-to-compare-using-base-class-in-derived-class-data?noredirect=1#comment111523532_63065783
ガイドライン16:処理セットを拡張するにはVisitorパターン
設計の問題点を分析
純粋仮想関数はあまり使用されません。
必要であれば純粋仮想関数を書いてもいいんじゃないかな?
大規模開発で顔も見えない人が触るくらいの規模だと推奨されないのかな
基底クラスにvirtual関数を追加する時点でOCPから逸脱している
解明Visitor パターン
次回ここから
お悩み雑談室
Visual Studio2026の話
ゲームのプロジェクトってVScodeでビルドできます?
cmakeとかで管理されていればビルドできるけど・・・