প্যারেন্ট পয়েন্টারের একটি বিজ্ঞপ্তি রেফারেন্স কখন গ্রহণযোগ্য?


24

এই স্ট্যাক ওভারফ্লো প্রশ্নটি কোনও পয়েন্টারের মাধ্যমে কোনও সন্তানের তার পিতামাতার সাথে সম্পর্কিত হওয়া সম্পর্কিত।

মন্তব্যগুলি ভয়াবহ ধারণা হিসাবে নকশার প্রাথমিক পর্যায়ে সমালোচনা করেছিল।

আমি বুঝতে পারি এটি সম্ভবত সাধারণভাবে সেরা ধারণা নয়। থাম্বের একটি সাধারণ নিয়ম থেকে এটি বলা ন্যায়সঙ্গত বলে মনে হয়, "এটি করবেন না!"

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


1
আপনি যে প্রশ্নটি যুক্ত করেছেন তা বিষয়টিতে বেশ বিস্তৃত বলে মনে হচ্ছে।
মনিকার সাথে লাইটনেস রেস

4
@ লাইটনেসেসেসিন অরবিট "এটি করবেন না" কেন এটি এতদূর বুঝতে পারা যায় না ।
এন্ডারল্যান্ড

2
আমি সেখানে "এটি করবেন না" এর চেয়ে অনেক বেশি দেখছি। আমি একাধিক বিশেষজ্ঞের দ্বারা বিতর্কিত কুফলগুলি দেখতে পাচ্ছি।
মনিকার সাথে লাইটনেস রেস

1
আপনার একটি দ্বি-দিকনির্দেশক তালিকা থাকতে পারে যাতে ট্র্যাভারিংয়ের প্রয়োজন হয়, এক ধরণের সার্কুলার বাফার, সম্ভবত আপনি কোনও গেমের সাথে সংযুক্ত রাস্তার দুটি টুকরো উপস্থাপন করছেন - যদি আপনাকে বিজ্ঞপ্তিযুক্ত কিছু উপস্থাপন করতে হয় তবে এটি একটি ভাল ধারণা হতে পারে।
রবিবার

2
আমার একটি থাম্বের ব্যবহারিক নিয়ম একটি প্রশ্ন "পিতা-মাতা ছাড়া একটি শিশু কি থাকতে পারে?" (আপনি যদি এক্সএমএল ডকুমেন্টস এবং এর নোডগুলি বিবেচনা করেন: নথির গাছের প্রসঙ্গ ছাড়া নোডের অস্তিত্ব থাকতে পারে It's এটি একটি বাজে কথা)। উত্তরটি যদি না হয় তবে দ্বি-দিকনির্দেশক লিঙ্কগুলি ঠিক আছে: আপনার কাছে দুটি অবজেক্ট রয়েছে যা কেবল একসাথে থাকতে পারে। বস্তু যদি পারেন স্বাধীনভাবে অস্তিত্ব, তারপর আমি ঐ দুই লিঙ্ক সরান।
মিকালাই

উত্তর:


43

এখানে মূল কী দুটি বস্তুর বিজ্ঞপ্তিযুক্ত রেফারেন্স রয়েছে কিনা তা নয়, তবে এই উল্লেখগুলি একে অপরের মালিকানা নির্দেশ করে কিনা ।

দুটি অবজেক্ট একে অপরের "মালিকানা" নিতে পারে না: এটি সূচনা ও মোছার ক্রমের জন্য এক জটিল অস্থিরতা সৃষ্টি করে। একটি অবশ্যই alচ্ছিক রেফারেন্স হতে হবে, বা অন্যথায় নির্দেশ করুন যে একটি বস্তু অন্যটির জীবনকাল পরিচালনা করবে না।

দ্বিগুণ-সংযুক্ত তালিকাটি বিবেচনা করুন: দুটি নোড একে অপরের সাথে পিছনে লিঙ্ক করে, তবে দু'জনেরই 'মালিকানা' নেই (তালিকাটি তাদের উভয়েরই মালিক)। এর অর্থ নোড অন্যটির জন্য মেমরির বরাদ্দ দেয় না বা অন্যটির পরিচয় বা জীবনকাল পরিচালনার জন্য অন্যথায় দায়ী নয়।

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

বেশিরভাগ ওও ডিজাইনে, কোনও সামগ্রীর ডেটা সদস্য হিসাবে অন্য কোনও অবজেক্টের উল্লেখ একটি মালিকানা বোঝায় ownership উদাহরণস্বরূপ, ধরুন আমাদের কাছে গাড়ি এবং ইঞ্জিন ক্লাস রয়েছে। উভয়ই নিজের উপকারে খুব কার্যকর নয়। আমরা বলতে পারি যে এই বস্তুগুলি একে অপরের উপর নির্ভর করে: দরকারী কাজ সম্পাদনের জন্য তাদের অপরের উপস্থিতি প্রয়োজন। কিন্তু অন্যটির "মালিকানা" কোনটি? এক্ষেত্রে আমরা বলব যে কার ইঞ্জিনের মালিক, কারণ গাড়িটি "ধারক" যেখানে মোটরগাড়িগুলির সমস্ত উপাদান বাস করে। ওও এবং রিয়েল-ওয়ার্ল্ড ডিজাইনে উভয়ই গাড়িটি তার অংশগুলির সমষ্টি এবং parts অংশগুলি সমস্ত গাড়ির প্রসঙ্গেই একত্রে সংযুক্ত। ইঞ্জিনের গাড়িতে ফিরে কোনও উল্লেখ থাকতে পারে, বা এটির সাথে টর্ককনভার্টারের রেফারেন্স থাকতে পারে,

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

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


16

এই জাতীয় নকশায় কয়েকটি বিষয় বিবেচনা করতে হবে:

  • কাঠামোগত নির্ভরতা
  • মালিকানার সম্পর্ক (আইকোম্পেশন বনাম অন্যান্য ধরণের এসোসিয়েটোন)
  • নেভিগেশন প্রয়োজন

শ্রেণীর মধ্যে কাঠামোগত নির্ভরতা:

যদি আপনি উপাদান শ্রেণীর পুনরায় ব্যবহারের লক্ষ্য রাখেন তবে আপনার অপ্রয়োজনীয় নির্ভরতা এড়ানো উচিত এবং এই জাতীয় বন্ধ বৃত্তাকার কাঠামো এড়ানো উচিত।

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

বস্তুর মালিকানা:

একটি বস্তুর কি অন্যটির মালিকানা আছে? অথবা অন্যথায় বলা হয়েছে: একটি বস্তু যদি ধ্বংস হয় তবে অন্যটিও কি ধ্বংস হয়ে যাবে?

এই বিষয়টিকে স্নোম্যান গভীরভাবে সম্বোধন করেছিলেন, সুতরাং আমি এখানে এটি সম্বোধন করব না।

বস্তুর মধ্যে নেভিগেশন প্রয়োজন:

একটি শেষ ইস্যু নেভিগেশন প্রয়োজন। আমার প্রিয় উদাহরণ, যাক যৌগিক নকশা প্যাটার্ন এর চার গ্যাং

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

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

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

উপসংহার

নেভিগেশন প্রয়োজন হ্রাস করা হবে না। এটি কোনও কারণ ছাড়াই নয় যে ইউএমএল স্পষ্টভাবে এটি মডেলিং স্বরলিপিটিতে এড্রেস করেছেন। এবং হ্যাঁ, পুরোপুরি বৈধ পরিস্থিতি রয়েছে যেখানে বিজ্ঞপ্তি সংক্রান্ত রেফারেন্সগুলি প্রয়োজন।

একমাত্র বক্তব্যটি কখনও কখনও লোকেরা দ্রুত এমন দিকের দিকে ঝুঁকতে থাকে। সুতরাং সিদ্ধান্ত নেওয়ার আগে বা না যাওয়ার সিদ্ধান্ত নেওয়ার আগে জড়িত সমস্ত 3 টি বিষয় বিবেচনা করা উচিত।


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

@ ডকব্রাউন - যোগ্য হয়ে উঠলে আপনি এই প্রশ্নের জন্য সর্বদা একটি অনুগ্রহ রাখতে পারেন। :-)

1
@ গ্লেনএইচ:: এই উত্তরটি আরও বেশি ভোট দেবে না, কেবল স্নোম্যানের উত্তর (যার জন্য আমি মনে করি এটি প্রশ্নের কিছুটা হলেও মিস করে)।
ডক ব্রাউন

1
@ ডকব্রাউন - তবে রেপজ, মানুষ, রেপজ!

... এবং যদি আপনি পাবলিক-প্রাইভেট-সুরক্ষিতের মতো দৃশ্যমানতার পছন্দগুলি যুক্ত করেন তবে এটি আপনাকে 9 টি বিভিন্ন বিকল্প দেয় :)
মিকালাই

8

সাধারণত, বিজ্ঞপ্তি সংক্রান্ত রেফারেন্সগুলি খুব খারাপ ধারণা কারণ সেগুলির অর্থ বৃত্তাকার নির্ভরতা। বিজ্ঞপ্তি অবনতি কেন খারাপ তা আপনি ইতিমধ্যে জেনে গেছেন, তবে সম্পূর্ণতার জন্য, tl; ডাঃ সংস্করণটি যখনই ক্লাস এ এবং বি উভয় একে অপরের উপর নির্ভর করে তখন এ / বি ছাড়া A / B উভয়ই বোঝা / ঠিক করা / অনুকূলকরণ করা অসম্ভব impossible একই সাথে অন্যান্য শ্রেণি বোঝা / ঠিক করা / অনুকূলকরণ / ইত্যাদি। যা দ্রুত কোডবেসে নিয়ে যায় যেখানে আপনি সবকিছু পরিবর্তন না করে কোনও কিছু পরিবর্তন করতে পারবেন না।

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


6

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

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


5

[...] এমনকি গ্রাফগুলি এমন কিছু না করার পরামর্শ দেয়।

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

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


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

ক্রিস্টোফও আমি আপনার উদাহরণটিও পছন্দ করি! আমি নিশ্চিত ছিলাম না যে আমি আসলেই সঠিকভাবে প্রশ্নের উত্তর দিচ্ছি কিনা কারণ সম্ভবত এটি "বিজ্ঞপ্তিযুক্ত মালিকানা" সম্পর্কে আরও ছিল কেবলমাত্র পিছনের পয়েন্টারগুলির চেয়ে যে আমাদের উপরের / পিছনের দিকে কোনও ডাটা স্ট্রাকচারকে ট্র্যাভারস পেতে দিন। তবে আমি মূলত প্রশ্নের শেষ "গ্রাফ" অংশে সাড়া দিচ্ছিলাম।

2

ডুম 3 এ একটি পিতা-মাতার অবজেক্টের পয়েন্টার সহ শিশু অবজেক্টের উদাহরণ রয়েছে। বিশেষত এটি অনুপ্রবেশকারী তালিকা ব্যবহার করে । সংক্ষিপ্তসার হিসাবে, একটি অনুপ্রবেশকারী তালিকা লিঙ্কযুক্ত তালিকার মতো প্রতিটি নোডের তালিকায় নিজেই একটি পয়েন্টার থাকে।

সুবিধাদি:

  • যখন একই সাথে বেশ কয়েকটি তালিকায় অবজেক্টগুলি উপস্থিত থাকতে পারে, তবে তালিকা নোডের জন্য মেমরিটি কেবল একবার একবার বরাদ্দ করা এবং deallocated করা প্রয়োজন।

  • যখন কোনও অবজেক্টটি ধ্বংস করার প্রয়োজন হয়, আপনি প্রতিটি তালিকাগুলি রৈখিকভাবে অনুসন্ধান না করেই সহজেই এটির সমস্ত তালিকা থেকে সরিয়ে ফেলতে পারেন।

আমি মনে করি এটি একটি দুর্দান্ত নির্দিষ্ট পরিস্থিতি, তবে আমি যদি আপনার প্রশ্নটি বুঝতে পারি তবে এটি কোনও সন্তানের জন্য এটির প্যারেন্ট অবজেক্টের পয়েন্টারযুক্ত আইটেমের গ্রহণযোগ্য ব্যবহারের উদাহরণ।

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