やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

C#チュートリアル(継承)

 これはわかりにくかった。

成果物

情報源

プロジェクト作成

dotnet new console -o Inheritance
cd Inheritance

要点

継承

  • クラス
    • abstract class Base {}
      • class Super : Base {}
  • メソッド
    • public abstract method();
      • public override method() {}

アクセス修飾子

修飾子 説明
public どこからでも可
protected 自クラスとその派生クラスのみ可
internal 同一アセンブリ同一ファイル内のみ可
protected internal 同一アセンブリ同一ファイル内または派生クラスのいずれかで可
private protected 同一アセンブリ同一ファイル内かつ派生クラスのみ可
private 自クラスのみ可

オブジェクト指向における3つのキモ

カプセル化

 最低限private/publicの2つを把握していればカプセル化できる。その他のアクセス修飾子は、どこまで公開するかの程度問題。

単一責任の原則

 クラス設計するときは単一責任の原則に則る。

  • 単一責任の原則
    • クラスを変更する理由が2つ以上存在してはならない
    • クラスは拡張に対して開いていて、修正に対して閉じていなければならない
      • クラスは拡張することができる
      • 修正する場合は、そのクラスだけ修正すればいい
        • 呼出元の修正を不要にせよ
          • クラスはオブジェクトではなくインターフェースに依存せよ

所感

 このチュートリアルは残念。わかりにくい。コピペで終わった感じ。すべてが中途半端な上に、ごちゃまぜすぎて何が何だかわからない。説明は自然言語ばかりで、プログラミング言語でない部分が多すぎる。知るべきことのいくつかは散りばめられているという点では良いのかもしれない。ただ、これまでのチュートリアルとは違って、抽象的な説明ばかりなせいで理解するのが難しい。

 そうなってしまうのも仕方ないのかもしれない。問題解決をオブジェクト指向によって行おうとするとき、オブジェクトモデル化技法などについて大雑把に把握しておかないと何が何だか理解できない。その成果物をさらにクラスに落とし込むことになる。そのときになって、ようやくクラス・継承・カプセル化多態性を意識することになる。

 ここではその全体像を説明することなく、いきなり継承に関する概念や部分的な構文について説明している。なので、理解することが難しい。まだ入門レベルなのだから、いっそオブジェクト指向の概念に関する一切の説明を切り捨て、構文の説明のみしたほうがいい気もする。動作する最小コードだけを載せて。たとえば要点で書いた継承アクセス修飾子とかのコード。

 最初は以下の概念に対して、C#コードにあるキーワードとそれを使った構文を把握することだけに注力したほうがいいのでは? まずは手を動かして、動作確認し、わかったつもりになるのが大事だと思う。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux