SlideShare a Scribd company logo
1 of 29
Download to read offline
【連続講座】ソフトウェア設計原則
【SOLID】を学ぶ
#2 インターフェイス分離の原則(Interface segregation principle)
パーソルクロステクノロジー株式会社
第1技術開発本部 第4設計部 設計2課 阿部耕二
目次
自己紹介
SOLIDについて
インターフェイス分離の原則(Interface segregation principle)に
ついて
インターフェイスについて
例1. 複合機
例2. 乗り物
例3. read, write
例4. リングバッファ
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
2
今回の設計所感
設計についてのディスカッション・質問
参考資料
自己紹介
名前: 阿部 耕二(あべ こうじ)
所属: パーソルクロステクノロジー株式会社
第1技術開発本部第4設計部設計2課
医療機器の組込みソフトウェア開発。C言語。
趣味: 宇宙開発(リーマンサットプロジェクト広報メンバー)
LAPRASポートフォリオ: https://lapras.com/public/k-abe
Twitter: @juraruming
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
4
SOLIDについて
設計の5原則の頭文字をとったもの。
S 単一責務の原則(Single Respomsibility Principle)
O オープン・クローズドの原則(Open Closed Principle)
L リスコフの置換原則(Liskov Substitution Principle)
I インターフェイス分離の原則(Interface Segregation Principle)
D 依存関係逆転の原則(Dependency Inversion Principle)
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
5
SOLID原則の重要性
凝集度が高くなる
他のモジュールと疎結合になる
各モジュールの目的が明確に分けられると、コード変更の際の影響
は局所化される。結果、テストしやすい設計になる。
上記の特徴を持つと再利用しやすいコードになる。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
参考資料2より引用
“
“
6
インターフェイス分離の原則
(Interface segregation principle)に
ついて
相手に必要なことだけを見せるようにする。必要ないことを見せる
とよくないことがおきる。
本来、関連が必要ないクラスと関連をもってしまったり(疎結合で
はなく密結合になる)、
変更の影響が大きくなってしまったりする。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
参考資料1より引用
“
“
7
インターフェイスについて
インターフェイスとは?
機能の使い方のみを定義している。
データ・処理を持たない。
データ・処理をもたないのでそのまま使うことはできない。
インターフェイスの使い方を実現したクラスをインスタンス化して使
う。
インターフェイスは参考資料3が個人的にわかりやすかった。
Interfaceクラスの使い方ポイント解説【オブジェクト指向】
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
8
C++でインターフェイス実現例
#include <iostream>
#include <cstdlib>
class Shape {
public:
virtual void print_type() = 0;
virtual float calc_area() = 0;
};
class Circle : public Shape {
private:
float r;
public:
Circle(float r) { this->r = r;}
~Circle() { }
void print_type() {
std::cout << "This is circle." << std::endl;
}
float calc_area() {
return this->r * this->r * 3.14;
}
};
class Triangle : public Shape {
private:
float base;
float height;
public:
Triangle(float base, float height) {this->base = base; this->height = height;}
~Triangle() { }
void print_type() {
std::cout << "This is triangle." << std::endl;
}
float calc_area() {
return (this->base * this->height) / 2.0;
}
};
class Square : public Shape {
private:
float side;
public:
Square(float side) {this->side = side;}
~Square() { }
void print_type() {
std::cout << "This is square." << std::endl;
}
float calc_area() {
return this->side * this->side;
}
};
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ
9
C++でインターフェイス実現例(インターフェイスを使う側)
int main()
{
Shape* circle = new Circle(1.2);
Shape* triangle = new Triangle(2.5, 2.0);
Shape* square = new Square(1.3);
circle->print_type();
std::cout << "circle area = " << circle->calc_area() << std::endl;
triangle->print_type();
std::cout << "triangle area = " << triangle->calc_area() << std::endl;
square->print_type();
std::cout << "square area = " << square->calc_area() << std::endl;
}
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
10
例1. 複合機
参考資料4の複合機の例がわか
りやすかったので説明に使わ
せていただく。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ
11
複合機の例の学び
異なる目的を持つ機能を組み合わせて製品にバリエーションを持た
せる、などのときにインターフェイス分離の原則は効果を発揮しそ
うだ。
対象を自然な形で表現できる。
インターフェイス分離の原則と単一責務の原則のエッセンスは似て
いる。小さい目的の組み合わせでシステムが構成する。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
12
例2. 乗り物
参考資料5の乗り物のアクショ
ンの例がわかりやすかったの
で説明に使わせていただく。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ
13
乗り物の例の学び
インターフェイスを分離しないことで例の車の飛ぶメソッドのよう
に現実とはかけ離れた構造を実現できてしまうので注意が必要。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
14
例3. read, write
インタフェース分離の原則で組込みソフトウェア向けのサンプルコー
ドをChatGPTに提示してもらいました。
原則違反の例、原則に則った例のコードを提示してもらいました。
IoTの文脈でセンサーデータを読み込み、活用するシステムをイメージ
してもらえればと思います。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
15
原則違反の例
class IDevice {
public:
virtual void readData() = 0;
virtual void writeData() = 0;
virtual void performAction() = 0;
};
class Sensor : public IDevice {
public:
void readData() override {
// センサーデータを読み取る処理
}
void writeData() override {
// センサーデータを保存する処理
}
void performAction() override {
// センサーの動作を制御する処理
}
};
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
16
原則に則った例
class IDataReader {
public:
virtual void readData() = 0;
};
class IDataWriter {
public:
virtual void writeData() = 0;
};
class IActionPerformer {
public:
virtual void performAction() = 0;
};
class Sensor : public IDataReader, public IDataWriter, public IActionPerformer {
public:
void readData() override {
// センサーデータを読み取る処理
}
void writeData() override {
// センサーデータを保存する処理
}
void performAction() override {
// センサーの動作を制御する処理
}
};
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
17
データの読み込み、書き込みを分けると組込みソフトウェアの現場で
使いそうな汎用的なパターンになりそうです。
class SensorDataDispley : public IDataReader, public IActionPerformer {
public:
void readData() override { // センサーデータを読み取る処理 }
void performAction() override { // センサーの動作を制御する処理 }
};
class SensorDataStore : public IDataWriter {
public:
void writeData() override { // センサーデータを保存する処理 }
};
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
18
例4. リングバッファ
インタフェース分離の原則で組込みソフトウェア向けのサンプルコー
ドを考えた時にはじめに頭に浮かんだのがリングバッファでした。
インタフェース分離とはリングバッファのライトとリードのインター
フェースを分けるような実装かなぁと想像しました。
こちらもChatGPTにコードを提示してもらいました。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
19
原則違反の例
class IRingBuffer {
public:
virtual void enqueue(int data) = 0;
virtual int dequeue() = 0;
virtual bool isEmpty() = 0;
};
class RingBuffer : public IRingBuffer {
private:
int buffer[100];
int head;
int tail;
public:
void enqueue(int data) override {
// データをバッファに追加する処理
}
int dequeue() override {
// バッファからデータを取り出す処理
return 0;
}
bool isEmpty() override {
// バッファが空かどうかを判定する処理
return true;
}
};
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
20
class Application {
public:
void processData(IRingBuffer* buffer) {
if (!buffer->isEmpty()) {
int data = buffer->dequeue();
// データを処理する
}
}
};
int main() {
RingBuffer buffer;
Application app;
// アプリケーションを実行
app.processData(&buffer);
return 0;
}
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
21
原則に則った例
class IEnqueuer {
public:
virtual void enqueue(int data) = 0;
};
class IDequeuer {
public:
virtual int dequeue() = 0;
};
class IBufferChecker {
public:
virtual bool isEmpty() = 0;
};
class RingBuffer : public IEnqueuer, public IDequeuer, public IBufferChecker {
private:
int buffer[100];
int head;
int tail;
public:
void enqueue(int data) override {
// データをバッファに追加する処理
}
int dequeue() override {
// バッファからデータを取り出す処理
return 0;
}
bool isEmpty() override {
// バッファが空かどうかを判定する処理
return true;
}
};
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
22
class Application {
public:
void processData(IDequeuer* dequeuer, IBufferChecker* checker) {
if (!checker->isEmpty()) {
int data = dequeuer->dequeue();
// データを処理する
}
}
};
int main() {
RingBuffer buffer;
Application app;
// アプリケーションを実行
app.processData(&buffer, &buffer);
return 0;
}
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
23
RingBufferクラスが分離した3つのインタフェースを使っている。
エンキュー、デキューでクラスを分けると責務が分かれたクラスが
できると感じた。
ただ機械的にインタフェースを分離すれば良いわけではなく、
どんな目的を達成したいからインターフェイスをどのような粒度で分
離しするのか、
そしてどのような責務を持つクラスで目的を実現するのか?、の思考・
検討が大事だと感じた。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
24
今回の設計所感
インターフェイスはどのくらいの粒度で分離すれば良いのか?
-> ひとつヒントになりそうなのは単一責務の原則の視点だと思った。
-> この問いに非常に参考になるのは参考資料6の動画。
Forkwell エンジニア文化祭2023「分岐を低減するinterface設計と発
想の転換」ミノ駆動
目的に注目することがヒントになることを認識できた。
インターフェイス自体の学習にもオススメです。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
25
参考資料6の中で以下の意味合いの内容が印象に残った。
このようなライブラリ・インターフェイスは会社・組織のソフトウェ
ア資産となる考えられるのでこのような信頼性高いものを開発したい
と思いました。
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
標準ライブラリFILEのopen, read, writeなどは信頼を持って、特
に意識することなくつかっている。
このような信頼性高いライブラリ・インターフェイスを生み出し
たいものである。
“
“
26
設計についてのディスカッション・質
問
自分以外の設計の視点が学びになると個人的に考えています。
ぜひぜひお気軽にフィードバックをよろしくお願いします
こちらに学習の振り返りに使う目的でZennのスクラップを用意しま
した。
活用ください。
【SOLID原則】#2 "インターフェイス分離の原則(Interface
segregation principle)"の勉強会後の振り返り
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
27
参考資料
1. オブジェクト指向習得のための5ステップ【SOLID原則】
2. テスト駆動開発による組み込みプログラミング―C言語とオブジェク
ト指向で学ぶアジャイルな設計
3. Interfaceクラスの使い方ポイント解説【オブジェクト指向】
4. 【オブジェクト指向】「インターフェース分離の原則」について
5. インターフェース分離の原則とは何か
6. Forkwell エンジニア文化祭2023「分岐を低減するinterface設計と
発想の転換」ミノ駆動
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
28
ご清聴ありがとうございました
【連続講座】ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則
29

More Related Content

Similar to ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf

OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-Hiromu Yakura
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/AndroidセキュアコーディングMasaki Kubo
 
Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋智啓 出川
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力Keiji Ariyama
 
Howtoよいデザイン
HowtoよいデザインHowtoよいデザイン
HowtoよいデザインHiroki Yagita
 
4章 Linuxカーネル - 割り込み・例外 4
 4章 Linuxカーネル - 割り込み・例外 4 4章 Linuxカーネル - 割り込み・例外 4
4章 Linuxカーネル - 割り込み・例外 4mao999
 
[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性
[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性
[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性Asuka Nakajima
 
LightSwitch で OData
LightSwitch で ODataLightSwitch で OData
LightSwitch で ODataYoshitaka Seo
 
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣三七男 山本
 
闘うITエンジニアのためのLinuxセキュリティ講座
闘うITエンジニアのためのLinuxセキュリティ講座闘うITエンジニアのためのLinuxセキュリティ講座
闘うITエンジニアのためのLinuxセキュリティ講座Toshiharu Harada, Ph.D
 
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークCodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークkenjis
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMFAtomu Hidaka
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_publicKazuaki Ishizaki
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoShohei Hido
 
Interact 2019:Microsoft SDN v2 よもやま話
Interact 2019:Microsoft SDN v2 よもやま話Interact 2019:Microsoft SDN v2 よもやま話
Interact 2019:Microsoft SDN v2 よもやま話wind06106
 

Similar to ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf (20)

OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
初心者向けデバイスドライバ講座 (2)
初心者向けデバイスドライバ講座 (2) 初心者向けデバイスドライバ講座 (2)
初心者向けデバイスドライバ講座 (2)
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Howtoよいデザイン
HowtoよいデザインHowtoよいデザイン
Howtoよいデザイン
 
4章 Linuxカーネル - 割り込み・例外 4
 4章 Linuxカーネル - 割り込み・例外 4 4章 Linuxカーネル - 割り込み・例外 4
4章 Linuxカーネル - 割り込み・例外 4
 
[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性
[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性
[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性
 
Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編
 
LightSwitch で OData
LightSwitch で ODataLightSwitch で OData
LightSwitch で OData
 
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
 
闘うITエンジニアのためのLinuxセキュリティ講座
闘うITエンジニアのためのLinuxセキュリティ講座闘うITエンジニアのためのLinuxセキュリティ講座
闘うITエンジニアのためのLinuxセキュリティ講座
 
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークCodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
OData って何?
OData って何?OData って何?
OData って何?
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
 
Interact 2019:Microsoft SDN v2 よもやま話
Interact 2019:Microsoft SDN v2 よもやま話Interact 2019:Microsoft SDN v2 よもやま話
Interact 2019:Microsoft SDN v2 よもやま話
 
Devguide 9911j
Devguide 9911jDevguide 9911j
Devguide 9911j
 

More from 耕二 阿部

猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf耕二 阿部
 
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdfSWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf耕二 阿部
 
テストからより良い組込みソフトウェア開発を考える.pdf
テストからより良い組込みソフトウェア開発を考える.pdfテストからより良い組込みソフトウェア開発を考える.pdf
テストからより良い組込みソフトウェア開発を考える.pdf耕二 阿部
 
20210830 rust入学式
20210830 rust入学式20210830 rust入学式
20210830 rust入学式耕二 阿部
 
Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話耕二 阿部
 
Rust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみたRust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみた耕二 阿部
 
はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御耕二 阿部
 
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~耕二 阿部
 
モデルベース開発勉強会
モデルベース開発勉強会モデルベース開発勉強会
モデルベース開発勉強会耕二 阿部
 
EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料耕二 阿部
 
AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化耕二 阿部
 

More from 耕二 阿部 (13)

猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
 
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
 
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
 
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdfSWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
 
テストからより良い組込みソフトウェア開発を考える.pdf
テストからより良い組込みソフトウェア開発を考える.pdfテストからより良い組込みソフトウェア開発を考える.pdf
テストからより良い組込みソフトウェア開発を考える.pdf
 
20210830 rust入学式
20210830 rust入学式20210830 rust入学式
20210830 rust入学式
 
Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話
 
Rust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみたRust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみた
 
はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御
 
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
 
モデルベース開発勉強会
モデルベース開発勉強会モデルベース開発勉強会
モデルベース開発勉強会
 
EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料
 
AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化
 

ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf