Problem Solving using OOPS

Problem Solving Using OOPS: “C” मे हमने पढा है कि किसी Structure प्रकार के Variables, User Defined Data Type होते हैं। ठीक इसी प्रकार से हम “C++” में भी Structures को User Defined Data Type के Variables Declare करने के लिए Use कर सकते हैं। “C++” में User Defined Data Type के Variable को Object कहा जाता है। यानी Structure, Class या Union प्रकार के Variables को Object कहा जाता है। यदि ये कहा जाए कि अमुक Structure प्रकार का Variable या अमुक Class प्रकार का Variable, तो ये बोलने में काफी बडा शब्द बन जाता है। इस बडे नाम को ही छोटे रूप में अमुक Structure, Class या Union का Object कहा जाता है।

Object Oriented Programming System (OOPS) एक ऐसा तरीका है जिसमें Develop किया जाने वाला Program उसी तरह किसी समस्या को हल करता है जिस तरह से हम हमारे वास्तविक जीवन में उस समस्या को हल करते हैं। Object Oriented Programming System को ठीक से समझने के लिए हम एक सामान्य सी समस्या को लेते हैं और उसे Object Oriented Programming System (OOPS) के सिद्धांतों का प्रयोग करते हुए हल करते हैं। इस तरीके से हम Object Oriented Programming System (OOPS) को ज्यादा अच्छी तरह से और प्रायोगिक तौर पर समझ सकते हैं।

Book Stall as Object : Problem Solving Using OOPS

किसी भी समस्या का समाधान Computer द्वारा प्राप्त करने के लिए हम Software या Programs बनाते हैं। ये Program बनाने से पहले हमें समस्या को अच्छी तरह से समझना होता है। मानलो कि हमारे पास समस्या ये है कि एक Book Stall का मालिक जिसका नाम RadhaKrishna है, हमारे पास आता है और कहता है कि वह अपने Book Stalls को Computer द्वारा Manage करना चाहता है। इसलिए उसे एक ऐसे Software की जरूरत है जिससे उसकी जरूरत पूरी हो जाए।

चूंकि उसकी जरूरत क्या है ये जाने बिना हम उसके लायक Software नहीं बना सकते हैं और Software Develop करने के लिए ये जरूरी है कि वह अपने Book Stall को वर्तमान में किस प्रकार से Handle करता है, ये जाना जाए। जिस तरह से वह वर्तमान में वास्तविक तौर पर अपने Book Stalls को Handle करता है, Computer में भी हम उसे उसी तरह से Represent कर सकते हैं, क्योंकि हमारे पास Object Oriented Programming Language “C++” है।

मानलो, जब उससे ये पता किया कि उसके Book Stall पर क्या होता है, तो उसने बताया कि उसके 6 Book Stalls हैं और हर Book Stall पर केवल दो ही Items BooksMagazines बेचे जाते हैं। यानी RadhaKrishna के Book Stalls पर हर रोज कुछ पुस्तकें व Magazines बेंची जाती हैं। यदि पुस्तकें या Magazines समाप्त होने वाली हों, तो नई पुस्तकें खरीदी जाती हैं। बस इतना ही काम होता है।

RadhaKrishna अपने Book Stall की स्थिति (State of Attributes) बताता है कि पूरे शहर में अलग-अलग स्थानों पर उसके 6 Book Stalls हैं और उसने उन Book Stalls को Operate करने के लिए 6 लोगों को Hire कर रखा है। वह स्वयं एक Central Office में रहता है जो कि लगभग उसके सभी Book Stalls से मध्य में है।

RadhaKrishna ने अपने सभी Book Stalls पर एक Phone लगा रखा है ताकि सभी Book Stalls के Operators से Connected रह सके। उसने अपने सभी Book Stall को एक Number दे रखा है, जिससे वह सभी Book Stalls को पहचानता है। ये तो RadhaKrishna के Book Stall की स्थिति (State) है।

अपने Book Stall की स्थिति बनाते के बाद अब वह बताता है कि वह अपने Book Stalls को Handle कैसे करता है?

मानलो, वह कहता है कि हर रोज जिस समय कोई Operator Book Stall Open करता है, तो वह तुरन्त कुल Books व Magazines की संख्‍या यानी Current Stock RadhaKrishna को Phone करके बताता है। यानी उसके Book Stall के Stock की स्थिति (State of Stock) क्या है।

साथ ही जब भी किसी Book Stall से कोई Item बिकता है, तो उस Book Stall का Operator अपने Book Stall का Number बताता है और RadhaKrishna को ये Message देता है कि उसके Stall से एक Book या एक Magazine बिक चुकी है। (हालांकि वास्तव में ऐसा नहीं हो सकता है कि हर Book के बिकने पर Appropriator को Message किया जाए और Book Stall पर केवल एक ही Book व Magazine बेची जाती हो)

इस तरीके से RadhaKrishna को उसके हर Book Stall के Stock का Input व Output पता चलता रहता है, जिसे वह Note करता रहता है और इस Node के आधार पर उसे पता रहता है कि किस Book Stall पर किसी समय कितना Stock उपलब्ध है। इस जानकारी के आधार पर RadhaKrishna समय रहते ये तय कर पाता है कि उसे Supplier को और Books व Magazines का Order कब देना है।

इस पूरी जानकारी के आधार पर हम कह सकते हैं कि RadhaKrishna को अपने हर Book Stall से तीन प्रकार से Interactions की जरूरत होती है और इन्हीं तीन तरीकों का Interaction उसे उसके Program से चाहिए ताकि वह अपने Program से निम्न काम कर सके-

  • वह अपने Program में हर रोज कुल Books व Magazines की संख्‍या Enter कर सके।
  • हर Book या Magazine के Sale होने का Record रख सके। यानी जब भी किसी Book Stall से कोई Book या Magazine बिके, तो वह उस Book Stall के Stock को कम कर सके।
  • वह Program से ये जान सके कि किसी Book Stall पर किसी समय कुल कितना Stock शेष है।

Step 1
पहले Step को पूरा करते हुए हर रोज सुबह RadhaKrishna अपने Program द्वारा निम्नानुसार हर Book Stall के Books की संख्‍या या Stock को Computer में Enter कर सकता है-

Stall number: 1                 <--user enters stand number
Number of Books in hand: 34         <--user enters quantity
Number of Magazines in hand: 103    <--user enters quantity

Stall number: 2                 <--user enters stand number
Number of Books in hand: 40         <--user enters quantity
Number of Magazines in hand: 13     <--user enters quantity

Stall number: 3                 <--user enters stand number
Number of Books in hand: 49         <--user enters quantity
Number of Magazines in hand: 30     <--user enters quantity

Stall number: 4                 <--user enters stand number
Number of Books in hand: 90         <--user enters quantity
Number of Magazines in hand: 100    <--user enters quantity

Stall number: 5                 <--user enters stand number
Number of Books in hand: 140        <--user enters quantity
Number of Magazines in hand: 65     <--user enters quantity

Stall number: 6                 <--user enters stand number
Number of Books in hand: 20         <--user enters quantity
Number of Magazines in hand: 60     <--user enters quantity

यानी Computer एक Message देता है, और RadhaKrishna उस Message के अनुसार Data Input करता है।

Step 2
दूसरी स्थिति प्राप्त करने के लिए जब Program में Book या Magazines के Selling की Entry करनी हो, तब निम्नानुसार केवल एक Message आना चाहिए, जहां RadhaKrishna उस Book Stall का Number Input करेगा जहां से Book Sell हुई है।

Enter stall number:3       <--user enters stand number

इसके बाद निम्नानुसार एक और Message आएगा जो RadhaKrishna से पूछेगा कि Book Sell हुई है या Magazine, RadhaKrishna जो भी Option Select करेगा, Program Automatically उस Item के Stock की संख्‍या को एक कम कर देगा।

Press 0 for Book and 1 for Magazine:1 <--user enters choice

Step3
तीसरी स्थिति प्राप्त करने के लिए RadhaKrishna को केवल किसी भी Stall का Number Input करना होगा। उस Stall के Stock की जानकारी निम्नानुसार प्राप्त हो जाएगी-

Enter stall number: 4     <--user enters stand number
Books in hand = 30        <--program displays data
Magazines in hand = 130   <--program displays data

हमने पूरे Description के आधार पर ये तय किया कि RadhaKrishna की समस्या का समाधान किस प्रकार से प्राप्त किया जा सकता है और उस Description के आधार पर Interaction यानी User Interface भी तय करने की कोशिश की कि RadhaKrishna अपने Program से किस प्रकार Interface कर सकेगा या किस प्रकार से अपने Program से Interact करेगा। अब हमें ये सोंचना है कि RadhaKrishna को इस प्रकार का Interaction प्राप्त हो, इसका Design Object Oriented Programming System (OOPS) आधारित “C++” में किस प्रकार से बनाया जाए?

एक Object Oriented Programmer किसी भी समस्या के समाधान के लिए हमेंशा सबसे पहले ये जानना चाहता है कि समस्या में ऐसा कौनसा Object है, जो उस समस्या के Program का सबसे प्रमुख Object बन सकता है। कई बार किसी समस्या का मुख्‍य Object पता करना काफी कठिन काम होता है। फिर भी, हमारे पास कई Similar Real World Objects हों तो वे सभी हमारे Program के मुख्‍य Object के Candidate हो सकते हैं।

RadhaKrishna की समस्या में कई Objects जैसे कि Books, Book Stall और Book Stalls को Operate करने वाले Operators हैं और सभी Objects अलग-अलग Category के हैं। इनमें से किसे मुख्‍य Object माना जाए?

चूंकि हमें Book के बारे में जानकारी नहीं रखनी है कि किस नाम की कितनी Books हैं या किसी Book का Writer कौन है। इसलिए Book तो वह मुख्‍य Object हो ही नहीं सकता। इसी तरह से हमें Book Stalls को Operate करने वाले Operators की भी जानकारी नहीं रखनी है कि किस Book Stall का Operator कौन है। कहां रहता है। कितना पढा-लिखा है, आदि।

वास्तव में RadhaKrishna को उसके सभी Book Stalls के Stock की जानकारी रखनी है। इस स्थिति में Book Stall ही हमारा मुख्‍य Object है। कई बार एक Programmer गलत Object को मुख्‍य Object मान लेता है। शुरूआत में ज्यादातर Programmers के साथ ऐसा ही होता है। लेकिन समय के साथ जैसे-जैसे वे अधिक अनुभवी होते जाते हैं, उन्हें Right Object की पहचान हो जाती है।

समस्या का मुख्‍य Object पता चल जाने के बाद अब एक Programmer को ये तय करना होता है कि उस Object की Characteristics क्या है। चूंकि हमारा Object तो Book Stall है लेकिन इस Book Stall की Characteristics में से हमें केवल उन Characteristics को ही Abstract करके प्राप्त करना है, जो RadhaKrishna की समस्या से सम्बंधित हैं।

चूंकि इन Book Stalls की अलग-अलग Size हो सकती है, ये शहर के अलग-अलग हिस्सों में स्थित हो सकते हैं, इन पर अलग-अलग Operators हो सकते हैं, लेकिन इन सभी Attributes का RadhaKrishna की समस्या से कोई सम्बंध नहीं है। RadhaKrishna की समस्या से सम्बंधित तो केवल उन Book Stall पर स्थित BooksMagazines की संख्‍या हैं, जो Book Stall के Stock को Represent करती हैं।

इसलिए Book Stall का मुख्‍य Attribute Books व Magazines हैं। जब कोई Item Sell होता है, तब Item के Stock की संख्‍या (State) में ही अन्तर पडता है। इसलिए एक Real World Physical Object Book Stall का मुख्‍य Attribute जो कि समस्या से सम्बंधित है, वह है किसी Book Stall Object के कुल Books व Magazines की संख्‍या। ये Book व Magazine ही है जो हर Book Stall का मुख्‍य Data है।

हालांकि विभिन्न 6 Book Stall Objects के Books व Magazines की संख्‍या में अन्तर हो सकता है। फिर भी हर Book Stall पर इसी की संख्‍या रूपी Data (मान) की स्थिति (State) में परिवर्तन आता है। यानी हमारे Book Stall का मुख्‍य Attribute जो कि Abstraction से हमें प्राप्त होता है वह हैः

  • Book
  • Magazine

अब चूंकि हमने Book Stall Object के समस्या से सम्बंधित Attribute को तो प्राप्त कर लिया लेकिन साथ ही ये Object अपने Attribute की State में परिवर्तन करने के लिए कुछ Operations भी करता है। यानी जब Stock को Input किया जाता है, तब Object उसके Data यानी Book की Counting की स्थिति में परिवर्तन करता है और उसे Increase करता है और जब कोई Book Sell होती है, तब ये Object अपने Data की स्थिति में परिवर्तन करके उसके मान को Decrease भी करता है। साथ ही जब User किसी Book Stall के कुल Book की संख्‍या जानना चाहता है, तब ये Object अपने Data की Current Position को भी Display करता है। यानी ये Object RadhaKrishna की समस्या के अनुसार तीन Operations द्वारा अपने Data या Attribute के मान से Interact करता है।

“C++” में किसी Object के इन Operations की Description को Methods (Member Functions) द्वारा Define किया जाता है। यानी “C++” में यदि इन Operations को Define करें, तो निम्नानुसार इन Operations को Describe कर सकते हैं-

inputData()
soldOneBook()
soldOneMagagine()
displayStock()

जब किसी Program में एक ही प्रकार के कई Objects होते हैं, तब सभी Objects को अलग से Describe करने के तरीके को अच्छा नहीं कहा जा सकता है। जब इस प्रकार की स्थिति होती है तब समान प्रकार के इन सभी Objects को Represent करने के लिए एक Common Specification या Modal बना लेना ज्यादा बेहतर होता है। इस Specification को हम एक Blueprint या एक Modal कह सकते हैं। एक बार किसी Object का एक Modal या Specification Design कर लेने के बाद हम इस Blue Print का प्रयोग जितने Objects को Create करने के लिए करना चाहें, कर सकते हैं।

Object Oriented Programming में Objects Creation के इस Modal या Specification को Class कहते हैं। RadhaKrishna की समस्या से हमने किसी एक Book Stall Object के दोनों जरूरी Components AttributesAbility को प्राप्त कर लिए हैं। इन दोनों के आधार पर हम निम्नानुसार एक Real World Book Stall Object का Computer में एक Logical Modal या Description बना सकते हैं-

Class BookStall
{
//Attribute of Object (State)
private:
   int booksInHand;     //Instance Data
   int MagazinesInHand;     //Instance Data

//Operations of Object (Behavior)
public:
//Method for Initializing Stock of Books
   void inputData(void)
   {

   }

//Method for Adjusting Data (Book Counts)
   void soldOneBook(void)
   {

   }

//Method for Adjusting Data (Book Counts)
   void soldOneMagazine(void)
   {

   }

//Displays Current Stock of the Books
void displayStock(void)
   {

   }
};

हम देख सकते हैं कि ये Class Specification दो भागों में विभाजित रहती है। पहले भाग में Object का Data है और दूसरे भाग में उस Data पर Perform हो सकने वाले Operations जिन्हें “C++” में Methods कहते हैं। “C++” में इसी प्रकार से किसी समस्या का समाधान प्राप्त करने के लिए Class Define की जाती है।

एक बात ध्यान रखें कि Specification लिख लेने से Object Create नहीं हो जाता है। Specification तो मात्र एक Blueprint होता है। जिस प्रकार से किसी चीज का एक नक्‍शा बना देने से वह चीज नहीं बन जाती है। उसी तरह से किसी Object का Specification तैयार कर देने से Object Create नहीं हो जाता है।

Class मात्र एक Specification है, इसलिए एक Class का Description Memory में तब तक कोई Space नहीं लेता है, जब तक कि हम उस Class के Instance के रूप में कोई Object Create ना करें।

हमने Book व Magazines की संख्‍या Store करने के लिए एक Integer प्रकार का Variable Instance Variable के रूप में Declare किया है। चूंकि Book व Magazines ऐसे Objects है, जो पूर्णांक संख्‍या में ही Represent हो सकते हैं। इसलिए इनकी संख्‍या को Store करने के लिए हमने int Keyword का प्रयोग किया है। इस Class में Object अपने Data पर चार Operations कर सकता है, इसलिए हमने Class में चार Methods Define किए हैं।

एक बात हमेंशा ध्यान रखें कि “C++” के भी हर Statement का अन्त Semicolon से होता है लेकिन Function के कोष्‍ठक के बाद Semicolon नहीं लगाया जाता है। चूंकि Semicolon का प्रयोग Compiler को Statement के अन्त के लिए कहता है। यानी Compiler को जहां भी Semicolon मिलता है, Compiler समझता है, कि वहीं पर किसी एक Statement का अन्त हुआ है, इसलिए यदि Method के कोष्‍ठक के बाद Semicolon लगा दिया जाए, तो Compiler इसे Method का अन्त मानेगा जबकि ये तो Method या Member Function के Definition की शुरूआत है। (Problem Solving Using OOPS)

How to create Class in C++
Class Scope in C++: Public and Private

CPP Programming Language in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C++ Programming Language in Hindi | Page: 666 | Format: PDF

BUY NOW GET DEMO REVIEWS