প্রোগ্রামিং প্যারাডাইম

থাম্ব|প্রোগ্রামিং দৃষ্টান্তের শ্রেণিবিন্যাস
**প্রোগ্রামিং প্যারাডাইম** বা প্রোগ্রামিং ধারা হল প্রোগ্রামিং ভাষাসমূহের বৈশিষ্ট্য-ভিত্তিক প্রকারভেদ। কিছু প্যারাডাইম প্রোগ্রামিং ভাষার এক্সিকিউশনকালীন বৈশিষ্ট্যে গুরুত্ব দেয়, এবং কিছু প্যারাডাইম কোডের নির্মাণরীতিকে সর্বাগ্রে রাখে। প্রচলিত প্রধান প্যারাডাইমসমূহ:
* ইম্পারেটিভ প্রোগ্রামিং - অভীষ্ট ফলাফল পাওয়ার জন্য কম্পিউটারের আভ্যন্তরীণ অবস্থা পরিবর্তনের অনুক্রম বর্ণনা করা হয়।
** প্রসিডিউরাল প্রোগ্রামিং - প্রোগ্রামিং নির্দেশ তথা ইনস্ট্রাকশনসমূহ এক-একটি পদ্ধতিগত গুচ্ছে সংকলিত থাকে।
** অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং - ইনস্ট্রাকশনসমূহ তাদের সংশ্লিষ্ট তথ্যের সঙ্গে সংকলিত থাকে।
* ডিক্লারেটিভ প্রোগ্রামিং - সমাধানের প্রক্রিয়ার পরিবর্তে অভীষ্ট ফলাফলের বৈশিষ্ট্যসমূহ প্রোগ্রামে বর্ণিত থাকে।
** ফাংশনাল প্রোগ্রামিং - কিছু ফাংশনের সমষ্টিগত আউটপুট হিসেবে কাঙ্ক্ষিত ফলাফলটি বর্ণিত থাকে।
** লজিক প্রোগ্রামিং - তথ্যনির্ভর এবং যুক্তিভিত্তিক বিধির সমন্বিত পদ্ধতির সাপেক্ষে কাঙ্ক্ষিত সমাধানের যৌক্তিক বর্ণনা করা থাকে।
** ম্যাথমেটিকাল প্রোগ্রামিং - কাঙ্ক্ষিত ফলাফলটি একটি অপটিমাইজেশন সমস্যার সমাধান হিসেবে বিবৃত করা হয়।

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

ইম্পারেটিভ বা আজ্ঞাবাহী প্রোগ্রামিং ধারার দুটি মূল বৈশিষ্ট্য রয়েছে। প্রথমত, এরা প্রোগ্রামিং ধাপগুলো সম্পাদনের ক্রম (ক্রম নিয়ন্ত্রক প্রণালীসহ) বর্ণনা করে। এবং দ্বিতীয়ত, পার্শ্বপ্রতিক্রিয়া ঘটার সুযোগ দেয়, অর্থাৎ কোডের এক অংশে প্রোগ্রামের আভ্যন্তরীণ অবস্থা বা *স্টেট* পরিবর্তন করতে পারে এবং পরে ভিন্ন এক অংশ থেকে ওই পরিবর্তিত স্টেট পাঠ করা যায়। কোডের বিভিন্ন অংশের মধ্যে তথ্যগত যোগাযোগ স্পষ্টভাবে বিভক্ত নয়। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ধারায় প্রোগ্রামের ইনস্ট্রাকশনসমূহ তথ্য এবং কোডের সমন্বিত রূপ *অবজেক্ট*-এ বিন্যস্ত থাকে, এবং কোন অবজেক্টের স্টেট একমাত্র সংশ্লিষ্ট কোড দ্বারা পরিবর্তনযোগ্য হয়। বেশিরভাগ অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা ইম্পারেটিভ প্রোগ্রামিং ধারারই অন্তর্গত।

অন্যদিকে, ডিক্লারেটিভ বা বর্ণনামূলক প্রোগ্রামিং প্যারাডাইমে প্রোগ্রামিং ধাপগুলো সম্পাদনের ক্রম বর্ণনা করা হয় না। এর পরিবর্তে ব্যবহারযোগ্য কিছু প্রোগ্রামিং প্রণালী (বা *অপারেশন*) সরবরাহ করা হয়, এবং তারা কেমন পরিবেশে এক্সিকিউট হতে পারে তা বর্ণিত হয়। প্রোগ্রামিং ভাষাটির এক্সিকিউশন মডেল নির্ণয় করে কোন কোন অপারেশন এক্সিকিউটযোগ্য এবং তার সাপেক্ষে প্রোগ্রামের ধাপসমূহের ক্রম নির্ধারণ করে।

## সংক্ষিপ্ত বিবরণ

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

ঠিক যেভাবে সফটওয়্যার ইঞ্জিনিয়ারিং প্রক্রিয়াগতভাবে বিভিন্ন *[[প্রণালীবিজ্ঞান]]* দ্বারা সংজ্ঞায়িত হয়, তেমনি প্রোগ্রামিং ভাষাসমূহও কম্পিউটেশনের মডেল হিসেবে বিভিন্ন প্যারাডাইম দ্বারা বর্ণিত হয়।

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

বিভিন্ন প্যারাডাইমসমূহে সুপরিচিত কিছু প্রোগ্রামিং কৌশলকে উৎসাহিত করে, এবং কিছু কৌশল ব্যবহার বারণ করে। উদাহরণ হিসেবে বলা যায়, বিশুদ্ধ ফাংশনাল প্রোগ্রামিংয়ে সাইড-ইফেক্ট বর্জনীয়, অন্যদিকে স্ট্রাকচার্‌ড প্রোগ্রামিংয়ে **goto** নির্দেশ ব্যবহার করা অনুচিত। একারণে পুরাতন প্রোগ্রামিংরীতির সাথে পরিচিত অনেক প্রোগ্রামাররা আধুনিক প্যারাডইমসমূহকে অতিরিক্ত কঠোর বলে বিবেচনা করেন। কিন্তু এই তথাকথিত "কঠোরতা" সুবিধাজনকও বটে, কারণ কোন প্যারাডাইমের প্রাসঙ্গিক কৌশল ব্যবহার করলে প্রোগ্রামের গঠন এবং আচরণ অনুধাবন করা সহজ হয়, এবং প্রামাণিক উপপাদ্য ও এলগরিদমের সাহায্যে স্বয়ংক্রিয়ভাবে প্রোগ্রাম কোডের সঠিকতা নির্ণয় করাও সরলতর হয়।

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

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

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

## ইতিহাস
প্রোগ্রামিং ইতিহাসের শুরু থেকেই প্রোগ্রামিংয়ের বিভিন্ন প্রক্রিয়াধারা উদ্ভাবিত হয়েছে, যা সমসাময়িককালে কিংবা পরবর্তীকালে অনন্যভাবে চিহ্নিত করা হয়েছে। একটি অন্যতম প্রাম্ভিক ধারা হচ্ছে গঠনগত প্রোগ্রামিং বা স্ট্রাকচার্ড প্রোগ্রামিং, যা ১৯৬০ দশকের এর মধ্যবর্তী সময় থেকে প্রচলিত হয়। "প্রোগ্রামিং প্যারাডাইম" ধারণাটির জন্ম অন্তত ১৯৭৮ সালের দিকে, রবার্ট ডব্লিউ ফ্লয়েডের *দ্যা প্যারাডাইমস অফ প্রোগ্রামিং* শিরোনামের বক্তৃতা হতে। ফ্লয়েড টুরিং পুরস্কার অনুষ্ঠানে বক্তৃতাটি পাঠ করেন, এবং প্যারাডাইম ধারণাটি নিয়ে বিশদ আলোচনা করেন, যা তিনি আবিষ্কার করেছিলেন থমাস কুহ্‌নের লিখিত *[[দ্যা স্ট্রাকচার অফ সায়েন্টিফিক রেভলুশনস]]* (১৯৬২) গ্রন্থে।

### যান্ত্রিক কোড
সবচেয়ে নিম্নস্তরের প্রোগ্রামিং ভাষা হল, প্রথমত, যান্ত্রিক কোড বা **মেশিন কোড** হল যা প্রোগ্রামের ইনস্ট্রাকশনগুলোকে সরাসরি বাইনারি অঙ্কের সারি হিসেবে দেখায় (যে রূপটি কম্পিউটার প্রসেসর সরাসরি পাঠ করতে পারে); এবং দ্বিতীয়ত, এসেম্বলি ভাষা, যেখানে ইনস্ট্রাকশনগুলো সহজবোধ্য নামে এবং মেমরি এড্রেস প্রতীকের মাধ্যমে চিহ্নিত। এদেরকে প্রথম- এবং দ্বিতীয় প্রজন্মের প্রোগ্রামিং ভাষা হিসেবে চিহ্নিত করা হয়।

প্রোগ্রামিং ইতিহাসের শুরুতে প্রোগ্রামসমূহ তুলনামূলক সরল ছিল, এবং সরাসরি বাইনারি যান্ত্রিক কোডে প্রোগ্রাম লেখা হত। কিন্তু প্রোগ্রামের জটিলতা বৃদ্ধির সঙ্গে সঙ্গে সরাসরি মেশিন কোডে কাজ করা কঠিন হয়ে পড়ে। এর প্রেক্ষিতে ১৯৬০ দশকে প্রাথমিক এসেম্বলি ভাষাসমূহ উদ্ভাবন করা হয়। এতে ম্যাক্রো রচনা (সংক্ষিপ্ত কোড প্রতীককে জটিলতর প্রোগ্রামিং গঠন দ্বারা প্রতিস্থাপন করার কৌশল), প্রাক-প্রক্রিয়াকরণ, এবং প্রোগ্রামিং প্রবাহ নিয়ন্ত্রণের সুবিধা ছিল। এসব সুবিধার মাধ্যমে ব্যাপকমা্ত্রায় কোডের পুনর্ব্যবহার এবং হার্ডওয়্যার থেকে বিচ্ছিন্ন কোড রচনার সুযোগ তৈরি হয়। ফলে এসেম্বলি দিয়ে পূর্বের চেয়ে অত্যন্ত জটিলতর প্রোগ্রাম তৈরি করা সহজসাধ্য হয়, যা উন্নততর প্রোগ্রামিং ভাষা রচনা এবং কম্পিউটিংয়ের প্রগতিতে সরাসরি প্রভাব রেখেছে। বিভিন্ন অতীব জরুরি ক্ষেত্রে এবং বিশেষত এমবেডেড সিস্টেমসমূহে এখন এসেম্বলি কোড বহুল ব্যবহৃত হয়, কারণ এসেম্বলি ভাষায় কম্পিউটারের মেমরি, হার্ডওয়্যার প্রভৃতির সরাসরি যান্ত্রিক নিয়ন্ত্রণ নেওয়া যায়।

### প্রসিডিউরাল ভাষা

প্রোগ্রামিংয়ের বিকাশের পরবর্তী ধাপ ছিল প্রসিডিউরাল বা পদ্ধতিগত ভাষা। এধরনের ভাষাগুলো প্রোগ্রামিংয়ের তৃতীয় প্রজন্মের আরম্ভ করে। উচ্চস্তরের প্রোগ্রামিং ভাষার ধারণাটিও এসময়ে উৎপন্ন হয়। এই পর্যায়ের ভাষাগুলোতে সমাধান সমস্যাটির সংশ্লিষ্ট উন্নত কৌশল এবং পারিভাষিক শব্দমালার ব্যবহার প্রচলিত হয়। উদাহরণস্বরূপ:
* কোবোল ভাষায় **[[কম্পিউটার ফাইল|file]]**, এবং ফাইল স্থানান্তরের ক্রিয়া বোঝাতে **move** এবং  **copy** নামের কমান্ড উপস্থিত।
* ফরট্রান ভাষাটি গাণিতিক এবং প্রকৌশলক্ষেত্রের সমস্যা সমাধানে তৈরি, এবং এতে গাণিতিক পরিভাষার ব্যবহার রয়েছে।
* এলগল ভাষাটি তৈরি হয়েছিল এলগরিদম উৎপাদনের জন্য, এবং এতেও গাণিতিক ও যুক্তিগত পারিভাষিক শব্দের কমান্ড রয়েছে।
* পিএল/আই বাণিজ্যিক ও বৈজ্ঞানিক উদ্দেশ্যে লিখিত ভাষা, এতে পয়েন্টার কৌশলের সমর্থন আছে।
* বেসিক ভাষাটি লিখিত হয়েছিল সাধারণ মানুষকে প্রোগ্রামিংয়ে আগ্রহী করা উদ্দেশ্য নিয়ে।
* সি হল সার্বজনীন কাজের উদ্দেশ্যে লিখিত একটি প্রোগ্রামিং ভাষা, যা ডেনিস রিচি ১৯৬৯ থেকে ১৯৭৩ এর ভিতর রচনা করেন।

এ ভাষাগুলোর প্রত্যেকেই পদ্ধতিগত ধারার অনুসারী। অর্থাৎ, সমস্যা সমাধানের জন্য কী কী পদ্ধতি ব্যবহার করতে হবে তাদের ক্রম এবং পদ্ধতিগুলোর আভ্যন্তরীণ ধাপগুলোর প্রতিটির ক্রম এবং কাজ প্রোগ্রামারকে বর্ণনা করতে হয়। এ ধারায় লিখিত প্রোগ্রামের ক্ষমতা এবং এলগরিদমীয় কার্যকারিতা সম্পূর্ণভাবে প্রোগ্রামারের অভিজ্ঞতা এবং নৈপুণ্যের ওপর নির্ভর করে।

### অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং

পদ্ধতিগত ভাষাসমূহের প্রচলনের পরে অবজেক্ট-ওরিয়েন্টেড (বা *ওওপি*) প্রোগ্রামিং ভাষার উৎপত্তি হয়। এদের মধ্যে রয়েছে সিমুলা, স্মলটক, সি++, সি শার্প, আইফেল, পিএইচপি, জাভা, ইত্যাদি। এ ধরনের ভাষায় প্রোগ্রামের তথ্য এবং সেই তথ্যের সংশ্লিষ্ট কোড একত্রিত হয়ে অবজেক্ট নামের গঠন তৈরি করে থাকে। এর থেকে ওওপি ভাষার আর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য এনক্যাপসুলেশন উদ্ভূত হয়। এনক্যাপসুলেশনের মূল কথা হচ্ছে, কোন অবজেক্টের অন্তর্গত তথ্য বাইরে থেকে (অন্য অবজেক্ট বা ব্যবহারকারী দ্বারা) সরাসরি পাঠ বা পরিবর্তন করা যাবে না, কেবলমাত্র ওই তথ্যের সংশ্লিষ্ট অবজেক্টটির *[[মেথড (প্রোগ্রামিং)|মেথড]]* এর মাধ্যমে করা যাবে। এভাবে নির্দিষ্ট তথ্যের ওপর নির্দিষ্ট অবজপক্টের সম্পূর্ণ এবং একক নিয়ন্ত্রণ প্রতিষ্ঠিত হয়। এর ফলে কোডের অন্যান্য অংশের পরিবর্তন না করেই কোন অবজেক্টের অন্তর্গত কোডে ব্যাপক পরিবর্তন করা সম্ভব হয় (যদি তার মেথডসমূহ অপরিবর্তিত থাকে)। তথাপি, রিচার্ড স্টলম্যান, আলেক্সান্দার স্তেপানভ এবং আরও অনেকে ওওপি প্রোগ্রামিংয়ের বিপক্ষে মত প্রকাশ করেছেন। এঁরা প্রসিডিউরাল প্রোগ্রামিংয়ের চেয়ে অবজেক্ট-ওরিয়েন্টেড প্যারাডাইমের কার্যকারিতা উন্নত কীনা এ ব্যাপারে সন্দিহান। এছাড়া প্রতিটি অবজেক্টের জন্য নিজস্ব মেথডের উপস্থিতির শর্ত অনেকের কাছে কোডের বাহুল্য বলে প্রতীয়মান হয়। এই বাহুল্য দূরীকরণের একটি উপায় হিসেবে উদ্ভাবিত হয়েছে বহুরূপিতা বা পলিমরফিজম।

অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং যেহেতু একটি প্যারাডাইম, কোন প্রোগ্রামিং ভাষা নয়, তাই এই প্যারাডাইম অনুসরণকারী এসেম্বলি ভাষা গঠন করাও অসম্ভব নয়। উচ্চস্তরের এসেম্বলি ভাষা (এইচএলএ) এই ধারণাটিরই বাস্তবায়ন করেছে। এটি একটি এসেম্বলি ভাষা হলেও আধুনিক ডেটা টাইপ এবং অবজেক্ট ভিত্তিক প্রোগ্রামিং কৌশল ব্যবহারে সক্ষম।

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

### অন্যান্য প্যারাডাইম
আজ্ঞাবাহী বা ইম্পারেটিভ প্রোগ্রামিং প্রথার একটি প্রকারভেদ হল লিটারেট প্রোগ্রামিং (বা পাঠযোগ্য প্রোগ্রামিং)। এই প্রথায় প্রোগ্রাম কোড একটি পাঠযোগ্য রচনা হিসেবে একটি হাইপারটেক্সট নেটওয়ার্কে বিন্যস্ত থাকে, এবং প্রোগ্রামের কার্যবিধির বর্ণনা বা কমেন্টের ধারাবাহিকতা অনুযায়ী কোডের সজ্জিত হয়, কম্পাইলারের সুবিধা অনুযায়ী নয়। অর্থাৎ কোডের পাঠযোগ্যতাকে সর্বাধিক গুরুত্ব দেয়া হয়।

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

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

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

সিম্বলিক প্রোগ্রামিং বা প্রতিকী প্রোগ্রামিং প্যারাডাইমের বৈশিষ্ট্য হল, এ ধারার প্রোগ্রামসমূহ সমস্যা সমাধানের এলগরিদমিক ফর্মুলা এবং প্রোগ্রামের নিজস্ব কোডকে তথ্য হিসেবে পর্যবেক্ষণ ও পরিবর্তন করতে পারে।  এধরনের প্রোগ্রামসমূহ ফলত: নিজেদেরকে পরিবর্তন করতে সক্ষম এবং "শিখতে" পারে। ফলে কৃত্রিম বুদ্ধিমত্তা, বিশেষজ্ঞ প্রণালী, প্রাকৃতিক ভাষা প্রক্রিয়াকরণ এবং  কম্পিউটার গেমসে এ এ প্যারাডাইমের ব্যাপক প্রয়োগ দেখা যায়। এধরনের ভাষার উদাহরণ হচ্ছে লিস্প এবং প্রোলগ।

ডিফারেন্সিয়েবল প্রোগ্রামিং বা অন্তরীকরণীয় প্রোগ্রামিংয়ের ক্ষেত্রে, প্রোগ্রামসমূহ এমনভাবে গঠিত হয় যে তাকে সম্পূর্ণরূপে অন্তরীকরণ (এমনকি স্বয়ংক্রিয়ভাবেও) করা সম্ভব যায়।

## বহু-প্যারাডাইম ভাষা

অধিকাংশ প্রোগ্রামিং ভাষায় একাধিক প্যারাডাইম(পূর্ণ বা গরিষ্ঠাংশ) ব্যবহার করা যায়। প্রোগ্রামারগণ নিজেদের প্রোগ্রামিং অভ্যাস এবং কাঙ্ক্ষিত লক্ষ্যের প্রেক্ষিতে উপযুক্ত প্যারাডাইম তথা প্রোগ্রামিং কৌশল এবং রীতিনীতি নির্বাচন করতে পারেন। এতে প্রোগ্রামিং ভাষাগুলোর ব্যবহার সহজতর হয়, এবং কখনো কখনো একটি ভাষায় রপ্ত করা অভিজ্ঞতা, কোন অসুবিধা ছাড়াই অন্য একটি ভাষায় প্রয়োগ করা সম্ভব হয়।

## আরও দেখুন

* আর্কিটেকচার বর্ণনার ভাষা
* প্রোগ্রামিং ভাষার তুলনা
* প্রোগ্রামিং প্যারাডাইমের তুলনা
* ডোমেইন-নির্ভর ভাষা
* মডেলিং ভাষা
* প্রোগ্রামিং ডোমেইন
* টাইপ ব্যবস্থা
* টুরিং সম্পূর্ণতা
* ভন নিউম্যান প্রোগ্রামিং ভাষা

## তথ্যসূত্র

## বহিঃসংযোগ

*Classification of the principal programming paradigms
*How programming paradigms evolve and get adopted? 

বিষয়শ্রেণী:প্রোগ্রামিং প্যারাডাইম
বিষয়শ্রেণী:প্রোগ্রামিং ভাষার শ্রেণিবিভাগ
বিষয়শ্রেণী:প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:প্রোগ্রামিং ঘরানা
বিষয়শ্রেণী:প্রোগ্রামিং ভাষার বিষয়