সৃষ্টি জগতের প্রতিটি ক্ষেত্রে বিবর্তন (Evolution) একটি অত্যাবশ্যকীয় শব্দ। বর্তমানের চাহিদা মেটাতে পরিবর্তন বা বিবর্তনের মাধ্যমে উন্নয়নের কোন বিকল্প নেই। তবে যে জগতে এ পরিবর্তনের মাত্রা সর্বাধিক এবং নৈমিত্তিক সেটি হচ্ছে সফটওয়্যার জগত।
সফটওয়্যার বিবর্তন
প্রখ্যাত আর্টিফিশিয়াল ইন্টেলিজেন্স (Artificial Intelligence) প্রযুক্তির লেখক আরনেস্ট টেলোর (Earnest tellor) মতে সফটওয়্যার জগতের বিবর্তন একটি গাছের বেড়ে ওঠার মতোই। একটি গাছ যেমন কয়েক্তি ধাপে পূর্ণাঙ্গরুপে পরিণত হয় তেমন আজকের এই আধুনিক ও সুগোপযোগী সফটওয়্যার টেকনোলজিও পুরবের কয়েকটি ধাপের বিবর্তনেরই ফসল। মুলত আজকের সফটওয়্যার টেকনোলজির বিবর্তন ৪টি ধাপে সম্পন্ন হয়েছে। ধাপগুলো হচ্ছেঃ
> মেশিন ল্যাংগুয়েজ (Machine language)
> এসেম্বলি ল্যাংগুয়েজ (Assembly language)
> প্রসিডিউর অরিয়েন্টেড প্রোগ্রামিং (Procedure oriented programming)
> অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং (Object oriented programming)
Machine language
Assembly language
Procedure oriented programming
Object oriented programming
সফটওয়্যার বিবর্তন
মেশিন ল্যাঙ্গুয়েজ (Machine language) : যে ভাষার সমস্যা সমাধানের জন্য বাইনারি সংখ্যা (0,1) ব্যাবহার করে
নির্দেশ (Instruction) সাজিয়ে প্রজ্ঞ্রাম রচনা করা হয়, তাই মেশিন ল্যাঙ্গুয়েজ (Machine language) ।
> মেশিন ল্যাঙ্গুয়েজে লিখিত প্রোগ্রামকে অবজেক্ট প্রোগ্রাম (Object program) বলে।
> এ ভাষায় প্রোগ্রাম লিখা তুলনামুলক ভাবে কষ্ট সাধ্য এবং সম সাপেক্ষ। এ ভাষায় লিখিত প্রোগ্রাম নিরবাহের জন্য কোন অনুবাদক প্রোগ্রামের (Translator) প্রয়োজন হয় না।
> এক ধরনের মেশিনের জন্য লিখিত প্রোগ্রাম অন্য ধরনের মেশিনে অন্য ধরনের মেশিনে ব্যাবহার করা যায় না।
> এ ভাষার প্রোগ্রাম লেখার জন্য কম্পিউটারে প্রতিটি ইন্সট্রাকশন এবং মেমরি অ্যাড্রেস সম্বন্ধে পরিষ্কার ধারনা থাকা অপরিহার্য।
এসেম্বলি ল্যাঙ্গুয়েজ (Assembly language) : বিশেষ সংক্ষিপ্ত সংকেত বা নেমোনিক (ADD, SUB, MUL, DIV, LOAD, MOV, MVI, JMP, JNZ, INC ইত্যাদি) ব্যাবহার করে জে ভাষার প্রোগ্রাম রচনা করা হয় তাকে এসেম্বলি ল্যাঙ্গুয়েজ (Assembly language) বলে। যেমনঃ- MASM, TASM ইত্যাদি।
> এ ভাষার লিখিত প্রোগ্রামকে সোর্স প্রোগ্রাম (Source Program) বলে।
>মেশিন ল্যাঙ্গুয়েজের তুলনায় এসেম্বলি ল্যাঙ্গুয়েজে প্রোগ্রাম রচনা অপেক্ষাকৃত সহজ ও কম সময় সাপেক্ষ হলেও হাই লেভেল লাঙ্গুইয়েজের তুলনায় কষ্ট সাধ্য এবং সময় সাপেক্ষ।
> এ ভাষার প্রোগ্রাম রচনার জন্য প্রচুর কমান্ড (Command) মুখস্থ রাখতে হয়।
> এ ভাষার লিখিত প্রোগ্রাম নির্বাহের জন্য অনুবাদক প্রোগ্রামের (Assembler) প্রয়োজন হয়।
প্রসিডিউর অরিয়েন্টেড প্রোগ্রামিং (Procedure oriented programming) :
মূলতঃ হাই লেভেল লেঙ্গুয়াগে যেমনঃ- COBOL, FORTRAN, BASIC, C ইত্যাদি ব্যাবহার করে জে প্রোগ্রামে তৈরি করা হয় তাকে স্ট্রাকচারড প্রোগ্রামিং কিংবা প্রসিডিউর ওরিয়েন্টেড প্রোগ্রামে (PO) বলে। এ প্রোগ্রামের প্রধান বিষয়বস্তু হচ্ছে ফাংশন। এখনে ডাটা নিয়ে কাজ করে এবং ডাটার চেয়ে ফাংশননের গুরত্ত বেশি থাকে। পঞ্চাশের দশকের দিকে যখন Assembly, FORTRAN প্রভৃতি ল্যাঙ্গুয়েজ বের তখন হাজার হাজার লাইন এর প্রোগ্রাম খুব সহজে লিখা যেতো। কিন্তু এ সকল ল্যাঙ্গুয়েজ ব্যাবহার করে লিখিত প্রোগ্রামে গুলো কোডিং করা ছিল খুবই অসুবিধাজনক। ওয়ি সকল অসুবিধা দূর করার জন্নই ষাটের দশকে Structured বা Procedure oriented programming language তৈরি করা হয়। যেমনঃ Algol, Pascal ইত্যাদি। এই প্রোগ্রামিং পদ্ধতিতে একটি বড় প্রোগ্রামকে বা সমস্যাকে কত গুলো ছোট ছোট অংশ বা মডিউলে ভাগ করা হয়। সমস্যা সমাধানের উপর ভিত্তি করে প্রতিটি অংশের জন্য আলাদা আলাদা ফাংশন ব্যাবহার করা হয় এবং প্রবরতিতে সকল ফাংশন সসমূহকে একত্রিত করে সমসসার সমাধান করা হয়।
বড় বড় প্রোগ্রামের ক্ষেত্রে কোন ফাংশনের কোন ডাটা ব্যাবহিত তা সনাক্ত করা বেশ কষ্ট কর। আবার বড় কোন প্রোগ্রাম স্ট্রাকচার থেকে নির্দিষ্ট কোন ডাটা। খুঁজে বের করতে চাই তাহলে পুর প্রোগ্রাম স্ট্রাকচারকে পরিক্ষা করে দেখতে হবে। তাই এই প্রক্রিয়াটি বেশ সময় সাপেক্ষ ও বিরক্তি কর। এর অন্নতম প্রধান একটি সমস্যা হচ্ছে, এতে ব্যাবহিত ফাংশন সমূহ Action oriented যা বাস্তব জীবনের সমস্যা সমাধানের সাথে খুব বেশি সম্পর্কিত নয়। এ ধরনের লাঙ্গুইয়েজে প্রোগ্রামের আকার যখন বেড়ে যায় তখন এর রক্ষনাবেক্ষন, ভুল-সংশোধন, পরিবর্তন, পরিবর্ধন ও পরিমার্জন ইত্যাদি অনেক কঠিন হয়ে পড়ে।
> এ ভাষার একটি বড় প্রোগ্রামকে কতগুলো ক্ষুদ্র ক্ষুদ্র অনশে বিভক্ত করা হয়। প্রতিটি ক্ষুদ্র অংশ ‘ফাংশন’ নামে পরিচিত।
> প্রত্যেকটি ফাংশনই গ্লোবাল ডাটা শেয়ার করে।
> ডাটা সহজেই এক ফাংশন থেকে অন্য ফাংশনে Move করতে পারে।
> এক ধরনের প্রোগ্রাম :Top down” পদ্ধতিতে Design করা হয়।
> প্রত্যেকটি ফাংশনের জন্য যেমন গ্লোবাল ডাটা রয়েছে, পাশাপাশি লোকাল ডাটা ও রয়েছে।
অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং (Object oriented programming) : প্রসিডিউর ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ ডাটার চেয়ে ফাংশনের গুরত্ত বেশি এবং যখনই এ ধরনের প্রোগ্রামের আকার বেড়ে যায় তখন এর রক্ষনাবেক্ষন, ভুল সংশোধন, পরিমার্জন, পরিবর্তন, পরিবর্ধন ইত্যাদি অনেকটা কঠিন হয়ে পড়ে। প্রসিডিউর অরিয়েন্টেড প্রোগ্রামিং এ বিদ্যমান এসব সমসসাবলি দূর করার জন্য জে প্রোগ্রামিং এর আবির্ভাব তাই অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং (OOP)
অব্জেক্ত অরিয়েন্টেড প্রোগ্রামিং এ একটি বৃহৎ সমস্যা ( Problem) কে ছোট অংশে বিভক্ত করা হয়। ছোট ছোট অংশগুলোকে Sub problem বা Object এর জন্যই কিছু Data থাকে এবং ঐ ডাটাগুলকে কাজ করানোর জন্য specific কিছু ফাংশন ও থাকে। উল্লেখ্য যে, কোন অবজেক্টের ফাংশন অন্য কোন অবজেক্টের ফাংশনকে নিয়েও কাজ করতে পারে।
> এর ধরনের system এ function এর চেয়ে data’র গুরত্ত বেশি।
> একটি বড় প্রোগ্রামকে কতগুলো ছোট ছোট অংশে বিভক্ত করা হয়, প্রতিটি ক্ষুদ্র খুরদ অংশ object হিশেবে পরিচিত।
> সমস্যার ধরন অনুযায়ী data structure এর জন্য নিজস্ব data ও function ব্যাবহার করা হয়।
> এতে অবজেক্ট সমূহ ফাংশন ব্যাবহার করে একে অপরের সাথে যোগাযোগ রক্ষা করতে পারে।
> যে কোন সময়ে প্রয়োজন অনুযায়ী data কিংবা function, structure এ add করা যাবে।
> এতে Message passing এর মাধ্যমে এক অবজেক্ট অন্য অবজেক্টের সাথে সংযোগ রক্ষা করে।
> এছারাও object oriented programming এ Class, Object, Inheritance, Data Abstraction, Data Hiding, Encapsulation, Polymorphism, Static Binding, Message passing, Concurrency, Object Persistence, Object Library ইত্যাদি বৈশিষ্ট্য বিদ্যমান।
পোস্ট সম্পর্কিত সমস্যার জন্য মন্তব্য দিন।ডাউনলোড লিঙ্ক এ সমস্যা জন্য ইনবক্স করুন Aimzworld007
ConversionConversion EmoticonEmoticon