1. বস্তু

জাভাতে সবকিছুই একটি অবজেক্ট।

আরও সঠিকভাবে, জাভাতে খুব কম জিনিস রয়েছে যা অবজেক্ট নয়। উদাহরণস্বরূপ, আদিম প্রকার। কিন্তু এটি নিয়মের একটি বরং বিরল ব্যতিক্রম।

সুতরাং একটি বস্তু কি?

একটি বস্তু এমন একটি সত্তা যা ডেটা প্রক্রিয়াকরণের পদ্ধতিগুলির সাথে ডেটাকে একত্রিত করে । আমরা যখন "ডেটা" বলি, তখন অবশ্যই আমরা ভেরিয়েবলকে বুঝি।

একটি বস্তুর ভেরিয়েবলকে তার "ডেটা" বা "স্টেট" বলা হয়।

একটি বস্তুর পদ্ধতিগুলিকে তার "আচরণ" বলা হয়। একটি বস্তুর অবস্থা (ভেরিয়েবল) শুধুমাত্র সেই বস্তুর পদ্ধতি ব্যবহার করে পরিবর্তন করা প্রথাগত। একটি বস্তুর ভেরিয়েবল সরাসরি পরিবর্তন করা (এর পদ্ধতি ব্যবহার না করা) খারাপ ফর্ম হিসাবে বিবেচিত হয়।

প্রতিটি বস্তুর পাশাপাশি প্রতিটি ভেরিয়েবলের একটি প্রকার রয়েছে । এই ধরনটি একবার নির্ধারিত হয় যখন বস্তুটি তৈরি হয় এবং ভবিষ্যতে পরিবর্তন করা যাবে না। একটি বস্তুর ধরন হল তার শ্রেণী।

প্রতিটি বস্তুর উদাহরণ ভেরিয়েবলের নিজস্ব অনুলিপি (ক্ষেত্র) রয়েছে। যদি একটি নন-স্ট্যাটিক int একটি ভেরিয়েবল একটি ক্লাসে ঘোষণা করা হয় এবং আপনার প্রোগ্রামটি সেই শ্রেণীর 10টি অবজেক্ট তৈরি করে, তাহলে প্রতিটি অবজেক্টের নিজস্ব int একটি ভেরিয়েবল থাকবে।

একটি বস্তুর সাথে মিথস্ক্রিয়া করা

একটি বস্তুর সাথে কাজ করার সবচেয়ে সুবিধাজনক উপায় হল একটি ভেরিয়েবলের মধ্যে এটির একটি রেফারেন্স সংরক্ষণ করা এবং তারপরে সেই ভেরিয়েবলে পদ্ধতিগুলি কল করা। এটি আপনার কাছে পরিচিত দেখাবে:

variable.method()

কোথায় variableএকটি ভেরিয়েবল যা একটি বস্তুর একটি রেফারেন্স সংরক্ষণ করে, এবং methodসেই শ্রেণীর একটি পদ্ধতি।

আপনি যদি একটি বস্তুর একটি ক্ষেত্র (ভেরিয়েবল) উল্লেখ করতে চান, তাহলে আপনাকে ডট অপারেটর ব্যবহার করতে হবে :

variable.field

কোথায় variableএকটি ভেরিয়েবল যা একটি বস্তুর একটি রেফারেন্স সংরক্ষণ করে, এবং fieldএকটি উদাহরণ পরিবর্তনশীল (ক্ষেত্র)।


2. newঅপারেটর

একটি নির্দিষ্ট শ্রেণীর একটি বস্তু তৈরি করতে, আপনাকে newঅপারেটর ব্যবহার করতে হবে। সাধারণভাবে, একটি বস্তু তৈরি করতে এটি দেখতে কেমন লাগে তা এখানে:

Class variable = new Class(arguments);

যেখানে Classভেরিয়েবলের ক্লাসের নামের variableপাশাপাশি অবজেক্টের ক্লাসের নামও তৈরি করতে হবে। এবং variable একটি পরিবর্তনশীল যা তৈরি করা বস্তুর একটি রেফারেন্স সংরক্ষণ করে। এবং argumentsকনস্ট্রাক্টরের কাছে পাঠানো আর্গুমেন্টের একটি কমা-ডিলিমিটেড তালিকার জন্য একটি স্থানধারক।

পাস করা যেতে পারে এমন আর্গুমেন্টের নির্দিষ্ট তালিকা প্রোগ্রামাররা যারা ক্লাস লেখেন তাদের দ্বারা নির্ধারিত হয়।

আপনি আগে অবজেক্ট তৈরি করেছেন এবং এমনকি এই বিশেষ গঠন ব্যবহার করেছেন। আপনি ভুলে যাননি, আমি আশা করি?

Scanner console = new Scanner(System.in);
int x = console.nextInt();

Scanner console— এটি একটি consoleভেরিয়েবল তৈরি করে যার ধরন হল Scanner। - এটি একটি নতুন বস্তু তৈরি করে। এবং অ্যাসাইনমেন্ট অপারেটর নতুন তৈরি করা অবজেক্টের রেফারেন্সের সমান পরিবর্তনশীল সেট করে।new Scanner(System.in)Scannerconsole

দ্বিতীয় লাইনে, আমরা ভেরিয়েবল ব্যবহার করে অবজেক্টের nextInt()মেথডকে কল করি , যা অবজেক্টের রেফারেন্স সংরক্ষণ করে ।ScannerconsoleScanner

বস্তু সৃষ্টির উদাহরণ:

কোড বর্ণনা
String s = new String("Hello");
একটি Stringবস্তু তৈরি করুন
Scanner console = new Scanner("");
একটি Scannerবস্তু তৈরি করুন
int[] data = new int[10];
একটি তৈরি করুন : উপাদানগুলির int[]একটি ধারক10 int

তৈরি করা অবজেক্টকে ক্লাসের অবজেক্ট বা ক্লাসের ইনস্ট্যান্স বলা হয় , আর ক্লাসকে বলা হয় অবজেক্টের ক্লাস । উদাহরণস্বরূপ, sভেরিয়েবল ক্লাসের একটি উদাহরণের একটি রেফারেন্স সংরক্ষণ করে String



3. ক্লাস চালু করা

আমি মনে করি আপনি ইতিমধ্যেই দেখেছেন যে অন্যান্য প্রোগ্রামারদের দ্বারা লিখিত ক্লাসগুলি ব্যবহার করা কতটা সুবিধাজনক। কিন্তু আপনার নিজের ক্লাস লিখতে কি হবে?

আপনি কিভাবে জানবেন কখন এবং কোথায় আপনার নিজের ক্লাসের প্রয়োজন এবং কিভাবে একটি তৈরি করবেন?

প্রোগ্রামাররা সাধারণত তাদের নিজস্ব ক্লাস তৈরি করে যখন তারা প্রোগ্রামে একটি নতুন সত্তা আনতে চায়। যে শব্দ বিভ্রান্তিকর? তারপর আমি ব্যাখ্যা করার চেষ্টা করব, তবে আমি অনেক দূর থেকে শুরু করতে যাচ্ছি।

ডেটা গ্রুপ

একটু সরলীকরণ করলে, আমরা বলতে পারি যে জাভাতে একটি অবজেক্ট মেমরির একটি ব্লক যা একটি ক্লাসে ঘোষিত ভেরিয়েবল ধারণ করে (উদাহরণ ক্ষেত্র)। অথবা, অন্য কথায়, একটি গ্রুপে মিলিত ভেরিয়েবল।

ধরা যাক আপনার প্রোগ্রামটিকে পয়েন্টের স্থানাঙ্ক সংরক্ষণ করতে হবে 100এবং সেগুলিকে স্ক্রিনে প্রদর্শন করার জন্য একটি পদ্ধতির প্রয়োজন। এটি অ্যারে ব্যবহার করে করা যেতে পারে। উদাহরণস্বরূপ, এই মত:

class Solution
{
   public static void printPoints(int[] x, int[] y, int[] color)
   {
     for (int i = 0; i < x.length; i++)
       System.out.println("Color of (" + x[i] + ", " + y[i] + ") = " + color[i]);
   }

   public static void main(String[] args)
   {
     int[] x = new int[100];
     int[] y = new int[100];
     int[] color = new int[100];
     printPoints(x, y, color);
   }
}

এটি অনেক বেশি সুবিধাজনক হবে যদি আমাদের কাছে একটি বিন্দু সম্পর্কে সমস্ত তথ্য সংরক্ষণ করার জন্য একক প্রকার থাকে: x, y, color. যদি এই ধরনের একটি জাভাতে বিদ্যমান না থাকে তবে আপনি এটি নিজেই তৈরি করতে পারেন।

Pointএটি করার জন্য, আমরা একটি ক্লাসের জন্য কোড লিখব :

public class Point
{
   public int x;
   public int y;
   public int color;
}

এখন উপরের কোডটি এইভাবে পুনরায় লেখা যেতে পারে:

class Solution
{
   public static void printPoints(Point[] points)
   {
     for (int i = 0; i < points.length; i++)
       System.out.println("Color of (" + points[i].x + ", " + point[i].y + ") = " + points[i].color);
   }

   public static void main(String[] args)
   {
     Point[] data = new Point[100];
     for (int i = 0; i < data.length; i++)
       data[i] = new Point();
     printPoints(data);
   }
}

এখন ক্লাসে একটি পদ্ধতি যোগ করা যাক Pointযা বস্তু সম্পর্কে তথ্য প্রদর্শন করবে:

public class Point
{
   public int x;
   public int y;
   public int color;
   public void print()
   {
     System.out.println("Color of (" + x + ", " + y + ") = " + color);
   }
}

এখন Solutionক্লাস এই মত দেখায়:

class Solution
{
   public static void printPoints(Point[] points)
   {
     for (int i = 0; i < points.length; i++)
       points[i].print();
   }

   public static void main(String[] args)
   {
     Point[] data = new Point[100];
     for (int i = 0; i < data.length; i++)
       data[i] = new Point();
     printPoints(data);
   }
}

আমরা দক্ষতার সাথে বিন্দুর স্থানাঙ্ক এবং রঙের তথ্য Pointক্লাসের ভিতরে লুকিয়ে রেখেছিলাম যে পদ্ধতিটি পয়েন্টের অবস্থা প্রদর্শন করে।

ক্লাসগুলি প্রোগ্রাম জটিলতা পরিচালনা করার একটি উপায়। একটি বড় প্রোগ্রাম কম জটিল হয়ে ওঠে যখন এটি অনেক ছোট ক্লাসে বিভক্ত হয়।


4. পরিবর্তনযোগ্য বনাম অপরিবর্তনীয় বস্তু

একসময়, আমরা জাভাতে ধ্রুবক অধ্যয়ন করেছিলাম এবং একটি উপসংহারে পৌঁছেছিলাম যা খুব স্বস্তিদায়ক নয়। ধ্রুবকগুলি আপনাকে ভেরিয়েবলগুলিকে পরিবর্তন করা থেকে রক্ষা করতে দেয়, কিন্তু তারা যে বস্তুগুলিকে উল্লেখ করে সেগুলির পরিবর্তনগুলিকে প্রতিরোধ করতে পারে না৷

এই সমস্যা সমাধানের জন্য, জাভা ধ্রুবক বস্তু নিয়ে এসেছিল। অথবা, যেমন এগুলিকে প্রায়শই বলা হয়, অপরিবর্তনীয় বস্তু।

যাইহোক, আপনি ইতিমধ্যে এমন ক্লাস জানেন, যার বস্তুগুলি পরিবর্তন করা যায় না: String. একটি Stringবস্তু সৃষ্টি হওয়ার পর চিরতরে অপরিবর্তিত থাকে। এবং কিভাবে জাভা এর নির্মাতারা এটি অর্জন করেছেন?

প্রথমত, ক্লাসের সমস্ত ভেরিয়েবল Stringলুকানো হয়, অর্থাৎ ঘোষিত private

দ্বিতীয়ত, আপনি Stringক্লাসের উত্তরাধিকারী হতে পারবেন না: এর শ্রেণী ঘোষণায় finalসংশোধক অন্তর্ভুক্ত রয়েছে।

তৃতীয়, এবং সবচেয়ে মজার বিষয় হল, ক্লাসের সমস্ত পদ্ধতি String, যা, তাত্ত্বিকভাবে, আপনি বিদ্যমান বস্তুটি পরিবর্তন করার আশা করবেন, আসলে এটি পরিবর্তন করবেন না, বরং একটি নতুন ফিরিয়ে দেবেন।

উদাহরণস্বরূপ, toUpperCase()পদ্ধতিটি বড় হাতের স্ট্রিংয়ের সমস্ত অক্ষর তৈরি করে। কিন্তু যে বস্তুর উপর পদ্ধতিটি বলা হয় সেটি পরিবর্তন করার পরিবর্তে, এটি Stringবড় অক্ষর সমন্বিত একটি নতুন বস্তু প্রদান করে:

String text = "This is a very important message";
String message = text.toUpperCase();

এই কোডটি কার্যকর করার পরে এটি মেমরিতে থাকবে:

পরিবর্তনযোগ্য বনাম অপরিবর্তনীয় বস্তু

তাই যেকোনো পদ্ধতিতে আপনার স্ট্রিংগুলিকে নির্দ্বিধায় পাস করুন: কেউ তাদের পরিবর্তন করবে না।