बिना तरीकों के आप कक्षाओं को क्या कहते हैं?


10

बिना तरीकों के आप कक्षाओं को क्या कहते हैं?

उदाहरण के लिए,

class A
{
  public string something;
  public int a;
}

बिना किसी तरीके के ऊपर एक वर्ग है। क्या इस प्रकार के वर्ग का कोई विशेष नाम है?


1
एक विधि-कम वर्ग?
चोसपांडियन

11
तकनीकी शब्द रिकॉर्ड या स्ट्रक्चर है
काइलिन फोथ

4
एक "संपत्ति बैग"
मार्टिन यॉर्क

किलियन: मैं जोड़े गए अर्थ के लिए "गौरवशाली संरचना" पसंद करता हूं।
जेसन

जवाबों:


23

अधिकांश समय: एक विरोधी पैटर्न।

क्यों? क्योंकि यह "ऑपरेटर" कक्षाओं और डेटा संरचनाओं के साथ प्रक्रियात्मक प्रोग्रामिंग का सामना करता है। आप डेटा और व्यवहार को अलग करते हैं, जो बिल्कुल अच्छा OOP नहीं है।

अक्सर बार: एक डीटीओ (डेटा ट्रांसफर ऑब्जेक्ट)

व्यापार / डोमेन ऑब्जेक्ट से प्राप्त डेटा का आदान-प्रदान करने के लिए केवल डेटास्ट्रक्चर पढ़ें।

कभी-कभी: बस डेटा संरचना।

ठीक है, कभी-कभी, आपके पास डेटा को धारण करने के लिए वे संरचनाएँ होती हैं जो सिर्फ सादा और सरल होती हैं और इस पर कोई कार्य नहीं होता है। लेकिन तब मैं सार्वजनिक क्षेत्रों का उपयोग नहीं करूंगा लेकिन एक्सेसर्स (गेटर्स और सेटर)।


4
मैं सभी को केवल सार्वजनिक गेटर्स / जावा में बसने वालों के साथ कक्षाएं करने के लिए हतोत्साहित करता हूं, यह मस्तिष्क-मृत है और कुछ कंटेनर सेटर / गेट्टर कोड (ग्लासफ़िश को देखकर) भी नहीं चलाएंगे, इसलिए या तो यह डिफ़ॉल्ट है या आपके पास एक है बग। मुझे विश्वास नहीं है कि OOP एनकैप्सुलेशन सही था, यह पता चला है, ज्यादातर समय, अधिकांश अनुप्रयोगों में, डीटीओ की न केवल आवश्यकता होती है, बल्कि वे सबसे अधिक बार उपयोग किए जाने वाले वर्ग हैं। इसलिए वे एंटीपैटर्न के कुछ भी हैं, मैं इसके बजाय "मूल बिल्डिंग ब्लॉक" शब्द का उपयोग करूंगा।
आदामअम

8
यदि आप कड़ाई से OO परिवेश में हैं तो शायद वे एक विरोधी प्रतिमान हैं। प्रोग्रामिंग दुनिया के बाकी हिस्सों के लिए, डेटा संरचनाएं जो कि खेतों के सरल विषम संग्रह हैं, विकल्पों पर एक स्पष्ट लाभ है, और यहां तक ​​कि एक प्रसिद्ध ओओ मेनस्टे में भी प्रोत्साहित किया गया है ।
तेलस्टिन

@ सलाम: आपने मुझे सही नहीं पाया। एक DTO एक एंटीपैटर्न नहीं है। कभी-कभी वे ऑब्जेक्ट पूरी तरह से ठीक होते हैं यदि वे डीटीओ हैं! और जब ग्लासफिश गेटर्स और सेटर को नहीं देखता है, तो इसका मतलब केवल यह है कि ग्लासफिश अच्छी तरह से लिखा नहीं गया है (हालांकि यह बिलियन एक्सेसर्स के बिना जावा में कठिन है)। यह कोड नहीं है, यह उपयोगी बॉयलरप्लेट है।
फाल्कन

4
त्वरित, @ अमदाम। किसी व्यक्ति को अमान्य मान पर फ़ील्ड सेट करना, बाद में पढ़ने पर कहर बरपाना। एक अपवाद फेंक दें ताकि आप अपराधी का पता लगा सकें। पहली बार आपको 1,000 जगहों पर उपयोग किए जाने वाले सार्वजनिक क्षेत्र के लिए कुछ करना होगा, आप एक सेटर की इच्छा करेंगे। सार्वजनिक क्षेत्रों में अपना स्थान होता है, लेकिन गेटटर / सेटर प्रतिमान अच्छे कारण के लिए लोकप्रिय है।
कार्ल बेवेलफेल्ट

@KarlBielefeldt: एक ग्लासफ़िश संस्करण में, मुझे परीक्षण (शर्तों के बिना) के रूप में एक सेटर कोड में एक एकल अपवाद था, जिसे कभी भी निष्पादित नहीं किया गया था। संपत्ति में एक निजी चर और दो सार्वजनिक गेट-एंड-सेटर थे। कंटेनर ने बस सेटर को रोक दिया। यदि वास्तव में किसी चीज का अमान्य मूल्य है, तो व्यक्तिगत रूप से मैं आदिम मूल्यों के बजाय टाइप कक्षाएं पसंद करता हूं, लेकिन शायद यह सिर्फ मेरे लिए है।
अादाम

9

मैं इसे कॉल करूंगा structया recordक्योंकि इसका उपयोग डेटा स्टोरेज के लिए किया जाता है और यह उन भाषाओं के लिए बहुत सामान्य है जैसे Cआप वहां देख सकते हैं: संरचना (C प्रोग्रामिंग भाषा) । इसलिए व्यक्तिगत रूप से मैं structएक ऐसे वर्ग के बजाय उपयोग करना पसंद करूंगा जो अधिक उपयुक्त और पठनीय हो:

struct A
{
  public string something;
  public int a;
}

आमतौर पर उनका उपयोग डीटीओ (डेटा ट्रांसफर ऑब्जेक्ट) के रूप में किया जाता है जैसा कि दूसरों ने कहा है।


4
संरचना के साथ समस्या यह है, कि "संरचना" कई भाषाओं में एक कीवर्ड है। उदाहरण के लिए C # मानों के प्रकारों को अलग-अलग शब्दार्थों के रूप में व्यवहार करता है। यह कुछ भाषाओं (पीएल / एसक्यूएल) में "रिकॉर्ड" के लिए भी सही है।
फाल्कन

5

इन्हें प्लेन ओल्ड __ ऑब्जेक्ट्स (PO_Os) के रूप में जाना जाता है, जहाँ रिक्त जावा या CIL या CIL, या जो भी भाषा आप उपयोग कर रहे हैं।

यदि उन्हें संचार के लिए सरल डेटा ब्लॉक के रूप में उपयोग किया जा रहा है, तो उन्हें डेटा ट्रांसफर ऑब्जेक्ट्स (डीटीओ) के रूप में जाना जा सकता है ।

यदि वे बाह्य रूप से प्रदान किए गए कुछ डेटा का प्रतिनिधित्व कर रहे हैं, तो उन्हें Entities के रूप में जाना जा सकता है ।


6
आप PODs के बारे में सोच रहे हैं - एक बहुत अलग विचार। पीओजेओ में स्पष्ट रूप से "व्यावसायिक तर्क" शामिल हैं, लेकिन विशेष रूपरेखा पर निर्भरता को बाहर करते हैं।
टॉम हॉकिन - 18:13 बजे

POD को विधियों के लिए अनुमति दी जाती है, कम से कम C ++ में। उनके पास केवल तुच्छ कंस्ट्रक्टर, विध्वंसक, कॉपी कंस्ट्रक्टर और असाइनमेंट कंस्ट्रक्टर, केवल सार्वजनिक डेटा सदस्य, कोई आधार वर्ग और कोई वर्चुअल फ़ंक्शन नहीं होना चाहिए। मूल रूप से, उन्हें बस सी संरचनाओं के साथ संगत होना होगा।
डिर्क होलसॉपल

2

मैं ऐसे वर्ग को एक परिवर्तनशील डेटा धारक कहूंगा, और कभी-कभी एक सामान्य रूप का उपयोग करूंगा:

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नया उदाहरण बनाने के लिए बिना कुंजी से जुड़े ऑब्जेक्ट इंस्टेंस (पास-इन इंस्टेंस से डेटा की प्रतिलिपि बनाना) का पुन: उपयोग करने में सक्षम हो सकता है।


0

संदर्भ के आधार पर, मैं उन्हें एंटिटीज कहता हूं। मेरे उबाऊ व्यावसायिक अनुप्रयोगों पर, वे आमतौर पर मेरे डीईआर के लिए 1: 1 का नक्शा बनाते हैं।


0

मैं इसे ए कहूंगा Schema

यह एक डेटाबेस तालिका या एक deserialised रिकॉर्ड, या एक DTO, आदि का प्रतिनिधित्व करने जैसे कई उपयोगों को शामिल करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.