এটি একটি গুরুত্বপূর্ণ বিষয়, তবে আইএমএইচও বোঝার জন্য মূল্যবান।
সমস্ত ওও ভাষা সর্বদা রেফারেন্সের অনুলিপি করে এবং কখনও 'অদৃশ্যভাবে' কোনও অনুলিপি করে না। এটা হবে অনেক কঠিন লেখার প্রোগ্রাম যদি OO যেমন পণ্য ভাষায় অন্য কোন উপায় কাজ করেন। উদাহরণস্বরূপ, ফাংশন এবং পদ্ধতিগুলি কখনই কোনও বিষয় আপডেট করতে পারে না। জাভা এবং বেশিরভাগ ওও ভাষাগুলি উল্লেখযোগ্য সংযোজনীয় জটিলতা ছাড়াই ব্যবহার করা প্রায় অসম্ভব।
একটি প্রোগ্রামে কোনও বস্তুর কিছু অর্থ হওয়ার কথা। উদাহরণস্বরূপ এটি বাস্তব শারীরিক বিশ্বে নির্দিষ্ট কিছু উপস্থাপন করে। একই জিনিসটির সাথে অনেকগুলি রেফারেন্স পাওয়া সাধারণত বোধগম্য হয়। উদাহরণস্বরূপ, আমার বাড়ির ঠিকানা অনেক লোক এবং সংস্থাকে দেওয়া যেতে পারে এবং সেই ঠিকানাটি সর্বদা একই শারীরিক অবস্থানকে বোঝায়। সুতরাং প্রথম বিষয়টি হল, অবজেক্টগুলি প্রায়শই এমন কিছু উপস্থাপন করে যা নির্দিষ্ট, বাস্তব বা কংক্রিট; এবং তাই একই জিনিসটির জন্য অনেকগুলি রেফারেন্স রাখতে সক্ষম হওয়া অত্যন্ত দরকারী। অন্যথায় প্রোগ্রাম লিখতে এটি আরও কঠিন হবে।
আপনি যখনই a
অন্য কোনও ফাংশনে আর্গুমেন্ট / প্যারামিটার হিসাবে পাস করেন, যেমন কল করা
foo(Dog aDoggy);
বা কোনও পদ্ধতি প্রয়োগ করার জন্য a
, অন্তর্নিহিত প্রোগ্রাম কোডটি একই অবজেক্টের দ্বিতীয় রেফারেন্স তৈরি করতে, রেফারেন্সের একটি অনুলিপি তৈরি করে।
তদ্ব্যতীত, অনুলিপি করা রেফারেন্স সহ কোডটি যদি অন্য থ্রেডে থাকে, তবে উভয় একই বস্তুকে অ্যাক্সেস করতে একযোগে ব্যবহার করা যেতে পারে।
সুতরাং বেশিরভাগ দরকারী প্রোগ্রামগুলিতে একই বস্তুর একাধিক উল্লেখ থাকবে, কারণ এটি বেশিরভাগ ওও প্রোগ্রামিং ভাষার শব্দার্থক।
এখন, যদি আমরা এটা আমার মনে হয় কারণ রেফারেন্স দ্বারা ক্ষণস্থায়ী হয় শুধুমাত্র প্রক্রিয়া অনেক OO যেমন পণ্য ভাষা (সি ++ সমর্থন উভয়) পাওয়া যায়, আমরা এটা 'অধিকার' বলে আশা করা হতে পারে ডিফল্ট আচরণ।
আইএমএইচও, কয়েকটি কারণের জন্য রেফারেন্সগুলি ব্যবহার করা সঠিক ডিফল্ট :
- এটি গ্যারান্টি দেয় যে দুটি পৃথক স্থানে ব্যবহৃত কোনও সামগ্রীর মান একই। দুটি বস্তুর দুটি পৃথক স্ট্রাকচার (অ্যারে, তালিকা ইত্যাদি) স্থাপন করার এবং কোনও বস্তুতে কিছু ক্রিয়াকলাপ করা হচ্ছে যা এটি পরিবর্তন করে Ima এটি ডিবাগ করার জন্য দুঃস্বপ্ন হতে পারে। আরো উল্লেখযোগ্য, এটা হল উভয় ডাটা স্ট্রাকচার একই বস্তুর বা প্রোগ্রাম একটি বাগ আছে।
- আপনি আনন্দের সাথে কোডটিকে কয়েকটি ফাংশনে রিফ্যাক্টর করতে পারেন, বা কয়েকটি ফাংশন থেকে কোডটিকে একটিতে একীভূত করতে পারেন, এবং শব্দার্থবিজ্ঞানের কোনও পরিবর্তন হয় না। যদি ভাষাটি রেফারেন্স শব্দার্থবিদ্যা সরবরাহ না করে তবে কোডটি সংশোধন করা আরও জটিল হবে।
দক্ষতার যুক্তিও রয়েছে; কোনও রেফারেন্স অনুলিপি করার চেয়ে পুরো বস্তুর অনুলিপি তৈরি করা কম দক্ষ। যাইহোক, আমি মনে করি এটি পয়েন্টটি মিস করে। একই বস্তুর একাধিক উল্লেখ আরও বেশি অর্থবোধ করে এবং ব্যবহার করা সহজ, কারণ এগুলি প্রকৃত দৈহিক বিশ্বের শব্দার্থবিজ্ঞানের সাথে মেলে।
সুতরাং, আইএমএইচও, একই জিনিসটির একাধিক উল্লেখ থাকার অর্থটি সাধারণত বোধগম্য হয়। অ্যালগরিদমের প্রসঙ্গে যে অস্বাভাবিক ক্ষেত্রে তা বোঝা যায় না, বেশিরভাগ ভাষাগুলি একটি 'ক্লোন' বা গভীর অনুলিপি তৈরির ক্ষমতা সরবরাহ করে। তবে এটি ডিফল্ট নয়।
আমি মনে করি যে সমস্ত লোকেরা যে তর্ক করে যে এটি ডিফল্ট হওয়া উচিত নয় এমন ভাষা ব্যবহার করছে যা স্বয়ংক্রিয় আবর্জনা সংগ্রহ সরবরাহ করে না। উদাহরণস্বরূপ, পুরানো ফ্যাশনযুক্ত সি ++। সেখানে সমস্যাটি হ'ল তাদের 'মৃত' অবজেক্টগুলি সংগ্রহ করার উপায় খুঁজে পাওয়া দরকার এবং যে জিনিসগুলি এখনও প্রয়োজন হতে পারে তাদের পুনরায় দাবি করা উচিত নয়; একই অবজেক্টে একাধিক উল্লেখ থাকা শক্ত করে তোলে।
আমি মনে করি, যদি সি ++ এর পর্যাপ্ত স্বল্প ব্যয়বহুল আবর্জনা সংগ্রহ করা থাকে, যাতে সমস্ত রেফারেন্সযুক্ত বিষয়গুলি আবর্জনা সংগ্রহ করা হয়, তবে বেশিরভাগ আপত্তি চলে যায়। এখনও কিছু কিছু ক্ষেত্রে যেখানে রেফারেন্স শব্দার্থবিদ্যা হবে না কি প্রয়োজন হয়। যাইহোক, আমার অভিজ্ঞতায়, এই পরিস্থিতিগুলি সনাক্ত করতে পারে এমন লোকেরা সাধারণত যে কোনওভাবে উপযুক্ত শব্দার্থবিজ্ঞান বাছাই করতে সক্ষম।
আমি বিশ্বাস করি যে সি ++ প্রোগ্রামে প্রচুর পরিমাণ কোড কোড জঞ্জাল সংগ্রহ পরিচালনা বা হ্রাস করতে পারে some তবে, এই ধরণের 'অবকাঠামোগত' কোড রচনা করা এবং বজায় রাখা ব্যয় যুক্ত করে; ভাষা ব্যবহারের সহজ করতে বা আরও শক্তিশালী করার জন্য এটি রয়েছে। সুতরাং, উদাহরণস্বরূপ গো ভাষা সি ++ এর কয়েকটি দুর্বলতা প্রতিকারের দিকে মনোনিবেশ করে তৈরি করা হয়েছে এবং আবর্জনা সংগ্রহ ছাড়া এর কোনও বিকল্প নেই।
এটি অবশ্যই জাভা প্রসঙ্গে অপ্রাসঙ্গিক। এটি খুব সহজে ব্যবহারের জন্য ডিজাইন করা হয়েছিল এবং তাই আবর্জনা সংগ্রহও রয়েছে। অতএব একাধিক রেফারেন্স থাকা হ'ল ডিফল্ট শব্দার্থক শব্দ এবং এটি তুলনামূলকভাবে সুরক্ষিত যে বস্তুর কোনও রেফারেন্স থাকাকালীন পুনরায় দাবি করা হয় না। অবশ্যই তারা কোনও ডেটা স্ট্রাকচার দ্বারা ধরে রাখা যেতে পারে কারণ প্রোগ্রামটি সঠিকভাবে পরিচ্ছন্ন হয় না যখন এটি কোনও বস্তুর সাথে সত্যই শেষ হয়।
সুতরাং, আপনার প্রশ্নটির চারপাশে ঘোরানো (কিছুটা সাধারণীকরণের সাথে), আপনি কখন একই বস্তুর একাধিক রেফারেন্স চান? প্রতিটি পরিস্থিতিতে আমি অনেক কিছু ভাবতে পারি। এগুলি বেশিরভাগ ভাষাগুলির প্যারামিটার পাস করার পদ্ধতির ডিফল্ট শব্দার্থক। আমি এটিকে প্রস্তাব দিই কারণ আসল বিশ্বে বিদ্যমান অবজেক্টগুলি পরিচালনা করার ডিফল্ট শব্দার্থবিজ্ঞানগুলি রেফারেন্সের মাধ্যমে হওয়া উচিত ('প্রকৃত অবজেক্টগুলি সেখানে রয়েছে)।
অন্য কোনও শব্দার্থবিজ্ঞান পরিচালনা করা আরও শক্ত হবে।
Dog a = new Dog("rover"); // initialise with name
DogList dl = new DogList()
dl.add(a)
...
a.setOwner("Mr Been")
আমি প্রস্তাব দিই যে "রোভার" এর dl
দ্বারা প্রভাবিত হওয়া উচিত setOwner
বা প্রোগ্রামগুলি লিখতে, বুঝতে, ডিবাগ করতে বা সংশোধন করা শক্ত হয়। আমি মনে করি বেশিরভাগ প্রোগ্রামাররা বিস্মিত হবে বা অন্যথায় হতাশ হবে।
পরে, কুকুরটি বিক্রি হয়:
soldDog = dl.lookupOwner("rover", "Mr Been")
soldDog.setOwner("Mr Mcgoo")
এই ধরণের প্রক্রিয়াকরণ সাধারণ এবং সাধারণ। সুতরাং রেফারেন্স শব্দার্থবিজ্ঞানগুলি ডিফল্ট কারণ এটি সাধারণত সর্বাধিক বোধ করে।
সংক্ষিপ্তসার: একই বস্তুর একাধিক উল্লেখ থাকা সর্বদা বোধগম্য।