Search Here

Saturday, April 26, 2014

জাভা প্রোগ্রামিং [পর্ব-১৪] ::পলিমরফিজম

আজকে আমরা যেই জিনিসটি নিয়ে কথা বলব তা হল পলিমরফিসম(Polymorphism)।এটা শুধু জাভা না যেকোন অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ অনেক গুরুত্বপুর্ন একটি বিষয়।
সাধারনত পলিমরফিজম কথাটির অর্থ হল বহুরুপতা।যেমন ধরুন কার্বণ এর ২টি রুপ আছেঃ গ্রাফাইট এবং হীরক। কিন্তু ২টি রুপই কিন্তু আহ্মরিক অর্থে কার্বণ।
ঠিক তেমনি প্রোগ্রামিং ভায়ায়ও পলিমরফিজম বলতে বুঝায় একটি জিনিস(ফাংশন) এর কয়েকটি রুপ।
সহজ বাংলায় বললে দাঁড়ায় আমারা একি নামের ফাংশন অনেক গুলো ক্লাসে ব্যবহার করতে পারব কিন্তু এদের প্রত্যেক এর কাজ ভিন্ন ভিন্ন হবে।
কি আমার কথা মাথার উপর দিয়ে যাচ্ছে? আসুন তাহলে জটপট করে একটি ছোট কোড দেখে ফেলি তাহলে আমাদের সব কনফিউশন দূর হয়ে যাবে।
Apple class:

public class apple {
public void printme(){
System.out.println("I love Apple ");
 }
}
Microsoft class: 
public class Microsoft extends apple {
public void printme(){
System.out.println("I love Microsoft ");
 }
}
Facebook class:
public class facebook extends apple {
public void printme(){
System.out.println("I love Facebook ");
 }
}
Google class:
public class google {
public static void main(String[] args) {
apple ap1=new Microsoft();
apple ap2=new facebook();
ap1.printme();
ap2.printme();
}
 }
উপরের উদাহরনে “apple” হল প্যারেন্ট ক্লাস আর “microsoft” এবং “facebook” হল চাইল্ড ক্লাস।
তিনটি ক্লাসেরই একি নামের ফাংশন রয়েছে। পরবর্তীতে আমরা “google” ক্লাস থেকে “apple” ক্লাসের টাইপের
“microsoft” এবং “facebook” ক্লাসের ২টি অব্জেক্ট তৈরী করলাম। এখন যখন আমরা এই অবজেক্ট গুলোর সাহায্যে
“printme” ফাংশঙ্কে কল করলাম তখন আমরা দেখতে পেলাম যে তা যথাক্রমে “microsoft” এবং “” ক্লাসের 
“facebook” ফাংশনকে কল করছে। অর্থাৎ এখানে কার্বণ হল “apple” ক্লাস এর “printme” ফাংশন আর গ্রাফাইট 
এবং হীরক হল যথাক্রমে “google” এবং “facebook” ক্লাসের “printme” ফাংশন। এখানে আমরা দেখতে পেলাম যে
একই নামের ৩টি ফাংশন রয়েছে ৩টি ক্লাসে এবং ফাংশনগুলোর কাজ ও ভিন্ন ভিন্ন। এই জিনিস টিকেই বলা হয় পলিমরফিজম।

জাভা প্রোগ্রামিং [পর্ব-১৩] :: ইনহেরিটেন্স

আজকে আমরা যে জিনিসটি নিয়ে আলোচনা করব তা হল জাভাতে ইনহেরিটেন্স। যেকোন অব্জেক্ট অরিয়েন্টেড প্রোগ্রামিং লাংগুয়েজেই এই জিনিসটি অনেক গুরুত্যপুর্ন।
ইনহেরিটেন্স বলতে বুঝায় উত্তরাধিকারি হওয়া। যেমন আপনি আপনার বাবার উত্তরাধিকারি।মানে আপনি চাইলে আপনার বাবার সম্পত্তি ব্যবহার করতে পারেন। ঠিক তেমনি প্রোগ্রামিং এ যখন একটি ক্লাস আরেকটি ক্লাসের সম্পত্তি(ভেরিয়েবল অথবা ফাংশন) ব্যবহার করে  তখন তাকে ইনহেরিটেন্স বলে।
আগে জেনে নেই ইনহেরিটেন্স এর গুরুত্য কতটুকু।এর জন্য নিচের প্রোগ্রামটি দেখুনঃ
এখানে facebook ক্লাস ডিক্লায়ার করা হয়েছে। এবং এর একটি who() নামে ফাংশন ও ডিক্লয়ার করা হয়েছে।এবার নিচের কোডটা দেখি।
এখানে microsoft ক্লাস ডিক্লায়ার করা হয়েছে। এবং এর একটি who() নামে ফাংশন ও ডিক্লয়ার করা হয়েছে।এবার ধরুন আমাদের এরকম facebook এবং Microsoft এর মত ১০ টি ক্লাস আছে যার প্রতিটি ক্লাস এই who() ফাংশনটি আছে এবং প্রতিটি who() ফাংশন এর কাজ একিই। অর্থাৎ “I am the best IT company” বাক্যটি প্রিন্ট করা। এবার আপানাকে কেউ এসে বলল যে প্রতিটি ক্লাসের who() ফাংসন এর যে বাক্যটি প্রিন্ট করার কথা তা না করে “Google is the best IT company” বাক্যটি প্রিন্ট করতে বলা হল। তাহলে চিন্তাই করতে পারছেন আপনাকে কত কস্ট করতে হবে।প্রতিটি ক্লাসের who() ফাংশন কে পরিবর্তন করতে হবে।যেটি অনেক সময় সাপেহ্ম এবং কস্ট সাধ্য। এর থেকে পরিত্রানের উপায়ই হল ইনহেরিটেন্স।এর জন্য আমরা নিচের ক্লাস টি লহ্ম্য করিঃ
এখানে apple নামক ক্লাস ডিক্লায়ার করা হয়েছে।এবং এর ভিতর who() নামক ফাংশন ডিক্লায়ার করা হয়েছে।
এবার আগে আনাদের লেখা facebook এবং Microsoft ক্লাসের কিছু পরিবর্ত্ন আনি।
"public class facebook extends apple{

}"
"public class microsoft extends apple {

}"
অর্থাৎ আমরা শুধু who() নামক ক্লাস টা সরিয়ে দিয়েছি এবং extends কিওয়ার্ড এর সাহায্যে apple ক্লাস কে ইনহেরিট করা হয়েছে।এখানে বলে রাখা ভাল যে ক্লাসকে ইনহেরিট করা হয় তাকে বলে parent class আর যে ইনহেরিট করে তাকে বলে child class এখানে apple হল parent class facebook, microsoft হল child class। এবার আমরা আরেকটি ক্লাস তৈরি করব google নামে। দেখে নেই গুগল ক্লাসের কোডঃ
এখানে গুগল ক্লাসে facebook Microsoft ক্লাসের আলাদা আলাদা অব্জেক্ট তৈরি করা হয়েছে।পরে ওই অব্জেক্ট এর সাহায্যে who() ফাংশনকে কল করা হয়েছে। খেয়াল করলে দেখবেন যে Microsoft অথবা facebook এই দুটির কোনটিতেই কিন্তু who() ফাংশনটি লেখা নেই।তাও প্রোগ্রামটি সঠিক আউটপুট দিচ্ছেঃ
I am the best IT company
I am the best IT company
আজ এ পর্যন্তই। সবাই ভাল থাকবেন।

জাভা প্রোগ্রামিং [পর্ব-১২] :: জাভাতে this অপারেটর এর ব্যবহার

প্রথমেই আসি this অপারেটর  নিয়ে আলোচনায়। তার আগে আমরা নিচের প্রোগ্রামটি দেখিঃ
এখানে facebook নামক একটি ক্লাসে কিছু কোড লিখা হয়েছে। এবার আবার নিচের কোডটি দেখুন।
এবার কোড টি রান করালে নিচের মত আউটপুট দেখতে পারবেঃ
The value of x is: 0 value of y is:0 value of z is: 0
আসলে আমরা যেই প্রোগ্রামটি তৈরি করেছি তার কাজ হলঃপ্রথমে facebook ক্লাস তার জন্য একটি কন্সট্রাক্টর ডিক্লায়ার করেছে। এবং কন্সট্রাক্টর এ যেই ভেরিএয়েবল গুলি আসছে তা প্রিন্ট করছে show_me() ফাংশন। আর Microsoft ক্লাস facebook ক্লাসের একটি অব্জেক্ট  তৈরি করেছে। অব্জেক্ট তৈরির সময় প্যারামিটার হিসাবে কিছু ভ্যালু পাঠানো হয়েছে। পরে এই অব্জেক্ট এর সাহায্যে show_me() ফাংশন কে কল করা হয়েছে। হিসাবে আউটপুট দেখানোর কথা আমাদের যেই ভ্যালুগুলি আমরা প্যারামিটার হিসাবে অব্জেক্ট এর সাথে পাস করেছি তা কিন্তু x,y,z তিনটির ভ্যলুই ০ দেখাচ্ছে। কারন টা কি বলতে পারবেন??
আসলে এখানে facebook কন্সট্রাক্টরে আরগুমেন্ট হিসাবে যেই ভেরিয়েবল ব্যবহার করা হয়েছে আবার লোকাল ভেরিয়েবলেও একি জিনিস ব্যাবহার করা হয়েছে। তাই x=x,y=y,z=z বলতে কি বুঝানো হচ্ছে তা কন্সট্রাক্টর বুঝতে পারছেনা। তাই মান হিসাবে Garbage ভ্যালু দেখচ্ছে।
এর থেকে পরিত্রান এর উপায় হল this অপারেটর এর ব্যবহার।এবার নিচের facebook ক্লাসের প্রোগ্রামটি দেখিঃ
দেখতেই পাচ্ছি যে কন্সট্রাক্টরে x,y,z এর মান লোকাল ভেরিয়েবল এ কিভাবে বসানো হয়েছে। এখানে this.x বলতে বুঝানো হয়েছে যে এই ক্লাসের x সোজা কথায় this বলতে বুঝায় এই ক্লাসের একটি রিপ্রেজেন্টেটিভ।ঠিক একি ভাবে this.y বলতে বুঝায় এই ক্লাসের y.
আজ এ পর্যন্তই।সবাই ভাল থাকবেন।


জাভা প্রোগ্রামিং [পর্ব-১১] :: কন্সট্রাক্টর ওভার রাইডিং



আজকে আমরা জাভাতে কন্সট্রাক্টর কিভাবে ওভাররাইড করতে হয় তা আমরা জানব। ওভার রাইড বলতে বুঝায় কোন ফাংশন এর নাম একি রেখে শুধু প্যারামিটার পরিবর্তন করে দিয়ে কিভাবে একি নামের ভিন্ন ভিন্ন ফাংশন তৈরি করা যায়।আচ্ছা তাহলে একটু কস্ট করে নিচের কোডটা দেখিঃ

"public class facebook {
    int x;
    int y;
    int z;
    facebook(int i)
    {
        x=i;
        y=0;
        z=0;
    }
    facebook(int i,int j)
    {
        x=i;
        y=j;
        z=0;
    }
    facebook(int i,int j,int k)
    {
        x=i;
        y=j;
        z=k;
    }
    void show_me()
    {
        System.out.println("The value of x is: "+x + " value of y is:" +y +" value of z is: "+z );
    }
}"
এখানে facebook নামের ৩ টি আলাদা আলাদা কন্সট্রাক্টর তৈরি করা হয়েছে।খেয়াল করলে দেখতে পারবেন ১ম টিতে ১টি প্যারামিটার,২য় টিতে ২টি প্যারামিটার ,৩য় টিতে ৩টি প্যারামিটার দেওয়া হয়েছে। ১ম তিতে একটি প্যারামিটার দেওয়া হয়েছে বলে y,z এর মান আমার নিজেথেকে বসিয়ে দিতে হয়েছে,২য় কন্সট্রাক্টর এ আবার z এর ভ্যালু নিজে থেকে বসিয়ে দিতে হয়েছে। পরে ৩য় কন্সট্রাক্টরটিতে ৩টি প্যারামিটার থাকায় কোন ভেরিয়েবল এর মান ম্যানুয়ালী করা লাগেনি।একেবারে শেষে আরেকটি ফাংসন বানানো হয়েছে যাতে আমরা আমাদের ভেরিয়েব গুলোর মান প্রিন্ট দিতে পারি।
এবার আসি আমরা আরেকটি ক্লাশ তৈরি করব যেখানে আমরা ৩টি আলাদা আলাদা facebook ক্লাস এর জন্য অব্জেক্ট তৈরি করব।নিচের প্রোগ্রামটি দেখিঃ

"public class microsoft {
    public static void main(String[] args)
    {
        facebook ob1=new facebook(10);
        facebook ob2=new facebook(10,15);
        facebook ob3=new facebook(10,15,20);
        ob1.show_me();
        ob2.show_me();
        ob3.show_me();
    }
}"
এখানে ৩টি আলাদা আলাদা অব্জেক্ট তৈরি হয়েছে।১ম অব্জেক্ট তৈরির সময় প্যারামিটার হিসাবে একটি ভ্যালু পাঠানো হয়েছে।২য় টিতে ২টি এবং ৩য় টিতে ৩টি ভ্যালুওই পাঠানো হয়েছে।
পরের লাইনগুলো তে খালি আমরা যেই কয়টি অব্জেক্ট তৈরি করেছিলাম তাদের প্রতিটির সাহায্যে show_me() function কে কল করা হচ্ছে।১ম অব্জেক্ট এর জন্য ১ম কন্সট্রাক্টর কল হয়েছে,২য় অব্জেক্ট এর জন্য ২য় কন্সট্রাক্টর কল হয়েছে,এবং ৩য় অব্জেক্ট এর জন্য ৩য় কন্সট্রাক্টর কল হয়েছে, এবার রান করলে নিচের মত আউটপুট দেখতে পারবেনঃ
The value of x is: 10 value of y is:0 value of z is: 0
The value of x is: 10 value of y is:15 value of z is: 0
The value of x is: 10 value of y is:15 value of z is: 20
আজ এ পর্যন্তই। সবাই ভাল থাকবেন।

জাভা প্রোগ্রামিং [পর্ব-১০] :: কন্সট্রাক্টর

আজকে আমরা জাভাতে ক্লাস এর কন্সট্রাক্টর নিয়ে আলাপ আলোচনা করব।
কন্সট্রাক্টর হল কোন ক্লাসের মেম্বার ভেরিয়েবল গুলোর মান বসানোর জন্য ব্যবহ্রত একটি ফাংশন। সাধারনত এর সাহায্যে মেম্বার ভেরিয়েবল এর মান বসানো হয়। আমরা যখন কোন ক্লাসের অব্জেক্ট তৈরি করি তখন আর কোন ফাংশন কল হয় না,কোন ভেরিয়েবল এ মান বসানো হয়না,শুধু কন্সট্রাক্টর কল হয় তাই এই কন্সট্রাক্টর এর মধ্যে ভেরিয়েবল গুলোর মান বসানো হয়।
কন্সট্রাক্টর একটা ফাংশন। শুধু অন্যান্য ফাংশন এর সাথে এর পার্থক্য হচ্ছে কন্সট্রাক্টর এর নাম অবশ্যই তার ক্লাসের নামে হবে। যেমন আপনার ক্লাস এর নাম যদি myclass হয় তাহলে আপনার কন্সট্রাক্টর এর নাম ও myclass হতে হবে।
এখন আসুন নিচের প্রোগ্রামটি দেখে নেইঃ
"
public class facebook {
    public String name;
    public facebook(String myname)
    {
        name=myname;
    }
   

    public void show_name()
    {
        System.out.printf("My name is %s \n"+name);
    }
}"
এখানে facebook নামক ক্লাস এর facebook নামক কন্সট্রাক্টর তৈরি করা হয়েছে।এবং সেখানে ভেরিয়েবল “name” এর মান বসানো হয়েছে।পরে আরেকটি মেথড Show_name() এর সাহায্যে এর মান  আউটপুট করা হয়েছে।
এবার আসুন ২য় আরেকটি ক্লাস এর প্রোগ্রাম এর দিকে লহ্ম্য করি যেখানে main() মেথড লেখা আছেঃ
"
public class microsoft {
    public static void main(String[] args)
    {
        facebook fb=new facebook("Avy");
        fb.show_name();
    }
} "
এখানে প্রথমে facebook ক্লাস এর একটি অব্জেক্ট তৈরি করা হয়েছে। খেয়াল করলে দেখবেন আমি এখানে অবজেকট তৈরির সময় প্যারামিটার হিসাবে আমার নাম দিয়েছি। এই মানটাই কন্সট্রাক্টর এর name ভেরিয়েবলে গিয়ে বসবে। ৬ষ্ঠ লাইনের দিকে তাকালে আমরা দেখতে পারব যে facebook ক্লাস এর যেই অবজেক্ট আমরা তৈরি করে ছিলাম তার সাহায্যে facebook ক্লাসের show_name()  মেথড কে কল করা হচ্ছে। এবার ২য় ক্লাস থেকে প্রোগ্রামকে রান করালে নিচের মত আউটপুট পাওয়া যাবেঃ
My name is Avy
আরেকটি কথা জেনে রাখা ভাল,আমরা যত গুলি ক্লাসই তৈরি করি না কেন আমাদের প্রোগ্রাম সবসময় রান করাতে হবে সেই ক্লাস থেকে যেখানে আমাদের main() মেথড আছে।যেমন আমাদের এখানে আছে microsoft ক্লাস এ তাই আমরা microsoft ক্লাস থেকে প্রোগ্রামকে রান করাবো।

জাভা প্রোগ্রামিং [পর্ব-০৯] :: অবজেক্ট এবং ক্লাস নিয়ে সাধারন কিছু কথা

আজকে আমি জাভার একটি অত্যন্ত গুরুত্যপুর্ন জিনিস নিয়ে আলাপ আলোচনা করব,তা হচ্ছে অবজেক্ট অরিয়েন্টেড কন্সেপ্ট।
এই পর্বে আমি তেমন ভিতরে যাবনা। শুধু ব্যাসিক কিছু জিনিস নিয়ে আলাপ আলোচনা করব।
আগেই জেনে নেই অবজেক্ট কি জিনিস। অবজেক্ট হল অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর পিলার বা খুটি। যদি অবজেক্ট এর ধারনা আমাকে বলতে বলেন তাহলে আমরা প্রত্যেকেই এক এক টা অবজেক্ট।আমরা মানুষ,গাছপালা ,সকল প্রানী, সব জড় বস্তু সবাই এক এক টা অবজেক্ট।কিন্তু আমরা এবং যতগুলো উদাহরন দিলাম সবই হল বাস্তব জীবনের উদাহরন(Real world example)।প্রত্যেকটি অবজেক্ট এর ২ টি জিনিস থাকবেই তাহলঃ
১)অবস্থা(State)।
২)গুনাগুন বা ব্যবহার(Behavior)।
অবস্থা বলতে বুঝায় এই যেমন মানুস এর ২ টা চোখ আছে ,কান আছে,হাত আছে, পা আছে  ইত্যাদি এই সবই হল এক এক টা স্টেট(State)।আবার মানুস চোখ দিয়ে দেখতে পারে ,কান দিয়ে শুনতে পারে সবই হল তার ব্যবহার(Behavior)।
প্রোগ্রামিং এর অবজেক্ট এর কন্সেপ্টটাও  অনেকটা এমনই। প্রোগ্রামিং এও প্রতিটা অবজেক্ট এর State এবং Behavior  আছে। প্রোগ্রামিং State  বলতে বেশিরভাগ হ্মেত্রেই বিভিন্ন ভেরিয়েবল কে বুঝায়। আর Behavior  বলতে বুঝায় ফাংশনকে। এই ছিল মোটামোটি অবজেক্ট নিয়ে আলোচনা। এবার আসি ক্লাস এ।
ক্লাসঃ সোজা কথায় বলতে গেলে আমরা মানুষরা যদি এক একটা অবজেক্ট হই তাহলে আমাদের সমাজ হল একটা ক্লাস। আবার ভেঙ্গে বলতে গেলে আমাদের বাস্তব জীবনের এমন অনেক আলাদা আলাদা অবজেক্ট পাব যারা প্রায় একি প্রকারের।যেমন হাজার হাজার সাইকেল আছে যারা প্রায় একি রকমের দেখতে ।প্রতিটি বাইসাইকেল একই ব্লুপ্রিন্ট কে মাথায় রেখে তৈরি হয়,তাই দেখতে একই রকম,বৈশিষ্ট ও প্রায় একই।আমাদের অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এ এক একটি বাইসাইকেল কে বলা হয় পুরো বাইসাইকেল গোস্টহির instance। ক্লাস হচ্ছে একটি নীল নকশা যার সাহায্যে আলাদা আলাদা অবজেক্ট তৈরি হয়।
এবার আসি ক্লাস কিভাবে তৈরি করবেন। এনিয়ে আমি আমার ৩য় টিউনেই বিস্তারিত আলোচনা করেছি। খুবই সোজা পদ্ধতি। এবার আসি আমরা একটু নিচের কোডটার দিকে তাকাইঃ
"class Bicycle {

    //Member variable
    int cadence = 0;
    int speed = 0;
    int gear = 1;

   //Member function
   void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" +
             speed + " gear:" + gear);
    }
}"
এবার ২য় আরেকটি ক্লাস তৈরি করিঃ
"class BicycleDemo {
    public static void main(String[] args) {

        // Create two different
        // Bicycle objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();

        // Invoke methods on
        // those objects
        bike1.changeCadence(50);
        bike1.speedUp(10);
        bike1.changeGear(2);
        bike1.printStates();

        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }
} "
এবার ২য় প্রোগ্রামটার দিকে তাকাই এই প্রোগ্রামটিতে আগের প্রোগ্রামের ২টি অবজেক্ট তৈরি করা হয়েছে।পরের লাইনে অবজেক্ট গুলোর সাহায্যে যেই ক্লাসের অব্জেক্ট তৈরি করা হয়েছে সেই ক্লাসের বিভিন্ন মেম্বার ভেরিয়েবল এবং ফাংশঙ্কে Access করা হয়েছে।খেয়াল করলে দেখবেন main ফাংশন খালি ১টি ক্লাস এই রয়েছে। আর main ফাংশন থেকেই প্রোগ্রামকে রান করাতে হবে। মেইন ফাংশন থেকে রান করালে আউটপুট এমন আসতে পারেঃ
cadence:50 speed:10 gear:2
cadence:40 speed:20 gear:3
১ম ক্লাসে আমরা যতগুলি ভেরিয়েবল দেখতে পাচ্ছি এদের কে বলে মেম্বার ভেরিয়েবল আর যতগুলি ফাংশন দেখতে পাচ্ছি এদের কে বলে মেম্বার ফাংশন।
প্রতিটা ফাংশন এবং ভেরিয়েবল এর আবার আলাদা আলাদা Access হ্মমতা দেওয়া যায়। এইরকম Access করার হ্মমতা কে ৩ ভাগে ভাগ করা যায়ঃ
১)পাবলিক
২)প্রাইভেট
৩)প্রটেক্টেড
পাবলিক মেম্বার যারা তাদের কে চাইলেই অন্য একটি ক্লাসথেকে Access করা যায়। প্রাইভেট শুধু ওই ক্লাসের মেম্বাররাই Access করতে পারবে। আর প্রোটেক্টেড শুধু মাত্র যেই সকল ক্লাস এই ক্লাস্কে ইনহেরিট করবে তারাই ব্যবহার করতে পারবে।

জাভা প্রোগ্রামিং [পর্ব-০৮] :: জাভাতে Array এর ব্যবহার

আজকে আমি যে টপিকটি নিয়ে কথা বলব তাহল  Array। যেকোন প্রগ্রামিং লাঙ্গুয়েজই  Array বেশ গুরুত্যপুর্ন একটি জিনিস। আগেই Array এর গুরুত্য কি তা আমরা জেনে নেই।


উপরের প্রোগ্রামটি লহ্ম্য করি। এখানে প্রথমে ৩ টি ভেরিয়েবল ডিক্লায়ার করা হয়েছে । পরবর্তিতে এদের মধ্যে ২ টিতে মান নিয়ে এদের যোগফল ৩য় ভেরিয়েবল এ রাখা হয়েছে। খুবই সাধারান একটা প্রোগ্রাম।
কিন্ত এখন কেউ যদি আপনাকে বলে যে ১০১ টি ভেরিয়েবল ডিক্লায়ার কর এবং ১০০ টি ভেরিয়েবলে ইনপুটের সাহায্যে মান নিয়ে এদের যোগফল ১০১ তম  ভেরিয়েবল এ রাখুন। তাহলে ১০১ টি ভেরিয়েবল ডিক্লায়ার করতে করতে ১২ টা বেজে যাবে। চিন্তার কোন কারন নেই।আমাদের আছে Array। Array হল  Sequence of variable । একসাথে অনেক গুলো ভেরিয়েবল একবারেই ডিক্লায়ার করা যায়। এই যেমন আমি যদি লিখি :

তাহলে int টাইপের ১০ টা ভেরিয়েবল ডিক্লয়ার হয়ে গেছে। সোজা না??এবার আসুন আরেকটু ভিতরে যাই। আগের প্রোগ্রামটি যেখানে শুধু Array ডিক্লায়ার করেছিলাম ওইটাই আরেকটু মোডিফাই করি।নিচের প্রোগ্রামটি দেখুনঃ

এখানে int টাইপের ১০ টা ভেরিয়েবল ডিক্লয়ার হয়েছে। পরের লাইনে মান বসানো হয়েছে। মনে রাখতে হবে যে আমরা যেই Array  টা ডিক্লায়ার করে ছিলাম তার প্রথম Address টা ০ তারপরের আড্রেস টা হল 1 এভাবে করতে করতে শেস Address টা হবে 9 এরকম কোন একটা Array এর ভিতর প্রতিটা Address কে index বলে। আমাদের এই
Array এর সাইজ কত বলতে পারবেন? আমি এখানে সাইজ বলতে বুঝাতে চেয়েছি দৈর্ঘ্য কত? সোজা হিসাব ১০, কারন আমরা ১০ সাইজের একটা Array ডিক্লায়ার করেছিলাম। মানে এই Array টা তে আমরা সর্বচ্চ ১০ টি মান রাখতে পারব।এবং তাদের Address হবে ০-৯ পর্যন্ত। নিচের ছবিটি দেখি তাহলে অনেক কিছু পরিস্কার হয়ে যাবেঃ

এবার আসুন Array দিয়ে ঝটপট একটি পুর্ন প্রোগ্রাম দেখে ফেলিঃ

"class ArrayDemo {
    public static void main(String[] args) {
        // declares an array of integers
        int[] anArray;

        // allocates memory for 10 integers
        anArray = new int[10];

        // initialize first element
        anArray[0] = 100;
        // initialize second element
        anArray[1] = 200;
        // etc.
        anArray[2] = 300;
        anArray[3] = 400;
        anArray[4] = 500;
        anArray[5] = 600;
        anArray[6] = 700;
        anArray[7] = 800;
        anArray[8] = 900;
        anArray[9] = 1000;

        System.out.println("Element at index 0: "
                           + anArray[0]);
        System.out.println("Element at index 1: "
                           + anArray[1]);
        System.out.println("Element at index 2: "
                           + anArray[2]);
        System.out.println("Element at index 3: "
                           + anArray[3]);
        System.out.println("Element at index 4: "
                           + anArray[4]);
        System.out.println("Element at index 5: "
                           + anArray[5]);
        System.out.println("Element at index 6: "
                           + anArray[6]);
        System.out.println("Element at index 7: "
                           + anArray[7]);
        System.out.println("Element at index 8: "
                           + anArray[8]);
        System.out.println("Element at index 9: "
                           + anArray[9]);
    }
}"
প্রোগ্রামটা খুবই সোজা ১০ সাইজের একটি Array ডিক্লায়ার করা হয়েছে এবং এদের মান বসানো হয়েছে index অনুসারে পরে এই সব মান আবার আউটপুট করা হয়েছে। প্রোগ্রামটির আউটপুট নিচের মত আসবেঃ
Element at index 0: 100
Element at index 1: 200
Element at index 2: 300
Element at index 3: 400
Element at index 4: 500
Element at index 5: 600
Element at index 6: 700
Element at index 7: 800
Element at index 8: 900
Element at index 9: 1000
এবার নিচের প্রব্লেমটি চেস্টা করুনঃ
১)একটা ১০ সাইজের array ডিক্লয়ার করুন।এদের মধ্যে ১০ টি আপনি নিজে ইনপুট নিন এবং এদের যোগফল আউপুট করুন।

জাভা প্রোগ্রামিং [পর্ব-০৭] :: জাভাতে ইনপুট কিভাবে নিবেন?

আজকে আমি খুব ছোট একটি টিউন করব তা হল জাভাতে কিভাবে ইনপুট নিতে হয় তা নিয়ে।
নরমালি জাভাতে ইনপুট নেওয়া যায় দুভাবে একটি command line ইনপুট আর আরেকটি পদ্ধতি হল Graphical user interface ইনপুট। আমি আজকে শুধু command line ইনপুট নিয়ে কথা বলব।
এবার আসি কাজের কথায়, command line ইনপুট নেওয়ার হ্মেত্রে আপনাকে প্রথমেই জাভার একটি লাইব্রেরি ইম্পর্ট করতে হবে। যেমন C/C++ কোড করার সময় আমরা যেমন শুরুতেই লেখে নিতাম যে #include <stdio.h>। এটা হচ্ছে C/C++ এর ইনপুট আউটপুট এর লাইব্রেরি। ঠিক তেমনি জাভাতেও ইনপুট নেওয়ার সময় একটি লাইব্রেরি ইম্পর্ট করতে হয় আর তাহল java.util.Scanner । আসুন তাহলে কথা না বাড়িয়ে ঝটপট করে একটি প্রোগ্রাম দেখে নেই।

উপরের প্রোগ্রামে প্রথমে java.util.Scanner কে ইম্পর্ট করা হয়েছে। তারপর Scanner ক্লাস এর একটি অবজেক্ট avy তৈরি করা হয়েছে
তারপর ৯ম লাইনে প্রথম String টাইপ এর ভেরিয়েবল এ ইনপুট নেওয়া হয়েছে।১১ তম লাইনে আবার যে ইনপুট টি নেওয়া হয়েছিল তা আউপুট করা হয়েছে।আবার ১৩তম লাইনে আরেকটি int টাইপ এর ভেরিয়েবল X এর ভিতর ইনপুট নেওয়া হয়েছে। এবং ১৪ তম লাইনে তা আবার আউটপুট করে দেওয়া হয়েছে।
একটা জিনিস খেয়াল রাখেতে হবে  আমরা যেই টাইপের ভেরিয়েবলে ইনপুট নিব সেই টাইপের .next[আমাদের টাইপ] দিতে হবে যেমন আমি এখানে  a এর ভিতর স্ট্রিং টাইপের ইনপুট নিয়েছি তাই লিখেছি .nextLine() আবার X এর ভিতর int টাইপের ভেরিয়েবল নিয়েছি তাই এহ্মেত্রে দিয়েছি .nextInt(). যদি float টাইপ ভেরিয়েবলে মান নিতাম তাইলে লিখতাম .nextFloat();
এখন আসুন নিচের প্রোগ্রাম গুলি চর্চা করুনঃ
১) একটা সংখা ইনপুট নিন তা জোড় না বিজোড় তা যাচাই করুন।
২)একটা সংখা ইনপুট নিন এবং সেই সংখার নামাতা প্রিন্ট করুন।
আজ এ পর্যন্তই। সবাই ভালো থাকবেন।

জাভা প্রোগ্রামিং [পর্ব-০৬] :: কন্ট্রোল স্টেটমেন্ট-০২


জাভাতে অনেক ধরনের লুপ আছে যেমনঃ
১)For loop
২)While loop
৩)Do while loop
৪)Enhanced for loop
আসুন দেখে নেই for loop এর একটি প্রোগ্রাম। আমরা এখানে খুব সাধারন কিছু প্রোগ্রাম দেখব।

উপরের প্রোগ্রামটিতে তাকালে আমরা দেখতে পাব যে for{ } লুপ এর তিনটি প্যারামিটার রয়েছে। প্রথমে আপনাকে একটি ভেরিয়েবল এর মান দিতে হবে আমি এখানে যেমন দিয়েছি i=1; তারপর দিতে হবে লুপ টি কত বার চলবে তা বলে দেওয়া হয়েছে। যেমন আমি এখানে লিখেছি i<=5 মানে i এর মান ৫ এর থেকে ছোট বা ৫ এর সমান। তারমানে লুপটি ১ থেকে শুরু হয়ে ৫ বার চলবে। সোজা কথা টোটাল ৫ বার চলবে। আর পরে আরেকটি জিনিস রয়েছে তাহল i++ মানে হল প্রতিবার i এর মান এক এক করে বাড়বে। এবং i এর মান ৫ হওয়ার সাথে সাথে লুপটি বন্ধ হয়ে বেরিয়ে আসবে। উপরের প্রোগ্রামটি এভাবেও করা যায়।


জিনিসটা হল শুধু আগের প্রোগ্রামটার ঠিক উলটো। এহ্মেত্রে i এর মান ৫ থেকে শুরু হয়ে ১ পর্যন্ত যাবে। লহ্ম্য করার বিষয় হল এহ্মেত্রে i এর মান i—এর সাহায্যে এক এক করে কমেছে।
এবার আসি While লুপ এর ব্যবহার নিয়ে আলাপ আলোচনা করব।প্রথমেই while লুপ এর একটা কোড দেখে নেইঃ

উপরের এই কোডটি হুবহু আগের for লুপ দিয়ে যে প্রোগ্রামটি করে ছিলাম তাই ই আঊটপুট দিবে। শুধু syntax ভিন্ন। এক্ষেত্রে প্রথমে একটি ভেরিয়েবল i এ ১ বসানো হয়েছে। তারপর while লুপটি শুরু করা হয়েছে। while লুপ এর প্যারামিটার হিসাবে i<=5 দেওয়া হয়েছে অর্থাৎ i এর মান যথহ্মন ৫ না হবে লুপ্টি তথহ্মন চলতে থাকবে। লুপ এর ভিতরে  i এর মান বাড়ানোর জন্য i++ ব্যবহার করা হয়েছে। প্রতিবার লুপ ঘুরার পর i এর মান বারবার চেক হচ্ছে যে তা কি ৫ এর থেকে বড় কিনা ।

Do..while লুপঃ এটি আপনারা নিজেরা চেস্টা করুন। অনেকটা while লুপ এর মতই। খালি একটা পার্থক্য হল while loop এ শর্তটা লুপ এ ঢুকার আগে চেক হয়। তাই শর্ত না মানলে লুপ্টি একবারো নাও ঘুরতে পারে। কিন্তু do..while{} লুপে শর্ত পরে চেক হয় তাই এটি অন্তত একবার ঘুরবেই। আগের প্রোগ্রামটিই do..while লুপের সাহায্যে দেখানো হলঃ


এবার আসি Enhanced for loop নিয়ে আলোচনায়। এই লুপ্টি নরমালি
ব্যবহার করা অ্যারে এর মেম্বারদের একযোগে আক্সেস করার জন্য। এদের syntax নিচে দেখানো হলঃ


এইখানে যেই কাজ টা হচ্ছে তাহল avy নামক অ্যারেতে যত মান রাখা আছে তা যোগ করে total এ রাখবে। এর জন্য উপরের for লুপে অ্যারের প্রতিটি মান x এর মধ্যে নেওয়া হচ্ছে তারপর তা এক এক করে যোগ করে তা total এ রাখা হছে সবার শেষে total কে আউটপুট করা হচ্ছে।
এই ছিল আমার কন্ট্রল স্টেটমেন্ট এর ২য় পর্ব। সাম্নের পর্ব গুলোতে আমি একটু নেস্টেড লুপ এবং if else নিয়ে আলাপ আলোচনা করব।
এখন আপনাদের practice এর জন্য নিচের প্রোব্লেম গুলো চেস্টা করুন।
১)1971 থেকে 2013 পর্যন্ত সংখা গুলো প্রিন্ট করুন।(for,while,do..while) এর সাহায্যে।





জাভা প্রোগ্রামিং [পর্ব-০৫] :: কন্ট্রোল স্টেটমেন্ট-০১

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

উপরের প্রোগ্রামটির দিকে লহ্ম্য করলে আমরা দেখতে পারব যে,প্রথমে একটি ভেরিয়েবল i এ ১০ কে স্টোর করা হয়েছে। তারপর একটি শর্ত যুরে দেয়া হয়েছে যে যদি তা ২ দিয়ে ভাগকরলে ভাগশেষ ০ হয় তাহলে সংখাটি জোড় না হয় বেজোড়।  এখানে যদি if দিয়ে এবং না হয় else দিয়ে বুঝানো হয়েছে। এখন আপনারা ১০ এর পরিবর্তে কোন বিজোড় সংখা দিয়েও জিনিসটা দেখতে পারেন। এটা অনেক সাধারন একটা সমস্যা ছিল। যদি কখনও এমন হয় যে একটি সমস্যার সমাধানের জন্য অনেক গুলো শর্ত থাকে তাহলে সেহ্মেত্রে প্রথম্বার if  দিয়ে পরের প্রতিবারের জন্য else if লাগাতে হবে এবং একেবারে শেষবারের জন্য শুধু else লাগাতে হবে।  এরকম একটি কোড এর Syntax  নিচে দেয়া হলঃ
এছাড়া জাভাতে nested if বলে একটা কথা আছে। এই যেমন যদি কখনো শর্তের মধ্যে আবার শর্ত আসে তাহলে if{ } এর মধ্যে if{},else if{},else{} ব্যবহার করা যাবে। কিন্তু অবশ্যিই বন্ধনি”{” “}” গুলোর দিকে খেয়াল রাখতে হবে যাতে ওলট পালট হয়ে না যায়। নিচে Syntax দেখানো হলঃ
এখন আমরা জাভাতে Switch case নিয়ে আলাপ আলোচনা করব। এটিও একটি বিশেষ ধরনের কন্ট্রল স্টেটমেন্ট। এটি দিয়ে কিভাবে কাজ করানো যায় তা আমরা একটু দেখি।
এখানে প্রথমে i এর ভিতর “March” কে নেওয়া হয়েছে। বলে রাখা ভাল এখানে I  এর ডাটা টাইপ হল string । তারপর switch case শুরু করা হয়েছে । switch case ব্যবহার এর নিয়ম হল যেই ভেরিয়েবল টি আমরা চেক করতে চাই ওইটা switch এর parameter হিসাবে switch() এর ভিতর দিতে হবে যেমন এখানে আমরা দিয়েছি switch(i) কারণ আমরা i কে চেক করতে চাই। তারপর case লিখে স্পেস দিয়ে ওইসব মান দিতে হবে যা দিয়ে আপনি চেক করতে চান তাকি আপনার শর্তগুলো মানে নাকি। যদি মানে তাহলে তা একটি নির্দিস্ট কাজ করবে এবং পরে তা থেকে বেরিয়ে আসবে break এর সাহায্যে। যেমন আমি এখানে চেক করেছি i এর মান “March” হলে তা প্রিন্ট করবে “I contains March” আর যদি i এর মান হয় January তাহলে প্রিন্ট করবে “I contains January” আর যদি i এর মান হয় February তাহলে প্রিন্ট করবে “I contains February” আর যদি ৩ টির একটিও i এর মান না হয় তাহলে তা প্রিন্ট করবে “I contains a normal string”।
এখন নিম্নের প্রব্লেম গুলো চেস্টা করুন।
১) একটি বছর একটি ভেরিয়েবল এ নিন যেমন i=1992, এখন বের করুন এই বছরটি কি লিপ ইয়ার নাকি লিপ ইয়ার না। যেমন
Leap year হলে প্রিন্ট করবে “This year is  Leap year” আর না হলে প্রিন্ট করবে “Sorry,this year is  not Leap year” । এটি করবেন if, else ব্যবহার করে।
২)ঊপরের দেখানো Switch case এর প্রব্লেমটি if else দিয়ে implement করুন।
আর Herbert Schildts এর বই এর ৫ম অধ্যায়টা পারলে পইরেন।

জাভা প্রোগ্রামিং [পর্ব-০৪] :: ভেরিয়েবল,অপারেটর,ডাটা টাইপ



আজকে আপনাদের মাঝে যে জিনিস টি নিয়ে টিউন করব তাহল অপারেটর , ভেরিয়েবল, ডাটা টাইপ
প্রথমেই জেনে নেই ভেরিয়েবল কি জিনিস। সাধারণত যে কোন সংখা বা মান বা কোন কিছু ধরে রাখার জন্য যে ধারক্টি ব্যবহাঁর করা হয় তাকে প্রোগ্রামিং এর ভাষায় ভেরিয়েবল বলে।ভেরিয়েবল যেকোন কিছু হতে পারে যে কোন নাম,বর্ণ যে কোন কিছু। কিন্তু কিছু জিনিস হতে পারবে না। যেমনঃ
) ভেরিয়েবল এর নাম কখনই কোন সংখা দিয়ে শুরু হতে পারবে না। যেমনঃ 1ad,2_54 ইত্যাদি গ্রহন যোগ্য নয়
)কোন কিওয়ার্ড এর নাম হতে পারনে। কিওয়ার্ড হল এমন কিছু শব্দ যা আগে থেকেই জাভার জন্য বরাদ্দ। জাভার কিওয়ার্ড গুলো কি কি তা জানতে নিচের লিঙ্ক টিতে দেখুন : http://en.wikipedia.org/wiki/List_of_Java_keywords
যেমন আপনি চাইলেই ভেরিয়েবল হিসাবে if,for ইত্যাদি ব্যবহার করতে পারবেন না কারন এগুলো জাভার কিওয়ার্ড
এবার আসুন জেনে নেই ডেটাটাইপ কি জিনিস। ডেটাটাইপ বলতে বুঝায় আপনার ডাটা টা কেমন হবে,মানে ডাটা টা কি কোন ডেসিমেল(DECIMAL) নাম্বার হবে নাকি কোন দশমিক সংখা হবে নাকি   Character টাইপ ডাটা হবে ইত্যাদি ইত্যাদি। জাভা তে বেশ কয়েক প্রকার ডাটা টাইপ রয়েছে নিচে বিস্তারিত দেওয়া হল
বাইট(byte): বাইট টাইপ ডাটা বিট ডাটা বহন করতে পারে। এই টাইপের ডাটার সর্বচ্চ মান ১২৭ এবং সর্ব নিম্ন মান -১২৮
শর্ট(short): এটি ১৬ বিটের ডাটা। এর সর্বচ্চ মান ৩২৭৬৭ এবং সর্বনিম্ন মান -৩২৭৬৮
ইন্টেজার(integer): সংহ্মেপে একে int লেখা হয়। এর ধারন হ্মমতা সর্বচ্চ ,১৪৭,৪৮৩,৬৪৭ এবং সর্ব নিম্ন -২১৪৭৪৮৩৬৪৮ এটি ৩২ বিটের ডাটা
লং(long): এটি ৬৪ বিটের ডাটা
উপরের টি ডাটা টাইপ শুধু ডেসিমেল নাম্বার ধারন এর কাজে আসে।এর দশমিক  ভিত্তিক  সঙ্খা ধারন করতে পারেনা
ফ্লট(float): এরা দশমিক সংখা ধারন করতে পারে। এরা ৩২ বিট ডাটা  টাইপ
ডাবল(double):  এরা ৬৪ বিট ডাটা টাইপ। এরাও  এরা দশমিক সংখা ধারন করতে পারে
বুলিয়ান(boolean): এরা শুধু ধরনের ডাটা ধরে রাখতে পারে। হয়true অথবাfalse
কেরেক্টার(char): এটি কারেক্টর টাইপ ডাটা ধারণ করতে পারে
স্ট্রিং(string): এরা আস্ত একটা বাক্য ধারন করতে পারে
এখন জেনে নেই অপারেটর বলতে কি বুঝায়। যেকোন প্রোগ্রামিং ভাসায় অপারেটর বলতে বুঝায় “+” ,“–“, “*”,“/”,”%” কে। এছাড়াও আরো কিছু অপারেটর আছে
“+” একে বলে  Plus operator  এটি যোগ করার জন্য ব্যবহার করা হয়
“-” একে বলে  Minus operator   এটি বিয়োগ করার জন্য ব্যবহার করা হয়
“*” একে বলে Multiplication operator এটি গুন করার জন্য ব্যবহার করা হয়
“/” একে বলে  Divide operator এটি ভাগ করার কাজে ব্যবহার করা হয়
“%” একে বলে Modulus operator এটি ভাগশেস বের করার জন্য ব্যবহার করা হয়
উপরের সব গুলো অপেরেটর কে বাইনারি অপেরেটর বলা হয়
এছারাও আরও অনেক ধরনের অপেরেটর রয়েছে যেমন ইউনারি অপেরেটরঃ
“++”                  Increment operator; increments a value by 1
“--“           Decrement operator; decrement a value by 1
“!”             Logical complement operator; inverts the value of a boolean
এছাড়াও রয়েছে রিলেশনাল অপেরেটর
“==”      equal to
“!=”      not equal to
“>”       greater than
“>=”      greater than or equal to
“<”       less than
“<=”      less than or equal to
এই ছিল মোটা মুটি ডাটা টাইপ এবং অপেরটর  গুলো এখন আসুন এইগুলো কিভাবে ব্যবহার করবেন তার জন্য কয়েকটি  প্রোগ্রাম দেখি
প্রথমেই আপনার Eclipse Software টি চালু করুন। আগের পর্বের দেখানোর মত একটি প্রজেক্ট ওপেন করুন এবং একটি ক্লাস তৈরি করুন
প্রথমেই আমি আপনাদের ভেরিয়েবল , ডেটা টাইপ ,এবং অপেরেটর এর ব্যসিক একটি প্রোগ্রাম দেখাবো। নিচের প্রোগ্রামটি দেখুন


এইখানে প্রথমে int টাইপের টি ভেরিয়েবল ডিক্লায়ার করা হয়েছে। তারপর “=” অপেরেটর এর সাহায্যে X এবং y এর মান বসানো হয়েছে। পরের লাইনে x,y এর যোগফল “=” অপেরেটর এর সাহায্যে z   বসানো হয়েছে। তারপর  Z  এর মান System.out.println(z); এর সাহায্যে অউতপুট করা হয়েছে। পরের লাইন গুলোতে আরো কিছু  Arithmetic operation করানো হুয়েছে
পরের এই প্রোগ্রামটি ইউনারি অপেরেটর এর কাজ দেখানো হয়েছে



এখন আপনাদের চর্চার জন্য কয়েকটি প্রব্লেম দিচ্ছি। এইগুলো অবশ্যই চর্চা করবেনঃ
) ,, এর যোগ,এবং গুনফল প্রদর্শন করুন। আওউটপুট টা যাতে দেখতে এমন হয়ঃ
Sum is 21  .
Multiplication result is  336.
) নিজের ইচ্ছা মত কয়েকটি ভেরিয়েবল ডিক্লায়ার করেন তারপর তাদের উপর +,-,*,/,%,++,-- অপেরেশন গুলো চালান
আজ পর্যন্তই।সবাই ভাল থাকবেন এবং ভাল মত চর্চা করবেন