জাভাতে কনস্ট্রাক্টর কী এবং আপনি এটি কীভাবে ব্যবহার করবেন?

জাভাতে কনস্ট্রাক্টর কী এবং আপনি এটি কীভাবে ব্যবহার করবেন?

অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ, একটি কন্সট্রাকটর হল একটি বিশেষ ফাংশন যা আপনি একটি অবজেক্ট তৈরি করতে কল করেন। কনস্ট্রাক্টরগুলির বেশ কয়েকটি অনন্য বৈশিষ্ট্য রয়েছে যা তাদের কাজ করতে সক্ষম করে।





জাভাতে, আপনি তার শ্রেণীর পরে একজন কনস্ট্রাক্টরের নাম দেন। একটি কন্সট্রাকটর হল একটি পদ্ধতি, যে শ্রেণীতে এটি প্রযোজ্য। জাভা কনস্ট্রাক্টর বিকল্প আচরণ প্রদান করতে ওভারলোডিং ব্যবহার করতে পারে। জাভাতে কনস্ট্রাক্টররা কোড পুনরায় ব্যবহার করতে উত্তরাধিকার ব্যবহার করতে পারে।





তবুও কেন আপনার কনস্ট্রাক্টর দরকার?

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





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

তারপরে আপনি এই শ্রেণীর একটি উদাহরণ তৈরি করতে পারেন এবং এর সাথে যোগাযোগ করতে পারেন:

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

কিন্তু এটি হতে পারে তুলনায় কম সুবিধাজনক এবং শক্তিশালী। এটি অবজেক্ট-ভিত্তিক অনুশীলন যা ডেটাকে ধারণ করে, এটি অননুমোদিত অ্যাক্সেস থেকে রক্ষা করে:



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

এখন কলিং কোড ব্যবহার করতে পারে সেট রেডিয়াস পদ্ধতি এবং এর বাস্তবায়নের বিবরণ সম্পর্কে চিন্তা করতে হবে না:

মেসেঞ্জারে ইমোজি কীভাবে পরিবর্তন করবেন
Circle c = new Circle();
c.setRadius(2);

কনস্ট্রাক্টররা যখন কোনো বস্তু তৈরি করে তখন তাকে তথ্য সরবরাহের আরও ভাল উপায় প্রস্তাব করে। এগুলি প্রায়শই বৈশিষ্ট্যগুলির সূচনার জন্য ব্যবহৃত হয়, যেমন ব্যাসার্ধ এখানে.





সরল নির্মাতাদের উদাহরণ

সবচেয়ে মৌলিক কনস্ট্রাক্টর হল কোন যুক্তি ছাড়াই, যা কিছুই করে না:

public class Circle {
public Circle() {}
}

আরো দেখুন: জাভাতে ক্লাস তৈরি করতে শিখুন





আপনি যদি কোন কনস্ট্রাক্টরকে সংজ্ঞায়িত না করেন, জাভা একটি ডিফল্ট প্রদান করবে যা একই ভাবে আচরণ করে।

কয়েকটি বিষয় লক্ষ্য করুন:

  1. নির্মাতার নাম ক্লাসের নামের সাথে মিলে যায়।
  2. এই কনস্ট্রাক্টর ব্যবহার করে জনসাধারণ অ্যাক্সেস সংশোধক, তাই অন্য যে কোন কোড এটি কল করতে পারে।
  3. একজন কনস্ট্রাক্টর রিটার্ন টাইপ অন্তর্ভুক্ত করে না। অন্যান্য পদ্ধতির বিপরীতে, নির্মাতারা একটি মান ফেরত দিতে পারে না।

কনস্ট্রাক্টররা সাধারণত এক ধরণের সূচনা করে। লক্ষ্য করুন যে উপরের কোডটি ব্যাসার্ধের মান শুরু করে না। এই ক্ষেত্রে, ভাষা স্বয়ংক্রিয়ভাবে এটি শূন্যে সেট করবে। এই শ্রেণী ব্যবহারকারীর ব্যবহার আশা করে setRadius () । 0 এর চেয়ে বেশি দরকারী ডিফল্ট ব্যবহার করতে, আপনি এটি নির্মাণকারীর মধ্যে বরাদ্দ করতে পারেন:

public class Circle {
public Circle() { radius = 1; }
}

এই শ্রেণীর সাথে তৈরি চেনাশোনাগুলির এখন অন্তত একটি প্রকৃত এলাকা থাকবে! কলার এখনও ব্যবহার করতে পারেন setRadius () 1. ব্যতীত অন্য একটি ব্যাসার্ধ প্রদান করতে।

public class Circle {
public Circle(double r) { radius = r; }
}

এখন আপনি জন্ম থেকেই একটি নির্দিষ্ট ব্যাসার্ধ সহ বৃত্ত তৈরি করতে পারেন:

কিভাবে উইন্ডোজ 10 এ ডিস্ক ড্রাইভ খুঁজে পাবেন
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

এটি নির্মাণকারীদের জন্য একটি খুব সাধারণ ব্যবহার। আপনি প্রায়শই প্যারামিটার মানগুলিতে ভেরিয়েবল শুরু করতে এগুলি ব্যবহার করবেন।

কনস্ট্রাক্টর ওভারলোডিং

আপনি একটি ক্লাস সংজ্ঞায় একাধিক কনস্ট্রাক্টর নির্দিষ্ট করতে পারেন:

public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

এটি কলিং কোডকে কীভাবে বস্তু তৈরি করতে হয় তার একটি পছন্দ দেয়:

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

একটু বেশি জটিল বৃত্তের সাথে, আপনি আরো আকর্ষণীয় নির্মাতাদের অন্বেষণ করতে পারেন। এই সংস্করণটি তার অবস্থান সংরক্ষণ করে:

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

আপনি এখন বিনা আর্গুমেন্ট, একক ব্যাসার্ধ, বা ব্যাসার্ধের পাশাপাশি x এবং y স্থানাঙ্ক ছাড়া একটি বৃত্ত তৈরি করতে পারেন। এটি একই ধরণের ওভারলোডিং যা জাভা যে কোনও পদ্ধতির জন্য সমর্থন করে।

কনস্ট্রাক্টর চেইন

কিভাবে একটি বৃত্ত তৈরি করে, আরেকটি উপর ভিত্তি করে? এটি আমাদের সহজেই বৃত্তগুলি অনুলিপি করার ক্ষমতা দেবে। নিম্নলিখিত ব্লক লক্ষ্য করুন:

public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

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

public Circle(Circle c) {
this(c.x, c.y, c.radius);
}

এটি কনস্ট্রাক্টর শৃঙ্খলের একটি ফর্ম, একজন কনস্ট্রাক্টরকে অন্য থেকে ডেকে আনা। এটি কম কোড ব্যবহার করে এবং একটি অপারেশনকে ডুপ্লিকেট করার পরিবর্তে কেন্দ্রীভূত করতে সহায়তা করে।

অভিভাবক কনস্ট্রাক্টরকে কল করা

কনস্ট্রাক্টর শৃঙ্খলের অন্য রূপটি ঘটে যখন একজন কনস্ট্রাক্টর তার মূল শ্রেণীর একজন কনস্ট্রাক্টরকে ডাকে। এটি স্পষ্ট বা অন্তর্নিহিত হতে পারে। একটি প্যারেন্ট কনস্ট্রাক্টরকে স্পষ্টভাবে কল করতে, ব্যবহার করুন সুপার কীওয়ার্ড:

super(x, y);

একটি আকৃতি শ্রেণী চেনাশোনা অভিভাবক হিসাবে কাজ কল্পনা করুন:

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

এটি সমস্ত আকারের জন্য সাধারণ অবস্থান পরিচালনা করে কারণ এটি কার্যকারিতা যা তারা সবাই ভাগ করে। এখন সার্কেল ক্লাস তার পিতা -মাতার কাছে অবস্থান পরিচালনা করতে পারে:

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

সুপারক্লাস নির্মাণ একটি অত্যন্ত গুরুত্বপূর্ণ দিক জাভাতে উত্তরাধিকার । আপনি স্পষ্টভাবে কল না করলে ভাষা ডিফল্টভাবে এটি প্রয়োগ করে সুপার আপনার নির্মাতাদের মধ্যে।

কনস্ট্রাক্টরগুলিতে অ্যাক্সেস মোডিফায়ার

নির্মাতারা তাদের স্বাক্ষরে একটি অ্যাক্সেস সংশোধনকারী অন্তর্ভুক্ত করতে পারেন। অন্যান্য পদ্ধতির মতো, এটি সংজ্ঞায়িত করে যে কোন ধরণের কলার কনস্ট্রাক্টর অ্যাক্সেস করতে পারে:

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

এটি একটি আরও জটিল উদাহরণ, তাই এটি বোঝার জন্য যত্ন নিন:

  • ক্লাসটি বিমূর্ত নয়, তাই এটি থেকে তাত্ক্ষণিকভাবে সম্ভব।
  • কন্সট্রাকটর প্রাইভেট তাই শুধুমাত্র এই ক্লাস নিজেই একটি নতুন উদাহরণ তৈরি করতে পারে।
  • একটি স্থির সম্পত্তি এবং পদ্ধতির মাধ্যমে, ক্লাসটি কলকারীদের কাছে নিজের একক, অনন্য উদাহরণ প্রকাশ করে।

অবজেক্ট তৈরি করতে জাভাতে কনস্ট্রাকটর ব্যবহার করুন

অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এর জন্য কনস্ট্রাক্টর অত্যাবশ্যক। তারা আপনাকে বস্তু তৈরি করতে দেয়, যা অপরিহার্য!

জাভাতে, কনস্ট্রাক্টরগুলি অন্যান্য পদ্ধতির মতো দেখায় এবং একইভাবে কাজ করে। আপনার ডিফল্ট কনস্ট্রাক্টর, ওভারলোডিং এবং কনস্ট্রাক্টর চেইনের চারপাশে বিশেষ নিয়ম মনে রাখা উচিত। যদি কনস্ট্রাক্টর আপনার জন্য নতুন হয়, তাহলে আপনি শুরু করার সময় আপনার শেখা উচিত এমন অন্যান্য মূল জাভা ধারণাগুলি পড়তে পারেন।

শেয়ার করুন শেয়ার করুন টুইট ইমেইল 10 মূল জাভা ধারণাগুলি শুরু করার সময় আপনার শেখা উচিত

আপনি একটি GUI লিখছেন, সার্ভার-সাইড সফটওয়্যার তৈরি করছেন, অথবা অ্যান্ড্রয়েড ব্যবহার করে একটি মোবাইল অ্যাপ্লিকেশন, জাভা শেখা আপনাকে ভালভাবে কাজ করবে। আপনাকে শুরু করতে সাহায্য করার জন্য এখানে কিছু মূল জাভা ধারণা রয়েছে।

পরবর্তী পড়ুন
সম্পর্কিত বিষয়
  • প্রোগ্রামিং
  • জাভা
  • কোডিং টিপস
লেখক সম্পর্কে ববি জ্যাক(58 নিবন্ধ প্রকাশিত)

ববি একজন প্রযুক্তি উত্সাহী যিনি দুই দশকের বেশিরভাগ সময় সফটওয়্যার ডেভেলপার হিসেবে কাজ করেছেন। তিনি গেমিং সম্পর্কে উত্সাহী, সুইচ প্লেয়ার ম্যাগাজিনে রিভিউ এডিটর হিসাবে কাজ করছেন এবং অনলাইন প্রকাশনা এবং ওয়েব ডেভেলপমেন্টের সকল দিকের মধ্যে নিমজ্জিত।

আমার পিসি পরীক্ষায় কি আপগ্রেড করা উচিত?
ববি জ্যাক থেকে আরো

আমাদের নিউজলেটার সদস্যতা

প্রযুক্তি টিপস, রিভিউ, ফ্রি ইবুক এবং এক্সক্লুসিভ ডিলের জন্য আমাদের নিউজলেটারে যোগ দিন!

সাবস্ক্রাইব করতে এখানে ক্লিক করুন