আপনি যে ব্লগ পোস্টটি উদ্ধৃত করেছেন তা তার দাবিটিকে কিছুটা বাড়িয়ে তুলেছে। এফপি ডিজাইনের ধরণগুলির প্রয়োজনীয়তা দূর করে না । "নকশার নিদর্শন" শব্দটি কেবল এফপি ভাষায় একই জিনিসটি বর্ণনা করতে ব্যবহৃত হয় না। তবে তাদের অস্তিত্ব আছে। কার্যকরী ভাষাগুলিতে ফর্মটির প্রচুর সেরা অনুশীলনের নিয়ম রয়েছে "যখন আপনি সমস্যার মুখোমুখি হন, তখন Y এর মতো দেখতে কোড ব্যবহার করুন", যা মূলত ডিজাইনের প্যাটার্নটি।
তবে এটি সঠিক যে বেশিরভাগ ওওপি-নির্দিষ্ট নকশার ধরণগুলি কার্যকরী ভাষায় বেশ অপ্রাসঙ্গিক।
আমি মনে করি না এটা বিশেষ করে বলতে চাই যে নকশা নিদর্শন বিতর্কিত হওয়া উচিত না সাধারণভাবে শুধুমাত্র ভাষায় ভুলত্রুটি আপ প্যাচ আলোচনা করতে পারেন। এবং যদি অন্য ভাষা একই সমস্যাটিকে তুচ্ছভাবে সমাধান করতে পারে, তবে অন্য ভাষার জন্য এটির জন্য নকশার ধরণের দরকার পড়বে না। যে ভাষা ব্যবহারকারীরা এমনকি সচেতন থাকবেন সমস্যা হতে পারে বিদ্যমান , কারণ, ভাল, তাই না সেই ভাষায় একটি সমস্যা হয়েছে।
এই সমস্যা সম্পর্কে এখানে গ্যাং অফ ফোরের বক্তব্যটি এখানে রয়েছে:
প্রোগ্রামিং ভাষার পছন্দটি গুরুত্বপূর্ণ কারণ এটি কারও দৃষ্টিভঙ্গিকে প্রভাবিত করে। আমাদের নিদর্শনগুলি স্মার্টটাক / সি ++ - স্তরের ভাষার বৈশিষ্ট্যগুলি ধরে নিয়েছে এবং সেই পছন্দটি নির্ধারণ করে যে কোনটি সহজে প্রয়োগ করা যায় এবং কী করা যায় না। আমরা যদি পদ্ধতিগত ভাষাগুলি ধরে নিয়ে থাকি তবে আমরা "উত্তরাধিকার", "এনক্যাপসুলেশন," এবং "পলিমারফিজম" নামে নকশার ধরণগুলি অন্তর্ভুক্ত করতে পারি। একইভাবে, আমাদের কিছু নিদর্শনগুলি সরাসরি কম সাধারণ বস্তু-ভিত্তিক ভাষা দ্বারা সমর্থিত। সিএলওএসের বহুবিধ পদ্ধতি রয়েছে, উদাহরণস্বরূপ, যা দর্শনার্থীর মতো কোনও প্যাটার্নের প্রয়োজনীয়তা কমায়। প্রকৃতপক্ষে, স্মলটালক এবং সি ++ এর মধ্যে যথেষ্ট পার্থক্য রয়েছে যার অর্থ কিছু প্যাটার্ন অন্য ভাষার তুলনায় এক ভাষাতে আরও সহজে প্রকাশ করা যায়। (উদাহরণস্বরূপ Iterator দেখুন।)
(উপরেরটি ডিজাইন প্যাটার্নস বইয়ের পৃষ্ঠা 4, অনুচ্ছেদ 3 এর পরিচিতির একটি উদ্ধৃতি)
ফাংশনাল প্রোগ্রামিংয়ের প্রধান বৈশিষ্ট্যগুলির মধ্যে প্রথম শ্রেণির মান, কারিরিং, অপরিবর্তনীয় মান ইত্যাদি হিসাবে ফাংশন অন্তর্ভুক্ত থাকে এটি আমার কাছে সুস্পষ্ট বলে মনে হয় না যে ওও ডিজাইনের ধরণগুলি সেই বৈশিষ্ট্যগুলির মধ্যে কোনওটির কাছাকাছি চলেছে।
কমান্ড প্যাটার্নটি কী, যদি প্রথম শ্রেণির ফাংশনগুলির একটি অনুমান হয় না? :) কোনও এফপি ভাষায়, আপনি কেবল কোনও ফাংশনটিকে অন্য ফাংশনের পক্ষে যুক্তি হিসাবে পাস করতে চান। একটি ওওপি ভাষায় আপনাকে একটি ক্লাসে ফাংশনটি গুছিয়ে রাখতে হবে, যা আপনি ইনস্ট্যান্টিয়েট করতে পারেন এবং তারপরে সেই বস্তুকে অন্য ফাংশনে স্থান দিতে পারেন। প্রভাব একই, কিন্তু ওওপিতে একে ডিজাইনের ধরণ বলা হয় এবং এটি আরও অনেক বেশি কোড নেয়। এবং বিমূর্ত কারখানার প্যাটার্নটি কী, যদি তরকারী হয় না? আপনি অবশেষে এটি কল করার পরে কোন ধরণের মানটি ছড়িয়ে যায় তা কনফিগার করতে একবারে কোনও ফাংশনে প্যারামিটারগুলি পাস করুন।
তাই হ্যাঁ, বেশিরভাগ জিওএফ ডিজাইনের নিদর্শনগুলি এফপি ভাষাগুলিতে নিরঙ্কুশভাবে উপস্থাপন করা হয়েছে, কারণ আরও শক্তিশালী এবং সহজ বিকল্পগুলির উপস্থিতি রয়েছে।
তবে অবশ্যই এখনও নকশার নিদর্শন রয়েছে যা এফপি ভাষার দ্বারা সমাধান করা হয় না solved সিঙ্গেলনের এফপি সমতুল্য কত? (এক মুহুর্তের জন্য অবহেলা করা যে সিলেটলেটগুলি সাধারণত ব্যবহারের জন্য একটি ভয়ানক নিদর্শন))
এবং এটি উভয় উপায়েও কাজ করে। যেমনটি আমি বলেছি, এফপির ডিজাইনের ধরণগুলিও রয়েছে; লোকেরা সাধারণত তাদের এ জাতীয় মনে করে না।
তবে আপনি হয়তো সোনাদির ওপারে দৌড়াতে পেরেছেন। তারা কী কী, যদি "গ্লোবাল স্টেটের সাথে আচরণের" জন্য কোনও নকশার প্যাটার্ন না থাকে? এটি এমন সমস্যা যা ওওপি ভাষাগুলিতে এত সহজ যে কোনও সমতুল্য নকশার প্যাটার্ন সেখানে বিদ্যমান নেই।
"একটি স্ট্যাটিক পরিবর্তনশীল বাড়ায়" জন্য, বা "যে সকেট থেকে পড়া", কারণ এটি আপনি শুধু কি আমরা একটি নকশা প্যাটার্ন প্রয়োজন হবে না কি ।
একটি মোনাড বলা একটি ডিজাইনের প্যাটার্ন হিসাবে এটি যথাযথভাবে অপ্রয়োজনীয় হিসাবে তাদের স্বাভাবিক ক্রিয়াকলাপগুলির সাথে পূর্ণসংখ্যা এবং শূন্য উপাদান একটি ডিজাইনের ধরণ। না, একটি মোনাড একটি গাণিতিক প্যাটার্ন , কোনও ডিজাইনের ধরণ নয়।
(খাঁটি) কার্যকরী ভাষায়, পার্শ্ব প্রতিক্রিয়া এবং পরিবর্তনীয় স্থিতি অসম্ভব, যদি না আপনি মনোড "ডিজাইন প্যাটার্ন", বা একই জিনিসকে অনুমতি দেওয়ার জন্য অন্য কোনও পদ্ধতির সাথে কাজ করে না।
অতিরিক্ত হিসাবে, কার্যকরী ভাষায় যা ওওপি সমর্থন করে (যেমন এফ # এবং ওসিএএমএল), এটি আমার কাছে স্পষ্ট বলে মনে হয় যে এই ভাষাগুলি ব্যবহার করে প্রোগ্রামাররা অন্যান্য ওওপি ভাষার জন্য উপলব্ধ একই নকশার নিদর্শনগুলি ব্যবহার করবে use আসলে, এখনই আমি প্রতিদিন F # এবং OCaml ব্যবহার করি এবং জাভাতে লেখার সময় আমি যে ভাষা ব্যবহার করি সেগুলি বনাম এই ভাষাগুলিতে আমি যে প্যাটার্নগুলি ব্যবহার করি তার মধ্যে কোনও উল্লেখযোগ্য পার্থক্য নেই।
সম্ভবত আপনি এখনও অপরিহার্যভাবে চিন্তা করছেন কারণ? সারাজীবন অত্যাবশ্যকীয় ভাষা নিয়ে কাজ করার পরে প্রচুর লোকেরা যখন কার্যকরী ভাষার চেষ্টা করে তখন সেই অভ্যাসটি ছেড়ে দিতে খুব কষ্ট হয়। (আমি এফ # তে কিছু মজার মজার প্রচেষ্টা দেখেছি, যেখানে আক্ষরিক অর্থে প্রতিটি ফাংশন 'লেট' স্টেটমেন্টের স্ট্রিং ছিল, মূলত যেন আপনি কোনও সি প্রোগ্রাম নিয়েছেন এবং সমস্ত সেমিকোলনকে 'লেট' দিয়ে প্রতিস্থাপন করেছেন। :))
তবে আরেকটি সম্ভাবনা হতে পারে যে আপনি কেবল বুঝতে পারেন নি যে আপনি সমস্যাগুলি ন্যূনতমভাবে সমাধান করছেন যা একটি OOP ভাষায় নকশার নিদর্শনগুলির প্রয়োজন হবে।
আপনি যখন কার্চিং ব্যবহার করেন, বা অন্যের পক্ষে যুক্তি হিসাবে কোনও ফাংশনটি পাস করেন, তখন থামুন এবং কীভাবে আপনি ওওপি ভাষায় এটি করবেন তা ভাবুন।
ফাংশনাল প্রোগ্রামিং ওওপি ডিজাইনের নিদর্শনগুলির প্রয়োজনীয়তা বাদ দেয় এমন দাবি করার কোনও সত্যতা কি আছে?
হাঁ। :) আপনি যখন কোনও এফপি ভাষায় কাজ করেন, আপনার আর ওওপি-নির্দিষ্ট নকশার নিদর্শনগুলির প্রয়োজন হয় না। তবে আপনার এখনও কিছু সাধারণ নকশার ধরণ যেমন এমভিসি বা অন্যান্য অ-ওওপি নির্দিষ্ট স্টাফ প্রয়োজন, এবং এর পরিবর্তে আপনার কয়েকটি নতুন এফপি-নির্দিষ্ট "নকশার ধরণ" দরকার। সমস্ত ভাষার নিজস্ব ত্রুটি রয়েছে এবং ডিজাইনের ধরণগুলি সাধারণত আমরা কীভাবে তাদের চারপাশে কাজ করি তা হয়।
যাইহোক, এমএল (আমার ব্যক্তিগত পছন্দ কমপক্ষে শেখার উদ্দেশ্যে), বা হাস্কেলের মতো "ক্লিনার" এফপি ভাষাগুলিতে আপনার হাত চেষ্টা করা আপনার আকর্ষণীয় মনে হতে পারে , যেখানে আপনি যখন ওওপি ক্র্যাচ পিছনে পড়ে না তখন 'নতুন কিছুর মুখোমুখি হলাম।
যেমনটি প্রত্যাশা করা হয়েছিল, কিছু লোক আমার নকশার ধরণগুলির সংজ্ঞাটিকে "একটি ভাষায় ত্রুটিগুলি বাছাই করা" হিসাবে আপত্তি জানিয়েছিল, তাই আমার ন্যায়সঙ্গততা এখানে:
যেমন ইতিমধ্যে বলা হয়েছে, বেশিরভাগ ডিজাইনের নিদর্শনগুলি একটি প্রোগ্রামিং দৃষ্টান্তের সাথে নির্দিষ্ট হয়, বা কখনও কখনও এমনকি একটি নির্দিষ্ট ভাষারও। প্রায়শই, তারা সেই সমস্যাগুলি সমাধান করে যা কেবলমাত্র সেই দৃষ্টান্তে বিদ্যমান (এফপির জন্য মনডস, বা ওওপির জন্য বিমূর্ত কারখানাগুলি দেখুন)।
কেন বিমূর্ত কারখানার প্যাটার্ন এফপিতে বিদ্যমান নেই? কারণ এটি যে সমস্যাটি সমাধান করার চেষ্টা করে তা সেখানে বিদ্যমান নেই।
সুতরাং, যদি কোনও সমস্যা ওওপি ভাষায় বিদ্যমান থাকে, যা এফপি ভাষায় বিদ্যমান না থাকে, তবে স্পষ্টতই এটি ওওপি ভাষাগুলির ঘাটতি। সমস্যাটি সমাধান করা যেতে পারে, তবে আপনার ভাষা এটি করে না তবে এর চারপাশে কাজ করার জন্য আপনার কাছ থেকে একগুচ্ছ বয়লারপ্লেট কোডের প্রয়োজন। আদর্শভাবে, আমরা আমাদের প্রোগ্রামিংয়ের ভাষাটি যাদুতে সমস্ত সমস্যা দূরে সরিয়ে দিতে চাই। এখনও যে সমস্যা আছে তা নীতিগতভাবে ভাষার অভাব রয়েছে। ;)