OOP- এ থাকা অবজেক্টগুলিতে কি কোনও সত্তাকে প্রতিনিধিত্ব করতে হবে?


82

কোনও বস্তুর কোনও সত্তাকে প্রতিনিধিত্ব করতে হবে?

An দ্বারা সত্তা আমি ভালো কিছু বলতে চাচ্ছি Product, Motorএকজন ParkingLotইত্যাদি, একটি শারীরিক, অথবা এমনকি একটি সুস্পষ্ট অ শারীরিক ধারণাগত বস্তুর - এমন কিছু বিষয় যা ভাল কিছু কোর ডাটা পরিষ্কারভাবে বস্তুর একাত্মতার সঙ্গে, সংজ্ঞায়িত করা হয়, এবং কিছু ফাংশন / পদ্ধতি এটি পরিষ্কারভাবে মূল ডেটাতে কাজ করে।

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

কোনও বস্তু কি কেবল পদ্ধতির সংগ্রহ , প্রক্রিয়াগুলির একটি সাধারণ সেট যা একটি সাধারণ লক্ষ্য নিয়ে বাঁধে?

উদাহরণ: কোনও শ্রেণি বলা যেতে পারে MotorOperationsবা MotorActionsযেখানে কোনও সত্তা নেই তবে শ্রেণীর অভ্যন্তরীণ পদ্ধতিগুলি পছন্দ মতো কাজ করে

  • getMotorDataFromHTMLForm ()
  • getMotorManufacturers ()
  • selectMotorFromUserRequirements ($ প্রয়োজনীয়তা)
  • canMotorCanHandleOperatingConditions ($ অবস্থার)
  • computePowerConsumptionForMotor ($ ID)

একটি শ্রেণি সাধারণত ডেটাতে অবজেক্ট + ক্রিয়াকলাপের ডেটা সেন্ট্রাল হিসাবে সংজ্ঞায়িত হয়। সুতরাং Motorএকটির জন্য মোটর স্পেসিফিকেশন সম্পর্কিত কিছু মোটর ভেরিয়েবল থাকতে পারে এবং এমন কিছু ক্রিয়াকলাপ হতে পারে যা কিছু তৈরি করতে সেই ডেটাগুলিকে একত্রিত করে।

আমার ক্ষেত্রে এটির মতো আরও রয়েছে যে ক্লাসের মধ্য দিয়ে পাস করা ডেটা + ডাটাতে অপারেশন সহ আমার একটি ক্লাস রয়েছে , "মোটর অপারেশনস" -তে কোনও ডেটা কেন্দ্রিক নেই, ক্লাসের মধ্য দিয়ে অস্থায়ী পাসের তথ্য ছাড়াও।

প্রশ্ন

ক্লাস কি সত্তা-কম বস্তুর প্রতিনিধিত্ব করতে পারে? যদি তা না হয় তবে এগুলি কেন খারাপ / অসম্পূর্ণ / নন-ওওপি কেন্দ্রিক? ওওপির সাথে সামঞ্জস্য থাকার জন্য তাদের কীভাবে ধারণাগতভাবে পরিবর্তন / উন্নতি করতে হবে?


2
+1 টি। তবে "হ্যাঁ" এর অর্থ কি এটির কোনও সত্তাকে প্রতিনিধিত্ব করতে হবে, বা এর অর্থ কি তারা সত্তা-কম বস্তুর প্রতিনিধিত্ব করতে পারে?
প্যানজারিসারিসিস

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

1
না এটি হয় না, তবে এর অর্থটি হয় না MotorActionsবা MotorOperationsভাল ধারণা হয় বা হয় না।
ইমিগ্রিস

1
এই প্রশ্নটি আরও একটি স্পেসিফিকেশন থেকে উপকার করতে পারে
রিইনারপোস্ট

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

উত্তর:


109

না , কোনও বস্তুর কোনও সত্তাকে প্রতিনিধিত্ব করতে হবে না।

প্রকৃতপক্ষে, আমি যুক্তি দেব যে আপনি যখন শারীরিক সত্তা হিসাবে বস্তুগুলি সম্পর্কে চিন্তাভাবনা বন্ধ করেন তখন আপনি অবশেষে যে সুবিধাটি ওওপি-র প্রতিশ্রুতি দেয় তা পান।

এটি সর্বোত্তম উদাহরণ নয়, তবে কফি মেকার ডিজাইনটি সম্ভবত আমার জন্য আলো আসতে শুরু করেছিল।

বিষয়গুলি বার্তাগুলি সম্পর্কে। তারা দায়িত্ব সম্পর্কে। তারা গাড়ি, ব্যবহারকারী বা অর্ডার সম্পর্কে নয়।

আমি জানি আমরা ওওকে এইভাবে শিখাই, তবে আপনি যখন এমভিসি, এমভিভিএম বা এমভিডাব্লু যা করার চেষ্টা করেন তখন জিনিসগুলি কোথায় যায় তা নির্ধারণ করার জন্য এটি কতটা মৌলিক হতাশার চেষ্টা করার পরে তা স্পষ্ট হয়ে যায়। হয় আপনার মডেলগুলি হাস্যকরভাবে ফুলে উঠেছে বা আপনার নিয়ামকরা তা করেন। নাব্যতাযোগ্যতার জন্য, এটি জেনে রাখা দুর্দান্ত যে যানবাহনগুলি স্পর্শ করে এমন কোনও কিছুই Vehicle.ext ফাইলে রয়েছে তবে যখন আপনার অ্যাপ্লিকেশনটি যানবাহনের বিষয়ে থাকে, আপনি অবশ্যই সেই ফাইলটিতে স্প্যাগেটির 3000 লাইন দিয়ে শেষ করেন।

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

ফাংশন ব্যাগ সম্পর্কে কথা বলা যাক

একটি অবজেক্ট কেবল পদ্ধতির সংগ্রহ হতে পারে এবং এখনও ওও হতে পারে তবে আমার "বিধিগুলি" বেশ কঠোর।

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

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

  3. অবজেক্টটির একই "ধরণের" ডেটাতে কাজ করা উচিত। এই অবজেক্টটি মোটরগুলিতে স্টার্ট করে (স্টার্ট / স্টপ), এটি ক্র্যাঙ্ক দৈর্ঘ্যের সাথে কাজ করে, এটি ইগনিশন সিকোয়েন্সিং পরিচালনা করে, এটি একটি এইচটিএমএল রূপ নেয়। এই ডেটা ধারণাটি অবজেক্টের ক্ষেত্র হতে পারে এবং এটি সম্মিলিত বলে মনে হয়।

আমি সাধারণত আমি এই ধরণের জিনিসগুলি তৈরি করি যখন আমি রূপান্তরগুলি, সংমিশ্রণ করি, বা কেবল পরিবর্তনের বিষয়ে চিন্তা করতে চাই না।

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

বিষয়গুলি বার্তাগুলি সম্পর্কে

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

মূল প্রশ্ন: এই দুটি বস্তুর একে অপরের সাথে কথা বলার দরকার কী?

কোনও ব্যক্তির অবজেক্টটিকে কোনও অঙ্গ হিসাবে ভাবেন - এর একটি ডিফল্ট উদ্দেশ্য থাকে এবং কেবল তার আচরণের ক্ষেত্রে কোনও নির্দিষ্ট বার্তা পেলেই আচরণ পরিবর্তন করে।

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

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

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


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

1
কাঠামো-প্রেমী প্রকৌশলী দ্বারা তৈরি চরম বিমূর্ততা ছাড়াই উত্তর আধুনিক সিস্টেম আর্কিটেকচার ডিসিআই এটি পরিচালনা করে। কম্পিউটারের ভাবনা উচিত যে ব্যবহারকারী কী ভাবছেন, অন্যভাবে নয়। fulloo.info/doku.php?id=hat_is_dci
সিসকোয়েট

@ বেনআরনসন আমার কাছে মনে হচ্ছে আপনি যথেষ্ট সম্মিলিত প্রচেষ্টার সাথে এই বস্তুটির সম্মিলিত ধারণা হিসাবে বিকাশ করতে পারেন তবে আমি সত্তা-ফোকাসের পক্ষে বিষয়গুলিকে পৃথক করা উচিত যা আলাদা হওয়া উচিত। সংস্থাগুলি আমাদের নামে সীমানা উত্সাহিত করে, যা ভাল, তবে তারা যথাযথতা / সম্পূর্ণতার এই ধারণাটিও বয়ে আনে, যা আঘাতের দিকে ঝোঁক দেয়। অত্যন্ত হাস্যকর শর্তে, আমি একটি ফার্স্টনেমভালিডেটর অবজেক্টের পক্ষে এবং একটি নাম অবজেক্টের বিরুদ্ধে যা প্রথম এবং শেষ নামগুলির জন্য বৈধতা দেয়।
স্টিভ জ্যাকসন

1
আর একটি ভাল উদাহরণ: ericlippert.com/2015/04/27/wizards-and-warriors-part-one
মবি ডিস্ক

2
বিষয়গুলি বার্তাগুলি সম্পর্কে - স্টিভ জ্যাকসনের উত্তর - এটি একেবারে ঠিক। এমওপি হ'ল "মেসেজিং" বলতে যা বোঝাচ্ছেন, ও ও ওয়ান অ্যালান কেয়ের জনক বলেছিলেন যে বড় ধারণাটি ম্যাসেজিং । এবং আরও, আমি দুঃখিত যে আমি অনেক আগে এই বিষয়টির জন্য "অবজেক্টস" শব্দটি তৈরি করেছি কারণ এটি কম লোককে কম ধারণার দিকে মনোনিবেশ করার জন্য পায়।
রাডারবব

21

ক্লাস কি সত্তা-কম বস্তুর প্রতিনিধিত্ব করতে পারে? যদি তা না হয় তবে এগুলি কেন খারাপ / অসম্পূর্ণ / নন-ওওপি কেন্দ্রিক? তাদের পরিবর্তন / উন্নত করার কোন উপায় আছে কি?

সংক্ষেপে, আপনি কিছু করতে পারেন তবে এই নির্দিষ্ট দৃশ্যটি ওওপি নীতিগুলির বিরুদ্ধে হবে :)

আপনি যা বর্ণনা করছেন তা মাঝে মাঝে "ইউটিলিটি" শ্রেণি বলা হয় - সাধারণত কোড গন্ধের লক্ষণ। আপনি কিছু পদ্ধতি এক সাথে রাখার স্বার্থে ক্লাস তৈরি করা এড়াতে চান।

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

আপনার সাধারণ স্থাপত্য নিদর্শনগুলির দিকে নজর দেওয়া উচিত - এর মধ্যে একটি হ'ল এমভিসি (মডেল-ভিউ-কন্ট্রোলার)

আপনি যদি এমভিসি ব্যবহার করে তালিকাভুক্ত পদ্ধতিগুলি বিতরণ করতাম তবে আমি এখানে যা করব:

ক্লাস দেখুন:

  • GetMotorDataFromHTMLForm ()

মডেল ক্লাস (মোটর মূলত):

  • GetMotorManufacturer ()
  • CanMotorHandleOperationConditions ()
  • CalculatePowerConsumption ()

কন্ট্রোলার ক্লাস (মোটরসকন্ট্রোলার):

  • GetAllMotors ()
  • GetMotorById ()
  • GetMotorByUserRequirements ()

দেখে মনে হচ্ছে আপনি পিএইচপি ব্যবহার করছেন; একটি ভাল MVC ফ্রেমওয়ার্ক হল কটাক্ষপাত আছে Laravel । তাদের উদাহরণগুলিতে তারা কোথায় চিত্রের সাথে সম্পর্কিত তা ভালভাবে বর্ণনা করেছেন।

আরেকটি, তথ্যের আরও সাধারণ উত্স যে পদ্ধতিগুলি কোথায় তা স্থির করতে হবে তা হ'ল জিআরএসপি এবং সলিড নীতি।


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

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

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

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

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

15

ক্লাস কি সত্তা-কম বস্তুর প্রতিনিধিত্ব করতে পারে?

করতে পারা? হ্যাঁ. উচিত? সম্ভবত না - বা কমপক্ষে, আপনি কীভাবে জিনিসগুলি বাক্য করছেন তা নয়।

বাস্তবে প্রকৃতপক্ষে কোনও দৈহিক অবজেক্টকে সরাসরি উপস্থাপন না করার সময় বস্তুগুলি আসলে সর্বোত্তম হয় তাই কোডটিতে খুব কমই ম্যাপস হয়। তবে তাদের কোনও সম্মিলিত ধারণা বা কোড-অবজেক্টের প্রতিনিধিত্ব করতে হবে না। তাদের একটি একক সম্মিলিত দায়িত্ব উপস্থাপন করা প্রয়োজন।

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


3
bundling a bunch of tangentially related functions together is a namespace: এটি বস্তু কেন্দ্রিকের চেয়ে প্রক্রিয়াগত দৃষ্টান্তের মতো শোনাচ্ছে।
ডেনিস

@ এডনিস - ঠিক (অথবা আপনি এটিকে মডিউল বললে কার্যকর) প্যারাডাইমগুলি মিশ্রণ শক্তিশালী হতে পারে। বা এটি মারাত্মক অগোছালো হতে পারে।
টেলাস্টিন

অথবা উভয়ই :) - - - -
অ্যালেক্সাস

@ ডেনিস: বা উভয়ই নয় - কেবলমাত্র ত্যাঞ্জিতভাবে সম্পর্কিত ফাংশনগুলির সাথে একত্রিত হওয়া কোনও উদাহরণের মধ্যে সন্দেহজনক অনুশীলন practice
এসডেনহ্যাম

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

11

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

শুভকামনা করছি.


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

7

নং (বিপরীত প্রশ্ন জিজ্ঞাসা করার জন্য শিরোনাম সম্পাদিত!)

উদাহরণ:

Public class MyRepository
{
    public MyObject GetObject(string id)
    {
        //get data from the DB and build an object
    }
}

অথবা

Public class MyService
{
    public MyObject3 ProcessData(MyObject1 obj1, MyObject2 obj2)
    {
         //perform a process which is not a sole responsiblity of obj1 or obj2
    }
}

যাইহোক, সাধারণভাবে OOP এর পিছনে আদর্শ থেকে দূরে সরে যাওয়া

public struct Car
{
    public Wheel[] Wheels;
}

public int CountWheelsOnCar(MyCarStruct car)
{
   return car.Wheels.Length;
}

প্রতি

public class Car
{
    private Wheel[] wheels;
    Public int CountWheels()
    {
        return this.wheels.Length;
    }
}

আপনি কি বোঝাতে চেয়েছেন যে তারা সত্তা-কম বস্তুর প্রতিনিধিত্ব করতে পারে? (আমি প্রশ্নের উপর দেওয়া মন্তব্যটি দেখুন))
পান্জারসারিসিস

3
আমি খুব দীর্ঘ সময় ধরে প্রোগ্রামিং করে এসেছি আমার অনুমান - আমি যখন মাইরোপোসিটরিতে তাকালাম তখনই আমি আমার ড্রেসারটিতে একটি গ্লাসের বাটিটি মুদ্রা ও গুঁড়োয়ের গুচ্ছ দিয়ে আঁকলাম। পৌঁছে যান এবং একটি পয়সা, বা একটি বোতাম জোগাড় করুন ....
বিল কে

হ্যাঁ, আমার উদাহরণস্বরূপ পরিষেবা এবং রেপোর মতো
ইভান

@ আপনি ক্রেজি বুড়ো বোকা !!! MyButtonAndOrPennyBowl ক্লাসটি! পরিষ্কার কোডিং ftw
ইওয়ান

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

5

আমি মনে করি যে ক্লাসগুলি কোডিংয়ের সময় বাস্তব জগতের কিছু দৃশ্যায়ন সহায়ক তবে প্রয়োজনীয় নয় but

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

বেশিরভাগ ক্ষেত্রে এই "বিধিগুলি" আপনি ওও সম্পর্কে শিখবেন কেবলমাত্র গাইডলাইনগুলি আপনাকে ওও সম্পর্কে চিন্তাভাবনা করার জন্য বোঝানো হয় অগত্যা যে আপনি একবার দৈনিক কোডে কোড ব্যবহার করার পরে সেই বিষয়গুলির জন্য যা আপনার খুব চিন্তিত হয় তা নয়।

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


5

কোনও বস্তুর কোনও সত্তাকে প্রতিনিধিত্ব করতে হবে?

প্রশ্ন: কোন সত্তার Loggerপ্রতিনিধিত্ব করে?

আক্ষরিকভাবে - আক্ষরিক নয়।

শিক্ষার্থীদের ওওপি ব্যাখ্যা করার সময় এটি শারীরিক বিশ্বের সাথে সাদৃশ্যযুক্ত বিষয়গুলি ব্যাখ্যা করা সহায়ক।

অ্যালান কে - ওওপির অন্যতম জনক - নিম্নলিখিতটি লিখেছেন:

[...]

এটির মূল ধারণার নিম্নলিখিত অংশ ছিল।

  • কোনও বস্তুগুলি কোনও জৈবিক কোষ এবং / অথবা কোনও নেটওয়ার্কে পৃথক কম্পিউটারের মতো হওয়ার কথা ভেবেছিলাম, কেবল বার্তাগুলির সাথে যোগাযোগ করতে সক্ষম
  • আমি তথ্য থেকে মুক্তি পেতে চাই।

[...]

আমার কাছে ওওপি মানে কেবল বার্তা, স্থানীয় ধরে রাখা এবং সুরক্ষা এবং

রাষ্ট্র-প্রক্রিয়া লুকানো এবং চূড়ান্তভাবে দেরী-বাধ্যতামূলকভাবে সমস্ত কিছু।

প্রায় অবিশ্বাস্য এইচডাব্লু আর্কিটেকচার। আমি বুঝতে পারি যে

সেল / পুরো কম্পিউটার রূপক ডেটা থেকে মুক্তি পাবেন

উৎস

এটি থেকে অবজেক্টগুলি হিসাবে ভাল বোঝা যায়

  • অ্যাটারিকিক অবজেক্টগুলি এনক্যাপসুলেটিং / লুকানো ডেটা

  • বার্তাগুলির মাধ্যমে অন্যান্য বস্তুর সাথে যোগাযোগ করা

ক্লাস কি সত্তা-কম বস্তুর প্রতিনিধিত্ব করতে পারে?

অবশ্যই: চিন্তা Math


আপনার উদাহরণ সম্পর্কে:

উদাহরণ: কোনও শ্রেণিকে মোটর অপারেশন বা মোটরঅ্যাকশনস বলা যেতে পারে, যেখানে কোনও সত্তা নেই, তবে শ্রেণীর অভ্যন্তরীণ পদ্ধতিগুলি যেমন কাজ করে

  • getMotorDataFromHTMLForm ()

  • getMotorManufacturers ()

  • selectMotorFromUserRequirements ($ প্রয়োজনীয়তা)

  • canMotorCanHandleOperatingConditions ($ অবস্থার)

  • computePowerConsumptionForMotor ($ ID)

এই পদ্ধতিগুলি কোথায় রাখবেন তা সিদ্ধান্ত নেওয়ার জন্য আপনাকে একবার নজর দিতে হবে responsibilities: কাদের জন্য শ্রদ্ধাবোধযোগ্য

getMotorDataFromHTMLForm ()

এই জাতীয় পদ্ধতির প্রসঙ্গে একটি মোটর-অবজেক্ট তৈরি করা হবে । কোনও ফর্মের মাধ্যমে পুনরুদ্ধার করা ডেটা থেকে নিজেকে তৈরি করা মোটরের দায়িত্ব নয় । এতে অন্তত দুটি বস্তু জড়িত রয়েছে; একটি হ'ল মোটর এবং অন্যটি মোটরটির স্রষ্টা

getMotorManufacturers ()

সাধারণত যে প্রসঙ্গে একটি এ জাতীয় পদ্ধতি লিখবেন তা হ'ল ক service

selectMotorFromUserRequirements ($ প্রয়োজনীয়তা)

এটি একটি- serviceপ্রবন্ধেও ব্যবহৃত হবে

canMotorCanHandleOperatingConditions ($ অবস্থার)

এটি একটি- motorঅবজেক্টের কাছে প্রশ্ন

computePowerConsumptionForMotor ($ ID)

এটি মোটর নিজেই জিজ্ঞাসা করেছে।


TL; ড

শারীরিকভাবে বস্তুobjects হিসাবে রূপকটি সাহায্যকারীর চেয়ে বেশি বিরক্তিকর।


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

তবে হ্যাঁ, উত্তরগুলি আমার শারীরিক পক্ষপাতকে
ডেনিস

3

হ্যাঁ, আপনি এটা করতে পারেন। তবে আপনি প্রসেসরিয়াল লাইব্রেরির মতো একই কার্যকারিতা সরবরাহ করার জন্য মূলত একটি বর্গ তৈরি করছেন। এটি করার একমাত্র কারণ হ'ল যদি আপনার ভাষায় পদ্ধতিগত মডিউলগুলি থাকে না (যেমন, জাভা বা রুবি)।

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

আপনি নিজের বর্গকে নতুন করে নকশা করার বিষয়েও বিবেচনা করতে পারেন সুতরাং শ্রেণীর কোনও উদাহরণ কোনও সুসংগত বস্তুর প্রতিনিধিত্ব করে।

তবে কেবল ও ও স্বরলিপি ব্যবহার করুন যখন এটি আপনাকে অতিরিক্ত শক্তি দেয় কেবলমাত্র ওও হওয়ার জন্য নয়!


3

সাধারণ মানুষের কথায়

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

এই জাতীয় ক্লাসের অস্তিত্ব রয়েছে, উদাহরণস্বরূপ জাভা এসডিকে রয়েছে সংগ্রহে ক্লাস যা একচেটিয়াভাবে স্থির পদ্ধতি নিয়ে গঠিত যা সংগ্রহগুলি পরিচালনা করে বা ফেরত দেয়।

সুতরাং উত্তরটি হ'ল না, সমস্ত শ্রেণিকে কোনও ডোমেন সত্তা থেকে মডেলিং করার দরকার নেই।

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

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


2

না, একটি শ্রেণি কেবল এমন কিছু উপস্থাপন করে যা তাত্ক্ষণিকভাবে হতে পারে, সদস্য থাকতে পারে এবং এর উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে।

প্রকৃতপক্ষে, আপনার ভাষাতে স্থির শ্রেণি থাকতে পারে, যা একাধিকবার ইনস্ট্যান্ট করা হয় না।

.NET 'Math "পেশাদার" শ্রেণীর একটি দুর্দান্ত উদাহরণ যা কোনও সত্তাকেই প্রতিনিধিত্ব করে না (যদি না আপনি গণিত কী তা সম্পর্কে দার্শনিক পেতে চান না ...) এবং এমন শ্রেণীর বৈধ ব্যবহারের ক্ষেত্রে চিত্রিত করার জন্যও ঘটে। এর কেবলমাত্র পদ্ধতি এবং 2 টি ক্ষেত্র রয়েছে (উভয়ই পৃথক স্থির প্রতিনিধিত্ব করে)।

অনুরূপ লাইব্রেরির শ্রেণিবিন্যাস Math.Net, গাণিতিক / সংখ্যাসমূহকে শ্রেণিবদ্ধ করে টাইপ করে। এখানে শ্রেণিগুলি কোনও সত্তা নয়, তবে একটি যৌক্তিক বিভাগের প্রতিনিধিত্ব করে।

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


1
স্ট্যাটিক পদ্ধতি হিসাবে গণিত সম্পর্কিত পদ্ধতিগুলি। নেট / বিসিএলকে একটি পৃথক শ্রেণিতে স্থাপন করা হয় এ বিষয়টি সত্য বা প্রয়োজনীয় নকশা বিবেচনা নয় বরং সি # তে কোনও মুক্ত-স্থিত পদ্ধতি নেই এমন একটি ফলাফলের ফলস্বরূপ। সি ++ এ এই জাতীয় ফাংশনগুলি কেবলমাত্র একটি নেমস্পেসে ভাগ করা যায়।
ভ্লাদ

1

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

আপনি যদি ব্যবহারবাদী দৃষ্টিভঙ্গি গ্রহণ করেন তবে আপনি আপনার ইনস্ট্যান্স-কম ইউটিলিটি ক্লাস গ্রহণ করতে পারেন। তবে পিউরিস্ট দৃষ্টিভঙ্গি আরও আকর্ষণীয়। কেএ এর মতে ওওপি ক্লাসের চেয়ে বার্তাগুলি সম্পর্কে সবসময় বেশি ছিল । সুতরাং আপনার প্রশ্নের:

ক্লাস কি সত্তা-কম বস্তুর প্রতিনিধিত্ব করতে পারে?

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

যদি তা না হয় তবে এগুলি কেন খারাপ / অসম্পূর্ণ / নন-ওওপি কেন্দ্রিক?

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

এখন, আপনার নির্দিষ্ট উদাহরণগুলির একটি দেখার জন্য, আপনি এমন একটি MotorOperationsক্লাস সম্পর্কে জিজ্ঞাসা করেছেন যেখানে আপনি computePowerConsumptionForMotorযুক্তি দিয়ে বার্তাটি প্রেরণ করতে পারেন id। এটা কি খারাপ? কমপক্ষে এটি বলুন না জিজ্ঞাসা নীতি লঙ্ঘন করে না । আমাদের কী মোটর ক্লাস তৈরি করে powerConsumptionমেসেজ পাঠাতে হবে ? হতে পারে 100% সময় না, তবে এই জাতীয় জিনিসগুলি চেষ্টা করার ফলে আপনার কোড সম্পর্কে কিছু সুন্দর অন্তর্দৃষ্টি জাগ্রত হবে। অথবা, এটি সামান্য শ্রেণীর বিস্ফোরণ ঘটাতে পারে যা খারাপ হবে।

ওওপির সাথে সামঞ্জস্য থাকার জন্য তাদের কীভাবে ধারণাগতভাবে পরিবর্তন / উন্নতি করতে হবে?

যদি "ওওপি করা" আপনার পক্ষে গুরুত্বপূর্ণ, তবে আপনি একে অপরকে বার্তা প্রেরণ করে যোগাযোগ করে এমন উপাদানগুলির মধ্যে কোনও সিস্টেমের আর্কিটেকচার করার উপায়গুলি সন্ধান করতে চাইবেন। ওওপি হ'ল এটিই , বা শব্দটির মুদ্রকের মনে অন্তত কী ছিল। এই দৃষ্টিতে ইউটিলিটি ক্লাসগুলি ওওপি নয়। তবে কিছু লোকের কাছে তারা হতে পারে।

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

টিএল; ডিআর - পদ্ধতির বান্ডিলগুলি সবসময় খারাপ হয় না। প্রথমে তাত্ক্ষণিক ক্লাস ব্যবহার করার চেষ্টা করুন। যখন প্রয়োজন হবে তখনই "মডিউল" এ ফিরে যান।


0

প্রদত্ত উদাহরণ গ্রহণ করা:

getMotorDataFromHTMLForm()
selectMotorFromUserRequirements($requirements)

এগুলি "ফ্যাক্টরি" পদ্ধতির মতো দেখায়, এটি কোনও Motorবস্তুকে ফেরত দেয় । দ্বিতীয়টি বোঝায় যে হয় হয় আপনি প্রয়োজনীয়তাগুলি পূরণ করার জন্য একটি নতুন অবজেক্ট তৈরি করছেন, বা আপনার পরীক্ষা করা মোটরগুলির একটি ডেটাবেস বা মেমরির সংগ্রহ রয়েছে। যা ক্ষেত্রে এটি একটি পদ্ধতি হওয়া উচিত। বা এটি প্রয়োজনীয়তার সামগ্রীতে একটি পদ্ধতি হতে পারে।

getMotorManufacturers()

এগুলি আপনি কোথা থেকে পাচ্ছেন? এটিই এর একটি পদ্ধতি হওয়া উচিত।

canMotorCanHandleOperatingConditions($conditions)
computePowerConsumptionForMotor($id)

এগুলি দেখতে পদ্ধতিগুলির মতো হওয়া উচিত Motor


হ্যাঁ. এটি একটি "সম্ভবত সম্পর্কিত নয় এমন পদ্ধতিগুলির বান্ডিল" (সংক্ষেপে BOPUM)। আমি কারখানা এবং মোটর মন্তব্যের সাথে একমত। getMotorManufacturersডাটাবেস থেকে সমস্ত মোটর উত্পাদনকারীকে ফিরিয়ে আনতে হয়। আমি জানি না যে কোথায় যায়। তাদের যে জায়গাগুলি যেতে হবে সেখানে রাখার জন্য এই BOPUM আনলভেল করতে আমার কিছুটা সময় লাগবে ..
ডেনিস

আমি getMotorManufacturersডাটাবেস থেকে পাচ্ছি । ডেটাবেসটির কোনও পদ্ধতি থাকতে পারে না ... বর্তমানে আমার কাছে একটি ডেটা ম্যাপার প্যাটার্ন রয়েছে যা ডাটাবেসটি অনুসন্ধান করে, একটি অ্যারের সূচনা করে এবং মোটর অবজেক্টগুলিতে (এছাড়াও প্রস্তুতকারকের তথ্য সমেত) এটিকে জনপ্রিয় করে তোলে এবং তারপরে সেই অ্যারে কলারের কাছে ফেরত দেয়। কলারটি আমার MotorOperationsক্লাস, যার পরিবর্তে কোনও ProductSelectionশ্রেণি থেকে ডাকা হয় (যার মধ্যে একটি অ্যালগরিদম রয়েছে যা মোটর নির্বাচন করতে ব্যবহৃত হয়, এবং লোডযুক্ত মোটর তথ্য সেই অ্যালগরিদমের ডেটা হয়)
ডেনিস

0

একটি অবজেক্ট হ'ল পদ্ধতি এবং ডেটার সংমিশ্রণ যা উচ্চ মিলনে থাকে he তারা একটি শ্রেণিতে অন্তর্ভুক্ত কারণ তারা অত্যন্ত আন্তঃসম্পর্কিত এবং রাষ্ট্র বজায় থাকে।

আপনি বিগ আপ ফ্রন্ট ডিজাইন ব্যবহার করেন এবং সমস্ত কিছুর মডেল তৈরির চেষ্টা করেন, বা উদ্ভূত ডিজাইন যেখানে আপনি পুনরাবৃত্তি করেন এবং সেই সময়ে সিস্টেমের প্রয়োজন অনুসারে যে কোনও জিনিসকে আবিষ্কার করতে পারেন তা সঠিক This এটি সত্য।

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

টিপিক্যাল ব্যতীত এভাবে ক্লাস ব্যবহারের কোনও নেতিবাচক দিক সম্পর্কে আমি ভাবতে পারি না। আপনার "আমন্ত্রণ স্থান" ইনস্ট্যান্ট করেই আপনার আমন্ত্রণমূলক অপ্রয়োজনীয় ব্যয় এবং জটিলতা। এই কোডটি সমর্থনকারী যে কেউ বিস্মিত হবেন যে ডেটা অতিরিক্ত জ্ঞানীয় লোডের জন্য ব্যয় করছে (সম্ভবত ব্যক্তি হিসাবে এক সময়ের ব্যয়)। এটি কোনও অতিরিক্ত মান ছাড়াই অস্বাভাবিক ব্যবহার।

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