উত্তর:
উইকিপিডিয়ায় ফাংশনাল প্রোগ্রামিংয়ের উপর একটি দুর্দান্ত নিবন্ধ রয়েছে যা আপনি জিজ্ঞাসা করেছেন কয়েকটি উদাহরণ সহ। @ কনরাড রুডলফ ইতিমধ্যে OOP নিবন্ধের লিঙ্কটি সরবরাহ করেছেন ।
আমি মনে করি না যে একটি দৃষ্টান্ত অন্যটির একটি সুপার সেট। এগুলি প্রোগ্রামিং সম্পর্কিত বিভিন্ন দৃষ্টিকোণ এবং কিছু সমস্যা এক দৃষ্টিকোণ থেকে এবং কিছু অন্য থেকে আরও ভাল সমাধান করা হয়।
আপনার প্রশ্নটি এফপি এবং ওওপির সমস্ত বাস্তবায়ন দ্বারা আরও জটিল । প্রতিটি ভাষার নিজস্ব কের্ক রয়েছে যা আপনার প্রশ্নের কোনও উত্তরের সাথে প্রাসঙ্গিক।
ক্রমবর্ধমানভাবে স্পর্শকাতর র্যাম্বলিং:
আমি এই ধারণাটি পছন্দ করি যে স্কালার মতো একটি ভাষা আপনাকে উভয় বিশ্বের সেরা উপহার দেওয়ার চেষ্টা করে। আমি উদ্বিগ্ন যে এটি আপনাকে উভয় জগতের জটিলতাও দেয়।
জাভা একটি ওও ভাষা, তবে সংস্করণ একটি "সংস্থান-সহ চেষ্টা করুন" বৈশিষ্ট্য যুক্ত করেছে যা এক ধরণের বন্ধের অনুকরণ করতে ব্যবহার করা যেতে পারে। এখানে এটি অন্য ফাংশনটির মাঝখানে স্থানীয় ভেরিয়েবল "এ" আপডেট করার অনুকরণ করে, এটি ফাংশনটিকে দৃশ্যমান না করে। এক্ষেত্রে অন্যান্য ফাংশনের প্রথমার্ধ হ'ল ক্লোজারট্রি () কনস্ট্রাক্টর এবং দ্বিতীয়ার্ধটি হ'ল বন্ধ () পদ্ধতি।
public class ClosureTry implements AutoCloseable {
public static void main(String[] args) {
int a = 1;
try(ClosureTry ct = new ClosureTry()) {
System.out.println("Middle Stuff...");
a = 2;
}
System.out.println("a: " + a);
}
public ClosureTry() {
System.out.println("Start Stuff Goes Here...");
}
/** Interface throws exception, but we don't have to. */
public void close() {
System.out.println("End Stuff Goes Here...");
}
}
আউটপুট:
Start Stuff Goes Here...
Middle Stuff...
End Stuff Goes Here...
a: 2
এটি স্ট্রিমটি খোলার, স্ট্রিমটিতে লেখার জন্য এবং নির্ভরযোগ্যভাবে এটি বন্ধ করার উদ্দেশ্যে বা কেবল দুটি ফাংশন জোড়া দেওয়ার জন্য যাতে আপনি তাদের মধ্যে কিছু কাজ করার পরে দ্বিতীয়টিকে কল করতে ভুলে যাবেন না তার উদ্দেশ্যে এটি কার্যকর হতে পারে । অবশ্যই, এটি এতটা নতুন এবং অস্বাভাবিক যে কোনও অন্য প্রোগ্রামার বুঝতে পারে যে তারা কিছু ভঙ্গ করছে তা না করে চেষ্টা ব্লকটিকে সরিয়ে ফেলতে পারে, সুতরাং এটি বর্তমানে এক ধরণের অ্যান্টি-প্যাটার্ন, তবে আকর্ষণীয় যে এটি করা যেতে পারে।
আপনি সর্বাধিক অপরিহার্য ভাষায় যে কোনও লুপকে পুনরাবৃত্তি হিসাবে প্রকাশ করতে পারেন। অবজেক্টস এবং ভেরিয়েবলগুলি অপরিবর্তনীয় করা যেতে পারে। পার্শ্ব প্রতিক্রিয়াগুলি হ্রাস করার জন্য প্রসেসগুলি রচনা করা যেতে পারে (যদিও আমি যুক্তি দিয়ে বলব যে একটি কম্পিউটারে সত্যিকারের ফাংশন সম্ভব নয় - প্রসেসর / ডিস্ক / সিস্টেম সংস্থানগুলি যে সময় নেয় এটি অনিবার্য পার্শ্ব প্রতিক্রিয়া)। কিছু কার্যকরী ভাষা অনেকগুলি করতে পারে যদি সমস্ত অবজেক্ট-ওরিয়েন্টেড ক্রিয়াকলাপ না হয় তবে do তাদের পারস্পরিক একচেটিয়া হতে হবে না, যদিও কিছু ভাষার সীমাবদ্ধতা রয়েছে (যেমন ভেরিয়েবলগুলির কোনও আপডেট করার অনুমতি না দেওয়া) যা নির্দিষ্ট নিদর্শনগুলি (যেমন পরিবর্তনীয় ক্ষেত্রগুলি) প্রতিরোধ করে।
আমার কাছে, অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের সর্বাধিক দরকারী অংশ হ'ল ডেটা হিডিং (এনক্যাপসুলেশন), একই পরিমাণে পর্যাপ্ত বস্তুগুলিকে একই (পলিমারফিজম) হিসাবে চিকিত্সা করা এবং আপনার ডেটা এবং পদ্ধতিগুলি যা এই ডেটাতে একসাথে পরিচালিত হয় (অবজেক্ট / ক্লাস)। উত্তরাধিকার OOP এর পতাকা হতে পারে, তবে আমার কাছে এটি সবচেয়ে গুরুত্বপূর্ণ এবং স্বল্প ব্যবহৃত অংশ।
ক্রিয়ামূলক প্রোগ্রামিংয়ের সর্বাধিক দরকারী অংশগুলি হ'ল অপরিবর্তনীয়তা (ভেরিয়েবলের পরিবর্তে টোকেন / মান), ফাংশন (কোনও পার্শ্ব প্রতিক্রিয়া নেই) এবং ক্লোজার।
আমি এটি অবজেক্ট-ওরিয়েন্টেড বলে মনে করি না, তবে আমার বলতে হবে যে কম্পিউটার বিজ্ঞানের সবচেয়ে দরকারী জিনিসগুলির মধ্যে একটি হ'ল একটি ইন্টারফেস ঘোষণা করার ক্ষমতা, তারপরে বিভিন্ন ইন্টারফেসের কার্যকারিতা এবং ডেটা সেই ইন্টারফেসটি প্রয়োগ করে। আমি এগুলির সাথে কাজ করার জন্য কয়েকটি মিটরিবল ডেটাও রাখতে চাই, তাই আমি অনুমান করি যে আমি আমার সমস্ত প্রোগ্রাম ডিজাইনে পরিবর্তন এবং পার্শ্ব প্রতিক্রিয়া সীমাবদ্ধ করার চেষ্টা করেও আমি একচেটিয়াভাবে কার্যকরী ভাষাগুলিতে সম্পূর্ণ আরামদায়ক নই।