গেম বিকাশে "বন্ধু" ক্লাস ব্যবহার করা


9

সাধারণত সি ++ গেমের বিকাশের গতি এনক্যাপসুলেশনের তুলনায় মূল্যবান, আপনি অতএব সর্বজনীনভাবে অ্যাক্সেসযোগ্য শ্রেণির সদস্যদের দেখতে পাচ্ছেন যা সত্যই সর্বজনীন হওয়া উচিত নয়।

আমি বেশিরভাগ ক্ষেত্রে সন্ধান করি বলে মনে হচ্ছে যে কেবলমাত্র খুব কয়েকটি নির্বাচিত কয়েকটি ক্লাজের তাদের ব্যক্তিগত ডেটা সংশোধন বা পড়ার বিন্দুতে অন্য শ্রেণীর অভ্যন্তরীণ কাজগুলি জানা দরকার।

এই ব্যক্তিগত ডেটার জন্য পাবলিক গেটার / সেটটার তৈরি করা এমন জিনিসগুলি উন্মোচিত করে যা সত্যই উইল্লি-নিলিতে পরিবর্তন করা উচিত নয়।

এখানে বন্ধুত্বপূর্ণ ক্লাস ব্যবহার করা কি আপস হবে? বা বন্ধু ক্লাসে কিছু ত্রুটি আছে যা আমি দেখছি না।

উত্তর:


8

বন্ধুত্বপূর্ণ ক্লাসে দুটি প্রধান ত্রুটি রয়েছে।

  1. আপনি আপনার বন্ধুদের কাছে কী প্রকাশ করতে চান তা চয়ন বা চয়ন করতে পারবেন না। এটা সব কিছুই না। আপনি যদি একরকম অ-অসংলগ্ন সেটারের বাধ্যতামূলক ব্যবহার প্রয়োগ করার চেষ্টা করছেন তবে এটি সমস্যাযুক্ত প্রমাণ করতে পারে।
  2. আপনার দুই ক্লাসটি এখন কিছুটা এই অর্থে মিলিত হয়েছে যে বন্ধু-এর বন্ধুটি সম্পর্কে জানে।

বলা হচ্ছে, বন্ধু শ্রেণীর ব্যবহারগুলি অবশ্যই এনক্যাপসুলেশনকে উন্নত করতে পারে, বিশেষত যদি বিকল্পটি পাবলিক গেটার / সেটটার হয়।

এছাড়াও, এসও সম্পর্কিত সম্পর্কিত প্রশ্ন: /programming/521754/when-to-use-friend-class-in-c


5

এনক্যাপসুলেশন দুর্দান্ত, তবে উদ্বেগের পৃথকীকরণ ভাল is

অন্যান্য শ্রেণীর "কিছু ব্যক্তিগত অংশ" অ্যাক্সেস করে এমন একটি শ্রেণি নির্দেশ করতে পারে যে কোডটি প্রথমে ভালভাবে ডিজাইন করা হয়নি।

যতবার আপনি নিজেকে "গোশ" তে খুঁজে পান, আমার এখানে একটি বন্ধু শ্রেণি তৈরি করা দরকার, আপনার নিজের কাছে প্রশ্নটি জিজ্ঞাসা করা উচিত "আমি কি এটি সঠিকভাবে করছি, না কোনও পরিষ্কার উপায় আছে?" (ওরফে "এটি কি পরে আমাকে পাছায় কামড়ে ফেলবে?")।

যদি আপনি "বন্ধুত্ব" সম্পর্কে নিশ্চিত হন তবে বিনা দ্বিধায় সেখানে রাখুন।


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

1
আকর্ষণীয় উদাহরণ হ'ল সি ++ তে কারখানার প্যাটার্নটির জন্য প্রাইভেট কনস্ট্রাক্টর ব্যবহারের কারণে "বন্ধু" প্রয়োজন।
ডেভিড ইয়ং

2

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

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

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

রানটাইম ব্যয়ের এটির অসুবিধা রয়েছে। একটি পয়েন্টারে ডেটা সংরক্ষণ করে আপনার আরও খারাপ ক্যাশে সংহতি এবং আরও বেশি বরাদ্দ গণনা রয়েছে এবং এটি পরিষ্কার করার জন্য আপনারও একজন ডেস্ট্রাক্টর দরকার।


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