ভূমিকা
সত্তা – উপাদান সিস্টেমগুলি একটি অবজেক্ট-ভিত্তিক স্থাপত্য কৌশল।
এই শব্দটির অর্থ কী তা নিয়ে কোনও সর্বজনীন sensক্যমত্য নেই, অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের মতো। তবে এটি স্পষ্ট যে সত্তা – উপাদান সিস্টেমগুলি বিশেষত উত্তরাধিকারের জন্য একটি স্থাপত্যের বিকল্প হিসাবে উদ্দিষ্ট । উত্তরাধিকার শ্রেণীবিন্যাসের প্রকাশ কি একটি বস্তুর জন্য স্বাভাবিক হয় , কিন্তু নির্দিষ্ট (যেমন গেম হিসাবে) সফ্টওয়্যার ধরণের, আপনি বরং প্রকাশ কী একটি বস্তু আছে ।
এটি "শ্রেণি এবং উত্তরাধিকার" এর চেয়ে আলাদা একটি অবজেক্টের মডেল যার সাথে আপনি সম্ভবত সি ++ বা জাভাতে কাজ করতে অভ্যস্ত। সত্তা ক্লাসগুলির মতোই উদ্ভাসিত, ঠিক যেমন জাভাস্ক্রিপ্ট বা স্ব-এর মতো প্রোটোটাইপ these এই সমস্ত সিস্টেম একে অপরের শর্তে প্রয়োগ করা যেতে পারে।
উদাহরণ
আসুন আসুন মনে করি যে Player
সঙ্গে একটি সত্তা Position
, Velocity
এবং KeyboardControlled
উপাদান, যা সুস্পষ্ট কিছু করার।
entity Player:
Position
Velocity
KeyboardControlled
আমরা জানি Position
দ্বারা Velocity
এবং Velocity
দ্বারা প্রভাবিত করা আবশ্যক KeyboardControlled
। প্রশ্নটি কীভাবে আমরা সেই প্রভাবগুলি মডেল করতে চাই।
সত্তা, উপাদান এবং সিস্টেম
মনে করুন যে উপাদানগুলির একে অপরের সাথে কোনও রেফারেন্স নেই; একটি বাহ্যিক Physics
সিস্টেম সমস্ত Velocity
উপাদানকে অনুসরণ করে এবং Position
সংশ্লিষ্ট সত্তার আপডেটগুলি ; একটি Input
সিস্টেম সমস্ত KeyboardControlled
উপাদানকে অনুসরণ করে এবং আপডেট করে Velocity
।
Player
+--------------------+
| Position | \
| | Physics
/ | Velocity | /
Input | |
\ | KeyboardControlled |
+--------------------+
এটি মানদণ্ডকে সন্তুষ্ট করে:
সিস্টেম এখন ঘটনা হ্যান্ডলিং এবং জন্য দায়ী প্রারম্ভিক আচরণ উপাদান দ্বারা বর্ণিত। সংঘর্ষের মতো সত্তাগুলির মধ্যে মিথস্ক্রিয়া পরিচালনা করার জন্যও তারা দায়বদ্ধ।
সত্তা এবং উপাদান
যাইহোক, যে অনুমান করা উপাদান না একে অপরের রেফারেন্স আছে। এখন সত্তাটি কেবল একটি নির্মাতা যা কিছু উপাদান তৈরি করে, তাদের একসাথে আবদ্ধ করে এবং তাদের জীবনকাল পরিচালনা করে:
class Player:
construct():
this.p = Position()
this.v = Velocity(this.p)
this.c = KeyboardControlled(this.v)
সত্তা এখন ইনপুট প্রেরণ এবং ইভেন্টগুলি সরাসরি তার উপাদানগুলিতে আপডেট করতে পারে। Velocity
আপডেটগুলিতে প্রতিক্রিয়া KeyboardControlled
জানাবে এবং ইনপুটটিতে প্রতিক্রিয়া জানাবে। এটি এখনও আমাদের মানদণ্ডকে সন্তুষ্ট করে:
এখানে উপাদান ইন্টারঅ্যাকশনগুলি সুস্পষ্ট, বাইরে থেকে কোনও সিস্টেমের দ্বারা চাপানো হয়নি। কোনও আচরণের বর্ণনা দেওয়ার ডেটা (বেগের পরিমাণ কত?) এবং কোডটি যা এটিকে প্রবেশ করে (বেগটি কী?) একত্রিত হয় তবে একটি প্রাকৃতিক ফ্যাশনে। ডেটা আচরণের পরামিতি হিসাবে দেখা যেতে পারে। এবং কিছু উপাদান এ কাজ না সব-একটি Position
আচরণ করা হয় একটি জায়গা হচ্ছে ।
মিথস্ক্রিয়াগুলি সত্তার স্তরে ("যখন কোনও " ... "এর Player
সাথে সংঘর্ষ হয় তখন Enemy
) বা পৃথক উপাদানগুলির স্তরে পরিচালিত হতে পারে (" যখন কোনও সত্তার সাথে কোনও সত্তার সাথে Life
সংঘর্ষ হয় Strength
... "))।
উপাদান
সত্তার অস্তিত্বের কারণ কী? যদি এটি কেবল কোনও নির্মাণকারী হয়, তবে আমরা উপাদানগুলির একটি সেট ফেরত ফাংশন দিয়ে এটি প্রতিস্থাপন করতে পারি । যদি আমরা পরে সত্ত্বাকে তাদের ধরণ অনুসারে জিজ্ঞাসা করতে চাই তবে আমাদের পাশাপাশি একটি Tag
উপাদান থাকতে পারে যা আমাদের কেবল এটি করতে দেয়:
function Player():
t = Tag("Player")
p = Position()
v = Velocity(p)
c = KeyboardControlled(v)
return {t, p, v, c}
মিথস্ক্রিয়াগুলি অবশ্যই বিমূর্ত প্রশ্নের দ্বারা পরিচালনা করা উচিত , সত্তার প্রকার থেকে ইভেন্টগুলি পুরোপুরি ডিকপল করে। কোয়েরিতে আর কোনও সত্তার প্রকার নেই — স্বেচ্ছাসেবী Tag
ডেটা গেম যুক্তির চেয়ে ডিবাগিংয়ের জন্য সম্ভবত আরও ভাল ব্যবহৃত হয়।
উপসংহার
সত্তা ফাংশন, নিয়ম, অভিনেতা বা ডেটাফ্লো সংযুক্তকারী নয়। তারা বিশেষ্য যা মডেল কংক্রিট ঘটনা phenomen অন্য কথায়, তারা বস্তু objects উইকিপিডিয়া যেমন বলেছে। সত্তা – উপাদান সিস্টেমগুলি সাধারণ বিষয়গুলির মডেলিংয়ের জন্য একটি সফ্টওয়্যার আর্কিটেকচার প্যাটার্ন।