ফাংশনাল প্রোগ্রামিং বনাম অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং [বন্ধ]


783

আমি এ পর্যন্ত মূলত ওও প্রোগ্রামিংয়ের মুখোমুখি হয়েছি এবং কার্যকরী ভাষা শেখার প্রত্যাশায় রয়েছি। আমার প্রশ্নগুলি হ'ল:

  • আপনি কখন অবজেক্ট-ওরিয়েন্টডের উপরে ফাংশনাল প্রোগ্রামিং বেছে নেবেন?
  • কার্যক্ষম প্রোগ্রামিং একটি ভাল পছন্দ যেখানে সাধারণ সমস্যার সংজ্ঞাগুলি কী কী?



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

" ওও চলমান অংশগুলি এমপ্ল্যাপুলেট করে কোডকে বোধগম্য করে তোলে F এফপি চলমান অংশগুলি হ্রাস করে কোডকে বোধগম্য করে তোলে " "
মিশেল ফেদারস

উত্তর:


1192

আপনি কখন অবজেক্ট ওরিয়েন্টডের উপরে ফাংশনাল প্রোগ্রামিং বেছে নেবেন?

যখন আপনি কোনও ভিন্ন ধরণের সফ্টওয়্যার বিবর্তনের প্রত্যাশা করেন:

  • আপনি একটি নির্দিষ্ট সেট আছে যখন অবজেক্ট-কেন্দ্রিক ভাষার ভালো অপারেশন উপর জিনিষ , এবং আপনার কোড উন্নতির সাথে সাথে আপনি প্রাথমিকভাবে নতুন জিনিস যোগ করুন। বিদ্যমান ক্লাসগুলি বাস্তবায়িত করে এমন নতুন ক্লাস যুক্ত করে এটি সম্পাদন করা যেতে পারে এবং বিদ্যমান ক্লাসগুলি একা রয়েছে।

  • যখন আপনার জিনিসগুলির একটি নির্দিষ্ট সেট থাকে তখন কার্যকরী ভাষাগুলি ভাল থাকে এবং আপনার কোডটি যখন বিকশিত হয়, আপনি প্রাথমিকভাবে বিদ্যমান জিনিসগুলিতে নতুন ক্রিয়াকলাপ যুক্ত করেন। বিদ্যমান ফাংশনগুলির সাথে গণনা করা নতুন ফাংশন যুক্ত করে এটি সম্পাদন করা যায় এবং বিদ্যমান ফাংশনগুলি একা থাকে।

যখন বিবর্তনটি ভুল পথে যায়, আপনার সমস্যা আছে:

  • কোনও অবজেক্ট-ভিত্তিক প্রোগ্রামে একটি নতুন ক্রিয়াকলাপ যুক্ত করার জন্য একটি নতুন পদ্ধতি যুক্ত করতে অনেক শ্রেণীর সংজ্ঞা সম্পাদনা করতে হতে পারে।

  • একটি কার্যকরী প্রোগ্রামে একটি নতুন ধরণের জিনিস যুক্ত করতে একটি নতুন কেস যুক্ত করতে অনেক ফাংশন সংজ্ঞা সম্পাদনা করতে হতে পারে।

এই সমস্যাটি বহু বছর ধরে সুপরিচিত; 1998 সালে, ফিল ওয়েডলার এটিকে "এক্সপ্রেশন সমস্যা" হিসাবে অভিহিত করেছিলেন । যদিও কিছু গবেষক মনে করেন যে অভিব্যক্তির সমস্যাটিকে মিশ্রিনের মতো ভাষার বৈশিষ্ট্যগুলি দিয়ে সমাধান করা যেতে পারে, তবে একটি বহুল স্বীকৃত সমাধান এখনও মূল ধারায় পৌঁছেছে।

কার্যক্ষম প্রোগ্রামিং একটি ভাল পছন্দ যেখানে সাধারণ সমস্যার সংজ্ঞাগুলি কী কী?

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


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

54
জাভাস্ক্রিপ্টে আপনার কাছে সমস্ত জিনিস থাকতে পারে।
এরিক পুনরায়

61
@ এরিক রেপেন প্রশ্নটি উত্থাপিত হয়, আপনি কখন কার্যকরী বৈশিষ্ট্যগুলি ব্যবহার করতে পছন্দ করেন এবং কখন আপনি বস্তু-ভিত্তিক বৈশিষ্ট্যগুলি ব্যবহার করতে পছন্দ করেন?
নরম্যান রামসে

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

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

176

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

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

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

অনেক আধুনিক ভাষা বহু-দৃষ্টান্ত।

প্রস্তাবিত রিডিং

আমি একই নৌকায় (ওওপি ব্যাকগ্রাউন্ড, এফপি শিখতে) থাকাকালীন আমি আপনাকে এমন কিছু রিডিং প্রস্তাব করব যা আমি সত্যিই প্রশংসা করেছি:

  • জেরেমি মিলার দ্বারা প্রাত্যহিক। নেট বিকাশ জন্য কার্যকরী প্রোগ্রামিং । একটি দুর্দান্ত নিবন্ধ (যদিও খারাপভাবে ফর্ম্যাট করা হয়েছে) সি # তে এফপির অনেক কৌশল এবং ব্যবহারিক, বাস্তব-বিশ্বের উদাহরণ দেখায়।

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


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

6
@ ব্রুনো - ".NET এর শক্তি" এর প্রতিক্রিয়া। আরাম করুন।
ডুফাইমো

6
মজার বিষয় হচ্ছে, আমি আপনাকে ডাইকামকে তাঁর অর্থহীন মন্তব্য সম্পর্কে স্লাইডিং করতে দেখছি না। আমি যখন খুঁজছিলাম না তখন আপনি কি একজন মডারেটর হিসাবে মনোনীত হন? এখানে তুমি ছাড়া আর কেউ জ্বলছে না। আমি আবার বলব - শিথিল।
duffymo

4
হেই, দুঃখিত যদি আমি কিছু জ্বলজ্বল শুরু করি। আমি বলতে চাইছিলাম না যে অন্যান্য প্ল্যাটফর্মগুলি কম পাওয়ারফুল, কেবল নেট। ওওপি সমর্থন করে না। উদাহরণস্বরূপ এটিতে টেল কল অপ্টিমাইজেশন রয়েছে।
ডায়কাম

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

31

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

  1. এনক্যাপসুলেশন, থেকে
    • অভ্যন্তরীণ অবস্থার পরিবর্তনকে নিয়ন্ত্রণ করুন
    • অভ্যন্তরীণ উপস্থাপনার মধ্যে সংযোগকে সীমাবদ্ধ করুন
  2. সাবটাইপিং, মঞ্জুরি:
    • সামঞ্জস্যপূর্ণ ধরণের বিকল্প (বহুবিজ্ঞান)
    • শ্রেণীর মধ্যে বাস্তবায়ন ভাগ করে নেওয়ার এক অশোধিত উপায় (বাস্তবায়নের উত্তরাধিকার)

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

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

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


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

25
  1. যদি আপনি একটি ভারী ভার্চুয়ালি পরিবেশে থাকেন তবে খাঁটি ফাংশনাল প্রোগ্রামিং দরকারী। পরিবর্তনীয় অবস্থার অভাব সামঞ্জস্যকে প্রায় তুচ্ছ করে তোলে। এরলং দেখুন।

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

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