# PLCオブジェクト指向プログラミング

```{admonition} 目的
:class: note

オブジェクト指向の考え方を導入する目的は、 **流用性の高いソフトウェア** を生み出す事にあります。
この章ではオブジェクト指向のみを取り扱うのではなく、TwinCATにより実現可能な **ソフトウェアのモジュール化・部品化** に役立つ技術をお届けします。オブジェクト指向を理解、活用する手助けになれば幸いです。。 
```

現在の国内のPLCプログラミングの主体はラダープログラムとなっています。ラダープログラムでは主に物理メモリアドレスを直接扱い、その上に直接ロジックを構築する手法が未だに主流となっています。この方式で複雑な制御装置の挙動を定義する際に次の問題が生じます。

人間が設計する論理的な動作をロジックに変換する際に物理アドレスへのマッピングの手間が生じる
    : 人間がメモリアドレスとその意味を紐づける「マッピング」作業が必要です。変数化することでコンパイラが自動化します。

同一のロジックやデータ構造の定義を人間が管理する必要がある
    : 複数モジュールに共通するロジックやデータ構造を、物理メモリアドレスが重ならない様に **手動で複製する作業** が必要となります。共通の機能やデータ構造を完全に独立させて、外部環境の影響を受けない様にするプログラム構造を「カプセル化」といいます。「カプセル化」ができていないプログラムでは、このプログラムを複製する作業工数だけではなく、複製されたモジュール全てにバグが無い事の確認作業、いわゆる **テスト工数** がモジュール個数分必要となります。現実的には十分なテストができているとは言えず、装置稼働中にバグが露呈するケースが多いのではないでしょうか。
    
    : 後述するカプセル化が実現されたプログラムであれば、「単体テスト」と「結合テスト」により明確にテスト範囲を分ける事で最小限の開発工数で抑えられるようになっています。


TwinCATを採用する際に最もハードルの高さを感じる一つが、上記の設計手法を使いこなす部分かと思います。この節ではまずは「カプセル化」に必要な機能について解説し、続いてオブジェクト指向機能についてご紹介します。

```{toctree}

irc-61131-3_3rd
object_interface
solid
case_study
```