जावा - वस्तु और वर्ग

जावा एक ऑब्जेक्ट-ओरिएंटेड भाषा है। ऑब्जेक्ट-ओरिएंटेड सुविधा वाली भाषा के रूप में, जावा निम्नलिखित मूलभूत अवधारणाओं का समर्थन करता है -

  • Polymorphism
  • Inheritance
  • Encapsulation
  • Abstraction
  • Classes
  • Objects
  • Instance
  • Method
  • संदेश देना

इस अध्याय में, हम अवधारणाओं - कक्षाओं और वस्तुओं पर ध्यान देंगे।

  • Object- वस्तुओं में राज्य और व्यवहार होते हैं। उदाहरण: एक कुत्ते की अवस्थाएँ हैं - रंग, नाम, नस्ल के साथ-साथ व्यवहार - पूंछ को लड़खड़ाना, भौंकना, खाना। एक वस्तु एक वर्ग का एक उदाहरण है।

  • Class - एक वर्ग को एक टेम्पलेट / खाका के रूप में परिभाषित किया जा सकता है जो उस व्यवहार / स्थिति का वर्णन करता है जो उसके प्रकार के समर्थन का उद्देश्य है।

जावा में वस्तुएँ

आइए अब हम गहराई से देखते हैं कि वस्तुएं क्या हैं। यदि हम वास्तविक दुनिया पर विचार करते हैं, तो हम अपने आस-पास, वस्तुओं, कारों, कुत्तों, मनुष्यों इत्यादि की कई वस्तुओं को खोज सकते हैं। इन सभी वस्तुओं में एक अवस्था और एक व्यवहार होता है।

यदि हम एक कुत्ते पर विचार करते हैं, तो उसकी स्थिति है - नाम, नस्ल, रंग, और व्यवहार है - भौंकना, पूंछ को छेड़ना, दौड़ना।

यदि आप सॉफ़्टवेयर ऑब्जेक्ट की वास्तविक दुनिया ऑब्जेक्ट के साथ तुलना करते हैं, तो उनके पास बहुत समान विशेषताएं हैं।

सॉफ्टवेयर ऑब्जेक्ट में एक स्थिति और एक व्यवहार भी होता है। सॉफ़्टवेयर ऑब्जेक्ट की स्थिति को फ़ील्ड में संग्रहीत किया जाता है और व्यवहार विधियों के माध्यम से दिखाया जाता है।

तो सॉफ्टवेयर विकास में, विधियाँ किसी वस्तु की आंतरिक स्थिति पर काम करती हैं और ऑब्जेक्ट-टू-ऑब्जेक्ट संचार विधियों के माध्यम से किया जाता है।

जावा में कक्षाएं

एक वर्ग एक खाका है जिसमें से व्यक्तिगत वस्तुएं बनाई जाती हैं।

निम्नलिखित एक वर्ग का एक नमूना है।

उदाहरण

public class Dog {
   String breed;
   int age;
   String color;

   void barking() {
   }

   void hungry() {
   }

   void sleeping() {
   }
}

एक वर्ग में निम्न चर प्रकार हो सकते हैं।

  • Local variables- तरीकों, कंस्ट्रक्टरों या ब्लॉकों के अंदर परिभाषित चर को स्थानीय चर कहा जाता है। चर घोषित किया जाएगा और विधि के भीतर शुरू किया जाएगा और चर पूरा हो जाएगा जब विधि पूरी हो गई है।

  • Instance variables- इंस्टेंस चर एक वर्ग के भीतर लेकिन किसी भी विधि के बाहर चर रहे हैं। इन चर का आरंम्भ तब किया जाता है जब कक्षा को त्वरित किया जाता है। इंस्टेंस चर किसी भी विधि, रचनाकार या उस विशेष वर्ग के ब्लॉक के अंदर से पहुँचा जा सकता है।

  • Class variables - क्लास चर किसी भी विधि के बाहर, स्थिर कीवर्ड के साथ, वर्ग के भीतर घोषित चर हैं।

एक वर्ग के पास विभिन्न प्रकार के तरीकों के मूल्य तक पहुंचने के लिए कोई भी विधि हो सकती है। उपरोक्त उदाहरण में, भौंकना (), भूख () और नींद () विधियां हैं।

जावा भाषा की कक्षाओं को देखते समय कुछ महत्वपूर्ण विषयों पर चर्चा की जानी आवश्यक है।

कंस्ट्रक्टर्स

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

हर बार एक नई वस्तु बनाई जाती है, कम से कम एक निर्माणकर्ता को आमंत्रित किया जाएगा। कंस्ट्रक्टरों का मुख्य नियम यह है कि उनका वर्ग के समान नाम होना चाहिए। एक वर्ग में एक से अधिक कंस्ट्रक्टर हो सकते हैं।

निम्नलिखित एक निर्माता का एक उदाहरण है -

उदाहरण

public class Puppy {
   public Puppy() {
   }

   public Puppy(String name) {
      // This constructor has one parameter, name.
   }
}

जावा, सिंगलटन क्लासेस को भी सपोर्ट करता है, जहाँ आप एक क्लास का केवल एक उदाहरण ही बना पाएंगे।

Note- हमारे पास दो अलग-अलग प्रकार के कंस्ट्रक्टर हैं। हम बाद के अध्यायों में विस्तार से चर्चा करने जा रहे हैं।

एक वस्तु बनाना

जैसा कि पहले उल्लेख किया गया है, एक वर्ग वस्तुओं के लिए ब्लूप्रिंट प्रदान करता है। तो मूल रूप से, एक वर्ग से एक वस्तु बनाई जाती है। जावा में, नए कीवर्ड का उपयोग नई वस्तुओं को बनाने के लिए किया जाता है।

कक्षा से एक वस्तु बनाते समय तीन चरण होते हैं -

  • Declaration - एक चर प्रकार के साथ एक चर नाम के साथ एक चर घोषणा।

  • Instantiation - ऑब्जेक्ट बनाने के लिए 'नए' कीवर्ड का उपयोग किया जाता है।

  • Initialization- कंस्ट्रक्टर को कॉल करने के बाद 'नया' कीवर्ड आता है। यह कॉल नई ऑब्जेक्ट को इनिशियलाइज़ करता है।

निम्नलिखित एक वस्तु बनाने का एक उदाहरण है -

उदाहरण

public class Puppy {
   public Puppy(String name) {
      // This constructor has one parameter, name.
      System.out.println("Passed Name is :" + name );
   }

   public static void main(String []args) {
      // Following statement would create an object myPuppy
      Puppy myPuppy = new Puppy( "tommy" );
   }
}

यदि हम उपरोक्त कार्यक्रम को संकलित करते हैं और चलाते हैं, तो यह निम्नलिखित परिणाम देगा -

उत्पादन

Passed Name is :tommy

एक्सेसिंग चर और विधियाँ

इंस्टेंस वेरिएबल्स और तरीकों को निर्मित वस्तुओं के माध्यम से एक्सेस किया जाता है। एक उदाहरण चर का उपयोग करने के लिए, निम्नलिखित पूरी तरह से योग्य पथ है -

/* First create an object */
ObjectReference = new Constructor();

/* Now call a variable as follows */
ObjectReference.variableName;

/* Now you can call a class method as follows */
ObjectReference.MethodName();

उदाहरण

यह उदाहरण बताता है कि किसी वर्ग के उदाहरण चर और तरीकों का उपयोग कैसे करें।

public class Puppy {
   int puppyAge;

   public Puppy(String name) {
      // This constructor has one parameter, name.
      System.out.println("Name chosen is :" + name );
   }

   public void setAge( int age ) {
      puppyAge = age;
   }

   public int getAge( ) {
      System.out.println("Puppy's age is :" + puppyAge );
      return puppyAge;
   }

   public static void main(String []args) {
      /* Object creation */
      Puppy myPuppy = new Puppy( "tommy" );

      /* Call class method to set puppy's age */
      myPuppy.setAge( 2 );

      /* Call another class method to get puppy's age */
      myPuppy.getAge( );

      /* You can access instance variable as follows as well */
      System.out.println("Variable Value :" + myPuppy.puppyAge );
   }
}

यदि हम उपरोक्त कार्यक्रम को संकलित करते हैं और चलाते हैं, तो यह निम्नलिखित परिणाम देगा -

उत्पादन

Name chosen is :tommy
Puppy's age is :2
Variable Value :2

स्रोत फ़ाइल घोषणा नियम

इस अनुभाग के अंतिम भाग के रूप में, आइए अब स्रोत फ़ाइल घोषणा नियमों पर ध्यान दें। स्रोत फ़ाइल में कक्षाएं, आयात विवरण और पैकेज स्टेटमेंट घोषित करते समय ये नियम आवश्यक हैं ।

  • प्रति स्रोत फ़ाइल में केवल एक सार्वजनिक वर्ग हो सकता है।

  • एक स्रोत फ़ाइल में कई गैर-सार्वजनिक वर्ग हो सकते हैं।

  • सार्वजनिक श्रेणी का नाम स्रोत फ़ाइल का नाम होना चाहिए और साथ ही इसे जोड़ा जाना चाहिए .javaअतं मै। उदाहरण के लिए: वर्ग का नाम सार्वजनिक वर्ग कर्मचारी {} है तो स्रोत फ़ाइल Employee.java के रूप में होनी चाहिए।

  • यदि क्लास को पैकेज के अंदर परिभाषित किया गया है, तो पैकेज स्टेटमेंट स्रोत फ़ाइल में पहला स्टेटमेंट होना चाहिए।

  • यदि आयात स्टेटमेंट मौजूद हैं, तो उन्हें पैकेज स्टेटमेंट और क्लास डिक्लेरेशन के बीच लिखा जाना चाहिए। यदि कोई पैकेज स्टेटमेंट नहीं हैं, तो आयात स्टेटमेंट स्रोत फ़ाइल में पहली पंक्ति होनी चाहिए।

  • आयात और पैकेज विवरण स्रोत फ़ाइल में मौजूद सभी वर्गों के लिए लागू होंगे। स्रोत फ़ाइल में विभिन्न वर्गों के लिए अलग-अलग आयात और / या पैकेज विवरणों को घोषित करना संभव नहीं है।

कक्षाओं में कई पहुंच स्तर होते हैं और विभिन्न प्रकार की कक्षाएं होती हैं; अमूर्त कक्षाएं, अंतिम कक्षाएं, आदि हम एक्सेस मॉडिफायर अध्याय में इन सभी के बारे में बताएंगे।

उपर्युक्त प्रकार की कक्षाओं के अलावा, जावा में कुछ विशेष कक्षाएं भी हैं जिन्हें इनर क्लासेस और एनोनिमस क्लासेस कहा जाता है।

जावा पैकेज

सरल शब्दों में, यह वर्गों और इंटरफेस को वर्गीकृत करने का एक तरीका है। जावा में एप्लिकेशन विकसित करते समय, सैकड़ों कक्षाएं और इंटरफेस लिखे जाएंगे, इसलिए इन कक्षाओं को वर्गीकृत करना बहुत जरूरी है और साथ ही जीवन को बहुत आसान बनाता है।

आयात विवरण

जावा में यदि पूरी तरह से योग्य नाम, जिसमें पैकेज शामिल है और वर्ग का नाम दिया गया है, तो संकलक आसानी से स्रोत कोड या कक्षाएं ढूँढ सकता है। आयात विवरण उस विशेष वर्ग को खोजने के लिए संकलक को उचित स्थान देने का एक तरीका है।

उदाहरण के लिए, निम्नलिखित पंक्ति संकलक से निर्देशिका java_installation / java / io में उपलब्ध सभी वर्गों को लोड करने के लिए कहेगी -

import java.io.*;

एक साधारण केस स्टडी

हमारे मामले के अध्ययन के लिए, हम दो कक्षाएं बनाएंगे। वे कर्मचारी और कर्मचारी हैं।

पहले नोटपैड खोलें और निम्नलिखित कोड जोड़ें। याद रखें यह कर्मचारी वर्ग है और वर्ग एक सार्वजनिक वर्ग है। अब, इस स्रोत फ़ाइल को Employee.java नाम से सहेजें।

कर्मचारी वर्ग के चार उदाहरण हैं - नाम, आयु, पदनाम और वेतन। कक्षा में एक स्पष्ट रूप से परिभाषित कंस्ट्रक्टर है, जो एक पैरामीटर लेता है।

उदाहरण

import java.io.*;
public class Employee {

   String name;
   int age;
   String designation;
   double salary;

   // This is the constructor of the class Employee
   public Employee(String name) {
      this.name = name;
   }

   // Assign the age of the Employee  to the variable age.
   public void empAge(int empAge) {
      age = empAge;
   }

   /* Assign the designation to the variable designation.*/
   public void empDesignation(String empDesig) {
      designation = empDesig;
   }

   /* Assign the salary to the variable	salary.*/
   public void empSalary(double empSalary) {
      salary = empSalary;
   }

   /* Print the Employee details */
   public void printEmployee() {
      System.out.println("Name:"+ name );
      System.out.println("Age:" + age );
      System.out.println("Designation:" + designation );
      System.out.println("Salary:" + salary);
   }
}

जैसा कि पहले इस ट्यूटोरियल में बताया गया है, प्रोसेसिंग मुख्य विधि से शुरू होती है। इसलिए, इस कर्मचारी वर्ग को चलाने के लिए हमारे पास एक मुख्य तरीका होना चाहिए और वस्तुओं का निर्माण होना चाहिए। हम इन कार्यों के लिए एक अलग वर्ग का निर्माण करेंगे।

निम्नलिखित कर्मचारी वर्ग है, जो वर्ग कर्मचारी के दो उदाहरण बनाता है और प्रत्येक चर के लिए मान नियत करने के लिए प्रत्येक वस्तु के तरीकों का आह्वान करता है।

निम्न कोड को EmployeeTest.java फ़ाइल में सहेजें।

import java.io.*;
public class EmployeeTest {

   public static void main(String args[]) {
      /* Create two objects using constructor */
      Employee empOne = new Employee("James Smith");
      Employee empTwo = new Employee("Mary Anne");

      // Invoking methods for each object created
      empOne.empAge(26);
      empOne.empDesignation("Senior Software Engineer");
      empOne.empSalary(1000);
      empOne.printEmployee();

      empTwo.empAge(21);
      empTwo.empDesignation("Software Engineer");
      empTwo.empSalary(500);
      empTwo.printEmployee();
   }
}

अब, दोनों वर्गों को संकलित करें और फिर परिणाम देखने के लिए EmployeeTest चलाएं -

उत्पादन

C:\> javac Employee.java
C:\> javac EmployeeTest.java
C:\> java EmployeeTest
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0

आगे क्या है?

अगले सत्र में, हम जावा में बुनियादी डेटा प्रकारों पर चर्चा करेंगे और जावा अनुप्रयोगों को विकसित करते समय उनका उपयोग कैसे किया जा सकता है।