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




কার্যকরী প্রোগ্রামিং GoF নকশা নিদর্শন প্রতিস্থাপন? (16)

কার্যকরী প্রোগ্রামিং OOP নকশা নকশার প্রয়োজন নির্মূল করে যে দাবিতে কোন সত্য আছে?

কার্যকরী প্রোগ্রামিং বস্তু ভিত্তিক প্রোগ্রামিং হিসাবে একই নয়। বস্তু ভিত্তিক নকশা নিদর্শন কার্যকরী প্রোগ্রামিং প্রয়োগ করা হয় না। পরিবর্তে, আপনি কার্যকরী প্রোগ্রামিং নকশা নিদর্শন আছে।

কার্যকরী প্রোগ্রামিং জন্য, আপনি OO নকশা প্যাটার্ন বইগুলি পড়বেন না, আপনি FP নকশা নকশার অন্যান্য বই পড়বেন।

ভাষা অজ্ঞাত

সম্পূর্ণ না। OO ভাষার সাথে শুধুমাত্র ভাষা-অজ্ঞাতবাদী। নকশা নিদর্শন সব সময়ে পদ্ধতিগত ভাষা প্রযোজ্য নয়। তারা সবেমাত্র একটি সম্পর্কীয় ডাটাবেস নকশা প্রেক্ষাপটে ইন্দ্রিয় তোলে। স্প্রেডশীট ডিজাইন করার সময় তারা প্রযোজ্য নয়।

একটি সাধারণ OOP নকশা প্যাটার্ন এবং এর কার্যকরী সমতুল্য?

উপরে বিদ্যমান থাকা উচিত নয়। ওও কোড হিসাবে পুনঃলিখন পদ্ধতিগত কোড একটি টুকরা জন্য জিজ্ঞাসা মত। উম্ম্ম ... যদি আমি জাভাতে আসল ফোর্ট্রান (বা সি) অনুবাদ করি, তবে আমি এটি অনুবাদ করার চেয়ে আর কিছু করিনি। যদি আমি পুরোপুরি এটি একটি OO প্যাডিজমে পুনর্লিখন করি, তবে এটি আর ফোররান বা সি মত কিছু দেখতে পাবে না - এটি অচেনা হবে।

ওও ডিজাইন থেকে ফাংশনাল ডিজাইন পর্যন্ত কোনও সহজ ম্যাপিং নেই। তারা সমস্যা তাকান খুব ভিন্ন উপায়।

কার্যকরী প্রোগ্রামিং (প্রোগ্রামিং সব শৈলী মত) নকশা নিদর্শন আছে। রিলেশনাল ডাটাবেস নকশা নিদর্শন আছে, OO নকশা নিদর্শন আছে, পদ্ধতিগত প্রোগ্রামিং নকশা নিদর্শন আছে। সবকিছু নকশা নিদর্শন, এমনকি ভবন স্থাপত্য।

নকশা নকশার - একটি ধারণা হিসাবে - বিল্ডিং নির্মম উপায়, প্রযুক্তি বা সমস্যা ডোমেন নির্বিশেষে। যাইহোক, নির্দিষ্ট নকশা নিদর্শন নির্দিষ্ট সমস্যা ডোমেইন এবং প্রযুক্তি প্রয়োগ।

তারা যা করছেন সে সম্পর্কে চিন্তা করে এমন প্রত্যেকটি নকশা নিদর্শন উন্মোচন করবে।

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

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

কার্যকরী ভাষা অত্যন্ত উদ্দীপক। একটি কার্যকরী ভাষায় একটি নকশা নকশার প্রয়োজন নেই কারণ ভাষাটি এত উচ্চ স্তরের, আপনি এমন ধারণার মধ্যে প্রোগ্রামিং শেষ করেন যা নকশা নকশার সবগুলি একত্রিত করে।

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

উপরন্তু, ক্রিয়ামূলক ভাষাগুলি যা OOP সমর্থন করে (যেমন F # এবং OCaml), আমার কাছে স্পষ্ট মনে হচ্ছে যে এই ভাষাগুলি ব্যবহার করে প্রোগ্রামাররা অন্যান্য সমস্ত অপারেটিং সিস্টেমের ভাষাতে উপলব্ধ একই নকশা নকশার ব্যবহার করবে। আসলে, আমি প্রতিদিন F # এবং ওসিএমএল ব্যবহার করি, এবং এই ভাষাগুলিতে আমি যে নকশার ব্যবহার করি তার মধ্যে কোনও পার্থক্য নেই। আমি জাভাতে লেখার সময় ব্যবহার করি এমন প্যাটার্নগুলি।

কার্যকরী প্রোগ্রামিং OOP নকশা নকশার প্রয়োজন নির্মূল করে যে দাবিতে কোন সত্য আছে? যদি তাই হয়, আপনি একটি সাধারণ OOP নকশা প্যাটার্ন এবং তার কার্যকরী সমতুল একটি উদাহরণ পোস্ট বা লিঙ্ক করতে পারে?


Norvig এর উপস্থাপনা তারা সব GoF নিদর্শনগুলির একটি বিশ্লেষণের সাথে সম্পর্কিত, এবং তারা বলে যে 23 টির মধ্যে 16 টি নকশার কার্যকরী ভাষায় সরল বাস্তবায়ন ছিল, বা কেবল ভাষাটির অংশ ছিল। সম্ভবত সম্ভবত তাদের অন্তত সাতটি ছিল একটি) সমান জটিল বা খ) ভাষাতে উপস্থিত না। দুর্ভাগ্যবশত আমাদের জন্য, তারা enumerated হয় না!

আমি মনে করি এটি পরিষ্কার যে জিওফের "ক্রিয়েশনাল" বা "স্ট্রাকচারাল" নকশার বেশিরভাগই জাভা বা সি ++ এর আদিম টাইপ সিস্টেমগুলি পেতে চান যা আপনি চান তা করতে। কিন্তু বাকিগুলি বিবেচনার যোগ্য, কোনও ভাষাতে আপনি কোন প্রোগ্রাম করেন।

এক প্রোটোটাইপ হতে পারে; যখন এটি জাভাস্ক্রিপ্টের মৌলিক ধারণা, এটি অন্য ভাষায় স্ক্র্যাচ থেকে বাস্তবায়ন করতে হবে।

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


অন্যদের বলেছেন, কার্যকরী প্রোগ্রামিং নির্দিষ্ট নিদর্শন আছে। আমি নকশা নকশার পরিত্রাণ পেতে সমস্যা কার্যকরী সুইচ একটি ব্যাপার তাই নয়, কিন্তু ভাষা বৈশিষ্ট্য ব্যাপার।

Scala কিভাবে "সিঙ্গলটন প্যাটার্ন" দিয়ে চলে যায় তা দেখুন: আপনি কেবল একটি শ্রেণির পরিবর্তে একটি বস্তু ঘোষণা করুন। আরেকটি বৈশিষ্ট্য, প্যাটার্ন মিলিং, পরিদর্শক প্যাটার্ন clunkiness এড়ানো সাহায্য করে। এখানে তুলনা দেখুন: http://andymaleh.blogspot.com/2008/04/scalas-pattern-matching-visitor-pattern.html

এবং স্কাল, যেমন F #, OO- ক্রিয়ামূলক একটি সংমিশ্রণ। আমি F # সম্পর্কে জানি না তবে এটি সম্ভবত এই ধরনের বৈশিষ্ট্য রয়েছে।

ক্লোজার কার্যকরী ভাষা উপস্থিত, কিন্তু তাদের সীমাবদ্ধ করা প্রয়োজন। তারা প্রতিনিধি প্যাটার্ন সাহায্য।

এক আরো পর্যবেক্ষণ। কোডের এই অংশটি একটি প্যাটার্ন প্রয়োগ করে: এটি একটি ক্লাসিক এবং এটি এতই মৌলিক যে আমরা এটিটিকে "প্যাটার্ন" হিসাবে মনে করি না, তবে এটি নিশ্চিত:

for(int i = 0; i < myList.size(); i++) { doWhatever(myList.get(i)); }

জাভা এবং সি # এর মত প্রভাবশালী ভাষাগুলি মূলত এটির সাথে মোকাবিলা করার জন্য একটি কার্যকরী গঠন যা গৃহীত হয়েছে: "foreach"।


আপনার ব্লগ পোস্টটি উদ্ধৃত করেছে তার দাবিটি একটু বেশি। FP নকশা নিদর্শন জন্য প্রয়োজন নিষ্কাশন না। "নকশা নকশার" শব্দটি কেবলমাত্র FP ভাষাগুলিতে একই জিনিসটি বর্ণনা করার জন্য ব্যাপকভাবে ব্যবহৃত হয় না। কিন্তু তারা বিদ্যমান। কার্যপ্রণালী ভাষার ফর্মগুলির সর্বোত্তম অনুশীলনের নিয়মগুলি আছে "যখন আপনি সমস্যা X সম্মুখীন হন, Y -এর মতো কোডটি ব্যবহার করুন" যা মূলত একটি নকশা প্যাটার্ন।

যাইহোক, এটি সঠিক যে সর্বাধিক OOP- নির্দিষ্ট নকশা নকশার কার্যকরী ভাষাগুলিতে বেশ অপ্রাসঙ্গিক।

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

এখানে চারটি গ্যাং এই বিষয়ে কী বলার আছে তা এখানে রয়েছে:

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

(উপরে উল্লেখিত ডিজাইন প্যাটার্নস বইয়ের প্রবর্তনের উদ্ধৃতি, পৃষ্ঠা 4, অনুচ্ছেদ 3)

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

কমান্ড প্যাটার্ন কি, যদি প্রথম শ্রেণীর ফাংশন একটি আনুমানিক না? :) একটি FP ভাষাতে, আপনি কেবল একটি ফাংশনটি অন্য ফাংশনে যুক্তি হিসাবে পাস করবেন। একটি OOP ভাষাতে, আপনাকে একটি ক্লাসে ফাংশনটি মোড়ানোতে হবে, যা আপনি তাত্ক্ষণিকভাবে প্রেরণ করতে পারেন এবং তারপরে সেই ক্রিয়াকলাপটিকে অন্য ফাংশনে পাস করতে পারেন। প্রভাব একই, কিন্তু OOP এ এটি একটি নকশা প্যাটার্ন হিসাবে পরিচিত, এবং এটি একটি সম্পূর্ণ অনেক বেশি কোড লাগে। এবং অলংকরণ কারখানা প্যাটার্ন কি, যদি না currying? আপনি যখন অবশেষে এটি কল করেন তখন কী ধরণের মূল্য হ্রাস পায় সেটি কনফিগার করার জন্য একটি ফাংশনে একটি ফাংশনটি কিছুটা সময় পাস করুন।

তাই হ্যাঁ, বিভিন্ন GoF নকশা নকশারগুলিকে FP ভাষাগুলিতে অকার্যকর করে দেওয়া হয়, কারণ বিকল্পগুলি ব্যবহার করার জন্য আরও শক্তিশালী এবং সহজ।

তবে অবশ্যই এখনও নকশা প্যাটার্ন রয়েছে যা FP ভাষা দ্বারা সমাধান করা হয় না । একটি সিঙ্গল্ট এর এফপি সমতুল্য কি? (এক মুহুর্তের জন্য অপ্রয়োজনীয় যে একলা সাধারণত ব্যবহার করার জন্য একটি ভয়ানক প্যাটার্ন)

এবং এটি উভয় উপায়ে কাজ করে। আমি যেমন বলেছিলাম, এফপি এর নকশা নকশারও আছে, মানুষ কেবল তাদের মতোই মনে করে না।

কিন্তু আপনি monads জুড়ে চালানো হতে পারে। তারা কি "বিশ্বব্যাপী রাষ্ট্রের সাথে আচরণ" করার জন্য নকশা প্যাটার্ন না? এটি এমন একটি সমস্যা যা OOP ভাষাগুলিতে এত সহজ যে সেখানে কোন সমান নকশা প্যাটার্ন নেই।

"একটি স্ট্যাটিক পরিবর্তনশীল বৃদ্ধি", অথবা "যে সকেট থেকে পড়া" এর জন্য আমাদের একটি ডিজাইন প্যাটার্ন দরকার নেই, কারণ এটি আপনি যা করেন তা ঠিক

(বিশুদ্ধ) কার্যকরী ভাষায়, পার্শ্ব প্রতিক্রিয়া এবং পরিবর্তনযোগ্য রাষ্ট্র অসম্ভব, যদি না আপনি এটির সাথে "নকশার নকশার" নকশার সাথে কাজ করেন, বা একই জিনিসটি অনুমোদনের জন্য অন্য কোনও পদ্ধতির সাথে কাজ করেন।

উপরন্তু, ক্রিয়ামূলক ভাষাগুলি যা OOP সমর্থন করে (যেমন F # এবং OCaml), আমার কাছে স্পষ্ট মনে হচ্ছে যে এই ভাষাগুলি ব্যবহার করে প্রোগ্রামাররা অন্যান্য সমস্ত অপারেটিং সিস্টেমের ভাষাতে উপলব্ধ একই নকশা নকশার ব্যবহার করবে। আসলে, আমি প্রতিদিন F # এবং OCaml ব্যবহার করি এবং জাভাগুলিতে লেখার সময় আমি যে প্যাটার্নগুলি ব্যবহার করি সেগুলি বনাম এই ভাষাগুলির মধ্যে আমি যে নকশার ব্যবহার করি তার মধ্যে কোনও পার্থক্য নেই।

সম্ভবত আপনি এখনও অভাব বোধ করছেন কেন? অনেক মানুষ, প্রয়োজনীয় জীবনযাত্রার সাথে তাদের সমস্ত জীবনযাপন করার পরে, যখন তারা কার্যকরী ভাষা চেষ্টা করে তখন সেই অভ্যাসকে ছেড়ে দেওয়া কঠিন সময়। (আমি F # এ কিছু চমত্কার মজার প্রচেষ্টা দেখেছি, যেখানে আক্ষরিকভাবে প্রতিটি ফাংশন কেবল 'লে' বিবৃতিগুলির একটি স্ট্রিং ছিল, মূলত যেমন আপনি একটি সি প্রোগ্রাম নিয়েছিলেন এবং সমস্ত সেমিকোলনকে 'লেট' দিয়ে প্রতিস্থাপিত করেছিলেন। :))

তবে আরেকটি সম্ভাবনা হতে পারে যে আপনি কেবলমাত্র বুঝতে পারছেন না যে আপনি সমস্যার সমাধান করছেন যা OOP ভাষাতে নকশা নিদর্শনগুলির প্রয়োজন হবে।

যখন আপনি currying ব্যবহার করেন, বা অন্য কোনও যুক্তি হিসাবে একটি ফাংশন পাস করেন, তখন আপনি ওপেন ভাষাতে কীভাবে এটি করবেন তা নিয়ে চিন্তা করুন এবং চিন্তা করুন।

কার্যকরী প্রোগ্রামিং OOP নকশা নকশার প্রয়োজন নির্মূল করে যে দাবিতে কোন সত্য আছে?

হাঁ। :) যখন আপনি কোনও FP ভাষাতে কাজ করেন, তখন আপনাকে আরওপি-নির্দিষ্ট নকশা নকশার প্রয়োজন হয় না। তবে আপনি এখনও এমভিসি বা অন্যান্য অ-ওপ নির্দিষ্ট বিষয়গুলির মতো কিছু সাধারণ নকশা নকশার প্রয়োজন, এবং পরিবর্তে আপনার কয়েকটি নতুন FP- নির্দিষ্ট "নকশা নিদর্শন" প্রয়োজন। সমস্ত ভাষার তাদের ত্রুটি আছে, এবং নকশা নিদর্শন সাধারণত আমরা তাদের চারপাশে কাজ কিভাবে।

যাইহোক, আপনি "ক্লিনার" এফপি ভাষাগুলিতে আপনার হাতটি চেষ্টা করে দেখতে পারেন, যেমন এমএল (আমার ব্যক্তিগত প্রিয়, অন্তত শিক্ষার উদ্দেশ্যে), অথবা হ্যাসেল, যেখানে আপনার কাছে যখন OOP ক্রাচ ফিরে আসে না তখন আপনার কাছে নতুন কিছু সম্মুখীন করছি।

প্রত্যাশিত হিসাবে, কয়েকজন ব্যক্তি নকশা নিদর্শনগুলির সংজ্ঞাটিকে "একটি ভাষাতে ত্রুটিগুলি প্যাচিংয়ের" হিসাবে বর্ণনা করে, তাই আমার যুক্তি এখানে রয়েছে: যেমনটি ইতিমধ্যে বলা হয়েছে, বেশিরভাগ নকশা নিদর্শনগুলি একটি প্রোগ্রামিং প্রতিচ্ছবি, বা কখনও কখনও এমনকি একটি নির্দিষ্ট ভাষাতেও নির্দিষ্ট। প্রায়শই, তারা এমন সমস্যার সমাধান করে যা কেবল সেই প্রতিচ্ছবিতে বিদ্যমান থাকে (FP এর জন্য মোনড দেখুন, বা OOP এর জন্য বিমূর্ত কারখানাগুলি দেখুন)। এফ পি এ বিমূর্ত কারখানা প্যাটার্ন কেন নেই? যেহেতু এটি সমাধান করার চেষ্টা করে তাই সেখানে বিদ্যমান নেই। সুতরাং, যদি OOP ভাষাগুলিতে কোনও সমস্যা বিদ্যমান থাকে, যা FP ভাষাগুলিতে বিদ্যমান না থাকে তবে স্পষ্টতই এটি OOP ভাষাগুলির অভাব। সমস্যাটি সমাধান করা যেতে পারে, কিন্তু আপনার ভাষা এভাবে কাজ করে না তবে এটির চারপাশে কাজ করার জন্য আপনার কাছ থেকে বয়লারপ্লেট কোডের একটি গুচ্ছ প্রয়োজন। আদর্শভাবে, আমরা আমাদের প্রোগ্রামিং ভাষা চাই যে সমস্ত সমস্যা দূর হয়ে যাবে। যে কোন সমস্যা নীতিগতভাবে একটি লঙ্ঘন নীতি এখনও আছে। ;)


আমি জেরেমি গিবসন্সের কয়েকটি চমৎকার কিন্তু কিছুটা ঘন কাগজপত্রগুলি প্লাগ করতে চাই: "ডিজাইনের নিদর্শনগুলি উচ্চমানের ডাটাটাইপ জেনেরিক প্রোগ্রাম হিসাবে" এবং "ইটারটার প্যাটার্নের সারাংশ" (উভয় এখানে উপলব্ধ: http://www.comlab.ox.ac.uk/jeremy.gibbons/publications/ )।

এই উভয় বর্ণনা করে কিভাবে মূদ্রাঙ্কিত কার্যকরী কাঠামো অন্যান্য (বস্তু-ভিত্তিক) সেটিংসে নির্দিষ্ট নকশা নকশার দ্বারা আচ্ছাদিত ভূখণ্ডকে আচ্ছাদন করে।


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


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


এখানে আরেকটি লিঙ্ক রয়েছে, এই বিষয়ে আলোচনা করছে: http://blog.ezyang.com/2010/05/design-patterns-in-haskel/

তার ব্লগে পোস্ট এডওয়ার্ড হ্যাসেলের পরিপ্রেক্ষিতে সমস্ত 23 টি মৌলিক জিওএফ প্যাটার্ন বর্ণনা করেছেন।


ওওপি এবং এফপি-এর বিভিন্ন লক্ষ্য রয়েছে, ওওপির লক্ষ্যগুলি জটিলতার / সফটওয়্যার উপাদানগুলির চলমান অংশগুলিকে এনপ্যাপুলেটেড করা এবং এফপিটি সফ্টওয়্যার উপাদানগুলির জটিলতা এবং নির্ভরতাগুলি কমিয়ে আনার লক্ষ্য রাখে তবে এই 2 টি প্যারাডিজমগুলি 100% অসঙ্গতিপূর্ণ নয় এবং উপকার লাভের জন্য একসাথে প্রয়োগ করা যেতে পারে উভয় দুনিয়া থেকে। এমনকি এমন একটি ভাষা যা ন্যাটোর মত সি প্রোগ্রামিং হিসাবে সমর্থন করে না, যদি আপনি FP নীতিগুলি বুঝতে না পারেন তবে আপনি ফাংশন কোড লিখতে পারেন, একইভাবে আপনি FOP ব্যবহার করে OOP নীতিগুলি প্রয়োগ করতে পারেন যদি আপনি OOP নীতিগুলি, নিদর্শন এবং সর্বোত্তম অনুশীলনগুলি বুঝতে পারেন। আপনি যে প্রোগ্রামিং ভাষাটি ব্যবহার করেন সেটি নির্বিশেষে আপনি সমাধান করার চেষ্টা করে এমন পরিস্থিতি এবং সমস্যার উপর ভিত্তি করে সঠিক পছন্দটি তৈরি করবেন।


কার্যকরী প্রোগ্রামিং নকশা নিদর্শন প্রতিস্থাপন করা হয় না। নকশা নিদর্শন প্রতিস্থাপিত করা যাবে না।

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


জিওএফ ডিজাইন প্যাটার্নস OO ভাষাগুলির জন্য ওয়ার্কারাউন্ড রেসিপি কোডিং করছে যা সিমুল 67 এর উত্তরসূরি, যেমন জাভা এবং সি ++।

নকশা নকশার দ্বারা চিকিত্সা "ills" সর্বাধিক দ্বারা সৃষ্ট হয়:

  • স্থিরভাবে টাইপকৃত ক্লাস, যা বস্তুকে নির্দিষ্ট করে তবে নিজের বস্তু নয়;
  • একক প্রেরণে সীমাবদ্ধতা (শুধুমাত্র বামপন্থী যুক্তিটি একটি পদ্ধতি নির্বাচন করার জন্য ব্যবহৃত হয়, অবশিষ্ট আর্গুমেন্টগুলি শুধুমাত্র স্ট্যাটিক প্রকার হিসাবে বিবেচিত হয়: যদি তাদের গতিশীল প্রকার থাকে তবে এটি এড-হক পন্থাগুলির সাথে সামঞ্জস্য করার পদ্ধতিতে থাকে);
  • নিয়মিত ফাংশন কল এবং বস্তু-ভিত্তিক ফাংশন কলগুলির মধ্যে পার্থক্য, যার অর্থ বস্তু-ভিত্তিক ফাংশনগুলিকে কার্যকরী আর্গুমেন্ট হিসাবে নিয়ন্ত্রিত করা যাবে না যেখানে নিয়মিত কাজগুলি প্রত্যাশিত এবং বিপরীতভাবে হয়; এবং
  • "বেস টাইপস" এবং "ক্লাস টাইপস" এর মধ্যে পার্থক্য।

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

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

নির্মাণ এবং নন-মিউটেশন অ্যাক্সেস কার্যকরী প্রোগ্রামিং সহ সামঞ্জস্যপূর্ণ, এবং তাই নিদর্শনগুলি অ্যাক্সেস বা নির্মাণের সাথে যা করতে হবে তা প্রযোজ্য হতে পারে: ফ্যাক্টরী, ফ্যাকড, প্রক্সি, সজ্জাকারী, দর্শক হিসাবে নকশার।

অন্যদিকে, রাজ্য এবং কৌশল মত আচরণগত নকশার সম্ভবত কার্যকরী OOP সরাসরি প্রয়োগ করা হয় না কারণ রাষ্ট্র পরিবর্তন তাদের মূল হয়। এর মানে এই নয় যে তারা প্রযোজ্য নয়; সম্ভবত তারা mutual রাষ্ট্র simulating জন্য উপলব্ধ কোন কৌশল সঙ্গে সমন্বয় প্রয়োগ করুন।


জিওফ বইটি স্পষ্টভাবে OOP- এর সাথে সম্পর্কযুক্ত - শিরোনাম ডিজাইন প্যাটার্নস - পুনঃব্যবহারযোগ্য বস্তু-ওরিয়েন্টেড সফ্টওয়্যারের উপাদানসমূহ (জোর খনি।)


প্যাটার্নগুলি একই রকম সমস্যাগুলি সমাধান করার উপায়গুলি বার বার দেখা যায় এবং তারপরে বর্ণিত এবং নথিভুক্ত করা হয়। তাই না, এফপি প্যাটার্ন প্রতিস্থাপন যাচ্ছে না; তবে, FP নতুন প্যাটার্ন তৈরি করতে পারে এবং কিছু বর্তমান "সেরা অনুশীলন" প্যাটার্ন "অপ্রচলিত" তৈরি করতে পারে।


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

একটি HOF এর নীতি মানে ফাংশনগুলিকে অন্যান্য ফাংশনের আর্গুমেন্ট হিসাবে পাশ করা যেতে পারে। এবং ফাংশন মান ফেরত দিতে পারেন।


যখন আপনি "নকশা নকশার" (সাধারণভাবে) এবং "FP বনাম OOP" স্তরের দিকে এটি দেখার চেষ্টা করেন, তখন আপনি যে উত্তরগুলি খুঁজে পাবেন সেগুলি সবচেয়ে ভাল হবে।

উভয় axes উপর একটি স্তর গভীর যান, এবং নির্দিষ্ট নকশা নিদর্শন এবং নির্দিষ্ট ভাষা বৈশিষ্ট্য বিবেচনা এবং জিনিস পরিষ্কার হয়ে।

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

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

(পাশাপাশি: এখানে আমি লিখেছি এমন একটি সাম্প্রতিক ব্লগ , যা এফপি এবং নকশা নিদর্শনগুলিতে আরো আলোচনার আরও লিঙ্ক রয়েছে।)


২013 সালের নতুন বইটিতে "ফাংশনাল প্রোগ্রামিং প্যাটার্নস-ইন স্কাল অ্যান্ড ক্লোজুর" লেখক মাইকেল.বি। Linn একটি GOF প্যাটার্নের জন্য অনেক ক্ষেত্রে তুলনা এবং প্রতিস্থাপন প্রদান একটি শালীন কাজ করে এবং 'পুচ্ছ recursion', 'memoization', 'অলস ক্রম', ইত্যাদি মত নতুন কার্যকরী নিদর্শন আলোচনা।

এই বই অ্যামাজন পাওয়া যায়। কয়েক দশকের OO পটভূমি থেকে আসার সময় আমি এটি খুব তথ্যবহুল এবং উৎসাহিত করেছিলাম।





gang-of-four