ডেটা ওরিয়েন্টেড বনাম অবজেক্ট-ওরিয়েন্টেড ডিজাইন

ভিডিও গেমগুলি লোভী। এগুলির জন্য প্রচুর পরিমাণে র‌্যাম, প্রক্রিয়াকরণ শক্তি প্রয়োজন হতে পারে এবং সাধারণত তথ্য আনা, চালাকি এবং ফেরত দেওয়ার জন্য দায়ী শারীরিক হার্ডওয়্যারটিতে প্রচুর পরিমাণে চাপ প্রয়োগ করা যায়। সেই কারণেই, ডেটা-ওরিয়েন্টেড ডিজাইনের বেশ কয়েকটি সমর্থক উঠে এসেছেন যে অবজেক্ট-ওরিয়েন্টড ডিজাইন এই একক অ্যাপ্লিকেশনগুলি চালিত কোডটি সংগঠিত করার সেরা উপায় নয়।

সুতরাং ডেটা ওরিয়েন্টেড ডিজাইন কী, এটি ওওপি থেকে কীভাবে আলাদা হয় এবং ডিওপি কোড লেখার বিষয়ে কীভাবে ভাবতে হয় তার আশেপাশের কিছু নিয়ম কী?

এটি ওওপি থেকে কীভাবে আলাদা?

এটির নাম অনুসারে, অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংটি বস্তুর সংজ্ঞা, উত্পাদন এবং অপারেশনকে কেন্দ্র করে। এটি কোডারকে নির্দেশ দেয়:

  1. কী কী বস্তু তা স্থাপন করুন।
  2. কোন বস্তুর সাথে কী ধরনের ডেটা সম্পর্কিত তা নির্ধারণ করুন।
  3. কোনও বস্তুর কার্যকারিতা বর্ণনা করুন।

এই বস্তুগুলি তখন প্রতিটি বস্তুর মালিকানাধীন ফাংশনগুলির মাধ্যমে অন্যান্য বস্তুর সাথে যোগাযোগ করে।

ওওপি-তে কীভাবে বস্তুগুলি কাজ করে

ওওপি-র একটি দুর্দান্ত সুবিধা হ'ল আমরা আসল বিশ্বের সাথে কীভাবে যোগাযোগ করি তা মিররটিকে দেখতে কতটা কাছাকাছি মনে হয়। উদাহরণস্বরূপ, "টেবিলগুলি" শ্রেণীর সম্পর্কে কিছু জেনে আমি কোনও টেবিলে কী করতে পারি এবং কী করতে পারি না তা জেনে আমি নিজেকে অনেক সময় বাঁচাতে পারি। আপনি কখনই কোনও টেবিলের উদাহরণের দিকে ইঙ্গিত করবেন না এবং জিজ্ঞাসা করবেন না "এই টেবিলটি কী ধরণের ক্যাপুচিনো তৈরি করে?" কারণ টেবিলের শ্রেণি টেবিলগুলিকে ক্যাপুচিনো তৈরি করতে কার্যকারিতা দেয় না।

এই ধারণার বাইরে আমরা পলিমারফিজমের সুবিধাও পাই (বহু - বহু; মোর্ফ - ফর্ম) অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের এমন একটি প্যাটার্ন বর্ণনা করে যেখানে সাধারণ ইন্টারফেস ভাগ করার সময় ক্লাসগুলির আলাদা কার্যকারিতা থাকে। যদি আপনি প্রাণীগুলির শ্রেণিবিন্যাস সম্পর্কে চিন্তা করেন, একটি বিড়াল এবং একটি বাঘ "কৃপণ" শ্রেণীর অংশ তা জেনে, আমি স্বয়ংক্রিয়ভাবে তাদের প্রত্যেকের সম্পর্কে নির্দিষ্ট শ্রেণীর কোনও নির্দিষ্ট বিবরণে ডুব না দিয়ে একটি ভাল চুক্তিটি জানতে পারি। তারা উভয়ই বিলিনের উচ্চ শ্রেণীর নির্দিষ্ট বৈশিষ্ট্য এবং ডেটা "উত্তরাধিকারী" করে।

তবে, এই দৃষ্টান্তের সাথে ফাংশনগুলি নির্দিষ্ট কিছু উপাত্তগুলিতে সীমাবদ্ধ এবং এটি পুনরায় ব্যবহার করা যাবে না। আপনি যদি কোনও ফাংশনটির মধ্যে কোনও অবজেক্টের মধ্যে বিভিন্ন টুকরো ডেটা পরিচালনা করতে চান তবে সেই ফাংশনটি হয় পিতামাত্ত শ্রেণীর কাছ থেকে উত্তরাধিকারী হওয়া দরকার বা পুনর্লিখনের প্রয়োজন। এই দৃষ্টান্তে প্যারেন্ট ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত বর্গের মধ্যে থাকা ডেটা কীভাবে অ্যাক্সেস করা যায় তা চিন্তা করা গুরুত্বপূর্ণ। প্রসেসরের অ্যাক্সেসযোগ্য হওয়ার জন্য একাধিক ক্লাসের মাধ্যমে ডেটা সংগ্রহ করা দরকার যা অকার্যকর হতে পারে।

কোনও ওওপি সিস্টেমে কোনও প্রসেসরের কাজ করতে পারে এমন একটি উদাহরণ।

ডেটা ওরিয়েন্টেড প্রোগ্রামিং কিছুটা ভিন্ন উপায়ে কোডিংয়ের দিকে এগিয়ে যায়। বস্তুর পরিবর্তে, সমস্ত কিছু ডেটা এবং সব কিছুতেই কাজ করা যায়। এটি কার্যকারিতা এবং ডেটা পৃথক করে। তারা আর কোনও নির্দিষ্ট নিয়মের সেট দ্বারা জড়িত হয় না। ডিওপিতে আপনার ফাংশনগুলি সাধারণ উদ্দেশ্য এবং এটি ডেটা বড় অংশে প্রয়োগ করা হয়। আদর্শভাবে, আপনি ন্যূনতম পরিশ্রমের কাজটি নিজেই সম্পন্ন করেছেন তা নিশ্চিত করার জন্য আউটপুট ডেটার সাথে যতটা ঘনিষ্ঠভাবে ডেটা গঠন করবেন।

"ডেটা-ওরিয়েন্টেড ডিজাইনটি বস্তু থেকে ডেটাতে প্রোগ্রামিংয়ের দৃষ্টিভঙ্গি নিজেই বদলে দেয়: ডেটার ধরণ, কীভাবে এটি মেমরিতে রাখা হয় এবং কীভাবে এটি গেমটিতে পড়তে এবং প্রক্রিয়াজাত করা হবে।"
একটি ডওপ কল ক্রমের উদাহরণ। প্রসেসরের জন্য অনেক কম কাজ।

কেন ডপ?

সহজ উত্তর হ'ল প্রসেসররা রেফারেন্সের স্থানীয়তা পছন্দ করে। এই বিধিগুলি আমাদের ডওপিতে প্রদত্ত অন্যান্য সুবিধার অনেকগুলি নির্দেশ করে। উদাহরণস্বরূপ, লেখার কোড যা রেফারেন্সের স্থানীয়তার জন্য অনুকূল করে আমাদের সমান্তরালকরণ বাস্তবায়নের অনেক সহজ উপায় দেয় gives প্যারালালাইজেশন কম্পিউটার প্রসেসরের একাধিক কোর ব্যবহার করার চেষ্টা করে একই সাথে কাজগুলি সম্পাদন করতে। এটি ওওপি-র সাথে করা অত্যন্ত কঠিন কারণ আপনি একই সাথে একই ডেটা অ্যাক্সেস করার প্রসেসরের একাধিক থ্রেডের ঝুঁকি চালান। যাইহোক, যখন আপনি সম-মনের ডেটাগুলি একসাথে গোষ্ঠীভুক্ত করেন এবং সাধারণভাবে প্রক্রিয়াজাত হতে চলেছে এমন ডেটার উপর দৃষ্টি নিবদ্ধ করে কোড লেখেন, তখন সেই ফাংশনগুলি প্রক্রিয়া করতে প্রসেসরের একাধিক থ্রেড ব্যবহার করা অনেক সহজ হয়ে যায়।

ডুপের আরেকটি সুবিধা হ'ল মেমরি ক্যাশে করার দক্ষ ব্যবহার efficient যেহেতু ডিওপি একই ফাংশনগুলি বারবার ব্যবহার করে, তাই ক্যাশে আরও বেশি নতুন-কিন্তু-সত্যই নয় নতুন-নতুন নির্দেশনার ব্লক সংরক্ষণ করতে বাধ্য হয় না।

সোর্স

https://www.danielsefton.com/2016/05/developing-a-data-oriented-game-engine-part-1/

https://www.packtpub.com/books/content/what-difference-between-functional-and-object-oriented-programming

https://www.gamasutra.com/view/news/126498/Opinion_What_You_Need_To_Give_Up_When_Going_Data_Oriented.php

https://prateekvjoshi.com/2013/11/30/programming-paradigms-object-oriented-vs-data-oriented/

http://gamesfromwithin.com/data-oriented-design