কোথায়, কোনও অবজেক্ট ওরিয়েন্টেড সিস্টেমে আপনার যদি ক্লাসের উপরে (সি-স্টাইল) স্ট্রাক্টগুলি বেছে নেওয়া উচিত?


9

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

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


আপনি কোন ভাষা ব্যবহার করছেন? আপনি কি প্রকাশ করছেন? জাভা ব্যতীত বেশিরভাগ আধুনিক ওও ভাষাগুলি এক বা অন্য কোনও উপায়ে সমর্থন করে।
কেভিন ক্লিন

উত্তর:


16

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

এগুলি জাভাতে বিশেষত প্রচলিত ক্লাসগুলির জন্য যা স্পষ্টভাবে "সিরিয়ালাইজযোগ্য" হিসাবে চিহ্নিত করা হয়।

আমি যুক্তি দিয়ে বলব যে এই ধরণের শ্রেণিগুলি স্ট্রাক্ট হিসাবে সর্বাধিক অর্থবোধ করে, যদি আপনি মনে করেন যে সরাসরি সদস্যদের আড়াল করার দরকার নেই (যেমন, নেস্টেড ধরণের ক্ষেত্রে)।


1
রবার্ট সি মার্টিন ক্লিন কোডে তাদের "ডেটা ট্রান্সফার অবজেক্টস" বলেছেন ।
ব্যবহারকারীর 6767

5

সি তে, কোনও ক্লাস নেই, তাই structডেটা বান্ডিল করার উপায়। C ++, structএকই হিসাবে classছাড়া উত্তরাধিকার ও সদস্য অ্যাক্সেস publicবদলে ডিফল্টরূপে private। সি # এরও এক ধরণের প্রকার রয়েছে struct, তবে আমি মন্তব্য করতে পর্যাপ্ত সি # জানি না। কমন লিস্পের defstructফর্ম রয়েছে, যা structভাষার পার্থক্য বিবেচনা করে সি- এর মতোই কাজ করে এবং এটি একটি সাধারণ লিস্প অবজেক্ট সিস্টেম শ্রেণীর চেয়ে পৃথক।

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


6
A structএবং a এর মধ্যে পার্থক্যটি classসি # তে আরও তাৎপর্যপূর্ণ - বড় জিনিসটি structহ'ল একটি মান ধরণের এবং একটি classএকটি রেফারেন্স টাইপ। মাইক্রোসফ্ট প্রস্তাবনা দেয় structযে বিষয়বস্তুগুলি 16 বাইট বা তার চেয়ে বড় হবে a
কারসন 63000

0

খুব মৌলিক স্তরে স্ট্রাক্ট এবং খাঁটি ডেটা ক্লাসের মধ্যে পার্থক্য কী (সম্পত্তির প্রবেশাধিকারী ছাড়া কোনও কার্যকারিতা নেই এমন)?

মেমরির পদচিহ্ন ছাড়া আর কিছুই নয়।


0

গৃহীত উত্তর ভাল। আমি শুধু যুক্ত করতে চাই ...

কখনও কখনও কোনও ক্লাসের ভিতরে কোনও পদ্ধতি স্থাপন করা ভাল। অন্য সময় বাহ্যিক ফাংশন থাকা ভাল যেখানে স্ট্রাক্ট / শ্রেণিটি প্যারামিটার হিসাবে পাস করা হয় (এমনকি আপনি ওওপি স্টাইলটি করছেন)।

ক্লাসের মধ্যে কখন কোন পদ্ধতি স্থাপন করবেন তার উদাহরণ: আয়তক্ষেত্র ac ক্যালকুলেটআরিয়া ()

ক্লাসের বাইরে কোনও ফাংশন কখন রাখবেন তার উদাহরণ: ক্যানভাস.ড্রো (আয়তক্ষেত্র রেক্ট)

আপনি আয়তক্ষেত্রের ভিতরে অঙ্কন () লাগাতে পারেন এবং এটি কার্যকর হবে। তবে অঙ্কন একটি স্তর নির্ভর অপারেশন। আপনি সার্ভারের দিকে টানবেন না, তবে ক্লায়েন্ট সাইডে। অঙ্কন () এমনকি সার্ভারে থাকা বোঝাতে পারে না। তবে "ক্যালকুলেটআরিয়া ()" স্তরগুলি থেকে পৃথক এবং আয়তক্ষেত্রের একটি সত্য বৈশিষ্ট্য, সুতরাং এটি সদস্য পদ্ধতি হিসাবে অন্তর্ভুক্ত করা ভাল।


0

আমার কাছে বড় পার্থক্য হ'ল শ্রেণি-আক্রমণকারী রয়েছে কি না।

বা অন্য কথায়: আমি কি কোনও সময়ে কোনও ক্ষেত্রে কোনও ক্ষেত্রকে কোনও মানতে পরিবর্তন করতে পারি? যদি তা হয় তবে এটি স্ট্রাক্ট; যদি না হয়, এটি একটি বর্গ।

কাঠামোর সাধারণ উদাহরণ হ'ল একটি 2 ডি পয়েন্ট, যার সাথে কেবলমাত্র এক্স এবং ওয়াই সদস্য থাকে, যার কোনও মান থাকতে পারে এবং একে অপরের থেকে সম্পূর্ণ স্বতন্ত্র। জনসাধারণের অ্যাক্সেস গ্রহণযোগ্য।

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


0

1) নেটওয়ার্ক structএস: স্ট্রাকচারগুলি যা তারের উপর দিয়ে সঞ্চারিত হয়।

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

2) Functors (বিশেষ করে পূর্বাভাস), আপনি পছন্দ মত ফাংশন থেকে পাস হবে যে std::remove_if। অন্যথায় বলা যায়, ক্লাসগুলি একইরকম / মতো উত্তরাধিকারসূত্রে পাওয়া যায় std::binary_function

3) মেটা-প্রোগ্রামিং ধারণাগুলি, যাতে কেবল সর্বজনীন constexprএবং / অথবা typedefগুলি থাকতে পারে ।

সম্পাদনা: দ্রষ্টব্য: এই উত্তরটি C ++ ক্লাস বনাম স্ট্রোকের ক্ষেত্রে প্রযোজ্য।

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