প্রায় প্রতিটি প্রকল্পে কিছু সম্পাদনযোগ্য মডেল বা দস্তাবেজ রয়েছে এটির একটি শ্রেণিবদ্ধ কাঠামো। এটি বিভিন্ন সত্তার বেস-ক্লাস হিসাবে 'শ্রেণিবদ্ধ নোড' বাস্তবায়নের কাজে আসতে পারে। প্রায়শই সংযুক্ত-তালিকা (শিশু ভাইবোন, ২ য় মডেল) হ'ল প্রাকৃতিক উপায়ে অনেক শ্রেণীর গ্রন্থাগার বৃদ্ধি পায় তবে শিশুরা বিভিন্ন ধরণের হতে পারে এবং সাধারণত "গাছের মডেল " সাধারণত গাছ সম্পর্কে কথা বলার সময় আমরা বিবেচনা করি না।
আপনার প্রথম মডেলের একটি গাছের (নোড) আমার প্রিয় বাস্তবায়ন হ'ল একটি লাইন (সি # তে):
public class node : List<node> { /* props go here */ }
আপনার নিজস্ব ধরণের জেনেরিক তালিকা থেকে উত্তরাধিকারী (বা অন্য কোনও জেনেরিক সংগ্রহ-যা আপনার নিজস্ব-টাইপের উত্তরাধিকারী)। এক দিকে হাঁটা সম্ভব: নীচের দিকে মূলটি গঠন করুন (আইটেমগুলি তাদের পিতামাতাকে জানেন না)।
পিতামাতা কেবল গাছের
আপনি যে মডেলটির কথা উল্লেখ করেন নি, তা হ'ল এক যেখানে প্রতিটি সন্তানের পিতামাতার সাথে উল্লেখ রয়েছে:
null
|
+---------+---------------------------------+
| parent |
| root |
+-------------------------------------------+
| | |
+---------+------+ +-------+--------+ +--+-------------+
| parent | | parent | | parent |
| node 1 | | node 2 | | node 3 |
+----------------+ +----------------+ +----------------+
এই গাছের হাঁটাচলা কেবল অন্যভাবেই সম্ভব, সাধারণত এই সমস্ত নোডগুলি একটি সংগ্রহে সংরক্ষণ করা হবে (অ্যারে, হ্যাশটেবল, অভিধান ইত্যাদি) and এবং নোডটি হায়ারারিকাল অবস্থান ব্যতীত অন্যান্য মানদণ্ডে সংগ্রহগুলি অনুসন্ধান করে সন্ধান করা হবে the গাছ যা সাধারণত গুরুত্ব দেয় না।
কেবলমাত্র পিতামাতার গাছগুলি সাধারণত ডাটাবেস অ্যাপ্লিকেশনগুলিতে দেখা যায়। একটি নোডের শিশুদের "নির্বাচন করুন" যেখানে প্যারেন্টআইডি = এক্স "বিবৃতি রয়েছে তা সন্ধান করা বেশ সহজ। তবে আমরা খুব কমই এগুলিকে গাছ-নোড শ্রেণীর অবজেক্টগুলিতে রূপান্তরিত দেখতে পাই। স্টেটফুল (ডেস্কটপ) অ্যাপ্লিকেশনগুলিতে এগুলি বিদ্যমান ট্রি-নোড নিয়ন্ত্রণগুলিতে আবৃত হতে পারে। স্টেটহীন (ওয়েব) অ্যাপ্লিকেশনগুলিতে এমনকি এটি অসম্ভব হতে পারে। আমি ওআরএম-ম্যাপিং ক্লাস-জেনারেটরের সরঞ্জামগুলিকে নিজের সাথে (ছাগল) সম্পর্কযুক্ত টেবিলগুলির জন্য ক্লাস তৈরি করার সময় স্ট্যাক ওভারফ্লো ত্রুটি ছুঁড়ে ফেলেছি, তাই সম্ভবত এই গাছগুলি এতটা সাধারণ নয়।
দ্বি নির্দেশমূলক নাব্য গাছ
তবে বেশিরভাগ ব্যবহারিক ক্ষেত্রে, উভয় বিশ্বের সেরা থাকা সুবিধাজনক। নোডগুলিতে বাচ্চাদের একটি তালিকা রয়েছে এবং অতিরিক্ত তাদের পিতামাতাকেও জানেন: দ্বিপাক্ষিক নেভিগেশন গাছ।
null
|
+--------------------+--------------------+
| parent |
| root |
| child1 child2 child3 |
+--+------------------+----------------+--+
| | |
+---------+-----+ +-------+-------+ +---+-----------+
| parent | | parent | | parent |
| node1 | | node2 | | node3 |
| child1 child2 | | child1 child2 | | child1 child2 |
+--+---------+--+ +--+---------+--+ +--+---------+--+
| | | | | |
এটি বিবেচনা করার জন্য আরও অনেক দিক বয়ে আনে:
- পিতামাতার সংযোগ স্থাপন এবং লিঙ্কমুক্ত করতে কোথায়?
- ব্যবসায়ের যুক্তি যত্ন নিতে দিন এবং দিকটি নোডের বাইরে ছেড়ে দিন (তারা ভুলে যাবে!)
- নোডের বাচ্চাদের তৈরির জন্য পদ্ধতি রয়েছে (পুনরায় অর্ডার দেওয়ার অনুমতি দেয় না) (তাদের সিস্টেমে মাইক্রোসফ্টস পছন্দ ml
- নোডগুলি তাদের কনস্ট্রাক্টারে একটি পিতামাতাকে নিয়ে যায় (পুনরায় অর্ডার দেওয়ার অনুমতি দেয় না)
- সমস্ত যোগে (), সন্নিবেশ () সন্নিবেশ করুন () পদ্ধতি এবং তাদের নোডগুলির ওভারলোডগুলি (সাধারণত আমার পছন্দ)
- Persistance
- কীভাবে অবিচল অবস্থায় গাছটি চলতে হবে (উদাহরণস্বরূপ পিতামাতার লিঙ্কগুলি ছেড়ে দিন)
- ডি-সিরিয়ালাইজেশনের পরে দ্বি-মুখী সংযোগটি কীভাবে পুনর্নির্মাণ করবেন (সমস্ত পিতামাতাকে পুনরায় ডিসরিয়ালাইজেশন পরবর্তী ক্রিয়াকলাপ হিসাবে সেট করে)
- বিজ্ঞপ্তিগুলি
- স্ট্যাটিক মেকানিজম (ইসডার্টি ফ্ল্যাগ), বৈশিষ্ট্যগুলিতে পুনরাবৃত্তভাবে পরিচালনা করে?
- ইভেন্টগুলি, পিতামাতার মাধ্যমে বাচ্চাদের মাধ্যমে বা উভয় উপায়ে বুদবুদ করুন (উদাহরণস্বরূপ উইন্ডোজ বার্তা পাম্প বিবেচনা করুন)।
এখন প্রশ্নের উত্তর দেওয়ার জন্য , দ্বিপাক্ষিক নাব্য গাছগুলি (আমার ক্যারিয়ার এবং এখনও পর্যন্ত আমার ক্ষেত্রে) সর্বাধিক ব্যবহৃত হয়। উদাহরণস্বরূপ System.Windows. Forms.Control এর মাইক্রোসফটস বাস্তবায়ন, বা। নেট ফ্রেমওয়ার্কে System.Web.UI.Control, তবে প্রতিটি ডিওএম (ডকুমেন্ট অবজেক্ট মডেল) প্রয়োগে নোড থাকবে যা তাদের পিতামাতার পাশাপাশি একটি গণনাও জানে তাদের সন্তানদের। কারণ: বাস্তবায়নের স্বাচ্ছন্দ্যের উপর ব্যবহারের সহজতা। এছাড়াও, এগুলি সাধারণত আরও নির্দিষ্ট ক্লাসের জন্য বেস ক্লাস হয় (এক্সএমএমলনড ট্যাগ, বৈশিষ্ট্য এবং পাঠ্য ক্লাসের ভিত্তি হতে পারে) এবং এই বেস শ্রেণিগুলি জেনেরিক সিরিয়ালাইজেশন এবং ইভেন্ট-হ্যান্ডলিং আর্কিটেকচারগুলি রাখার প্রাকৃতিক জায়গা।
অনেকগুলি স্থাপত্যের কেন্দ্রবিন্দুতে গাছটি রয়েছে এবং অবাধে নেভিগেট করতে সক্ষম হওয়া মানে সমাধানগুলি দ্রুত কার্যকর করতে সক্ষম হওয়া।