C++リファクタリング学習

C++リファクタリング学習

このコースでは、C++でのプログラミング、デザイン、ソフトウェア開発におけるプロセス、ワークフロー等に対する原理、原則をご紹介します。これらの原理、原則をふまえてコード改善を行い、さらに一人のプログラマとしてもステップアップしてください。

 

 
カテゴリ サブカテゴリ コンテンツ リリース
イントロダクション   本ドキュメントの目的 公開中
本ドキュメントの次に
本ドキュメントの修正・改善
サンプルコードの説明
本ドキュメントでの言葉の使い方の注意
ソフトウェアプラクティス   DRYの原則
作業の繰り返し
成果物の重複
KISSの法則
ボーイスカウトの法則
YAGNIの法則
Name and Conquer
ノコギリの刃を研ぐ
推定有罪
デメテルの法則
コンウェイの法則
Inside-Outの法則
SOLID
単一責任の法則(SRP)
オープン・クローズドの原則(OCP)
リスコフの置換原則(LSP)
インターフェース分離の原則(ISP)
依存関係逆転の原則(DIP)
プログラミング規約 型とインスタンス 算術型
整数型
char型
bool型
浮動小数点型
enum
bit field
class
struct
union
配列
型エイリアス
const/constexprインスタンス
リテラル
auto
decltype
インスタンスの初期化
リスト初期化、一様初期化(uniform initialization)
クラスとインスタンス ファイルの使用方法
行数
メンバの数
凝集度
アクセスレベルと隠蔽化
継承/派生
インターフェースの継承
多重継承
非静的なメンバ変数/定数の初期化
静的なメンバ変数/定数の初期化
mutableなメンバ変数
スライシング
オブジェクトの所有権
オブジェクトのライフタイム
関数/メンバ関数 クラス外関数
メンバ関数
コンパイラ生成のメンバ関数
コンストラクタ
copyコンストラクタ、copy代入演算子
moveコンストラクタ、move代入演算子
初期化子リストコンストラクタ
デストラクタ
オーバーライド
サイクロマティック複雑度
行数
オーバーロード
演算子オーバーロード
実引数/仮引数
自動変数
戻り値型
constexpr関数
リエントラント性
エクセプション処理
ビジーループ
構文 複合文
switch文
if-else-if文
範囲for文
制御文のネスト
return文
goto文
ラムダ式
マクロの中の文
演算子 優先順位
代入演算
ビット演算
論理演算
三項演算子
new
delete
メモリ制約が強いシステムでの::operator new
sizeof
ポインタ間の演算
RTTI
キャスト、暗黙の型変換
プリプロセッサ命令 プリプロセッサ命令
マクロ関数
マクロ定数
パッケージとその構成ファイル パッケージの実装と公開
識別子の宣言、定義
依存関係
二重読み込みの防御
ヘッダファイル内の#include
#includeするファイルの順番
#includeで指定されるパス名
スコープ スコープの定義と原則
using宣言/usingディレクティブ
実引数依存探索(ADL)
namespaceのエイリアス
ランタイムの効率 ランタイムの効率
前置/後置演算子の選択
operator X、operator x=の選択
関数の戻り値オブジェクト
move処理
extern template
標準クラス、関数の使用制限 非推奨STL
スマートポインタの使用制限
配列系コンテナclassの使用制限
std::stringの使用制限
使用禁止関数一覧
バッファオーバーランを引き起こしやすい関数
コマンドインジェクション防止
obsolete関数
LEGACY関数
スレッドセーフでない関数
標準外関数など
扱いが難しい関数
リソースリークを引き起こしやすい関数
シンボリックリンクの検査
strncpy(), strncat()の終端
TOCTOU (Time Of Check, Time Of Use)
メモリアロケーション
非同期シグナル
その他 assertion
アセンブラ
言語拡張機能
特に重要なプログラミング規約
コード解析   コンパイラによる静的解析
g++の警告機能
clang++の警告機能
scan-buildによる静的解析
sanitizerによる動的解析
コーディングスタイル   インデント用文字
if、for、while、do-whileのインデント
ブロックのインデント
case、defaultのインデント
ブロック(波括弧({}))
関数シグネチャ内の’()’
クラスのアクセスレベル
ステートメントの後
コンマの後
単項演算子、二項演算子、三項演算子の前後
不要なブランク文字
三項演算子のスタイル
ポインタ型の*や、参照型の&の場所
関数の行数
行のカラム数
ブロックの論理レベル
namespace
clang-format
命名規則   禁止事項
略語リスト
言葉の対称性
ファイル、ディレクトリの命名
ファイル名
ディレクトリ名
型名
定数名
ローカル変数名(自動変数名、仮引数名、関数内static変数名)
メンバ変数名
メンバ関数名
Accessorメンバ関数名
関数名
namespace名
templateの仮引数名
マクロ名
その他の命名則
コメント   情報を付加しないコメント
コメントのスタイル
クラスのコメント
関数のコメント
enumのコメント
型エイリアスのコメント
template仮引数のコメント
デザインパターン   ガード節
enumでのビットマスク表現
Pimpl
Accessor
Immutable
Clone(仮想コンストラクタ)
NVI(non virtual interface)
newのオーバーロード
RAII(scoped guard)
Future
DI(dependency injection)
Singleton
State
Null Object
Templateメソッド
Factory
Named Constructor
Proxy
Strategy
Visitor
Observer
MVC
開発プロセスとインフラ   プロセス
ウォーターフォールモデル、V字モデル
アジャイル系プロセス
ウォーターフォール vs アジャイル
アジャイル系プロセスのプラクティスとインフラ
自動UTとは?
UTのメリット
アーキテクチャとUT
UTのサポートツール
リファクタリング
リファクタリングのための回帰テスト
ソースコードの改善
リファクタリングの例
オリジナルのソースコード
機能追加によるソースコード品質劣化
小規模なリファクタリング
構造のリファクタリング
UTの開発
クラスの導入
UTの変更
MVCの導入
UTの変更(UT用クラス導入)
DIの導入
全クラスのUT
自動ITとは?
自動ITのための仕様追加
自動ITのためのソースコード変更
自動IT用ソースコード変更のためのUT
自動ITの実装
TDD
CI(継続的インテグレーション)
バージョン管理システム
gitのブランチモデル
pull-requestとコードインスペクション
CIとは?
CIとワークフロー
CI項目実行の長時間化と分割
CI項目の例
並列処理   refactoring_5改善プログラムの要件
refactoring_6のController
refactoring_6のView
refactoring_6のModel
非同期処理とその管理
TwoPhaseTaskIF(TwoPhaseTaskPtr)
Dispatcher
TwoPhaseTaskPtrキュー管理機構
refactoring_6の構造
参考文献   プロセス・プラクティス
設計・デザイン
C++・C
あとがき   インフラ
プロセス
プログラマ(人材)
Sample Code   build code
C++
bash
python
plant uml
etc
Damepedia デザインパターン編   裏パターン病

まずは無料でお試しを!