আমি এই ক্ষেত্রে নেস্টেড ক্লাস ব্যবহার করা উচিত?

আমি ভিডিও প্লেব্যাক এবং রেকর্ডিং জন্য ব্যবহৃত ক্লাস একটি সংগ্রহ কাজ করছি। , স্টপ() , বিরাম() </কোড>, <�কোডের মত পদ্ধতিগুলি সহ পাবলিক ইন্টারফেসের মত একটি প্রধান শ্রেণী রয়েছে। > রেকর্ড() </কোড> ইত্যাদি ... তারপর আমার আছে ওয়ার্ডহার্স ক্লাস যা ভিডিও ডিকোডিং এবং ভিডিও এনকোডিং করে।

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

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

0
যোগ সম্পাদিত
মতামত: 1

9 উত্তর

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

আমার দর্শন এগিয়ে যেতে হবে এবং উভয় কাঠামো একটি পালিশ উপায় ক্লায়েন্ট যাও অ্যাক্সেস করতে হবে, শুধু ধারণা অধীনে তারা টেন্ডেম ব্যবহার করা হবে

আমি Qt মধ্যে একটি QTextDocument মত কিছু রেফারেন্স হবে। আপনি বেয়ার ধাতু ডেটা হ্যান্ডলিং একটি সরাসরি ইন্টারফেস প্রদান, কিন্তু ম্যানিপুলেশন করতে একটি QTextEdit মত একটি বস্তুর বরাবর কর্তৃত্ব পাস।

0
যোগ

sounds like a case where you could use the strategy pattern

0
যোগ

নেস্টেড ক্লাস ব্যবহার করতে হবে কিনা তা নির্ধারণ করার এক উপায় হলো এই শ্রেণীটি একটি সহায়ক ভূমিকা পালন করে কিনা বা তার নিজের অংশকে খেয়াল করে কিনা।

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

0
যোগ

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

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

এখানে পিআইএমপিএল প্যাটার্ন (বিভাগ 3.1.1) সম্পর্কে আরো তথ্য রয়েছে।

0
যোগ

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

Your encoder/decoder class sounds like it better fits the Strategy Pattern

0
যোগ

আপনি একটি ছোট্ট হেল্পার ক্লাস তৈরি করতে একটি নেস্টেড ক্লাস ব্যবহার করবেন যা মূল বর্গটি বাস্তবায়ন করতে হবে। অথবা উদাহরণস্বরূপ, একটি ইন্টারফেস সংজ্ঞায়িত করার জন্য (বিমূর্ত পদ্ধতি সহ একটি বর্গ)।

এই ক্ষেত্রে, নেস্টেড ক্লাসের প্রধান অসুবিধা হল যে এটি তাদের পুনরায় ব্যবহার করা কঠিন করে তোলে। সম্ভবত আপনি অন্য একটি প্রকল্পের মধ্যে আপনার VideoDecoder বর্গ ব্যবহার করতে চান। আপনি এটি VideoPlayer একটি নেস্টেড ক্লাস করা হলে, আপনি একটি মার্জিত ভাবে এটি করতে পারবেন না।

পরিবর্তে, অন্যান্য ক্লাসগুলি পৃথক .h / .cpp ফাইলগুলিতে রাখুন, যা আপনি আপনার ভিডিও প্লেয়ার শ্রেণীতে ব্যবহার করতে পারেন। VideoPlayer এর ক্লায়েন্টের এখন শুধুমাত্র ভিডিও প্লেয়ার ঘোষণা করে ফাইলটি অন্তর্ভুক্ত করতে হবে, এবং এখনও এটি আপনার বাস্তবায়ন কিভাবে সম্পর্কে জানতে হবে না।

0
যোগ

কখনও কখনও ব্যবহারকারী থেকে বাস্তবায়ন ক্লাস লুকানোর জন্য উপযুক্ত - এই ক্ষেত্রে জনসাধারণের শ্রেণী সংজ্ঞাের ভিতর থেকে foo_internal.h- এ সেগুলি স্থাপন করা আরও ভাল। এইভাবে, আপনার foo.h পাঠকদের পাঠকদের আপনি তাদের পছন্দ হবে না দেখতে পাবেন, তারা বিরক্ত না করা, কিন্তু আপনি এখনও আপনার ইন্টারফেস এর কংক্রিট প্রয়োগের বিরুদ্ধে পরীক্ষা লিখতে পারেন।

0
যোগ

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

0
যোগ

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

0
যোগ