मुझे स्कैला नहीं पता, लेकिन मुझे जावा पता है।
जावा में, और ऑब्जेक्ट, अक्सर एक विशिष्ट चीज़ मॉडल करेगा, उदाहरण: एक कार, या बी-पेड़ इत्यादि।
कोई ऑब्जेक्ट इस चीज़ के बारे में डेटा (जानकारी) संग्रहीत करेगा। किसी ऑब्जेक्ट में व्यवहार भी होगा जो डेटा के संबंध में किया जा सकता है (उदाहरण: कार के दरवाजे को खोलें) जो अक्सर चीज की स्थिति को बदल देगा (डेटा बदलें)। व्यवहार (विधि) हमें ऑब्जेक्ट के राज्य के बारे में जानकारी भी बता सकता है और राज्य को बदल नहीं सकता है। साथ ही, आंतरिक डेटा का सटीक रूप आमतौर पर छुपाया जाता है (अच्छी प्रैक्टिस द्वारा)।
अब किसी भी समय किसी ऑब्जेक्ट में सटीक राज्य होगा।
तो अगर हम एक बाइनरी पेड़ वस्तु के बारे में सोचते हैं। हम एक द्विआधारी पेड़ (पूर्णांकों युक्त) कि वास्तव में इस तरह दिखता है हो सकता है:
4
/ \
2 1
/ /\
1 3 1
तो किसी भी बिंदु समय में यह निश्चित मूल्यों के साथ नोड्स, कुछ मायनों में संलग्न की एक निश्चित संख्या के लिए जा रहा है पर।
अब हमें यह तय करने की आवश्यकता है कि हमारे बाइनरी पेड़ के बारे में जानकारी कैसे संग्रहीत करें। यह प्रत्येक बाइनरी पेड़ वस्तु में आंतरिक रूप से किया जाएगा।
तो हम जानते हैं कि प्रत्येक बाइनरी पेड़ को कुछ नोड्स बनाने जा रहे हैं।
तो हमें नोड्स के बारे में जानकारी संग्रहीत करने के कुछ तरीके की आवश्यकता होगी। अब नोड्स को स्टोर करने की ज़रूरत है कि वे किस मूल्य को पकड़ते हैं और साथ ही उनके पास कौन से बाएं/दाएं बच्चे हैं। क्योंकि उनमें से एक से अधिक जानकारी हैं, हमें इन्हें वस्तुओं के रूप में स्टोर करने की आवश्यकता होगी।
तो प्रत्येक नोड ऑब्जेक्ट को मूल्य के लिए चर होना आवश्यक होगा, एक चर जो हमें बताता है कि उसका बायां बच्चा क्या है (यदि कोई है), और उसके लिए सही बच्चा है।
तो एक नोड युक्त पूर्णांक मूल्यों के लिए हम जा सकते हैं:
class Node {
int value;
Node left;
Node right;
}
अब नहीं सभी नोड्स बाईं या दाईं बच्चे (या किसी भी बच्चों को सभी) होगा। बाएं बच्चे की कमी को बाएं चर द्वारा दर्शाया जाता है जिसमें वास्तविक नोड का संदर्भ देने के बजाय मूल्य 'शून्य' होता है।
उपर्युक्त कोड सामान्य स्थिति में बिना किसी नोड का प्रतिनिधित्व करता है, लेकिन हमारे द्वारा बनाए गए एक विशेष नोड के पास 'मान', 'बाएं' और 'दाएं' चर के लिए एक विशेष मान होगा।
अब हम जानते हैं कि एक बाइनरी पेड़ कई नोड्स से बना है। यह रूट नोड के साथ शुरू होता है। और फिर रूट नोड में केवल उस जानकारी के बारे में जानकारी होगी जिसमें नोड्स इसके नीचे हैं (इसके बच्चे)।
class BinaryTree {
Node root;
}
लेकिन हम भी तो हम उनके साथ कुछ दिलचस्प बातें कर सकते हैं हमारे द्विआधारी पेड़ के (यानी। वस्तुओं) कुछ व्यवहार देने के लिए चाहता हूँ। आखिरकार, हम बाइनरी पेड़ को वैसे भी क्यों चाहते हैं - ताकि हम इसके साथ कुछ उपयोगी कर सकें!
सबसे पहले हमें "कन्स्ट्रक्टर" की आवश्यकता है ताकि हम एक बाइनरी पेड़ ऑब्जेक्ट बना सकें, और इसे कुछ प्रारंभिक मानों पर सेट कर सकें। तो हम सिर्फ हमारे बाइनरी पेड़ खाली होने शुरू कर देंगे। हम 'रूट' परिवर्तनीय शून्य होने के द्वारा इसका प्रतिनिधित्व करते हैं। इसका मतलब है कि हमारे पास जड़ भी नहीं है! तो यह खाली है।हम एक विधि (एक समारोह जो एक वर्ग/वस्तु के अंतर्गत आता है) को छोड़कर हम इसे वर्ग को उसी नाम देने के रूप में एक ही रूप में एक निर्माता लिखें:
class BinaryTree {
Node root;
BinaryTree() {
root = null; // make it so that newly made objects start off being empty
}
}
हम शायद हमारे द्विआधारी देने के लिए चाहता हूँ वृक्ष कुछ व्यवहार/विधियों को ऑब्जेक्ट करता है ताकि हम वास्तव में जो भी बाइनरी पेड़ चाहते हैं उसका निर्माण कर सकें। केवल खाली पेड़ बनाने में सक्षम होने और उन्हें बदलने में शायद उपयोगी नहीं होगा!
तो हम एक addLeftChild (नोड addFrom, int मान), और addRightChild (नोड addFrom, int मान), विधियों बना सकते हैं। AddLeftChild दिए गए मान (और कोई बच्चा नहीं) वाला एक नया नोड बना देगा, और इसे एडफ्रॉम द्वारा दिए गए नोड का बायां बच्चा बना देगा, लेकिन केवल अगर 'एडफ्रॉम' नोड में पहले से ही बाएं बच्चे नहीं हैं।
class BinaryTree {
Node root;
BinaryTree() {
root = null; // make it so that newly made objects start off being empty
}
Node addLeftChild(Node addFrom, int value) {
// change the binary tree's state somehow to achieve this
}
Node addRightChild(Node addFrom, int value) {
// change the binary tree's state somehow to achieve this
}
}
हम यह भी एक नया रूट नोड, addRoot (पूर्णांक मान) को जोड़ने के लिए एक तरीका है हो सकता है, इसलिए जब हम पहली बार एक द्विआधारी पेड़ बना हम एक रूट नोड जोड़ सकते हैं। नोड्स को हटाने के लिए आपके पास शायद विधियों (व्यवहार) भी होंगे। आपके पास मूल्य/नोड्स के लिए पेड़ को खोजने के लिए या पेड़ के बारे में जानकारी देने के तरीके हो सकते हैं (उदाहरण: गहराई, नोड्स की संख्या)।
तब हम वास्तव में द्विआधारी पेड़ वस्तुओं बनाने के लिए कुछ कोड लिख सकते हैं, किसी तरह से उनके साथ कैसा व्यवहार, जैसे:
// this is some main method,etc
BinaryTree ourBT = new BinaryTree(); // make an new binary tree
// remember these start off empty
Node rootNode; // variable so we can tell
// later add methods which node to add from
rootNode = ourBT.addRoot(4);
यह हमें इस अब तक देना होगा इस द्विआधारी पेड़ ourBT कहा जाता है (सिर्फ एक रूट के रूप में नोड)
4
तो हम जा सकते हैं:
ourBT.addLeftChild(rootNode, 3); // remember the parameter rootNode refers
// to the root node we just added before
जो हमारे द्विआधारी tre छोड़ना होगा इस राज्य में ई:
4
/
3
तो हम जा सकते हैं:
4
/\
3 1
तो हमारे द्विआधारी पेड़ हम कर सकते थे के निर्माण के बाद:
ourBT.addRightChild(rootNode, 1);
जो हमारे द्विआधारी पेड़ इस राज्य में छोड़ना होगा हो सकता है कि इसके साथ कुछ और दिलचस्प चीजें करें (उदाहरण: खोज, हटाने)
यह शायद सबसे अच्छा एक्सा नहीं है mple, लेकिन उम्मीद है कि मैंने आपको थोड़ा सा अंतर्दृष्टि दी है कि ओओ शैली में कस्टम डेटा संरचनाएं कैसे लिखी जाती हैं।
यहां वास्तविक प्रश्न क्या है? ओओ में बी-पेड़ कैसे लागू किए जाते हैं? –
नहीं। ओओ में यह या रिलाटिन क्या है। यह विरासत नहीं है, न ही रचना ... क्या यह कुछ है? – Bruna
प्रश्न मेरे लिए पर्याप्त स्पष्ट लगता है: एक ऑब्जेक्ट उन्मुख फैशन में उपर्युक्त विशेषताओं वाला एक पेड़ कैसे मॉडल करता है? –