জাভা টিউটোরিয়াল পর্ব-২/১০০
১৯৯১ সালের জুন মাসে জেমস গোসলিং, মাইক সেরিধান, এবং প্যাট্রিক ন্যাগ্টন জাভা ল্যাঙ্গুয়েজ প্রোজেক্ট শুরু করেন। শুরুর দিকে জাভা ল্যাঙ্গুয়েজকে "ওক(Oak)" বলা হত। পরবর্তীতে জেমস গসলিং এর অফিসের বাহিরের ওক গাছের সাথে মিল রেখে এর নাম রাখা হয় ওক।
এরপর এর নাম রাখা হয় "গ্রীন" এবং অবশেষে জাভা কফির সাথে মিল রেখে "জাভা"তে পরিবর্তন করা হয়।
১৯৯৫ সালে সান মাইক্রোসিস্টেমস জাভা-১.০ প্রকাশ করেন। তাদের মূলনীতি ছিলঃ
"একবার লিখুন, যে কোনো জায়গায় চালান (Write Once, Run Anywhere or WORA)"। জাভার উল্লেখযোগ্য সংস্করণের মধ্যে অন্যতম হল -
- জেডিকে ১.০ (জানুয়ারী ২১, ১৯৯৬)
- জেডিকে ১.১ (ফেব্রুয়ারী ১৯, ১৯৯৭)
- জে২এসই ১.২ (ডিসেম্বর ৮, ১৯৯৮)
- জে২এসই ১.৩ (মে ৮, ২০০০)
- জে২এসই ১.৪ (ফেব্রুয়ারী ৬, ২০০২)
- জে২এসই ৫.০ (সেপ্টেম্বর ৩০, ২০০৪)
- জাভা এসই ৬ (ডিসেম্বর ১১, ২০০৬)
- জাভা এসই ৭ (জুলাই ২৮, ২০১১)
- জাভা এসই ৮ (মার্চ ১৮, ২০১৪)
- জাভা এসই ৯ (২১ সেপ্টেম্বর ২০১৭ )
- জাভা এসই ১০ (২০ মার্চ ২০১৮)
জাভাতে প্রোগ্রাম লেখা, কম্পাইল এবং ডিবাগ করা খুবই সহজ। এটি মডুলার প্রোগ্রাম এবং পুনর্ব্যবহারযোগ্য কোড তৈরি করতে সহায়তা করে।
জাভার মূলনীতি
১. এটি হবে সরল, অবজেক্ট ওরিয়েন্টেড এবং পরিচিত।
২. এটি হবে শক্তিশালী এবং সুরক্ষিত।
৩. এটি হবে কোন নির্দিষ্ট প্লাটফর্ম থেকে সম্পূর্ণ স্বাধীন এবং এর থাকবে বহনযোগ্যতা।
৪. এটি হবে অনেক উচ্চ কার্যক্ষমতাসম্পন্ন ।
৫. এটি হবে ইন্টারপ্রেটেড, থ্রেডেড এবং ডাইনামিক।
জাভা বাক্যরীতি(Syntax)
জাভার বাক্যরীতি মুলত সি++ থেকে নেওয়া। তাই সি++ এর মতই এতে স্ট্রাকচারড, জেনেরিক এবং অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং বাক্যরীতি রয়েছে। তবে সি++ বিশুদ্ধ অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং না হলেও জাভা বিশুদ্ধ অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং ভাষা।
জাভা ডাটা কাঠামো/স্ট্রাকচার
জাভাতে ডাটা স্ট্রাকচার এর জন্য আলাদা বাক্যরীতি রয়েছে। উল্লেখ্য, অ্যারে এবং স্ট্রিং সাধারণ/primitive ডাটা টাইপ নয়, বরং reference ডাটা টাইপ এবং এদেরকে java.lang.Object থেকে ইনহেরিট করা হয় বা উত্তরাধিকার সূত্রে পাওয়া যায়।
জাভার পারিভাষিক শব্দাবলী(terminology)
জাভা শেখা শুরুর পূর্বে চলুন জাভায় বহুল ব্যবহৃত শব্দাবলী সম্বন্ধে জেনে নিই।
জাভা ভার্চুয়াল মেশিন(Virtual Machine-JVM)
জাভা ভার্চুয়াল মেশিন সাধারণত JVM নামেই আমাদের কাছে বেশি পরিচিত।JVM সম্বন্ধে আলোচনা করার পূর্বে চলুন আগে জাভা প্রোগ্রাম নির্বাহের(execution) পর্যায়গুলি জেনে নিই।
জাভা প্রোগ্রাম নির্বাহের(execution) ধাপগুলি নিম্নরূপঃ
প্রথমে আমরা একটি প্রোগ্রাম লিখব, তারপর আমরা প্রোগ্রামটি কম্পাইল করব এবং পরিশেষে আমরা প্রোগ্রামটি চালাব।
- জাভা প্রোগ্রাম লেখার কাজটি অবশ্যই আমার-আপনার মতো জাভা প্রোগ্রামার করে থাকে।
- জাভা প্রোগ্রাম সংকলন(Compilation) এর কাজটি javac কম্পাইলার দ্বারা করা হয়, এটি জাভা ডেভেলপমেন্ট কিট (JDK) -এ অন্তর্ভুক্ত প্রাথমিক জাভা কম্পাইলার। এটি জাভা প্রোগ্রামকে ইনপুট হিসাবে নেয় এবং আউটপুট হিসাবে জাভা বাইটকোড(bytecode) জেনারেট করে।
- তৃতীয় পর্যায়ে, কম্পাইলার এর মাধ্যমে উৎপন্ন বাইটকোড JVM দ্বারা চালিত হয়।
সুতরাং, এখন এটি আমাদের কাছে পরিষ্কার যে JVM এর প্রাথমিক কাজ/ফাংশন হল কম্পাইলার দ্বারা উৎপাদিত বাইটকোডকে চালানো/সম্পাদন(execution) করা। প্রতিটি অপারেটিং সিস্টেমেই বিভিন্ন ধরণের JVM রয়েছে, তবে bytecode সম্পাদিত হওয়ার পরে তারা যে আউটপুট তৈরি করে তা সব অপারেটিং সিস্টেমে একই হয়। তাই আমরা জাভাকে প্ল্যাটফর্ম থেকে স্বাধীন ভাষা বলে ডাকি।
বাইটকোড
আমরা ইতিপূর্বেই জেনেছি যে, জেডিকে(JDK) এর javac কম্পাইলার জাভা সোর্স কোডকে bytecode এ রূপান্তরিত করে যাতে এটি JVM দ্বারা সম্পাদিত হয়। বাইটকোড কম্পাইলার এর মাধ্যমে সংকলিত হয়ে .class ফাইলে সংরক্ষিত হয়।
জাভা ডেভেলপমেন্ট কিট(JDK)
জেভিএম এবং বাইটকোড এর ব্যাখ্যা দিতে গিয়ে আমরা জেডিকে টার্মটি ব্যবহার করেছিলাম। চলুন এটি নিয়ে সংক্ষেপে আলোচনা করা যাক। আমরা নামটি শুনেই বুঝতে পারছি যে, এটি একটি সম্পূর্ন জাভা ডেভেলপমেন্ট কিট
যাতে সংযুক্ত রয়েছে জাভা রানটাইম এনভাইরমনেট(JRE), কম্পাইলার এবং জাভার অন্যান্য বিভিন্ন টুলস বা যন্ত্রপাতি যেমন- JavaDoc, জাভা ডিবাগার(debugger )ইত্যাদি।
জাভা প্রোগ্রাম তৈরি, কম্পাইল, এবং রান করানোর জন্য আপনার কম্পিউটারে জেডিকে ইন্সটল থাকতে হবে বা আপনার নিজেকে ইনষ্টল করে নিতে হবে।
জাভা রানটাইম এনভাইরনমেন্ট(JRE)
জেআরই হল জেডিকে এর অংশ, অর্থাৎ জেডিকে এর মধ্যে জেআরই থাকে। কেবল আপনার সিস্টেমে JRE ইনস্টল করা থাকলেই আপনি জাভা প্রোগ্রাম রান করাতে পারবেন তবে আপনি এটি সংকলন(compile) করতে পারবেন না। আবার JRE এর মধ্যে থাকে JVM, ব্রাউজার প্লাগইন এবং অ্যাপলেটস সমর্থন।
জাভার প্রধান বৈশিষ্ট্য সমূহ
জাভা প্লাটফর্ম হতে সম্পূর্ণ স্বাধীন ভাষা
কম্পাইলার (javac) সোর্স কোড (.java ফাইল)-কে বাইট কোড (.class ফাইল) -এ রূপান্তরিত করে। উপরোল্লিখিত, কম্পাইলার দ্বারা উৎপাদিত বাইটকোডকে JVM সম্পাদন/কার্যকর করে। আর এই বাইট কোড উইন্ডোজ, লিনাক্স, ম্যাক ওএস ইত্যাদির যেকোন প্লাটফর্মেই চালিত হতে পারে।
অর্থাৎ উইন্ডোজে কম্পাইল করা একটি প্রোগ্রাম লিনাক্সেও চলতে পারে এবং বিপরীতক্রমে লিনাক্সে কম্পাইল করা একটি প্রোগ্রাম উইন্ডোজেও চলতে পারে।
প্রতিটি অপারেটিং সিস্টেমেই বিভিন্ন ধরণের JVM রয়েছে, তবে bytecode সম্পাদিত হওয়ার পরে তারা যে আউটপুট তৈরি করে তা সব অপারেটিং সিস্টেমে একই হয়। তাই আমরা জাভাকে প্ল্যাটফর্ম হতে স্বাধীন ভাষা বলে ডাকি।
জাভা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ভাষা
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং জাভা'র খুবই গুরুত্বপূর্ণ দিক। প্রোগ্রামিং জগতে মুলত সিমুলা৬৭ (প্রোগ্রামিং ভাষা) এবং স্মলটক (প্রোগ্রামিং ভাষা) এর মাধ্যমে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর সূচনা হলেও, জাভা'র মাধ্যমেই এটি পরিপূর্ণভাবে বিকশিত হতে পেরেছে। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর কারণে জাভায় অতিদীর্ঘ প্রোগ্রাম লেখা এবং প্রোগ্রামকে ত্রুটিমুক্ত(debug) করা অনেক সহজ হয়েছে।
অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং(OOP) এমন একটি প্রোগ্রামিং কৌশল যা রীতি অনুযায়ী একটি নির্দিষ্ট টপিক্স এর সকল ভ্যারিয়েবল এবং ফাংশনকে একটি একক ক্লাস এর মধ্যে দলবদ্ধ করে।
অর্থাৎ অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং(OOP) এমন একটি প্রোগ্রামিং কৌশল যা রীতি অনুযায়ী অবজেক্ট এর সংগ্রহকে সুসংগঠিত করে এবং এই প্রত্যেকটি অবজেক্ট ক্লাস এর উদাহরণ বা নিদর্শন হিসেবে প্রতিনিধিত্ব করে।
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর ৪টি মূল ধারণা হলঃ
- এবস্ট্রাকশন(Abstraction)
- এনক্যাপসুলেশন(Encapsulation)
- ইনহেরিটেন্স(Inheritance)
- পলিমরফিজম(Polymorphism)
জাভা'র গুরুত্বপূর্ণ দিকগুলো
সহজ
জাভাকে একটি সহজ প্রোগ্রামিং ভাষা হিসাবে বিবেচনা করা হয় কারণ এতে অপারেটর ওভারলোডিং, মাল্টিপল ইনহেরিটেন্স , পয়েন্টার এবং এক্সপ্লিসিট মেমোরি এলোকেশন এর মতো জটিল বৈশিষ্ট্য নেই।
জাভা বহনযোগ্যতা (portability)
জাভার চেয়ে তুলনামূলক পুরাতন প্রোগ্রামিং ভাষাগুলিতে সাধারণত এক অপারেটিং সিস্টেমের জন্য লেখা প্রোগ্রাম অন্য অপারেটিং সিস্টেমে চালানো যেত না।
অপরদিকে জাভায় লেখা প্রোগ্রাম যেকোন অপারেটিং সিস্টেমে চালানো যায় শুধু যদি সেই অপারেটিং সিস্টেমের জন্য একটি জাভা রানটাইম এনভায়রনমেন্ট(জাভা ভার্চুয়াল মেশিন) থেকে থাকে। এই সুবিধা জাভাকে একটি অনন্য প্ল্যাটফর্মে পরিণত করে।
বিশেষ করে ইন্টারনেটে; যেখানে অসংখ্য কম্পিউটার একইসঙ্গে যুক্ত থাকে এবং কম্পিউটারগুলো বিভিন্ন অপারেটিং সিস্টেম ব্যবহার করে থাকে, সেখানে জাভায় লেখা অ্যাপলেট গুলো সকল কম্পিউটারে চলতে পারে এবং এর জন্য কোন বিশেষ ব্যবস্থা নিতে হয় না। জাভা'র এই সুবিধাকে বলা হয় বহনযোগ্যতা।
নির্ভরযোগ্য(Robust) ভাষা
জাভা প্রোগ্রামিং ভাষাকে এমনভাবে developed(বিকশিত) করা হয়েছে যা সম্ভাব্য ত্রুটির জন্য প্রাথমিক চেকিংয়ে প্রচুর জোর দেয়, তাই জাভা কম্পাইলার অন্যান্য প্রোগ্রামিং ভাষাগুলিতে সনাক্ত হওয়া সহজ নয় এমন ত্রুটি সনাক্ত করতে সক্ষম। জাভা প্রোগ্রামিং আমাদের কাছে নির্ভরযোগ্য হওয়ার মূল বৈশিষ্ট্যগুলো হল garbage collection, Exception Handling এবং memory allocation।
নিরাপদ
জাভাতে আমরা পয়েন্টার ব্যবহার করতে পারি না এবং আবদ্ধ অ্যারে(bound array) এর বাইরে অ্যাক্সেস করতে পারি না। আপনি যদি এটি করার চেষ্টা করেন তবে আপনি ArrayIndexOutOfBoundsException পাবেন। ফলে বাফার ওভারফ্লোর মতো নিরাপত্তা ত্রুটিকে কাজে লাগিয়ে নিরাপত্তার বিঘ্ন ঘটানো অসম্ভব হয়ে পড়ে।
Multithreading
জাভা multithreading সমর্থন করে। মাল্টিথ্রেডিং হল একটি জাভা বৈশিষ্ট্য যা CPU এর সর্বাধিক ব্যবহার নিশ্চিত করার লক্ষ্যে একটি প্রোগ্রাম এর দুই বা ততোধিক অংশকে যুগপৎ সম্পাদন(execution) এর সম্মতি দিয়ে থাকে।
জাভা বিতরণযোগ্য
জাভা প্রোগ্রামিং ভাষা ব্যবহার করে আমরা বিতরণযোগ্য(distributed) অ্যাপ্লিকেশন তৈরি করতে সক্ষম হয়। রিমোট মেথড ইনভোকেশন(RMI) এবং এন্টারপ্রাইজ জাভা বীন(EJB) ব্যবহার করে জাভাতে বিতরণযোগ্য অ্যাপ্লিকেশন তৈরি করা হয়।
সহজ ভাষায়ঃ জাভা প্রোগ্রামকে একাধিক সিস্টেমে বিতরণ করা যেতে পারে যেখানে সিস্টেমগুলো ইন্টারনেট সংযোগ ব্যবহার করে একে অপরের সাথে সংযুক্ত থাকে। একটি JVM (জাভা ভার্চুয়াল মেশিন) এর অবজেক্ট রিমোট JVM এর পদ্ধতিগুলি কার্যকর করতে পারে।