চুক্তি এবং ডিফেন্সিভ প্রোগ্রামিং দ্বারা নকশার মধ্যে পার্থক্য


26

চুক্তি দ্বারা ডিজাইনিং (ডিবিসি) আত্মরক্ষামূলকভাবে প্রোগ্রাম করার উপায় হতে পারে?

কিছু ক্ষেত্রে প্রোগ্রামিংয়ের একটি উপায় কি অন্যের চেয়ে ভাল?

উত্তর:


30

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

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

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


7

চুক্তি দ্বারা ডিজাইনিং (ডিবিসি) আত্মরক্ষামূলকভাবে প্রোগ্রাম করার উপায় হতে পারে?

হ্যাঁ।

"ডিফেন্সিভ প্রোগ্রামিং" প্রায়শই সময় নষ্ট করার অজুহাত। এটি প্রায়শই ব্যতিক্রমী জিনিসগুলির জন্য যাচাই করে সময় নষ্ট করে। ব্যতিক্রমগুলির পরিবর্তে, অতিরিক্ত আইএফ স্টেটমেন্টগুলি ব্যতিক্রম-হ্যান্ডলিং ধারাগুলির পরিবর্তে লেখা হয়।

চুক্তিটি সংজ্ঞায়িত করুন এবং এটি দিয়ে কাজ করুন।

যখন কেউ চুক্তি লঙ্ঘন করে, তখন প্রোগ্রামটি - ইভেন্টের স্বাভাবিক কোর্সে - বিরতি ও স্বাভাবিক ব্যতিক্রমগুলি উত্থাপন করে যা সাধারণত পরিচালনা করা যায়।

"ডিফেন্সিভ প্রোগ্রামিং" এবং "ত্রুটি প্রতিরোধ" ত্রুটিগুলি প্রতিরোধ করার পরিবর্তে ত্রুটিগুলি যুক্ত করার জন্য দেখানো যেতে পারে (কারণ ত্রুটি প্রতিরোধের চেকগুলি নিজেরাই ভুল)।

ব্যতিক্রম হ্যান্ডলিং "ডিফেন্সিভ প্রোগ্রামিং" এর চেয়ে অনেক ভাল একটি ব্যতিক্রমকে চুপ করে, লগ করতে এবং পরিচালনা করতে পারে।


6
প্রতিরক্ষামূলক প্রোগ্রামিং কেবল স্টেটমেন্টের তুলনায় মো। এতে কোড পর্যালোচনা, স্থির বিশ্লেষণ, সুরক্ষা নিরীক্ষা, সুরক্ষিত কোডিং গাইডলাইনস এবং আরও অনেক কিছু রয়েছে। এছাড়াও, ব্যতিক্রম এবং ব্যতিক্রম হ্যান্ডলিংয়ের ব্যবহার (কেবল প্রোগ্রামটিকে ক্র্যাশ ও জ্বলতে দেওয়ার বিপরীতে) একটি প্রতিরক্ষামূলক প্রোগ্রামিং কৌশল হিসাবে বিবেচিত হয়।
টমাস ওয়েন্স

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

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

@ থমাস ওভেনস: "সম্ভবত এটি অত্যধিক বিস্তৃত সংজ্ঞা" " একমত। এটি ভাল ধারণা একটি দুর্দান্ত চেকলিস্ট মত মনে হচ্ছে।
এস। লট

2
-1: আমি দেখতে পাচ্ছি না ডিবিসি কীভাবে আত্মরক্ষামূলকভাবে প্রোগ্রাম করার একটি উপায়, তারা মূলত বিরোধী। আমি সন্দেহ করি যে কেবল সময় নষ্ট করার জন্য রক্ষণাত্মক প্রোগ্রামিং করা সাধারণ common এবং 'ত্রুটি যুক্ত করতে দেখানো যেতে পারে' এর একটি উদ্ধৃতি প্রয়োজন কারণ এটি মোটেই স্পষ্ট নয়।
চিহ্নিত করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.