"প্রথম শ্রেণীর" অবজেক্টগুলি কী কী?


191

কখন প্রদত্ত প্রোগ্রামিং ভাষায় বস্তু বা অন্য কোনও কিছুকে "প্রথম শ্রেণি" বলা হয় এবং কেন? যে ভাষাগুলিতে তারা নেই সেগুলি থেকে তারা কী আলাদা?

সম্পাদনা করুন। যখন কেউ বলে "সবকিছুই একটি বস্তু" (পাইথনের মতো), তখন সে কি সত্যই বোঝায় যে "সবকিছুই প্রথম শ্রেণীর"?


1
এই প্রশ্নটি কি প্রোগ্রামারগুলিতে স্থানান্তরিত করা সম্ভব হবে? এসই? নাকি ওখানেও কি কোনও কুফল হবে? আমি মনে করি এই প্রশ্নটি ভাল। কোন ফোরামে এটি সবচেয়ে উপযুক্ত হবে তা ঠিক বলতে পারছি না।
শশাঙ্ক সাওয়ান্ত

16
পুনরায় খোলার পক্ষে ভোট দিয়েছেন ... দুঃখজনকভাবে সত্যই মনে হচ্ছে এটি কোনও লোকেদের দ্বারা বন্ধ করা হয়েছিল যারা প্রোগ্রাম করেনি, এটি স্পষ্টভাবে
বিষয়টিতে

উত্তর:


176

সংক্ষেপে, এর অর্থ হ'ল বস্তুর ব্যবহারে কোনও বিধিনিষেধ নেই। এটি অন্য যে কোনও বস্তুর সমান।

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

ভাষার উপর নির্ভর করে এটি বোঝাতে পারে:

  • বেনামে আক্ষরিক মান হিসাবে প্রকাশযোগ্য
  • ভেরিয়েবলগুলিতে স্ট্যাটিভ হওয়া being
  • ডেটা স্ট্রাকচারে স্ট্যাটিভ হওয়া being
  • একটি অন্তর্নিহিত পরিচয় (কোনও প্রদত্ত নামের চেয়ে পৃথক)
  • অন্যান্য সত্তার সাথে সমতার জন্য তুলনীয় হচ্ছে
  • একটি প্রক্রিয়া / ফাংশন পরামিতি হিসাবে পাসেবল হচ্ছে
  • কোনও প্রক্রিয়া / ফাংশনের ফলস্বরূপ প্রত্যাবর্তনযোগ্য
  • রানটাইমে গঠনমূলক হচ্ছে
  • মুদ্রণযোগ্য হচ্ছে
  • পঠনযোগ্য
  • বিতরণ প্রক্রিয়া মধ্যে transmissable হচ্ছে
  • চলমান প্রক্রিয়াগুলির বাইরে স্থবির হওয়া

উত্স

সি ++ ফাংশনে তারা নিজেরাই প্রথম শ্রেণীর অবজেক্ট নয় are

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

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

এখানে জাভাস্ক্রিপ্ট প্রথম শ্রেণির ফাংশনগুলির উদাহরণ রয়েছে:

// f: function that takes a number and returns a number
// deltaX: small positive number
// returns a function that is an approximate derivative of f
function makeDerivative( f, deltaX )
{
    var deriv = function(x)
    { 
       return ( f(x + deltaX) - f(x) )/ deltaX;
    }
    return deriv;
}
var cos = makeDerivative( Math.sin, 0.000001);
// cos(0)     ~> 1
// cos(pi/2)  ~> 0

উত্স

যে সত্তা প্রথম শ্রেণীর অবজেক্ট নয় তাদের দ্বিতীয় শ্রেণির অবজেক্ট হিসাবে উল্লেখ করা হয়। সি ++ এ ফাংশনগুলি দ্বিতীয় শ্রেণির কারণ এগুলি গতিশীলভাবে তৈরি করা যায় না।

সম্পাদনা সম্পর্কিত:

সম্পাদনা করুন। যখন কেউ বলে "সবকিছুই একটি বস্তু" (পাইথনের মতো), তখন সে কি সত্যই বোঝায় যে "সবকিছুই প্রথম শ্রেণীর"?

শব্দটি বস্তুটি আলগাভাবে ব্যবহার করা যেতে পারে এবং এটি প্রথম শ্রেণির হওয়া বোঝায় না। এবং সম্ভবত পুরো ধারণাটিকে 'প্রথম শ্রেণির সত্তা' বলা আরও বোধগম্য হবে। কিন্তু পাইথনে তারা লক্ষ্য করে সবকিছুকে প্রথম শ্রেণির করা। আমি বিশ্বাস করি যে আপনার বক্তব্যটি ব্যক্ত করেছেন তার উদ্দেশ্যটি প্রথম শ্রেণির বোঝায়।


2
আপনি কি 'ফার্স্ট ক্লাস' নয় এমন কিছু বস্তুর উদাহরণ দিতে পারেন?
সুদীপ ভান্ডারী

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

19

"যখন কেউ বলে" সবকিছুই একটি বস্তু "(পাইথনের মতো), তখন তার কি সত্যই বোঝানো যায় যে" সবকিছুই প্রথম শ্রেণীর "?"

হ্যাঁ.

পাইথনের প্রতিটি জিনিসই একটি উপযুক্ত অবজেক্ট। এমনকি অন্যান্য ভাষায় যে জিনিসগুলি "আদিম ধরণের"।

আপনি দেখতে পাচ্ছেন যে কোনও বস্তুর মতো 2আসলে বেশ সমৃদ্ধ এবং পরিশীলিত ইন্টারফেস থাকে।

>>> dir(2)
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__str__', '__sub__', '__truediv__', '__xor__']

পাইথনে সবকিছুই প্রথম শ্রেণির অবজেক্টের কারণে অপেক্ষাকৃত কম কয়েকটি অস্পষ্ট বিশেষ মামলা রয়েছে।

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

এর অর্থ হ'ল কোনও বস্তুর শ্রেণি হ'ল - নিজে - একটি বস্তু। এটি সি ++ থেকে আলাদা, যেখানে রান-টাইমে ক্লাসগুলির সর্বদা পৃথক অস্তিত্ব থাকে না।

প্রকারটি 2হ'ল type 'int'অবজেক্ট, যার পদ্ধতি, বৈশিষ্ট্য এবং একটি প্রকার রয়েছে।

>>> type(2)
<class 'int'>

বিল্ট-ইন টাইপের মতো intহ'ল type 'type'অবজেক্ট। এটিরও পদ্ধতি এবং বৈশিষ্ট্য রয়েছে।

>>> type(type(2))
<class 'type'>

1
আধুনিক পাইথনের ক্ষেত্রে এটি সত্য। পুরানো পাইথনে (সংস্করণ 1? এটি আমার সময়ের আগে ছিল) আপনি উত্তরাধিকার সূত্রে নিতে পারেন নি int। সুতরাং "পুরাতন" বনাম "নতুন ধাঁচের ক্লাসগুলি" (এবং 3 সালে, আর কোনও পুরানো-শৈলীর ক্লাস নেই)।
কিথ পিনসন

17

"প্রথম শ্রেণি" এর অর্থ আপনি এগুলি স্বাভাবিক পদ্ধতিতে পরিচালনা করতে পারেন। বেশিরভাগ সময়, এর অর্থ হ'ল আপনি এই প্রথম শ্রেণির নাগরিকদের কার্যকারণের পক্ষে যুক্তি হিসাবে পাস করতে পারেন, বা তাদের ফাংশন থেকে ফিরিয়ে দিতে পারেন।

এটি বস্তুর জন্য স্বতঃস্ফূর্ত তবে ফাংশন বা এমনকি শ্রেণীর জন্য সবসময় এতটা স্পষ্ট হয় না:

void f(int n) { return n * 2; }

void g(Action<int> a, int n) { return a(n); }

// Now call g and pass f:

g(f, 10); // = 20

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


17

কম্পিউটার প্রোগ্রামগুলির কাঠামো ও ব্যাখ্যার একটি স্লাইড থেকে , 2 এ লেকচার (1986), যা পরিবর্তে ক্রিস্টোফার স্ট্র্যাসিকে উদ্ধৃত করে :

প্রথম শ্রেণির নাগরিকদের অধিকার এবং সুযোগগুলি:

  • ভেরিয়েবল দ্বারা নামকরণ করা।
  • প্রক্রিয়া যুক্তি হিসাবে পাস করা।
  • পদ্ধতির মান হিসাবে প্রত্যাবর্তন করা।
  • ডেটা স্ট্রাকচারে অন্তর্ভুক্ত করা

1

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

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

এখানে প্রথম শ্রেণীর মূলত অর্থ, দ্বিতীয় শ্রেণি হিসাবে হ্যান্ডেল করা হয়নি (অবনমিত আচরণ সহ)। মূলত বিদ্রূপটি নিখুঁত বা পৃথক নয়।

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