coading

প্রোগ্রামিংএ Constructor এর ব্যবহার এবং আলোচনা

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

  • Function হল Group of Code যা একটি নির্দিষ্ট কাজ করে অন্যদিকে Constructor এর কাজ হল class এর Instance তৈরি করা।
  • Function এর  return type থাকে কিন্তু Constructor এর কোন return type নেই এমনকি void ও ব্যবহার করা যায় না ।
  • Function এ final, static, abstract এই ধরনের Modifier গুলো ব্যবহার হয় কিন্তু Constructor এ এই ধরনের Modifier গুলো ব্যবহার করা যায় না।
  • Function এ this, super কিওয়ার্ড ব্যবহার হয় Working Class এবং Parent Class এর Instance কে Refer করার জন্য অন্যদিকে constructor এ this, super কিওয়ার্ড ব্যবহার হয় Working Class এবং Parent Class এর Constructor কে Call করার জন্য।

এবার নিচের উদাহরণটি খেয়াল করা যাক………

Public class human{
char name;
int study;
int sleep;

human(int x,int y,int z){
name=x;
study=y;
sleep=z;

}
}

Public static void main(String[] args)
{
Human A1; // CAll default constructor
Human A2= new human("hasan", 12, 6);

}

মনে করি human নামে একটি class আছে, যেটি একজন মানুষকে represent করে। human class এর কিছু বৈশিষ্ট্য বা attribute আছে, যেমন name , study, sleep ইত্যাদি ।কথা হচ্ছে Constructor নিয়ে। আমরা যদি constructor ডিক্লিয়ার না করি তাহলে compiler by default একটা constructor  ডিফাইন করে দেয় কিন্তু তাতে কোন parameter থাকে না । এর মানে হচ্ছে যখন এই class টাইপের কোন object ডিক্লিয়ার করা হবে তখন constructor  টি শুধু বলে দিবে যে এই object এর এই এই বৈশিষ্ট আছে কিন্তু তা কিভাবে, বা কি পরিমানে বা কতটুকু আছে তা বলে দিতে পারবে না । কিন্তু আমরা যদি parameter সহ constructor ডিক্লিয়ার করি তখন কোথাও যখন এই class টাইপের কোন object ডিক্লিয়ার করা হবে তখন constructor  টি এই object এর কি কি বৈশিষ্ট আছে এবং কিভাবে, বা কি পরিমানে বা কতটুকু আছে তা বলে দিতে পারবে ।

যেমন human class এর বেলায় এর নাম কি, কোথায় পড়ে, কতটুকু ঘুমায় সেগুলোও বলে দিতে পারবে তবে তা আপনা আপনি ত আর পারবে না আমরাই argument হিসেবে এই সব value দিয়ে দিব ।

S0, constructor is important to deal with objects and classes .

আর একটি গুরুত্বপূর্ন্য বিষয় constructor এর কোন return type নেই । এর কারন হচ্ছে সাধারণত কোন একটি method বা function  এর বেলায় return type থাকে কারণ ঐ method  এর কাজ শেষে সে কোন ডাটা return করে কিন্তু constructor  যখন কল হয় তখন সে সংশ্লিষ্ট object এর বিভিন্ন attribute কে রিটার্ন করে তথা এই object কেই রিটার্ন করে । যেজন্য constructor এর বেলায় আলাদা করে কোন return type ডিক্লিয়ার করার প্রয়োজন নেই ।

Function এবং Constructor উভয়েই this কিওয়ার্ড ব্যবহার করে থাকে কিন্তু ভিন্ন ভিন্ন কারনে।

Function এ this ব্যবহার করা হয় Function টি যেই Class এর অন্তর্ভুক্ত তার কোন Instance কে Refer করার জন্য। তবে Static Function হলে this ব্যবহার করা যাবে না। কারন Static Function কোন Class এর Instance কে Refer করে না। উদাহারনটি দেখলে বিষয়টি আরও পরিষ্কার হবে।

class GrandParent {
int a;

GrandParent(int a) {
this.a = a; //খেয়াল করলে দেখবেন Constructor টির parameter এবং Class এর Attribute Variable টি একই রকম। এখন এই দুয়ের মধ্যে পার্থক্য করার জন্য Class এর Attribute Variable টিকে Constructor এর ভিতরে (this.a )দিয়ে parameter (a) এর থেকে আলাদা করা হয়েছে। 
}
}

class Parent extends GrandParent {
int b;

Parent(int a, int b) {
this.b = b;
}

void show() {
System.out.println("GrandParent's a = " + a);
System.out.println("Parent's b = " + b);
}
}

class Child {
public static void main(String[] args) {
Parent object = new Parent(8, 9);
object.show();
}
}

 

অন্যদিকে Constructor এ this ব্যবহার করা হয় একই Class এর অন্য Constructor (ভিন্ন parameter বিশিষ্ট) কে আলোচ্য Constructor এ Call করার জন্য। উদাহরনের মাধ্যমে দেখা যাক।

 

public class Student {
String name;
Student(String input) {
name = input;
}
Student() {
this("shovon"); //খেয়াল করলে দেখবেন এখানে this দিয়ে উপরে যে Constructor টি রয়েছে সেটিকে Call করা হয়েছে । মনে রাখতে হবে Constructor এ this ব্যবহার করতে হলে সেটিকে প্রথম লাইনেই লিখতে হবে নাহয় Compilation Error দিবে। 
}
public static void main(String args[]) {
Student p1 = new Student("Jahangir Alam");
Student p2 = new Student();
}
}

 

একইভাবে Function এবং Constructor উভয়েই super কিওয়ার্ড ব্যবহার করে থাকে কিন্তু ভিন্ন ভিন্ন কারনে। Function এ super ব্যবহার করা হয় immediate  parent Class এর কোন Method/Function কে আলোচ্য Class এ Override করার জন্য।(Override এবং Overload এক জিনিস নয়,এটি আমরা অন্যদিন দেখব)।

 

class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}

class Sample extends Base
{
int a = 200;
void Show()
{
super.Show();// parent class “base” এর show method কে এখানে override করা হয়েছে। 
System.out.println(a);
}
public static void Main(String[] args)
{
new Sample().Show();
}
}

Output
100
200

 

অন্যদিকে Constructor এ super ব্যবহার করা হয় immediate parent class এর Constructor কে কল করার জন্য।

 

public class parent {
parent() {}
}
class Child extends parent {
Child()
{
super(); // parent class এর constructor কে Call করা হয়েছে। মনে রাখতে হবে Constructor এ super ব্যবহার করতে হলে সেটিকে প্রথম লাইনেই লিখতে হবে নাহয় Compilation Error দিবে। 
}
}

আশা করি Constructor নিয়ে আর ঝামেলা হবে না। কিন্তু অনেক Practice না করলে সবকিছু আবার ভুলে যাওয়ার সম্ভাবনা আছে।

So Let’s Code……… :)

Note: কিছু কিছু উদাহরণ বিভিন্ন ওয়েবসাইট থেকে নেয়া হয়েছে যেন Proper Example টি দিয়ে বুঝানো যায়। এখানে Java , C++ দুইটাই ব্যবহার করা হয়েছে তবে যাই ব্যবহার করা হোক বেসিক বিষয় একই রকম হবে java , C++  এ ।আর একটি বিষয়, লেখায় বাংলা এবং ইংরেজি মিলেমিশে একাকার হয়ে গেছে। কারনতো বুঝতেই পারছেন প্রোগ্রামিং যেহেতু ইংরেজিতে হয় তাই প্রোগ্রামিং সম্পর্কিত শব্দগুলো ইংরেজিতেই লেখা হয়েছে।

References:

http://www.programmingsimplified.com/java/tutorial/java-constructor-tutorial

http://www.leepoint.net/notes-java/oop/constructors/constructor.html

http://www.javaworld.com/article/2076204/core-java/understanding-constructors.html

http://www.tutorialspoint.com/cplusplus/cpp_constructor_destructor.htm

http://stackoverflow.com/questions/3767365/super-in-java

430890

Happy Coading  :) :)

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *