আক্রমণকারী ধারণাটি 'পার্শ্ব প্রতিক্রিয়া' এর সাথে দৃ .়ভাবে যুক্ত। আমি বিশ্বাস করি এটি সফ্টওয়্যার ডিজাইনের জন্য বার্ট্রান্ড মেয়ারের 'ডিজাইন বাই কন্ট্রাক্ট (ডিবিসি)' পদ্ধতির দ্বারা প্রচারিত হয়েছিল।
ডিবিসি 3 টি গুরুত্বপূর্ণ ধারণা, পূর্বশর্ত, পোস্টকন্ডিশন, আক্রমণকারী সহ বিমূর্ত ডেটা প্রকারগুলি (শ্রেণির ব্যাক হোন) সমৃদ্ধ করে । প্রক্রিয়াগুলি উল্লেখ করার সময় এটি সহজে ব্যাখ্যা করা হয়, সুতরাং আমি এটির সাথে উল্লেখ করে ব্যাখ্যা করার চেষ্টা করব:
একটি পূর্বশর্ত জন্য একটি পদ্ধতি যাতে প্রসিডিউর কল করার জন্য সম্মান করতে হবে শর্ত ইনপুট ডেটা প্রতিনিধিত্ব করে। এই পূর্বশর্তটি অবশ্যই সেই নির্দিষ্ট পদ্ধতির ক্লায়েন্টের দ্বারা সম্মানিত এবং প্রয়োগ করা উচিত। পদ্ধতি ডিজাইনার তবে সেই ক্লায়েন্টদের কাছ থেকে রক্ষা পেতে পারেন যারা প্রক্রিয়াটির প্রথম লাইন হিসাবে শর্তটি জোর দিয়ে পূর্ব শর্তটিকে সম্মান করে না। উদাহরণস্বরূপ কোনও পদ্ধতি থাকা double divide(double dividend, double divisor)
পূর্বশর্ত হতে পারে divisor != 0
।
প্রক্রিয়া ফিরে আসার পরে একটি পোস্টকন্ডিশন আউটপুট ডেটাতে শর্তের প্রতিনিধিত্ব করে; পূর্ববর্তী শর্তটি সম্মানিত করা এই পোস্টকন্ডিশনকে সম্মান করা পুরোপুরি পদ্ধতি ডিজাইনারের কাজ; ফিরে আসার আগে একটি প্রতিরক্ষা প্রোগ্রামিং শৈলীতে, পোস্টকন্ডিশনটি জোর দেওয়া যায়।
একটি পরিবর্তিত একটি উভয় একটি পূর্বশর্ত এবং postcondition হিসাবে গণ্য করা যাবে, কিন্তু পূর্বশর্ত এবং উপরোক্ত ধারণা থেকে postcondition জন্য বিভিন্ন বোঝার সঙ্গে। একটি আক্রমণকারী মূলত বলে যে পদ্ধতিটি বলার আগে যদি ইনপুটটির একটি নির্দিষ্ট শর্ত পূরণ হয় তবে প্রক্রিয়াটি বলার পরে সেই নির্দিষ্ট শর্তটি বৈধ হয়। উদাহরণস্বরূপ, কোনও পদ্ধতির জন্য একটি বৈধ আগ্রাসন boolean search(int term, int array[])
বলতে পারে যে array
কল করার আগে কলের আগের অবস্থা একই is
প্রক্রিয়াগুলিতে আক্রমণকারীদের কার্যকর করা (এবং কেবল পদ্ধতিগুলি নয়) একটি দুর্দান্ত জিনিস কারণ এটি পার্শ্ব প্রতিক্রিয়া হ্রাস করে ; পার্শ্ব প্রতিক্রিয়াগুলি প্রোগ্রামিংয়ে একটি দুর্দান্ত মন্দ কারণ এটি কার্যকর। একটি নির্দিষ্ট পদ্ধতি ইনপুট আর্গুমেন্টের অবস্থার পরিবর্তন করতে পারে, বা কিছু বৈশ্বিক ভেরিয়েবলের অবস্থার পরিবর্তন করতে পারে বা কিছু বৈশ্বিক ভেরিয়েবলের উপর নির্ভর করতে পারে; এটি দুষ্টু পরিস্থিতিতে ডেকে আনতে পারে যেখানে একই পদ্ধতিতে একই ধরণের দুটি একই কল (একই ইনপুট সহ) বিভিন্ন আউটপুট দিতে পারে। এটি কলগুলির ইতিহাস জানার দিকে পরিচালিত করে এবং বিশেষত বহুগঠনের প্রসঙ্গে ডিবাগ করা খুব কঠিন।