वर्ग कार्यान्वयन फ़ाइल: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(7 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ]] में, क्लास इम्प्लीमेंटेशन फ़ाइल का उपयोग अक्सर [[ विधि (कंप्यूटर प्रोग्रामिंग) ]] के लिए कार्यान्वयन कोड को शामिल करने के लिए किया जाता है। [[ वर्ग (कंप्यूटर प्रोग्रामिंग) ]] की विधि (एस)। C और C++ जैसी प्रोग्रामिंग लैंग्वेज इन कार्यान्वयन फ़ाइलों का उपयोग करती हैं ताकि इन विधियों के इंटरफ़ेस और कार्यान्वयन को अलग किया जा सके।<ref>
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग | ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] में, वर्ग कार्यान्वयन फ़ाइल का उपयोग अधिकाशतः [[ विधि (कंप्यूटर प्रोग्रामिंग) |वर्ग (कंप्यूटर प्रोग्रामिंग) की विधि]][[ विधि (कंप्यूटर प्रोग्रामिंग) | (s)]] के लिए कार्यान्वयन कोड को सम्मिलित करने के लिए किया जाता है। सी और सी++ जैसी प्रोग्रामिंग भाषा इन कार्यान्वयन फ़ाइलों का उपयोग करती हैं | जिससे इन विधियों के अंतरापृष्ठ और कार्यान्वयन को अलग किया जा सके। <ref>
{{cite web
{{cite web
| access-date = 2013-05-07
| access-date = 2013-05-07
Line 9: Line 9:
}}
}}
</ref>
</ref>
 
== अभिप्रेरण ==
'''<br />लाइब्रेरी से कोई पुस्तकालय भी शामिल हो सकता है जिसका उपयोग फ़ाइल में घोषित विधियों में'''
इस संरचना का उपयोग करते हुए, [[वर्ग परिभाषा]] फ़ाइल भी बनाई जाती है | जिसमें वर्ग और उसके सदस्यों की घोषणा होती है। यदि वर्ग परिभाषा को सम्मिलित किया गया है और इसके विधियों के लिए कार्यान्वयन फ़ाइल उपलब्ध है, तो उपयोगकर्ता कक्षा के [[वस्तु (कंप्यूटर विज्ञान)|ऑब्जेक्ट (कंप्यूटर विज्ञान)]] को इंस्टेंस (कंप्यूटर विज्ञान) कर सकता है। इस संरचना का उद्देश्य कार्यान्वयन कोड को छिपाकर रखना है | किन्तु उपयोगकर्ता को रचना देखने की अनुमति देना है।<ref>
== प्रेरणा ==
इस संरचना का उपयोग करते हुए, [[वर्ग परिभाषा]] फ़ाइल भी बनाई जाती है जिसमें वर्ग और उसके सदस्यों की घोषणा होती है। यदि वर्ग परिभाषा को शामिल किया गया है और इसके तरीकों के लिए कार्यान्वयन फ़ाइल उपलब्ध है, तो उपयोगकर्ता कक्षा के [[वस्तु (कंप्यूटर विज्ञान)]] को इंस्टेंस (कंप्यूटर विज्ञान) कर सकता है। इस संरचना का उद्देश्य कार्यान्वयन कोड को छिपाकर रखना है, लेकिन उपयोगकर्ता को डिज़ाइन देखने की अनुमति देना है।<ref>
{{cite web
{{cite web
| access-date = 2013-05-07
| access-date = 2013-05-07
Line 33: Line 31:
| url = https://archive.org/details/programmingios40000neub
| url = https://archive.org/details/programmingios40000neub
}}
}}
</ref> उपयोगकर्ता किसी वस्तु (कंप्यूटर विज्ञान) के सार्वजनिक इंटरफ़ेस का उपयोग करते हैं ताकि वस्तुओं को यथासंभव सरल बनाया जा सके, यह सुनिश्चित किया जा सके कि क्लाइंट कोड वर्ग के कार्यान्वयन के अनावश्यक विवरण के साथ उपयोगकर्ता को विचलित न करे।<ref>
</ref> उपयोगकर्ता किसी ऑब्जेक्ट (कंप्यूटर विज्ञान) के सार्वजनिक अंतरापृष्ठ का उपयोग करते हैं | जिससे वस्तुओं को यथासंभव सरल बनाया जा सके और यह सुनिश्चित किया जा सके कि क्लाइंट कोड वर्ग के कार्यान्वयन के अनावश्यक विवरण के साथ उपयोगकर्ता को विचलित न करे।<ref>
{{cite web
{{cite web
| access-date = 2013-05-07
| access-date = 2013-05-07
Line 43: Line 41:
}}
}}
</ref>
</ref>
यह उपयोगकर्ता को प्रभावी रूप से कक्षा का उपयोग करने के लिए आवश्यक जानकारी की अनुमति देता है, लेकिन उसे संकलित कोड को नुकसान पहुँचाने से रोकता है।<ref>
 
यह उपयोगकर्ता को प्रभावी रूप से कक्षा का उपयोग करने के लिए आवश्यक जानकारी की अनुमति देता है, किन्तु उसे संकलित कोड को हानि पहुँचाने से रोकता है।<ref>
{{cite web
{{cite web
| access-date = 2013-05-07
| access-date = 2013-05-07
Line 51: Line 50:
}}
}}
</ref>
</ref>
== एक वर्ग कार्यान्वयन फ़ाइल की संरचना ==
== एक वर्ग कार्यान्वयन फ़ाइल की संरचना ==
कार्यान्वयन फ़ाइल का उपयोग [[सी ++ प्रोग्रामिंग भाषा]]| में किया जाता है कार्यान्वयन से इंटरफ़ेस को विभाजित करने के लिए कक्षा परिभाषा बनाते समय सी ++ प्रोग्रामिंग। शीर्षलेख फ़ाइल कक्षा के सभी सी ++ वर्गों (विधियों) और सी ++ कक्षाओं (फ़ील्ड) की घोषणा करेगी।<ref>
कार्यान्वयन से इंटरफ़ेस को विभाजित करने के लिए एक वर्ग परिभाषा बनाते समय एक कार्यान्वयन फ़ाइल का उपयोग [[सी ++ प्रोग्रामिंग भाषा|सी++ प्रोग्रामिंग भाषा]] में किया जाता है। शीर्षलेख फ़ाइल कक्षा के सभी सदस्य कार्यों (विधियों) और डेटा विधियों (फ़ील्ड) की घोषणा करेगी। <ref>
{{cite web
{{cite web
| access-date = 2013-05-07
| access-date = 2013-05-07
Line 78: Line 75:
| url        = http://www.codeproject.com/Articles/48575/How-to-define-a-template-class-in-a-h-file-and-imp
| url        = http://www.codeproject.com/Articles/48575/How-to-define-a-template-class-in-a-h-file-and-imp
}}
}}
</ref> कार्यान्वयन फ़ाइल में हेडर फ़ाइल में घोषित विधियों की वास्तविक परिभाषा या स्रोत कोड होगा। यह फ़ाइल हेडर ब्लॉक से शुरू हो सकती है, जो टिप्पणियां प्रदान करती है जो परिभाषित वर्ग के उद्देश्य का वर्णन करती है और वास्तविक फ़ाइल के निर्माण के बारे में कोई भी विवरण, जैसे कि फ़ाइल के लेखक और फ़ाइल को बनाया गया था।<ref>
</ref>  
 
कार्यान्वयन फ़ाइल में हेडर फ़ाइल में घोषित विधियों की वास्तविक परिभाषा या स्रोत कोड होगा। यह फ़ाइल हेडर ब्लॉक से प्रारंभ हो सकती है | जो टिप्पणियां प्रदान करती है | जो परिभाषित वर्ग के उद्देश्य का वर्णन करती है और वास्तविक फ़ाइल के निर्माण के बारे में कोई भी विवरण, जैसे कि फ़ाइल के लेखक और फ़ाइल को बनाया गया था।<ref>
{{cite web
{{cite web
| access-date = 2013-05-07
| access-date = 2013-05-07
Line 85: Line 84:
| url        = http://www.itechtalk.com/thread1517.html
| url        = http://www.itechtalk.com/thread1517.html
}}
}}
</ref>
</ref> इसमें सी++ मानक लाइब्रेरी से कोई लाइब्रेरी भी सम्मिलित हो सकता है | जिसका उपयोग फ़ाइल में घोषित विधियों में से किसी के द्वारा किया जाएगा। वर्ग कार्यान्वयन फाइल में सामान्यतः संबंधित हेडर फाइल को सम्मिलित करने के लिए रेखा होगी (नीचे उदाहरण देखें)।
इसमें सी ++ मानक लाइब्रेरी से कोई पुस्तकालय भी शामिल हो सकता है जिसका उपयोग फ़ाइल में घोषित विधियों में से किसी के द्वारा किया जाएगा। क्लास इम्प्लीमेंटेशन फाइल में आमतौर पर संबंधित हेडर फाइल को शामिल करने के लिए लाइन होगी (नीचे उदाहरण देखें)।
 
=== '''सी++ में उदाहरण''' ===


=== सी ++ === में उदाहरण
उदाहरण वर्ग नामक एक वर्ग होगा <code>उदाहरण वर्ग</code>. इस सी++ फाइल की हेडर फाइल का नाम उदाहरण वर्ग.h होगा और कार्यान्वयन फाइल उदाहरण वर्ग.cc होगी।<ref>
उदाहरण के रूप में एक वर्ग कहा जाएगा <code>ExampleClass</code>. इस C++ फाइल की हेडर फाइल का नाम example_class.h होगा और इम्प्लीमेंटेशन फाइल example_class.cc होगी।<ref>
{{cite web
{{cite web
| access-date = 2013-05-07
| access-date = 2013-05-07
Line 108: Line 107:
}}
}}
</ref>
</ref>
example_class.cc की संरचना का उदाहरण इस तरह दिखेगा:
 
उदाहरण वर्ग.cc की संरचना का उदाहरण इस तरह दिखेगा |
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
#include "example_class.h"
#include "example_class.h"
Line 119: Line 119:


</syntaxhighlight>
</syntaxhighlight>
इस उदाहरण में, कार्यों के कार्यान्वयन को छोड़ दिया गया है, लेकिन कार्यों को इस तरह example_class.h में घोषित किया जाना चाहिए:<ref>
इस उदाहरण में, कार्यों के कार्यान्वयन को छोड़ दिया गया है | किन्तु कार्यों को इस तरह उदाहरण वर्ग.h में घोषित किया जाना चाहिए |<ref>
{{cite web
{{cite web
| access-date = 2013-05-07
| access-date = 2013-05-07
Line 139: Line 139:
</syntaxhighlight>
</syntaxhighlight>


 
=== [[ उद्देश्य सी | '''उद्देश्य सी''']] '''में उदाहरण''' ===
<nowiki>===</nowiki> [[ उद्देश्य सी ]] === में उदाहरण
वर्ग कार्यान्वयन फ़ाइल को कैसे संरचित किया जाएगा इसका एक और उदाहरण ऑब्जेक्टिव-सी के साथ देखा जा सकता है | जिसका उपयोग [[iOS|आईओएस]] प्रोग्रामिंग में किया जाता है।<ref>
वर्ग कार्यान्वयन फ़ाइल को कैसे संरचित किया जाएगा इसका एक और उदाहरण ऑब्जेक्टिव-सी के साथ देखा जा सकता है, जिसका उपयोग [[iOS]] प्रोग्रामिंग में किया जाता है।<ref>
{{cite book
{{cite book
| last = Neuberg
| last = Neuberg
Line 154: Line 153:
}}
}}
</ref>
</ref>
यह उदाहरण exampleClass का उपयोग करेगा। इन कार्यान्वयन फ़ाइलों का उपयोग करते समय सी ++ और ऑब्जेक्टिव-सी के बीच उल्लेखनीय अंतर फाइलों के अंत में उपयोग किए जाने वाले एक्सटेंशन हैं। C++ में यह .cpp होगा<ref>
 
यह उदाहरण वर्ग का उपयोग करेगा। इन कार्यान्वयन फ़ाइलों का उपयोग करते समय सी++ और ऑब्जेक्टिव-सी के बीच उल्लेखनीय अंतर फाइलों के अंत में उपयोग किए जाने वाले एक्सटेंशन हैं। सी++ में यह .cpp होगा <ref>
{{cite web
{{cite web
| access-date = 2013-05-07
| access-date = 2013-05-07
Line 160: Line 160:
| url        = http://pages.cs.wisc.edu/~hasti/cs368/CppTutorial/NOTES/CLASSES-INTRO.html
| url        = http://pages.cs.wisc.edu/~hasti/cs368/CppTutorial/NOTES/CLASSES-INTRO.html
}}
}}
</ref>
</ref> और उद्देश्य-सी में यह .m होगा |<ref>
और Objective-C में यह .m होगा,<ref>
{{cite book
{{cite book
| last = Neuberg
| last = Neuberg
Line 173: Line 172:
| url = https://archive.org/details/programmingios40000neub
| url = https://archive.org/details/programmingios40000neub
}}
}}
</ref>
</ref> किन्तु दोनों अपनी हैडर फ़ाइल के लिए एक ही .h एक्सटेंशन का उपयोग करेंगे | <ref>
लेकिन दोनों अपनी हैडर फ़ाइल के लिए एक ही .h एक्सटेंशन का उपयोग करेंगे हेडर फाइल<ref>
{{cite web
{{cite web
| access-date = 2013-05-07
| access-date = 2013-05-07
Line 192: Line 190:
| url = https://archive.org/details/programmingios40000neub
| url = https://archive.org/details/programmingios40000neub
}}
}}
</ref>
</ref> जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है। यह उद्देश्य-सी में उदाहरण वर्ग.h का उदाहरण है |<syntaxhighlight lang="objc">
जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है।
 
यह Objective-C में exampleClass.h का उदाहरण है:
<syntaxhighlight lang="objc">
#import <UIKit/UIKit.h>
#import <UIKit/UIKit.h>


Line 205: Line 199:
@end
@end
</syntaxhighlight>
</syntaxhighlight>
यह उद्देश्य-सी में वर्ग की कार्यान्वयन फ़ाइल exampleclass.m का उदाहरण है:
यह उद्देश्य-सी में वर्ग की कार्यान्वयन फ़ाइल उदाहरण वर्ग.m का उदाहरण है |
<syntaxhighlight lang="objc">
<syntaxhighlight lang="objc">
#import "ExampleClass.h"
#import "ExampleClass.h"
Line 215: Line 209:
@end
@end
</syntaxhighlight>
</syntaxhighlight>
== यह भी देखें ==
== यह भी देखें ==
* सी ++ कक्षाएं
* सी++ वर्ग
*हेडर फाइल
*हेडर फाइल
*सोर्स कोड
*सोर्स कोड
* सी ++ मानक पुस्तकालय
* सी++ मानक लाइब्रेरी
*उद्देश्य सी
*उद्देश्य सी


Line 231: Line 223:
* [http://my.safaribooksonline.com/book/programming/iphone/9781449397302/objective-c-classes/_header_file_and_implementation_file Header File and Implementation File]
* [http://my.safaribooksonline.com/book/programming/iphone/9781449397302/objective-c-classes/_header_file_and_implementation_file Header File and Implementation File]


{{DEFAULTSORT:Class Implementation File}}[[Category: वर्ग (कंप्यूटर प्रोग्रामिंग)]] [[Category: वस्तु-उन्मुख प्रोग्रामिंग भाषाएँ]] [[Category: सी ++]] [[Category: ऑब्जेक्टिव-सी कोड के उदाहरण वाले लेख]]
{{DEFAULTSORT:Class Implementation File}}
 
 


[[Category: Machine Translated Page]]
[[Category:Created On 15/05/2023|Class Implementation File]]
[[Category:Created On 15/05/2023]]
[[Category:Machine Translated Page|Class Implementation File]]
[[Category:Pages with script errors|Class Implementation File]]
[[Category:Templates Vigyan Ready]]
[[Category:ऑब्जेक्टिव-सी कोड के उदाहरण वाले लेख|Class Implementation File]]
[[Category:वर्ग (कंप्यूटर प्रोग्रामिंग)|Class Implementation File]]
[[Category:वस्तु-उन्मुख प्रोग्रामिंग भाषाएँ|Class Implementation File]]
[[Category:सी ++|Class Implementation File]]

Latest revision as of 16:20, 25 May 2023

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, वर्ग कार्यान्वयन फ़ाइल का उपयोग अधिकाशतः वर्ग (कंप्यूटर प्रोग्रामिंग) की विधि (s) के लिए कार्यान्वयन कोड को सम्मिलित करने के लिए किया जाता है। सी और सी++ जैसी प्रोग्रामिंग भाषा इन कार्यान्वयन फ़ाइलों का उपयोग करती हैं | जिससे इन विधियों के अंतरापृष्ठ और कार्यान्वयन को अलग किया जा सके। [1]

अभिप्रेरण

इस संरचना का उपयोग करते हुए, वर्ग परिभाषा फ़ाइल भी बनाई जाती है | जिसमें वर्ग और उसके सदस्यों की घोषणा होती है। यदि वर्ग परिभाषा को सम्मिलित किया गया है और इसके विधियों के लिए कार्यान्वयन फ़ाइल उपलब्ध है, तो उपयोगकर्ता कक्षा के ऑब्जेक्ट (कंप्यूटर विज्ञान) को इंस्टेंस (कंप्यूटर विज्ञान) कर सकता है। इस संरचना का उद्देश्य कार्यान्वयन कोड को छिपाकर रखना है | किन्तु उपयोगकर्ता को रचना देखने की अनुमति देना है।[2][3] उपयोगकर्ता किसी ऑब्जेक्ट (कंप्यूटर विज्ञान) के सार्वजनिक अंतरापृष्ठ का उपयोग करते हैं | जिससे वस्तुओं को यथासंभव सरल बनाया जा सके और यह सुनिश्चित किया जा सके कि क्लाइंट कोड वर्ग के कार्यान्वयन के अनावश्यक विवरण के साथ उपयोगकर्ता को विचलित न करे।[4]

यह उपयोगकर्ता को प्रभावी रूप से कक्षा का उपयोग करने के लिए आवश्यक जानकारी की अनुमति देता है, किन्तु उसे संकलित कोड को हानि पहुँचाने से रोकता है।[5]

एक वर्ग कार्यान्वयन फ़ाइल की संरचना

कार्यान्वयन से इंटरफ़ेस को विभाजित करने के लिए एक वर्ग परिभाषा बनाते समय एक कार्यान्वयन फ़ाइल का उपयोग सी++ प्रोग्रामिंग भाषा में किया जाता है। शीर्षलेख फ़ाइल कक्षा के सभी सदस्य कार्यों (विधियों) और डेटा विधियों (फ़ील्ड) की घोषणा करेगी। [6][7][8]

कार्यान्वयन फ़ाइल में हेडर फ़ाइल में घोषित विधियों की वास्तविक परिभाषा या स्रोत कोड होगा। यह फ़ाइल हेडर ब्लॉक से प्रारंभ हो सकती है | जो टिप्पणियां प्रदान करती है | जो परिभाषित वर्ग के उद्देश्य का वर्णन करती है और वास्तविक फ़ाइल के निर्माण के बारे में कोई भी विवरण, जैसे कि फ़ाइल के लेखक और फ़ाइल को बनाया गया था।[9] इसमें सी++ मानक लाइब्रेरी से कोई लाइब्रेरी भी सम्मिलित हो सकता है | जिसका उपयोग फ़ाइल में घोषित विधियों में से किसी के द्वारा किया जाएगा। वर्ग कार्यान्वयन फाइल में सामान्यतः संबंधित हेडर फाइल को सम्मिलित करने के लिए रेखा होगी (नीचे उदाहरण देखें)।

सी++ में उदाहरण

उदाहरण वर्ग नामक एक वर्ग होगा उदाहरण वर्ग. इस सी++ फाइल की हेडर फाइल का नाम उदाहरण वर्ग.h होगा और कार्यान्वयन फाइल उदाहरण वर्ग.cc होगी।[10][11]

उदाहरण वर्ग.cc की संरचना का उदाहरण इस तरह दिखेगा |

#include "example_class.h"

ExampleClass::ExampleClass() = default;

void ExampleClass::AddSomething(int k) {
   ...
}

इस उदाहरण में, कार्यों के कार्यान्वयन को छोड़ दिया गया है | किन्तु कार्यों को इस तरह उदाहरण वर्ग.h में घोषित किया जाना चाहिए |[12]

#include <string>

class ExampleClass {
 public:
  ExampleClass();  // Constructor.
  void AddSomething(int k);          

 private:
  std::string name_;                      
};

उद्देश्य सी में उदाहरण

वर्ग कार्यान्वयन फ़ाइल को कैसे संरचित किया जाएगा इसका एक और उदाहरण ऑब्जेक्टिव-सी के साथ देखा जा सकता है | जिसका उपयोग आईओएस प्रोग्रामिंग में किया जाता है।[13]

यह उदाहरण वर्ग का उपयोग करेगा। इन कार्यान्वयन फ़ाइलों का उपयोग करते समय सी++ और ऑब्जेक्टिव-सी के बीच उल्लेखनीय अंतर फाइलों के अंत में उपयोग किए जाने वाले एक्सटेंशन हैं। सी++ में यह .cpp होगा [14] और उद्देश्य-सी में यह .m होगा |[15] किन्तु दोनों अपनी हैडर फ़ाइल के लिए एक ही .h एक्सटेंशन का उपयोग करेंगे | [16][17] जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है। यह उद्देश्य-सी में उदाहरण वर्ग.h का उदाहरण है |

#import <UIKit/UIKit.h>

@interface ExampleClass : NSObject {
    // instance variable declarations go here
}
- (NSString*) name;
@end

यह उद्देश्य-सी में वर्ग की कार्यान्वयन फ़ाइल उदाहरण वर्ग.m का उदाहरण है |

#import "ExampleClass.h"

@implementation ExampleClass
- (NSString*) name {
    return @"…";
}
@end

यह भी देखें

  • सी++ वर्ग
  • हेडर फाइल
  • सोर्स कोड
  • सी++ मानक लाइब्रेरी
  • उद्देश्य सी

संदर्भ

  1. Alan Griffiths (2005). "Separating Interface and Implementation in C++". ACCU. Retrieved 2013-05-07.
  2. Alan Griffiths (2005). "Separating Interface and Implementation in C++". ACCU. Retrieved 2013-05-07.
  3. Neuberg, Matt (26 May 2011). "Chapter 4.3 Header File and Implementation File". Programming iOS 4. O’Reilly Media, Inc. ISBN 978-1-4493-8843-0.
  4. Alan Griffiths (2005). "Separating Interface and Implementation in C++". ACCU. Retrieved 2013-05-07.
  5. "C++ Dos and Don'ts". The Chromium Projects. Retrieved 2013-05-07.
  6. "Introduction to C++ Classes". Retrieved 2013-05-07.
  7. Alan Griffiths (2005). "Separating Interface and Implementation in C++". ACCU. Retrieved 2013-05-07.
  8. Febil Chacko Thanikal (2009). "How to define a template class in a .h file and implement it in a .cpp file". Code Project. Retrieved 2013-05-07.
  9. "The implementation file in C++ Programming". ITechTalk. Retrieved 2013-05-07.
  10. "Introduction to C++ Classes". Retrieved 2013-05-07.
  11. Neuberg, Matt (26 May 2011). "Chapter 4.3 Header File and Implementation File". Programming iOS 4. O’Reilly Media, Inc. ISBN 978-1-4493-8843-0.
  12. "Introduction to C++ Classes". Retrieved 2013-05-07.
  13. Neuberg, Matt (26 May 2011). "Chapter 4.3 Header File and Implementation File". Programming iOS 4. O’Reilly Media, Inc. ISBN 978-1-4493-8843-0.
  14. "Introduction to C++ Classes". Retrieved 2013-05-07.
  15. Neuberg, Matt (26 May 2011). "Chapter 4.3 Header File and Implementation File". Programming iOS 4. O’Reilly Media, Inc. ISBN 978-1-4493-8843-0.
  16. "Introduction to C++ Classes". Retrieved 2013-05-07.
  17. Neuberg, Matt (26 May 2011). "Chapter 4.3 Header File and Implementation File". Programming iOS 4. O’Reilly Media, Inc. ISBN 978-1-4493-8843-0.


बाहरी संबंध