बिना तरीकों के आप कक्षाओं को क्या कहते हैं?
उदाहरण के लिए,
class A
{
public string something;
public int a;
}
बिना किसी तरीके के ऊपर एक वर्ग है। क्या इस प्रकार के वर्ग का कोई विशेष नाम है?
बिना तरीकों के आप कक्षाओं को क्या कहते हैं?
उदाहरण के लिए,
class A
{
public string something;
public int a;
}
बिना किसी तरीके के ऊपर एक वर्ग है। क्या इस प्रकार के वर्ग का कोई विशेष नाम है?
जवाबों:
अधिकांश समय: एक विरोधी पैटर्न।
क्यों? क्योंकि यह "ऑपरेटर" कक्षाओं और डेटा संरचनाओं के साथ प्रक्रियात्मक प्रोग्रामिंग का सामना करता है। आप डेटा और व्यवहार को अलग करते हैं, जो बिल्कुल अच्छा OOP नहीं है।
अक्सर बार: एक डीटीओ (डेटा ट्रांसफर ऑब्जेक्ट)
व्यापार / डोमेन ऑब्जेक्ट से प्राप्त डेटा का आदान-प्रदान करने के लिए केवल डेटास्ट्रक्चर पढ़ें।
कभी-कभी: बस डेटा संरचना।
ठीक है, कभी-कभी, आपके पास डेटा को धारण करने के लिए वे संरचनाएँ होती हैं जो सिर्फ सादा और सरल होती हैं और इस पर कोई कार्य नहीं होता है। लेकिन तब मैं सार्वजनिक क्षेत्रों का उपयोग नहीं करूंगा लेकिन एक्सेसर्स (गेटर्स और सेटर)।
मैं इसे कॉल करूंगा struct
या record
क्योंकि इसका उपयोग डेटा स्टोरेज के लिए किया जाता है और यह उन भाषाओं के लिए बहुत सामान्य है जैसे C
आप वहां देख सकते हैं: संरचना (C प्रोग्रामिंग भाषा) । इसलिए व्यक्तिगत रूप से मैं struct
एक ऐसे वर्ग के बजाय उपयोग करना पसंद करूंगा जो अधिक उपयुक्त और पठनीय हो:
struct A
{
public string something;
public int a;
}
आमतौर पर उनका उपयोग डीटीओ (डेटा ट्रांसफर ऑब्जेक्ट) के रूप में किया जाता है जैसा कि दूसरों ने कहा है।
इन्हें प्लेन ओल्ड __ ऑब्जेक्ट्स (PO_Os) के रूप में जाना जाता है, जहाँ रिक्त जावा या CIL या CIL, या जो भी भाषा आप उपयोग कर रहे हैं।
यदि उन्हें संचार के लिए सरल डेटा ब्लॉक के रूप में उपयोग किया जा रहा है, तो उन्हें डेटा ट्रांसफर ऑब्जेक्ट्स (डीटीओ) के रूप में जाना जा सकता है ।
यदि वे बाह्य रूप से प्रदान किए गए कुछ डेटा का प्रतिनिधित्व कर रहे हैं, तो उन्हें Entities के रूप में जाना जा सकता है ।
मैं ऐसे वर्ग को एक परिवर्तनशील डेटा धारक कहूंगा, और कभी-कभी एक सामान्य रूप का उपयोग करूंगा:
class DataHolder<T>
{
public T dat;
}
ध्यान दें कि dat
एक संपत्ति के भीतर लपेटने से प्रदर्शन में गिरावट आएगी और कोई लाभ नहीं मिलेगा, क्योंकि ऐसा कुछ भी नहीं है जो एक संपत्ति एक्सेसर कर सकता है (फ़ील्ड पढ़ने / लिखने के अलावा) जो कुछ कार्यान्वयन को नहीं तोड़ेंगे। इसके अलावा, Interlocked
तरीकों का उपयोग करना आवश्यक हो सकता है dat
(या, यदि यह एक संरचना है, इसके साथ खेतों के साथ), लेकिन यह संभव नहीं होगा यदि dat
किसी संपत्ति में लपेटा गया हो।
ध्यान दें कि जब म्यूटेबल डेटा धारक प्रकारों के लिए उपयोगी हो सकते हैं (म्यूटेबल या नहीं) जिन्हें डेटा रखने की आवश्यकता होती है , तो वे डेटा इंटरचेंज के लिए उसी तरह से सुरक्षित रूप से उपयोग नहीं किए जा सकते हैं जो अपरिवर्तनीय प्रकार होंगे। उदाहरण के लिए, एक बयान की तरह:
myData = myCollection.GetData(myKey);
एक स्पष्ट अर्थ होगा यदि GetData
एक अपरिवर्तनीय वर्ग प्रकार या एक संरचना ("म्यूटेबल" या नहीं) लौटाया जाए जिसमें उत्परिवर्तित डेटा के संदर्भ नहीं थे। यदि यह एक उत्परिवर्तनीय वर्ग वस्तु लौटाता है, हालांकि, यह स्पष्ट नहीं होगा कि क्या उस वस्तु में किसी भी बदलाव को अंतर्निहित संग्रह द्वारा लगातार अनदेखा किया जाएगा, इसके परिणामस्वरूप उसे लगातार अपडेट किया जाएगा, या कुछ अप्रिय या अप्रत्याशित व्यवहार बैठक का कारण न तो वर्णन होगा।
यदि कोई संग्रहणीय वस्तु में संग्रह रिटर्न डेटा चाहता है, तो सही प्रतिमान अक्सर कुछ इस तरह होगा:
var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);
उस दृष्टिकोण का उपयोग करना, एक स्पष्ट निहितार्थ है जो संग्रह से डेटा के साथ आबादी का GetData
कारण होगा myData
, लेकिन myCollection
फ़ंक्शन पूरा होने के बाद इसका संदर्भ रखने की उम्मीद नहीं की जाएगी, और न ही इसे किसी अन्य उद्देश्य के लिए उपयोग किया जाएगा। StoreData
इसी तरह myData
एक संदर्भ रखने के बिना अपने स्वयं के आंतरिक डेटा संरचना को कॉपी जानकारी दे सकते हैं। ध्यान दें कि इस दृष्टिकोण का एक फायदा यह है कि यदि क्लाइंट कोड एक लूप के भीतर कई डेटा आइटम पढ़ रहा होगा, तो यह सुरक्षित रूप myData
से लूप के बाहर एक उदाहरण बना सकता है , और फिर उसी उदाहरण को हर बार पुन: उपयोग कर सकता है। इसी तरह, myCollection
नया उदाहरण बनाने के लिए बिना कुंजी से जुड़े ऑब्जेक्ट इंस्टेंस (पास-इन इंस्टेंस से डेटा की प्रतिलिपि बनाना) का पुन: उपयोग करने में सक्षम हो सकता है।