আমাদের কেন প্রথম শ্রেণীর সংগ্রহগুলি বেশি পছন্দ করা উচিত?


15

থট ওয়ার্কস অ্যান্টোলজিতে জেফ বে (আরটিএফ) দ্বারা অবজেক্ট ক্যালিস্টেনিকসের 4 নং নিয়ম অনুসারে , " প্রথম শ্রেণির সংগ্রহগুলি ব্যবহার করা উচিত" বাঞ্ছনীয় ।

বিধি 4: প্রথম শ্রেণির সংগ্রহ

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

আমি এটি থেকে যা বুঝতে পারি তা হ'ল আমাদের সংগ্রহটি মোড়কানোর জন্য একটি পৃথক ক্লাস ব্যবহার করা উচিত এবং সেই সংকলনের ডেটা সংশোধন করার ডেটা যুক্ত করার জন্য, মুছতে মুছতে পদ্ধতি সহ should

এবং আমাদের এটির প্রয়োজন যাতে আমরা নিশ্চিত যে ডেটাটাইপ কী সংগ্রহে যায় এবং কী ঘটে।

যদি আমরা জেনেরিক সংগ্রহ ব্যবহার করি (ভাষাগুলিতে এটি প্রযোজ্য) তবে আমাদের কি এই নিয়মটি অনুসরণ করা দরকার?

যদি আমি একটি গুরুত্বপূর্ণ তাত্পর্য অনুপস্থিত থাকে তবে দয়া করে পরিষ্কার করুন।


1
আমোগ তালপলিকর আমি নিয়ম 8 পরিবর্তন করে 4 রুল করলাম, কারণ বিধি 8 আসলে "" দুটির বেশি সংখ্যার ভেরিয়েবল সহ কোনও শ্রেণি নেই "।
ইয়ানিস

মনে হয় বিষয়বস্তুর সারণীতে বিধি 8 বলছে এবং তারপরে এটি শরীরে 4 নং বিধি বলবে ।
অকেজো


6
এটি কি শুধু আমি, নাকি এই নিয়মটি লিখিত হিসাবে অ-প্রয়োগযোগ্য? মানে, আপনি এতে একটি সংগ্রহ সহ একটি ক্লাস পেয়েছেন, তাই আপনি অন্য সমস্ত কিছু বাইরে নিয়ে যান। এখন আপনার ক্লাস একটি সংগ্রহ। সুতরাং আপনি যদি এই ক্লাসটি সহ অন্য একটি ক্লাস পেয়ে থাকেন তবে এটিতে এটির একটি সংগ্রহ রয়েছে এবং ... লাথার, ধুয়ে ফেলা, পুনরাবৃত্তি করুন।
mjfgates

@ এমজেফগেটস: হুম ... দুর্দান্ত পয়েন্ট! সত্যিই কিছু ভাবনা!
আমোগ তালপল্লিকার

উত্তর:


12

প্রকার সুরক্ষা প্রথম শ্রেণীর সংগ্রহগুলি ব্যবহারের জন্য একটি অতি গৌণ কারণ। আপনার লিঙ্ক থেকে:

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

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

এর পক্ষে যুক্তি বেশ সহজ, সংগ্রহগুলি প্রায় পাস করার প্রবণতা রয়েছে। শীঘ্রই পর্যাপ্ত পরিমাণে 4 টি আলাদা ক্লাসের নিজস্ব SearchByID()পদ্ধতি রয়েছে। অথবা আপনি Map<Integer, String>যে মানচিত্রটিতে সঞ্চিত তা দূরে সরে গেছে তার প্রসঙ্গে যেমন ফেরতের মান পাবেন । প্রথম শ্রেণির সংগ্রহ হ'ল একটি সহজ সমাধান যা একক উত্স ফাইলের জন্য ব্যয় করে। অনুশীলনে, একবার এগুলি স্থানে চলে আসার পরে (তারা পাশাপাশি ইউনিট পরীক্ষাগুলি লিখতে খুব সহজ), সংগ্রহের সাথে সম্পর্কিত যে কোনও পরিবর্তন পরিচালনা করা সহজ, যেমন SearchByIDকোনও ইন্টির পরিবর্তে কোনও জিইউইডি নেওয়া দরকার।


8

... সংগ্রহের মোড়কে আলাদা আলাদা ক্লাস ব্যবহার করুন এবং সেই সংকলনের ডেটা সংশোধন করার ডেটা যুক্ত করার জন্য, মুছে ফেলার পদ্ধতি সহ with

এটি সংগ্রহে সংরক্ষণ করা সামগ্রীর ধরণের গ্যারান্টি ছাড়াও আরও অনেক কিছু করে , এটি কোনও সংগ্রহের আগতদেরও গ্যারান্টি দেয়।

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

এফডাব্লুআইডাব্লু, পাঠ্যটি এ সম্পর্কে পুরোপুরি পরিষ্কার (এবং আমি আপনার প্রশ্নে পুরো বিষয়টি সম্পাদনা করব, সুতরাং আরটিএফ ডাউনলোড করার দরকার নেই কারও):

প্রতিটি সংগ্রহের নিজস্ব শ্রেণিতে আবৃত হয়ে যায়, তাই এখন সংগ্রহের সাথে সম্পর্কিত আচরণগুলির একটি বাড়ি রয়েছে

প্রকারের (বা তাই জেনেরিক) সাথে কিছুই করার থাকে না, সংগ্রহের আচরণটি এর ডেটার সাথে যুক্ত করার সাথে সম্পর্কিত সমস্ত কিছুই।


1

আপনি যদি জেনারিক্সকে সমর্থন করে এমন কোনও ভাষা ব্যবহার করেন তবে সাধারণ উত্তরটি "না" । কারণ ভাষার বৈশিষ্ট্য নিজেই এটিতে (আমার জাভা জেনেরিকের অভিজ্ঞতা থেকে) বেশ ভাল কাজ করে বলে টাইপ পরীক্ষা করার দরকার নেই।

আপনি যদি ভাষা থেকে প্রদত্ত ডেটা কাঠামোটি কাস্টমাইজ করতে চান এমন কোনও পরিস্থিতি থেকে থাকে তবে আপনি মূল ডেটা কাঠামোর চারপাশে একটি র‌্যাপার ক্লাস তৈরি করতে পারেন এবং আপনার নিজস্ব API গুলি প্রকাশ করতে পারেন এবং এখনও মূল ডেটা কাঠামোর অন্তর্নিহিত বাস্তবায়ন ব্যবহার করতে পারেন।


আমিও একই লাইনে ভাবছি। তবে কিছু হওয়া উচিত, আমি এর জন্য যে উদাহরণগুলি দেখেছি সেগুলি ছিল জাভা এবং সি # এবং উভয়ই জেনেরিক সংগ্রহকে সমর্থন করে।
আমোগ তালপল্লিকার 12'12

@ আমঘটলপল্লিকার: আমার বক্তব্যটি এটাকে সরল রাখা ছিল। যদি না আমার ডেটা কাঠামোর কোনও নির্দিষ্ট আচরণকে ওভাররাইড করার প্রয়োজন না হয়, আমি কাস্টমাইজ করব না।
java_mouse
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.