পদ্ধতির প্যারামিটারের ধরণ, রিটার্নের ধরণ এবং সম্পত্তির প্রকারের সংক্ষিপ্ততা সম্পর্কে বিধিগুলি


9

কিছু সময় আগে আমি পদ্ধতি প্যারামিটারের ধরণ, রিটার্নের ধরণ এবং সম্পত্তির ধরণের সংক্ষিপ্ততা সম্পর্কে এক ধরণের "থাম্বের নিয়ম" পড়েছিলাম, তবে আমি এটি মনে করি না।

এটি আপনার রিটার্নের ধরণগুলি যথাসম্ভব কংক্রিট এবং আপনার প্যারামিটারের ধরণগুলি যতটা সম্ভব বিমূর্ত ... বা বিপরীতে রাখার বিষয়ে কিছু বলেছিল।

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

চিয়ার্স।

উত্তর:


5

আর দরকার নেই, কম কথা দিও না।

বার্ট্র্যান্ড মায়ারের উদ্যোগে "ডিজাইন বাই কন্ট্রাক্ট" ধারণাগুলি থেকে এই শব্দগুচ্ছটি এসেছে।

http://wiki3.cosc.canterbury.ac.nz/index.php/Design_by_contract

এছাড়াও "লিসকভের বিকল্প নীতি" দেখুন

/programming/56860/what-is-the-liskov-substitution-principle


7

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


4

আপনি পোষ্টেলের আইনের একটি বহিঃপ্রকাশ শুনে থাকতে পারেন : "আপনি যা প্রেরণ করেন তাতে রক্ষণশীল হন, আপনি যা গ্রহণ করেন তাতে উদার হন।"

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

অন্যদিকে, ফিরে একটি Iterable<T>একটি পদ্ধতি থেকে কোড পরিমাণ ঐ যে নিতে আপনার ফেরত মান ব্যবহার করতে পারেন সীমিত Iterable<T>প্যারামিটার। আপনি একটি খুব কংক্রিট টাইপ ফিরে আসেন তবে মত Vector<T>, তারপর আপনার ফেরত মান কোনো পদ্ধতি যে একটি লাগে মধ্যে পাশ করা যাবে Serializable, Cloneable, Iterable<T>, Collection<T>, List<T>, RandomAccess, Vector<T>, AbstractList<T>, অথবা AbstractCollection<T>, এবং এটি আশানুরূপ কাজ হবে।


পোষ্টেলের আইনটি আমার "বৃহত্তম সফ্টওয়্যার ইঞ্জিনিয়ারিং ভুলগুলির" তালিকায় বেশ উচ্চ high
কোডসইনচাউস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.