2012-09-26 20 views
6

http://www.cs.cornell.edu/courses/cs211/2006sp/Lectures/L08-abstraction/08_abstraction.htmlअमूर्त बनाम अमूर्त वर्ग

अमूर्त दो स्वादों में आता है। एक कार्य अबास्ट्रक्शन है और दूसरा डेटा अबास्ट्रक्शन है। लेकिन अमूर्त वर्ग कहां फिट बैठते हैं? जहां तक ​​मैं देखता हूं, अमूर्त वर्ग एक पूरी तरह से अलग अवधारणा हैं और भले ही नाम से पता चलता है कि ओओपी सिद्धांतों के साथ इसका कुछ संबंध है।

क्या कोई इस पर कुछ प्रकाश डाल सकता है?

+0

http://www.javacoffeebreak.com/faq/faq0084.html। –

+0

@ crowso- क्या आप अभी तक उत्तरों के साथ satiesfied नहीं हैं? कृपया उत्तर में से एक को स्वीकार करें –

उत्तर

2

Wiki यह बहुत ठीक

डेटा एब्सट्रैक्शन

डाटा अमूर्त डालता एक डेटा प्रकार का सार गुण और उसके कार्यान्वयन की ठोस जानकारी के बीच एक स्पष्ट जुदाई लागू करता है। अमूर्त गुण वे हैं जो क्लाइंट कोड के लिए दृश्यमान होते हैं जो डेटा प्रकार का उपयोग करते हैं-डेटा प्रकार के लिए इंटरफ़ेस-जबकि ठोस कार्यान्वयन पूरी तरह से निजी रखा जाता है, और वास्तव में बदल सकता है, उदाहरण के लिए समय के साथ दक्षता में सुधार शामिल करना। विचार यह है कि इस तरह के परिवर्तन क्लाइंट कोड पर कोई प्रभाव नहीं पड़ता है, क्योंकि उनमें अमूर्त व्यवहार में कोई अंतर नहीं है। उदाहरण के लिए, कोई एक सारणी डेटा प्रकार को परिभाषित कर सकता है जिसे लुकअप टेबल कहा जाता है जो विशिष्ट रूप से मानों के साथ कुंजी को जोड़ता है, और जिसमें उनकी संबंधित कुंजी निर्दिष्ट करके मूल्यों को पुनर्प्राप्त किया जा सकता है। ऐसी लुकअप टेबल को विभिन्न तरीकों से कार्यान्वित किया जा सकता है: हैश टेबल, बाइनरी सर्च पेड़, या यहां तक ​​कि एक सरल रैखिक सूची (कुंजी: वैल्यू) जोड़े। जहां तक ​​ग्राहक कोड का संबंध है, इस प्रकार के सार गुण प्रत्येक मामले में समान हैं।

उदाहरण के लिए नमूना जावा खंड को कुछ आम खेतों "जानवरों" को उनके भूख और भोजन के साधारण पहलुओं के मॉडल के लिए उपयुक्त अमूर्तता के स्तर पर प्रतिनिधित्व करने के लिए विचार करें। यह दोनों जानवर के राज्य और अपने कार्यों का प्रतिनिधित्व करने के लिए एक पशु वर्ग की परिभाषा:

public class Animal extends LivingThing 
{ 
    private Location loc; 
    private double energyReserves; 

    public boolean isHungry() { 
     return energyReserves < 2.5; 
    } 
    public void eat(Food f) { 
     // Consume food 
     energyReserves += f.getCalories(); 
    } 
    public void moveTo(Location l) { 
     // Move to new location 
     loc = l; 
    } 
} 
उपरोक्त परिभाषा के साथ

, एक प्रकार पशु की वस्तुओं को बनाने और इस तरह उनके तरीकों कह सकते हैं:

thePig = new Animal(); 
theCow = new Animal(); 
if (thePig.isHungry()) { 
    thePig.eat(tableScraps); 
} 
if (theCow.isHungry()) { 
    theCow.eat(grass); 
} 
theCow.moveTo(theBarn); 
0

सामान्य रूप से ऑब्जेक्ट्स कार्यक्षमता के साथ डेटा को गठबंधन करते हैं, और एक अमूर्त वर्ग उसमें कोई अपवाद नहीं है। कुछ मामलों में, प्रदान किया गया अमूर्त लगभग शुद्ध डेटा है, केवल कार्यों तक पहुंच प्रदान करने के लिए कार्य (उदाहरण के लिए, संग्रह कक्षाएं)। अन्य मामले लगभग विपरीत हैं (उदाहरण के लिए, सी ++ में एक मजेदार द्वारा प्रदान किया गया अमूर्त आम तौर पर एक समारोह है)।

निश्चित रूप से, बहुत अधिक चरम सीमाएं हैं - कई (अधिकांश?) कक्षाएं उनके बीच कहीं गिरती हैं।

+0

हाँ यह मेरा तर्क है। लेकिन आपने अमूर्त वर्ग और अमूर्त अवधारणा के बारे में उल्लेख नहीं किया है कि वे दोनों एक जैसे हैं या अलग हैं? – crowso

+0

@ user581544: मेरा मुद्दा यह है कि एक अमूर्त वर्ग * * अलग-अलग डिग्री के लिए दोनों या दोनों का प्रतिनिधित्व कर सकता है। –

5

ये बहुत अलग अवधारणाएं हैं।

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

सार कक्षाएं (कम से कम जावा में) इंटरफेस और पूर्ण ओओपी कक्षाओं के बीच मिश्रण हैं। एक इंटरफ़ेस उन विधियों को परिभाषित करता है जो किसी भी विस्तारित वर्ग के पास होना चाहिए, यह कोड में एक समझौता है कि यह इंटरफ़ेस को सही तरीके से कार्यान्वित करेगा और यह सुनिश्चित करेगा कि सबकुछ अपेक्षित रूप से काम करेगा।एक अमूर्त वर्ग में इन खाली विधियों (समझौतों) हैं और इन्हें पूरी तरह कार्यान्वित तरीकों से भी लागू किया जा सकता है।

संबंधित मुद्दे