স্থির পদ্ধতিকে কেন একটি পদ্ধতি হিসাবে বিবেচনা করা হয়?


135

আমি একটি কোর্সের জন্য কিছু কোডের জন্য একটি ব্যাখ্যা লিখছি, এবং ঘটনাক্রমে শব্দগুলি methodএবং functionবিনিময়যোগ্যভাবে ব্যবহার করে চলেছি । আমি ফিরে গিয়ে শব্দটির সংশোধন করার সিদ্ধান্ত নিয়েছি, তবে আমার বোঝার গর্তে ছুটে গেলাম।

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

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

এটি যদিও মনের সাথে, স্থির methodsআসলে ফাংশন হওয়া উচিত নয় ?

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

আমি নিশ্চিত করতে চাই যে আমি সঠিক শব্দটি ব্যবহার করছি।
কেউ কি এই পরিষ্কার করতে পারেন?


2
আমি সবসময় ভাবতাম এটি জাভাতে পিএইচপি এবং পদ্ধতিতে কাজ করে। মূলত বিভিন্ন নাম সহ একই জিনিস
জে কে

19
তাত্ত্বিক কম্পিউটার বিজ্ঞান এবং কোনও ভাষা কীভাবে এটি প্রয়োগ করে তার মধ্যে পার্থক্য রয়েছে। জেএলএস কোনও পার্থক্য করে না এবং এটিকে একটি পদ্ধতি বলে।
জেরোইন ভেনেভেল 22'15


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

2
আমি যখন তত্ত্ব শিখছিলাম তখন আমি শিখেছি ফাংশনটি একটি মান দেয় এবং পদ্ধতিটি দেয় না। তারপরে আমি শিখেছি জাভা কলগুলি ফাংশন এবং পদ্ধতি পদ্ধতি। এখন আমি ফাংশনাল প্রোগ্রামিং চেষ্টা করছি এবং একটি ফাংশন আদর্শবান। পদগুলি প্রসঙ্গে অর্থ পরিবর্তন করে।
এমরি

উত্তর:


123

8.4.3.2 থেকে এই উদ্ধৃতিটি সাহায্য করতে পারে:

যে পদ্ধতিটি ঘোষিত staticহয় তাকে শ্রেণি পদ্ধতি বলা হয় ।

যে পদ্ধতিটি ঘোষিত হয় না staticতাকে উদাহরণ পদ্ধতি [...] বলে।

  • শ্রেণি পদ্ধতি: একটি শ্রেণীর সাথে যুক্ত।
  • দৃষ্টান্ত পদ্ধতি: একটি দৃষ্টান্তের সাথে সম্পর্কিত।

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


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

1
লাম্বদাস @FunctionalInterfaceটীকাগুলির সাথে হুডের নীচে 1 টি পদ্ধতি সহ বেনামে অভ্যন্তরীণ ক্লাস । একটি ল্যাম্বদা কেবল সিনট্যাকটিক চিনি এবং সে ক্ষেত্রে নতুন কিছু নেই।
অ্যাডাম আর্ল্ড

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

@ রেডিওডেফ এই বাক্যাংশের আরও ভাল উপায় হতে পারে এটি হ'ল ল্যাম্বডা এক্সপ্রেশন সম্বলিত ফাইলগুলিতে অন্য কোনও পরিবর্তন না করে সমস্ত ল্যাম্বডা এক্সপ্রেশনকে সমতুল্য ল্যাম্বডা এক্সপ্রেশন দিয়ে প্রতিস্থাপন করা যেতে পারে "বা এরকম কিছু।
ব্যবহারকারী 253751

4
আমি লজ্জিত. আমি স্কালা থেকে আসছি এবং এখনও ক্লাসটি নিজেই বস্তুর মতো এই সত্যটি মিস করতে পেরেছি। ধন্যবাদ.
কারসিজেনিকেট

80

এর সহজ উত্তরটি হ'ল যখন জাভা সমস্ত কিছুকে "পদ্ধতি" বলার সিদ্ধান্ত নিয়েছিলেন তখন তারা তাত্ত্বিক কম্পিউটার বিজ্ঞানের কোনও ফাংশন এবং কোনও পদ্ধতির মধ্যে পার্থক্যের বিষয়ে চিন্তা করেননি।


3
সেটা ঠিক. জাভা 7 অন্তর্ভুক্ত করা পর্যন্ত আপনি ভাষা স্পেসিফিকেশনে
এরউইন বোলভিড

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

2
মজার বিষয় হল এটি ফাংশন এবং সাব্রোটাইনগুলির মধ্যে পার্থক্য না করার পূর্ববর্তী ভাষাগুলির সিদ্ধান্তগুলির সাথে সমান্তরাল।
র্যান্ডম 832

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

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

26

স্থিতিশীল পদ্ধতিগুলি হুবহু ফাংশন নয়, পার্থক্যটি সূক্ষ্ম, তবে গুরুত্বপূর্ণ।

একটি স্ট্যাটিক পদ্ধতিটি কেবল প্রদত্ত ইনপুট প্যারামিটার ব্যবহার করা হয় মূলত একটি ফাংশন।

কিন্তু স্ট্যাটিক পদ্ধতিগুলি স্ট্যাটিক ভেরিয়েবল এবং অন্যান্য স্ট্যাটিক ফাংশনগুলি (স্ট্যাটিক ভেরিয়েবলগুলি ব্যবহার করে) অ্যাক্সেস করতে পারে তাই স্থির পদ্ধতিগুলির একটি রাষ্ট্র থাকতে পারে যা একটি ফাংশনের সাথে মৌলিকভাবে পৃথক হয় যা সংজ্ঞায়িত রাষ্ট্রহীন । (যোগ করুন: প্রোগ্রামাররা প্রায়শই সংজ্ঞা হিসাবে "ফাংশন" ব্যবহার করে এতটা কঠোর না হলেও কম্পিউটার বিজ্ঞানের একটি কঠোর ফাংশন কেবল ইনপুট পরামিতিগুলিতে অ্যাক্সেস করতে পারে)। সুতরাং স্থির ক্ষেত্রগুলিতে অ্যাক্সেসের এই ক্ষেত্রে এটি সংজ্ঞায়িত করা বৈধ নয় যে স্থির পদ্ধতি সর্বদা কার্যকরী।

আরেকটি পার্থক্য যা "স্থিতিশীল পদ্ধতি" এর ব্যবহারকে ন্যায়সঙ্গত করে তা হ'ল আপনি সি এর মাধ্যমে সংশ্লেষ করতে পারেন বিশ্বব্যাপী ফাংশন এবং বৈশ্বিক পরিবর্তনশীল যা সর্বত্র প্রবেশ করা যেতে পারে। যদি আপনি ক্লাসে অ্যাক্সেস করতে না পারেন যেখানে স্থিতিশীল পদ্ধতি রয়েছে, তবে পদ্ধতিগুলিও অ্যাক্সেসযোগ্য। সুতরাং "স্থিতিশীল পদ্ধতি" বৈশ্বিক ফাংশনগুলির বিপরীতে নকশার দ্বারা তাদের সুযোগে সীমাবদ্ধ।


2
আমি এই উত্তরটি পছন্দ করি তবে কিছু জিনিস আরও ভাল করে বুঝতে চাই। ফাংশন বনাম পদ্ধতির পরিবর্তে এটি কি আরও "খাঁটি" বনাম "পার্শ্ব-কার্যকর" ফাংশন নয়? বা পার্শ্ব প্রতিক্রিয়া কারণেই কোনও পদ্ধতি এমন? আমি এখানে শুধু মস্তিষ্কে জ্বলছি।
নাদির সাম্পাওলি

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

1
@ লেওনব্লয় পিওর ফাংশনাল প্রোগ্রামিং ভাষা যেমন হ্যাস্কেল সম্পূর্ণরূপে রাষ্ট্রহীন; বিশ্বব্যাপী পরিবর্তনশীল বলা যায় এমন কিছুই নেই।
থারস্টেন এস।

17

জাভাতে, কোনও ব্যবহারকারী-সংজ্ঞায়িত শ্রেণি আসলে java.lang.Class এর সাবক্লাসের উদাহরণ।

এই অর্থে, স্ট্যাটিক পদ্ধতি হয় একটি ধারণাগত ক্লাসের একটা নিদর্শন সংযুক্ত: তারা java.lang.Class একটি উপশ্রেণী একটি দৃষ্টান্ত সংযুক্ত হয়।

এটি মাথায় রেখে, শব্দটি "শ্রেণি পদ্ধতি" (জাভার স্থির পদ্ধতির বিকল্প নাম )টি বোঝা শুরু করে। এবং "শ্রেণি পদ্ধতি" শব্দটি অনেক জায়গায় পাওয়া যায়: উদ্দেশ্য সি, স্মলটালক এবং জেএলএস - মাত্র কয়েকটি নামকরণ করা।


এই সাবক্লাসের দুটি উদাহরণ থাকা কি সম্ভব?
র্যান্ডম 832

অবশ্যই, আপনি বিভিন্ন শ্রেণি লোডারে একটি ক্লাস লোড করতে পারেন ("কাস্টম ক্লাসে কাস্টম ক্লাসে কাস্ট করতে পারবেন না" বার্তাটি দিয়ে ক্লাসকাস্টএেক্সপশন পাওয়ার কারণ)।
dunni

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

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

1
@ র্যান্ডম 832 "সাজান?" খাঁটি OO তত্ত্বের দৃষ্টিকোণ থেকে, কোনও শ্রেণির দুটি উদাহরণ কি আসলেই একই রকম? খুব কমপক্ষে দুটি অন্যথায় একই শ্রেণীর অভিন্ন উদাহরণগুলির পৃথক ঠিকানা থাকবে। অন্যথায়, আমরা কীভাবে দুটি জিনিস রাখতে পারি? একমাত্র জিনিস যা কোনও কিছুর সাথে হুবহু একই জিনিস তা হ'ল জিনিস।
মাইক ক্লার্ক

11

কম্পিউটার বিজ্ঞানের কার্যক্রমে একটি স্ট্যাটিক পদ্ধতিতে স্পষ্টভাবে মানচিত্র। তবে শ্রেণীর "পদ্ধতি" কিছুটা জেনেরিক, যেমন "সদস্য" (ক্ষেত্রের সদস্য, পদ্ধতি সদস্য)। মত শব্দ আছে

ডেটা সদস্য এবং পদ্ধতি সদস্যদের দুটি পৃথক নামের স্থান রয়েছে: .x এবং .x () সহাবস্থান করতে পারে।

সুতরাং কারণটি হ'ল লুডভিগ উইটজেনস্টাইন দার্শনিক হিসাবে বলেছিলেন যে ভাষা বিভিন্ন প্রসঙ্গে একটি সরঞ্জাম। "সদস্য" শ্রেণীবদ্ধ করার জন্য "পদ্ধতি" উপরের উদ্ধৃতিতে একটি দুর্দান্ত মনিকার।


9

আপনার চিন্তাভাবনা সঠিক এবং এটি অর্থবোধ করে। এটি জাভা সম্প্রদায়তে পরিভাষা প্রতিষ্ঠিত নয়। আমাকে এমন কিছু অভ্যন্তরীণ ব্যাখ্যা করা যাক কেন এটি পরিভাষাটি বন্ধ হয় তা বুঝতে সহায়তা করতে পারে।

জাভা একটি বর্গ ভিত্তিক অবজেক্ট ওরিয়েন্টেড ভাষা। একটি পদ্ধতি সর্বদা শ্রেণি বা উদাহরণের সদস্য (এটি অন্যান্য প্রোগ্রামিং ভাষার ক্ষেত্রেও বৈধ একটি সাধারণ বিবৃতি)। আমরা শ্রেণি এবং উদাহরণ দুটি বিষয় হিসাবে মনে করি।

ইনস্ট্যান্স পদ্ধতি (গতিশীল)

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

শ্রেণি পদ্ধতি (অচল)

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


7

এখানে স্কেলাকে স্মৃতিচারণ হিসাবে ব্যবহার করে আরেকটি পরিভাষা দেওয়া হল :
স্কালায় আপনার রয়েছে object, যা একটি স্পষ্টভাবে সংজ্ঞায়িত শ্রেণির একক উদাহরণ

আপনার সংজ্ঞা অনুসারে, আমরা ক্লাসের একক উদাহরণে চালিত হওয়ায় object পদ্ধতিগুলির সাথে সম্পর্কিত এই সাবরুটাইনগুলিকে আমরা কল করতে পারি ।
অতিরিক্তভাবে বস্তু এ শ্রেণি A কেও সংজ্ঞায়িত করবে এবং ক্লাস এ (জাভার সাথে ইন্টারফেস করার জন্য) [2] তে স্থিতিশীল পদ্ধতি হিসাবে অবজেক্ট এ এর ​​সমস্ত পদ্ধতি তৈরি করবে

সুতরাং আমরা বলতে পারি যে জাভা বর্গ A এর স্থিতিশীল পদ্ধতিগুলি স্কালা সিঙ্গলটন উদাহরণ হিসাবে একই সদস্যদের অ্যাক্সেস করে, যা আপনার সংজ্ঞা অনুসারে তখন ক্লাস এ এর স্ট্যাটিক পদ্ধতিগুলি (স্ট্যাটিক) বলা যায় serve


দুর্দান্ত তুলনা। আমি স্কেলাকে জানি, সুতরাং আপনার objectউল্লেখটি অনেক অর্থবোধ করে। ধন্যবাদ.
কারসিজেনিকেট

2

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


1

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

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