প্রক্রিয়াজাতীয় প্রোগ্রামিং আসলে কি? এটি ওওপি থেকে ঠিক কীভাবে আলাদা? এটি কি ফাংশনাল প্রোগ্রামিংয়ের মতো?


32

আমি জাভাতে খুব অবজেক্ট-ওরিয়েন্টেড (ওও) স্টাইলে প্রোগ্রামিং করছি । ওওপি আমার কাছে স্বজ্ঞাতভাবে আসে তবে অন্যান্য ধরণের প্রোগ্রামিং সম্পর্কে আমার খুব কম জ্ঞান আছে।

প্রক্রিয়াজাতীয় প্রোগ্রামিং আসলে কি ? এটি ওওপি থেকে ঠিক কীভাবে আলাদা? এটি কি ফাংশনাল প্রোগ্রামিং হিসাবে একই জিনিস ?

আমি ভাবতাম যে সমস্ত প্রোগ্রামিং যা ওও নয় প্রক্রিয়াগত। তবে আমি ভাবতে শুরু করি এটি সত্য নয়।


9
আপনার গবেষণা ভাগ করে নেওয়া প্রত্যেককে সহায়তা করে। আপনি কী চেষ্টা করেছেন এবং কেন এটি আপনার প্রয়োজনীয়তা মেটেনি তা আমাদের বলুন। এটি প্রমাণ করে যে আপনি নিজেকে সাহায্য করার চেষ্টা করার জন্য সময় নিয়েছেন, এটি আমাদের সুস্পষ্ট উত্তরের পুনরাবৃত্তি থেকে বাঁচায় এবং সর্বোপরি এটি আপনাকে আরও নির্দিষ্ট এবং প্রাসঙ্গিক উত্তর পেতে সহায়তা করে get এছাড়াও কীভাবে জিজ্ঞাসা করবেন দেখুন
gnat

2
কার্যনির্বাহী প্রোগ্রামিং ফাংশনাল প্রোগ্রামিংয়ের মতো জিনিস নয়; এটি আসলে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং, অবজেক্ট এবং ক্লাস বিয়োগ হিসাবে একই জিনিস।
ম্যাসন হুইলার

1
অপরিহার্য ওওপি হ'ল প্রক্রিয়াজাতীয় প্রোগ্রামিং, তাই আপনি সর্বদা ঠিক
ইনগো

উত্তর:


68

এই শর্তগুলির জন্য উইকিপিডিয়ায় ভাল ব্যাখ্যা রয়েছে। নির্বিশেষে, সারাংশ এখানে:


  • ডিক্লারেটিভ প্রোগ্রামিং অপরিহার্য প্রোগ্রামিংয়ের বিপরীত - এটি কীভাবে গণনা করতে হবে তা নির্দিষ্ট করে (যেমন এসকিউএল, রেজেক্সেস)।

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

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

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

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

এটি লোকেদের বিমূর্ততা অর্জনের একমাত্র উপায় বলে ভাবার কারণ করে এবং কার্যকরী প্রোগ্রামিং এবং ওওপি কোনওভাবে বিপরীত বা পারস্পরিক একচেটিয়া। অনেক লোক এও ভাবেন যে সমস্ত কার্যকরী ভাষা খাঁটি এবং রূপান্তরকে অস্বীকার করে।

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


3
"লাফানো নিষেধ" বরং জেনেরিক; এতে / যখন / ইত্যাদি অন্তর্ভুক্ত রয়েছে perhaps সম্ভবত "স্বেচ্ছাচারী লাফানো নিষেধ"?
ইজকাটা

@ ইজকাটা ভাল পয়েন্ট, পরিবর্তিত হয়েছে।
ডোভাল

1
উইকিপিডিয়া এন্ট্রিগুলির সাথে আসলে লিঙ্ক করার উপযুক্ত হতে পারে।
হাইলেম

এবং এ কারণেই এটিকে অবজেক্ট "ওরিয়েন্টেড" বলা হয় কেবলমাত্র বস্তু নয়।
জেফো

1
@OrangeDog কিভাবে একটি বিমূর্ত ডাটা টাইপ, যা থেকে যে কোনো ভিন্ন এছাড়াও ডেটা এবং ফাংশন এটি উপর কাজ করতে একজন encapsulated সেট সংজ্ঞায়িত করে? তদুপরি, আপনি অপরিবর্তনীয় বস্তু থাকতে পারে, সুতরাং সেই ক্ষেত্রে, কোন রাজ্যের ?
ডোভাল

12

প্রক্রিয়াভিত্তিক প্রোগ্রামিং প্রোগ্রামিংয়ের এমন একটি পদ্ধতির যা অন্য অনেক ভাষা নকশার জন্য ব্লক তৈরির অন্যতম মৌলিক (কার্যক্ষম এক নয়)।

বেশিরভাগ ভাষাগুলি "প্রসিডেরাল প্রোগ্রামিং" এর সেটে পড়ে এবং এটি সম্ভবত বেশিরভাগ মানুষের কাছে সবচেয়ে প্রাকৃতিক নকশার পদ্ধতি (যদি আপনি ওও হিসাবে বিবেচনা করেন, তবে আমি বলব আপনি সংখ্যালঘুতে রয়েছেন)।

বেসিক পদ্ধতিগত।

অন্যরা যেমন বলেছে, এটি ক্রমানুসারে প্রোগ্রাম গঠনের একটি প্রক্রিয়া।

  • প্রথমে আমি এক্স করি
  • দ্বিতীয় আমি y করি
  • তৃতীয়ত আমি জেড করি

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

দৃষ্টান্তটি আপনার জিনিসগুলি কী হবে বা জিনিসগুলির চারপাশে কীভাবে পাশ কাটাচ্ছে তা নির্ধারণ করে না।

এটি কেবলমাত্র বর্ণনা করে যে প্রোগ্রামটি ক্রমানুসারে পদ্ধতিতে পরিচালিত প্রক্রিয়াগুলির একটি সিরিজ (বা ফাংশন) হিসাবে কাঠামোযুক্ত হবে। তথ্যের পরে প্রক্রিয়াগুলি স্বাধীনভাবে সংজ্ঞায়িত করা হয়।

এটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং থেকে পৃথক, যা তথ্য এবং পদ্ধতি (ফাংশন নয়) সংগ্রহের চারপাশে প্রোগ্রামটি গঠন করে যা সেই ডেটাতে কাজ করে।

এটি সম্পর্কে চিন্তা করার এক উপায় হ'ল ডেটা স্কোপের শর্তে।

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

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

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


5

প্রক্রিয়াজাতীয় প্রোগ্রামিং অবশ্যই কার্যকরী প্রোগ্রামিং নয়।

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

ফাংশনাল প্রোগ্রামিং বলতে Aহবে 3, এবং Bহ'ল A + 1, এবং তারপরে কম্পিউটারকে কীভাবে গণনা করতে হবে তা নির্ধারণ করতে B। একবার আপনি সংজ্ঞা দিয়েছিলেন Aএটি পরিবর্তনযোগ্য (পরিবর্তনবিহীন) হওয়া উচিত । ফাংশনাল আপনাকে প্রথম শ্রেণীর মান হিসাবে কোনও ফাংশন পাস করার মতো জিনিসগুলিও করতে দেয় (কোনও ফাংশন আর্গুমেন্ট হিসাবে কোনও ফাংশন নিতে পারে)।

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


0

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

void doThisAndThat(....) { ... do something ... }

সুতরাং, এমন একটি প্রোগ্রাম যা একগুচ্ছ শূন্য-পদ্ধতিগুলি (পূর্বে প্রক্রিয়া (sic!) হিসাবে পরিচিত ) এবং কোডের মতো করে:

doThis();
if (state is that) doSomethingElse();
doThat();

নিখুঁত পদ্ধতিগত প্রোগ্রামিং।


doThisAndThat (....) বোঝায় যে একটি পদ্ধতি একাধিক জিনিস করবে যা সাধারণভাবে ভাল অভ্যাস নয়। জাভা এবং সি # বিকাশকারীরা বেশিরভাগ ক্ষেত্রে একক দায়িত্বের নীতিটি মেনে চলে। আমি মনে করি আপনার উপমাটি ত্রুটিযুক্ত। objectmentor.com/resources/articles/srp.pdf
JohnK

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

@ জনকে জাভা এবং সি # বিকাশকারীরা বেশিরভাগ ক্ষেত্রে একক দায়িত্বের নীতিমালা - ঠোঁটের পরিষেবাটি মেনে চলেন ?
ইনগো

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