講義1.言語C.組織の基礎と、手術および超手術の記憶の使用
講義は、C言語の紹介から始まります。C言語の外観、特徴、長所と短所、および応用分野の歴史について説明します。 前処理の基本について説明し、メモリ管理の問題(メモリ管理モデル、ストレージオブジェクトの可視領域)およびCプログラムのパフォーマンスについて説明し、ストレージオブジェクトのリンクとその初期化について説明します。 次に、Cのメモリクラスについて説明し、講義の次の部分では、ポインターの問題と1次元配列の操作について説明します。 結論として、POSIX標準と移植性の問題について説明します。
講義2.組織に関する追加の質問と、手術および超手術の記憶の使用
講義は多次元配列の議論から始まります。 例として2次元配列を使用すると、効果的なバイパスが表示されます。 行列乗算の問題の例を分析し、ベクトルベクトルについて説明します。 以下は、ポインターに関する一連の質問です。
- ポインターと2次元配列。
- ポインターの互換性。
- 定数および定数ポインターへのポインター。
- ポインターと修飾子の制限。
次に、多次元配列に関連する関数の使用、可変長の配列について説明します。 以下では、データ構造の再編成を含む、可変複合型の調整とパッケージ化について説明します。 キャッシュのロードの最適化が考慮されます:条件の非対称性、関数のインライン化。 講義の最後の部分は、メモリの割り当てと解放の体系的な側面に専念します。 特に、データメモリ構造の4つの部分について説明します。
講義3.特別なカプセル化の問題
カプセル化は、オブジェクト指向設計の3つの基本原則の1つです。 まず、カプセル化について説明します。 クラスの定義が与えられ、その構成が分析され、クラスの既存のタイプがリストされます。 クラスオブジェクトは、const、クラスの属性とメソッド、ビットフィールド、ネストされたクラスなど、詳細に考慮されます。 以下に、さまざまなタイプのクラスメソッド(静的および非静的、組み込み、定数、不安定)、およびそれらへのポインタについて説明します。 次に、いわゆる友好的なクラスと関数が考慮されます。 講義の終わりに向けて、ユニオンクラス、匿名および名前のない関連付け、クラス定義のビットフィールドについて説明します。 講義の最後の部分は、デザイナーとデストラクタに捧げられます。
講義4.継承と多型の特別な問題。 多重および仮想継承。 動的タイプ識別(RTTI)
講義の冒頭で、コンストラクターなしの初期化、デフォルトのコンストラクター、パラメーター付きのコンストラクター、プライベートおよび保護されたコンストラクターについて説明します。 以下では、用語ごとの初期化と割り当てのメカニズム、コピーコンストラクター、変換操作、および仮想デストラクターを含むデストラクターについて説明します。 イディオムRAII(リソースの取得は初期化)、デストラクターの明示的な呼び出し、およびコンストラクターの初期化リストについて説明します。 セマンティクスとハイフネーションコンストラクターを含む、C ++ 11のハイフネーションについて説明します。 継承(アーリーバインディングとレイトバインディング、ベースクラスと派生クラス)やポリモーフィズム(保護されたクラスメンバーとクローズされたクラスメンバー、オーバーロードとオーバーラップクラスメンバー)など、OOPの次の基本原則について説明します。 次に、派生クラスのコンストラクターとデストラクターの呼び出し、継承の初期化リスト、仮想関数、および抽象クラスについて説明します。 仮想および多重継承について説明します。 講義は、動的ランタイム型識別(RTTI)および型キャスト操作、多態性のパフォーマンスとセキュリティ、RTTIサポートなどのトピックで終わります。
講義5.クラスとメソッドのテンプレート。 例外処理。 一般化された安全なプログラミング
講義の始めに、クラステンプレートが定義され、そのパラメーターが考慮されます。 クラステンプレートの具体化のメカニズムについて説明します。 テンプレートメソッド、テンプレート内のフレンドリオブジェクト、静的メンバー、テンプレートの特化(完全なものや部分的なものを含む)について説明します。 メタプログラミングの例は、パターンの再帰的な定義です。 新しいイディオムの本質であるSFINAE(置換の失敗はエラーではありません)は、コンパイル時間のイントロスペクションとの関連を含めて説明されています。 講義の堅実な部分は、タイプのあらゆる種類の特性に専念します。 例外的な状況を処理するための技術について説明します。 次の情報ブロックは、安全なプログラミングに専念します。クラス、メソッド、コンストラクター、デストラクタの安全性、セキュリティ基準、コードの中立性です。 講義の最後に、標準ライブラリのさまざまな例外について説明します。
講義6. STLの実践的な紹介。 C ++での関数型プログラミング
最初に、標準テンプレートライブラリ(STL)の作成について説明します:前提、STLの目的、およびパフォーマンスの保証。 STLを構成するすべてのコンポーネントに関する以下の詳細:
- 順次コンテナ(ベクター、デッキ、リスト);
- 順序付けられた連想コンテナ(セットとマルチセット、マッピングとマルチマップ);
- 順次アルゴリズム。
- シーケンスアルゴリズム;
- 数値のアルゴリズム。
- コピー、述語アルゴリズム。
- オンサイトアルゴリズム;
- ソートアルゴリズム。
アルゴリズムの比較関係、逆関係、セットおよびヒープの操作が考慮されます。 次に、STLイテレータ、そのタイプ(挿入イテレータおよびストリームイテレータを含む)、イテレータでサポートされる範囲および操作について説明します。 講義の終わりに向かって、標準のSTL機能オブジェクトとその基本クラスについて説明します。 アダプタ(コンテナ、機能)に関する情報が提供されます。 最後に、STLでコンテナを使用する問題に対処します。
講義7. Boostの実践的な紹介
講義は、ラムダ関数、その設計の基本的なルール、主要な利点、クロージャーの使用についての話から始まります。 次に、Boost(数十個のスタンドアロンライブラリのセット)、その構成と目的について説明します。 講義の主な部分は、Boostの使用例を調べることに専念しています。コンパイル時間、型の特性、バリアントコンテナ、スマートポインターをチェックします。 結論として、Boostツールを使用してコードのパフォーマンスとセキュリティを改善することについて説明します。
講義8.オブジェクト指向設計の原理とパターン。 基本テンプレート、GoFテンプレート
講義は、オブジェクト指向設計の目標、問題、原則についての長い議論から始まります。 以下に、設計パターンについて説明します。それが何であるか、どのタイプのパターンであるか、およびそれらの利点は何ですか。 基本的なパターンとその実装が考慮されます。
- 継承と構成;
- 委任;
- 不変オブジェクト。
- インターフェース
その後、GoFテンプレートの3つのグループが解析されます。 生成パターン:
- 抽象ファクトリー;
- ビルダー;
- ファクトリーメソッド;
- プロトタイプ;
- 単一のインスタンスを持つクラス。
構造パターン:
- アダプター;
- デコレータ;
- 橋;
- リンカー;
- ファサード;
- 日和見主義者;
- 副。
行動パターン:
- 通訳者;
- チーム
- 責任の連鎖;
- イテレータ;
- キーパー。
- 状態;
- オブザーバー
- 戦略;
- 仲介;
- 来客
- テンプレートメソッド。
最後に、SOLIDの原理について説明します
講義9. C ++言語の慣用句。 リファクタリングの基本とソースコードの品質。 コーディング標準とソフトウェア開発方法論
このコースの枠組みでの最終講義。 まず、「プログラミング言語のイディオム」という用語が定義されています。 オブジェクト指向のイディオムについて、手続き型プログラミングのイディオムを説明します。 複雑さが増したイディオムに関連するメモリ管理方法について説明します。
- コンテキスト依存のインデックスのオーバーロード。
- 「自動」ガベージコレクションと参照カウント。
- 新規および削除操作を置き換えることによるメモリ管理。
- 封筒/文字のイディオムと委任された多型。
講義の次の部分では、ソースコードのリファクタリングと静的分析に専念します。定義を示し、可能なアプリケーションを説明し、利点、欠点、および関連するリスクを検討します。 次に、典型的なアンチパターン、「ダーティーテクニック」、論理的および意味的エラーが分析されます。 パフォーマンス、オブジェクトコードのサイズ、およびデータメモリの量の観点からのプログラム最適化の問題について説明します。 次に、「品質ソフトウェア」の概念が考慮され、コード品質の機能的および構造的指標が説明されます。 McCallモデルなど、ソフトウェア品質のモデルと要因について説明します。 以下では、ソフトウェアの品質の属性としてのコードの複雑さ、複雑さの管理方法、モジュール性がコードに与える影響について説明します。 次に、「技術的負債」の概念、標準とコードスタイル、産業開発方法論(組織ルールと記録方法、コメントと文書化、ソフトウェア開発のライフサイクル、そのモデル)が考慮されます。 そしてコースの最後には、SWEBoK(ソフトウェアエンジニアリングの知識体系)の概要があります。