6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

オブジェクト指向 (オレの流儀)

Last updated at Posted at 2014-05-28

自分のC++アプリケーションへのこだわりをMQTT-SN Gatewayを例に書いた。

#C++にmain()はいらない
オブジェクト指向言語(c++)の main()は醜悪だ。美しさを微塵も感じない。 
醜い main()はアプリケーション・プログラムの奥深くに隠蔽するのがオレの流儀だ。
少なくとも、アプリケーションを作成しているのだから、アプリケーション・クラスとか、その派生クラスがなければならないと思う。 main()関数はそのアプリケーション・インスタンスを起動するための最小限のものにしたい。 
これはオレのこだわり。

##最小限の main() はこれ
この様式は様々なアプリケーションに共通だ。
アプリケーションはProcessクラスとして定義される。

main()
Process* theProcess = NULL;
int main(int argc, char** argv){
	theProcess->initialize(argc, argv);
	theProcess->run();
	return 0;
}

後はProsessクラスの派生クラスを定義すれば、アプリケーション・プログラムが構築できる。

#アプリケーションの定義
Proessから派生したクラスのインスタンスを生成するだけ。
これをコンパイルすれば、完成。

##MQTT-SN Gateway のアプリケーションの定義はこれ

必要なクラス定義をインクルードして、メインスレッドとその他のスレッド(Task)を生成する。

A_ProgramStructure.cpp
#include "GatewayResourcesProvider.h"
#include "ClientRecvTask.h"
#include "ClientSendTask.h"
#include "BrokerRecvTask.h"
#include "BrokerSendTask.h"
#include "GatewayControlTask.h"
#include "lib/ProcessFramework.h"
/**************************************
 *       Gateway Application
 **************************************/
GatewayResourcesProvider gwR = GatewayResourcesProvider();
GatewayControlTask th0 = GatewayControlTask(&gwR);
ClientRecvTask th1 = ClientRecvTask(&gwR);
ClientSendTask th2 = ClientSendTask(&gwR);
BrokerRecvTask th3 = BrokerRecvTask(&gwR);
BrokerSendTask th4 = BrokerSendTask(&gwR);

Process Framework8.jpg

クラスのインスタンスを生成するだけで、アプリケーション・プログラムが出来上がる。 美しいではないか。  

世の中、main()を隠蔽しないアプリケーション・プログラムのなんと多いことか。

興味があれば、ソースコードはここ。
https://github.com/ty4tw/MQTT-SN

6
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?