Unow.me
AboutPosts

プロセス指向(Process-Oriented Programming, P.O.P.)

うの,5 min read

プロセス指向(Process-Oriented Programming, P.O.P.)

「プロセス指向(Process-Oriented Programming, P.O.P.)」は、
「プロセス(処理の流れ)」を最上位概念とし、データは単なる情報として扱うプログラミングパラダイム です。

従来のオブジェクト指向(OOP)と比較して、
より柔軟で拡張しやすく、パフォーマンスも最適化できる設計手法 を提供します。


🔹 プロセス指向の3つの原則


🔹 設計パターン

プロセス指向では、以下の要素を明確に分けて実装する。

要素役割実装方法
プロセス(Process)状態を持たない処理の単位type + 関数
プロセッサー(Processor)プロセスを統括し、戦略を選択するクラス
データ(Data)シンプルなデータ構造(オブジェクト)type + クリエイター関数

🔹 最終的な実装例

1 プロセス(戦略パターン)

// 決済戦略の型定義 type PaymentStrategy = { processPayment: (amount: number) => boolean; }; // クレジットカード決済の戦略 const creditCardPayment: PaymentStrategy = { processPayment: (amount) => { console.log(`Processing credit card payment of $${amount}`); return true; }, }; // PayPal決済の戦略 const payPalPayment: PaymentStrategy = { processPayment: (amount) => { console.log(`Processing PayPal payment of $${amount}`); return true; }, };

2 プロセッサー

// 状態を持つプロセッサー(決済処理の管理) class PaymentProcessor { constructor(private paymentStrategy: PaymentStrategy) {} setPaymentStrategy(strategy: PaymentStrategy) { this.paymentStrategy = strategy; } process(amount: number): boolean { return this.paymentStrategy.processPayment(amount); } }

3 プロセッサーの中で他のプロセッサーを使用する(ネスト)

// 状態を持つプロセッサー(注文処理の統括) class OrderProcessor { constructor(private paymentProcessor: PaymentProcessor) {} processOrder(user: string, total: number): boolean { console.log(`Processing order for ${user}...`); return this.paymentProcessor.process(total); } } // === 使用例 === const paymentProcessor = new PaymentProcessor(creditCardPayment); const orderProcessor = new OrderProcessor(paymentProcessor); console.log("Using Credit Card:"); orderProcessor.processOrder("Alice", 100); // 戦略を切り替え console.log("\nSwitching to PayPal:"); paymentProcessor.setPaymentStrategy(payPalPayment); orderProcessor.processOrder("Bob", 200);

🔹 プロセス指向 vs オブジェクト指向

特徴オブジェクト指向(OOP)プロセス指向(P.O.P.)
最上位概念オブジェクト(データ+振る舞い)プロセス(処理の流れ)
状態管理オブジェクトごとに状態を持つ状態を持つプロセッサーと持たないプロセスを分離
ロジックの分離オブジェクトがロジックを持つプロセス(関数)として分離
オブジェクトの役割データ+ロジックのカプセル化データ構造としてのみに限定
テスト容易性モックが必要純粋関数が多く、テストしやすい
拡張性継承やポリモーフィズムを活用関数の合成やプロセスの組み合わせで拡張

🔹 結論:「プロセス指向」まとめ

2025 © うの.