ফাংশনাল প্রোগ্রামিং কি অবজেক্ট অরিয়েন্টেড সুপারসেট?


26

আমি যত বেশি কার্যকরী প্রোগ্রামিং করি, ততই আমার মনে হয় যে এটি বিমূর্ততার একটি অতিরিক্ত স্তর যুক্ত করে যা দেখে মনে হয় যেন পেঁয়াজের স্তরটি কীভাবে হয় - সমস্ত পূর্ববর্তী স্তরগুলিকে অন্তর্ভুক্ত করে।

আমি জানি না যে এটি সত্য কিনা তাই আমি ওওপি নীতিগুলি অনুসরণ করে যা বছরের পর বছর ধরে কাজ করেছি, যে কেউ ব্যাখ্যা করতে পারে যে কীভাবে কার্যকরী করে বা সেগুলির কোনওটিকে সঠিকভাবে চিত্রিত করে না: এনক্যাপসুলেশন, বিমূর্তি, উত্তরাধিকার, পলিমারফিজম

আমি মনে করি আমরা সকলেই বলতে পারি, হ্যাঁ এর টিপলসের মাধ্যমে এনক্যাপসুলেশন রয়েছে, বা টিপলগুলি প্রযুক্তিগতভাবে "ফাংশনাল প্রোগ্রামিং" হিসাবে গণ্য হয় বা সেগুলি কেবল ভাষার একটি উপযোগিতা?

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

দয়া করে, আপনার কীভাবে কার্যকরী মনে হয় বা ওওপির 4 টি মূলনীতি পূরণ করে না তা বিশদ করুন।

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


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

2
@ ইউফোরিক সংজ্ঞা অনুসারে এটি তৈরি করে
কনরাড রুডল্ফ

2
@ কনরাড রুডল্ফ আমি জানি অনেক লোক এই জিনিসগুলির দাবি করে এবং ওওপির অনন্য বৈশিষ্ট্য হিসাবে তারা যে সুবিধা নিয়ে আসে। "পলিমারফিজম" ধরে নেওয়ার অর্থ "সাব টাইপ পলিমॉर्फিজম", আমি দ্বিতীয়টি ওওপির সাথে অবিচ্ছেদ্য হওয়ার সাথে যেতে পারি। তবে আমি এখনও এনক্যাপসুলেশন এবং বিমূর্তনের একটি কার্যকর সংজ্ঞা পেয়েছি যা সিদ্ধান্তহীন-ওওপি পন্থাগুলি বাদ দেয়। আপনি বিশদ গোপন করতে এবং এগুলিতে অ্যাক্সেস সীমাবদ্ধ করতে পারেন এমনকি হাস্কেলতেও fine এবং হাস্কেলেরও অ্যাড-হক পলিমারফিজম রয়েছে, কেবল সাব টাইপ পলিমারফিজম নয় - প্রশ্নটি হল, "সাব টাইপ" বিটটি কী গুরুত্ব দেয়?

1
@ কনরাড রুডল্ফ এটি এটিকে আর গ্রহণযোগ্য করে তোলে না। যদি কিছু হয় তবে পদক্ষেপ নেওয়া এবং প্রচারকারীদের এটিকে পুনর্বিবেচনা করার কারণ দেওয়া উত্সাহজনক।

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

উত্তর:


44

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

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

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


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

এটি সর্বদা জাল করা সম্ভব - আপনি যে কোনও ভাষায় পছন্দ করেন এমন বস্তুগুলি প্রয়োগ করতে পারেন। যদিও আমি অন্য সব কিছুর সাথে একমত আছি :)
এলিয়ট বল

5
আমি মনে করি না "পার্শ্ব প্রতিক্রিয়া" শব্দটি ক্রিয়ামূলক প্রোগ্রামারদের দ্বারা তৈরি হয়েছিল (বা প্রাথমিকভাবে ব্যবহৃত হয়)।
sepp2k

4
@ সেপ্পেকে: তিনি বলেননি যে তারা এই শব্দটি আবিষ্কার করেছিলেন, তারা প্রায়শই একই সুর ব্যবহার করে এটি ব্যবহার করেন যা সাধারণত তাদের বাচ্চাদের যারা লন থেকে নামতে অস্বীকার করেন তাদের উল্লেখ করতে ব্যবহার করেন।
অ্যারোনআউট

16
@ অ্যারনোথ আমার লনের বাচ্চাগুলি আমাকে বিরক্ত করে না, এটি তাদের রক্তাক্ত পার্শ্ব প্রতিক্রিয়া! যদি তারা কেবল আমার সমস্ত লন জুড়ে পরিবর্তন বন্ধ করে দেয় তবে আমি তাদের মোটেই আপত্তি করব না।
জিমি হোফা 18

10

আমি ওওপি এবং এফপি তুলনা করতে নিম্নলিখিত স্বজ্ঞাত দরকারী।

এফপিকে ওওপির সুপারস্টেট হিসাবে বিবেচনা করার পরিবর্তে ওওপি এবং এফপিকে আপনার অনুরূপ অন্তর্নিহিত কম্পিউটিং মডেলের দিকে তাকানোর দুটি বিকল্প উপায় হিসাবে ভাবেন:

  1. কার্যকর করা হয় এমন কিছু অপারেশন,
  2. অপারেশনে কিছু ইনপুট যুক্তি,
  3. কিছু নির্দিষ্ট ডেটা / পরামিতি যা অপারেশনের সংজ্ঞাটিকে প্রভাবিত করতে পারে,
  4. কিছু ফলাফল মান, এবং
  5. সম্ভবত একটি পার্শ্ব প্রতিক্রিয়া।

ওওপি-তে এটি ধরা পড়ে

  1. কার্যকর করা হয় এমন একটি পদ্ধতি,
  2. একটি পদ্ধতির ইনপুট আর্গুমেন্ট,
  3. সদস্য ভেরিয়েবলের আকারে কিছু স্থানীয় ডেটা সম্বলিত সেই পদক্ষেপটির উপর পদ্ধতিটি আহ্বান করা হয়েছে,
  4. পদ্ধতির ফেরতের মান (সম্ভবত অকার্যকর),
  5. পদ্ধতির পার্শ্ব প্রতিক্রিয়া।

এফপিতে এটি ধরা পড়ে

  1. কার্যকর করা হয় এমন একটি ক্লোজার,
  2. বন্ধের ইনপুট আর্গুমেন্ট,
  3. বন্ধের ক্যাপচার ভেরিয়েবল,
  4. বন্ধের ফেরতের মান,
  5. বন্ধের সম্ভাব্য পার্শ্ব প্রতিক্রিয়া (হাস্কেলের মতো খাঁটি ভাষায়, এটি খুব নিয়ন্ত্রিত উপায়ে ঘটে)।

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

আমি মনে করি ভিন্ন ভিন্ন দৃষ্টিভঙ্গি এই উত্স থেকে উদ্ভূত যে বস্তু-ভিত্তিক দৃষ্টিভঙ্গি বস্তুগুলিতে (ডেটা) কেন্দ্রিক হয় যখন কার্যকরী দৃষ্টিভঙ্গি ফাংশন / ক্লোজার (ক্রিয়াকলাপ) এর উপর কেন্দ্রীভূত হয়।


8

আপনি OOP- এর সংজ্ঞা চেয়েছেন তা নির্ভর করে depends পাঁচ জনকে জিজ্ঞাসা করুন এবং আপনি সম্ভবত ছয়টি সংজ্ঞা পাবেন। উইকিপিডিয়া বলেছেন :

বস্তুর পিছনে sensকমত্য সংজ্ঞা বা তত্ত্বের সন্ধানের প্রচেষ্টা খুব সফল প্রমাণিত হয়নি

সুতরাং যখনই কেউ খুব নির্দিষ্ট উত্তর দেয়, এটি একটি নুনের দানা দিয়ে নিয়ে যান।

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

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

var cls = function (x) {
    this.y = x;
    this.fun = function () { alert(this.y); };
    return this;
};

var inst = new cls(42);
inst.fun();

(অবশ্যই জাভাস্ক্রিপ্ট রূপান্তরিত মানগুলিকে মঞ্জুরি দেয় যা নিখুঁত কার্যকরী প্রোগ্রামিংয়ে অবৈধ তবে ওওপি এর কঠোর সংজ্ঞায় এটি প্রয়োজন হয় না))

যদিও আরও গুরুত্বপূর্ণ প্রশ্ন হ'ল: এটি কি ওওপির অর্থপূর্ণ শ্রেণিবিন্যাস? এটি কার্যকরী প্রোগ্রামিংয়ের উপসেট হিসাবে ভাবতে সহায়তা করে? আমি মনে করি যে বেশিরভাগ ক্ষেত্রে এটি হয় না।


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

6

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

  • ফাংশনাল প্রোগ্রামিং হচ্ছে প্রথম শ্রেণির ফাংশন সহ প্রোগ্রামিং

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

বাকি সমস্ত কিছুই হয় অন্য কোথাও উপস্থিত, বা কিছু ক্ষেত্রে অনুপস্থিত।

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


আমি মনে করি আপনি 'ফার্স্ট অর্ডার ফাংশন' না দিয়ে 'প্রথম শ্রেণির ফাংশন' বোঝাচ্ছেন।
ড্যান_ওয়াটারওয়ার্থ

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

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

2

না; ওওপি প্রক্রিয়াগত প্রোগ্রামিংয়ের সুপারস্টেট হিসাবে দেখা যেতে পারে এবং ফাংশনাল দৃষ্টান্ত থেকে মৌলিকভাবে পৃথক হয় কারণ এটি ক্ষেত্রে ক্ষেত্রগুলিতে রাষ্ট্রের প্রতিনিধিত্ব করে। কার্যকরী দৃষ্টান্তে ভেরিয়েবলগুলি হ'ল ফাংশনগুলি যা কাঙ্ক্ষিত ফলাফল পাওয়ার জন্য ধ্রুবক ডেটাতে প্রয়োগ করা হয়।

আসলে আপনি ফাংশনাল প্রোগ্রামিংকে ওওপির একটি উপসেট বিবেচনা করতে পারেন; আপনি যদি আপনার সমস্ত ক্লাসকে অপরিবর্তনীয় করে রাখেন তবে আপনি বিবেচনা করতে পারেন আপনার কোনও ধরণের কার্যকরী প্রোগ্রামিং রয়েছে।


3
অপরিষ্কার ক্লাসগুলি উচ্চতর অর্ডার ফাংশন, তালিকা বোঝার বা ক্লোজারগুলি করে না। এফপি কোনও উপসেট নয়।
জিমি হোফা 14

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

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

2
হ্যাঁ, তবে যদি পরিস্থিতি পরিবর্তনের জন্য ক্লোজারগুলি ব্যবহার করে, আপনি কি এখনও একটি কার্যকরী দৃষ্টান্তে প্রোগ্রাম করবেন? মুল বক্তব্যটি হল - কার্যকরী দৃষ্টান্ত হ'ল অর্ডার ফাংশন, পুনরাবৃত্তি বা সমাপনীকরণ সম্পর্কে নয় বরং রাষ্ট্রের অভাব সম্পর্কে।
m3th0dman

এফপির সংজ্ঞা নিয়ে আকর্ষণীয় চিন্তাভাবনা .. আপনার পর্যবেক্ষণগুলি ভাগ করে নেওয়ার জন্য আপনাকে এই সম্পর্কে আরও চিন্তা করতে হবে।
জিমি হোফা

2

উত্তর:

উইকিপিডিয়ায় ফাংশনাল প্রোগ্রামিংয়ের উপর একটি দুর্দান্ত নিবন্ধ রয়েছে যা আপনি জিজ্ঞাসা করেছেন কয়েকটি উদাহরণ সহ। @ কনরাড রুডলফ ইতিমধ্যে 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 এর পতাকা হতে পারে, তবে আমার কাছে এটি সবচেয়ে গুরুত্বপূর্ণ এবং স্বল্প ব্যবহৃত অংশ।

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.