प्रोटोकॉल-आधारित अमूर्तीकरण
ठोस प्रकारों पर नहीं, प्रोटोकॉल पर निर्भर रहिए।
प्रोटोकॉल-आधारित अमूर्तीकरण, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
प्रोटोकॉल-आधारित अमूर्तन
ठोस प्रकार के बजाय protocol इंजेक्ट करने से आप कार्यान्वयन को स्वतंत्र रूप से बदल सकते हैं। उपभोक्ता केवल व्यवहार पर निर्भर करता है, क्लास पर नहीं।
प्रोटोकॉल परिभाषित करना
क्षमता को एक प्रोटोकॉल के रूप में वर्णित करें। अनुरूप होने वाला कोई भी प्रकार निर्भरता के रूप में दिया जा सकता है।
protocol Logging {
func log(_ message: String)
}
print("Protocol describes behavior, not a concrete class.")ठोस प्रकार को अनुरूप बनाना
एक वास्तविक कार्यान्वयन प्रोटोकॉल के अनुरूप होता है। यही प्रोडक्शन निर्भरता है।
protocol Logging { func log(_ m: String) }
struct ConsoleLogger: Logging {
func log(_ m: String) { print("LOG: \(m)") }
}
ConsoleLogger().log("ready")प्रोटोकॉल पर निर्भर करना
उपभोक्ता की प्रॉपर्टी का प्रकार प्रोटोकॉल होता है, इसलिए वह अनुरूप होने वाले किसी भी मान को स्वीकार करती है।
protocol Logging { func log(_ m: String) }
struct ConsoleLogger: Logging { func log(_ m: String) { print(m) } }
struct Service {
let logger: Logging // protocol, not ConsoleLogger
func run() { logger.log("running") }
}
Service(logger: ConsoleLogger()).run()कार्यान्वयन बदलना
क्योंकि प्रकार एक प्रोटोकॉल है, आप उपभोक्ता को छुए बिना अनुरूप होने वाला कोई अलग कार्यान्वयन पास कर सकते हैं।
protocol Logging { func log(_ m: String) }
struct Loud: Logging { func log(_ m: String) { print(m.uppercased()) } }
struct Quiet: Logging { func log(_ m: String) {} }
struct Service { let logger: Logging; func run() { logger.log("hi") } }
Service(logger: Loud()).run()
Service(logger: Quiet()).run()इंटरफ़ेस के अनुसार प्रोग्रामिंग
यह "अमूर्तताओं पर निर्भर करें, ठोस रूपों पर नहीं" सिद्धांत है। उच्च-स्तरीय कोड निम्न-स्तरीय विवरणों से सुरक्षित रहता है।
protocol Storage { func save(_ v: Int) }
struct MemoryStore: Storage { func save(_ v: Int) { print("kept \(v)") } }
struct Manager { let store: Storage; func add() { store.save(1) } }
Manager(store: MemoryStore()).add()कई अनुरूप प्रकार
कई प्रकार एक ही प्रोटोकॉल के अनुरूप हो सकते हैं और नेटवर्क, डिस्क या मेमोरी जैसे अलग-अलग संदर्भों के लिए उपयुक्त हो सकते हैं।
protocol Source { func value() -> Int }
struct Fixed: Source { func value() -> Int { 10 } }
struct Doubler: Source { func value() -> Int { 20 } }
func use(_ s: Source) { print(s.value()) }
use(Fixed())
use(Doubler())संबद्ध व्यवहार वाले प्रोटोकॉल
प्रोटोकॉल कई विधियाँ घोषित कर सकते हैं और इस तरह निर्भरता के लिए एक स्पष्ट अनुबंध बना सकते हैं।
protocol Cache {
func get(_ key: String) -> Int?
func set(_ key: String, _ v: Int)
}
struct Dict: Cache {
var store: [String: Int] = [:]
func get(_ k: String) -> Int? { store[k] }
mutating func set(_ k: String, _ v: Int) { store[k] = v }
}
var c = Dict(); c.set("a", 1)
print(c.get("a") ?? -1)जेनरिक सीमाएँ
आप प्रोटोकॉल तक सीमित जेनरिक पैरामीटर के माध्यम से भी इंजेक्ट कर सकते हैं और एग्ज़िस्टेंशियल ओवरहेड से बच सकते हैं।
protocol Greeter { func greet() -> String }
struct English: Greeter { func greet() -> String { "Hello" } }
struct Welcome<G: Greeter> {
let greeter: G
func show() { print(greeter.greet()) }
}
Welcome(greeter: English()).show()स्थिर अनुबंध
जब तक प्रोटोकॉल स्थिर रहता है, कार्यान्वयन अपने अंदर बदल सकते हैं और उपभोक्ताओं को प्रभावित नहीं करते।
protocol Formatter { func format(_ n: Int) -> String }
struct Plain: Formatter { func format(_ n: Int) -> String { "\(n)" } }
struct Padded: Formatter { func format(_ n: Int) -> String { String(format: "%03d", n) } }
func render(_ f: Formatter) { print(f.format(7)) }
render(Plain())
render(Padded())मॉकिंग की तैयारी
सबसे महत्वपूर्ण बात यह है कि प्रोटोकॉल परीक्षणों को वास्तविक कार्यान्वयन के स्थान पर नकली अनुरूप प्रकार देने की सुविधा देते हैं। अगले पाठ का केंद्र यही है।
protocol Network { func fetch() -> String }
struct Real: Network { func fetch() -> String { "server data" } }
struct VM { let net: Network; func load() { print(net.fetch()) } }
VM(net: Real()).load()त्वरित जाँच
ठोस क्लास के बजाय प्रोटोकॉल प्रकार को इंजेक्ट क्यों किया जाता है?
पुनरावलोकन
protocol इंजेक्ट करने से ठोस प्रकार छिप जाता है, इसलिए किसी भी अनुरूप प्रकार को उसके स्थान पर रखा जा सकता है। यह "अमूर्तताओं पर निर्भर करें" सिद्धांत का पालन करता है और वैकल्पिक कार्यान्वयन तथा विशेष रूप से परीक्षण डबल्स संभव बनाता है। अगला विषय: परीक्षणों में निर्भरताओं की मॉकिंग।
एआई शिक्षक के साथ Swift सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 122
- पाठ
- 409
अक्सर पूछे जाने वाले प्रश्न
क्या “प्रोटोकॉल-आधारित अमूर्तीकरण” पाठ निःशुल्क है?
हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “प्रोटोकॉल-आधारित अमूर्तीकरण” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“प्रोटोकॉल-आधारित अमूर्तीकरण” में मैं क्या सीखूँगा?
ठोस प्रकारों पर नहीं, प्रोटोकॉल पर निर्भर रहिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“प्रोटोकॉल-आधारित अमूर्तीकरण” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Dependency Injection क्यों
- कंस्ट्रक्टर इंजेक्शन
- प्रोटोकॉल-आधारित अमूर्तीकरण
- परीक्षणों में निर्भरताओं का मॉक बनाना