এটি যদি কোনও শ্রেণি সম্পত্তি একটি শ্রেণীর নতুন উদাহরণ তৈরি করে এবং ফেরত দেয় তবে এটি কি বিরোধী-নিদর্শন?


24

আমার একটি ক্লাস আছে Headingযা কিছু কাজ করে, তবে এটি বর্তমান শিরোনাম মানের বিপরীতে ফিরে আসতে সক্ষম হওয়া উচিত যা শেষ পর্যন্ত Headingশ্রেণীর নিজেই একটি নতুন উদাহরণ তৈরি করার মাধ্যমে ব্যবহার করতে হবে ।

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

যাইহোক, আমার সহকর্মীরা এক মাত্র একটি বর্গ তৈরি করতে আমাকে সুপারিশ সম্পত্তি নামক reciprocalবর্গ নিজেই একটি নতুন দৃষ্টান্ত তার সংগ্রহকারী পদ্ধতির মাধ্যমে যে আয়।

আমার প্রশ্ন হ'ল: কোনও শ্রেণীর সম্পত্তির মতো আচরণ করা কি এটি বিরোধী ধাঁচ নয়?

আমি বিশেষত এটি কম স্বজ্ঞাত বলে মনে করি কারণ:

  1. আমার মনে, কোনও শ্রেণীর সম্পত্তি কোনও শ্রেণির নতুন উদাহরণ ফেরত দেওয়া উচিত নয় এবং
  2. সম্পত্তিটির নাম, যা reciprocalআইডিইর সাহায্য না পেয়ে বা গেটারের স্বাক্ষর পরীক্ষা না করে, বিকাশকারীকে তার আচরণটি পুরোপুরি বুঝতে সাহায্য করে না।

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


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

20
"আমার শ্রেণি স্থাবর নয়"। আপনার আসল অ্যান্টি-প্যাটার্নটি ঠিক আছে। ;)
ডেভিড আরনো

3
@ ডেভিড আর্নো ওয়েল, কখনও কখনও কিছু জিনিস অপরিবর্তনীয় করে তোলার জন্য বিশাল পারফরম্যান্সের জরিমানা থাকে, বিশেষত যদি ভাষা এটিকে স্থানীয়ভাবে সমর্থন করে না, তবে অন্যথায় আমি সম্মত হই যে প্রচুর ক্ষেত্রে অপরিবর্তনশীলতা একটি ভাল অনুশীলন।
53777A

2
@ ডারকর্কিং ক্লাসটি সি # এবং টাইপস্ক্রিপ্ট উভয় ক্ষেত্রেই প্রয়োগ করা হয়েছে তবে আমি বরং এই ভাষা-অজ্ঞেয়বাদী রাখি।
53777A

2
@ কাইসার্লুদি একটি উত্তরের মতো শোনায় (দুর্দান্ত উত্তর) - মন্তব্যগুলি স্পষ্টতার জন্য অনুরোধ করার জন্য
16'15

উত্তর:


22

অনুলিপি () বা ক্লোন () এর মতো জিনিস থাকা অজানা নয় তবে হ্যাঁ আমি মনে করি আপনি এটি সম্পর্কে উদ্বিগ্ন হওয়া ঠিকই বলেছিলেন।

উদাহরণস্বরূপ নিন:

h2 = h1.reciprocal
h2.Name = "hello world"
h1.reciprocal.Name = ?

কিছুটা সতর্কতা অবলম্বন করা ভাল লাগবে যে প্রতিবার সম্পত্তিটি একটি নতুন অবজেক্ট।

আপনিও ধরে নিতে পারেন:

h2.reciprocal == h1

যাহোক. যদি আপনার শিরোনাম বর্গ একটি অপরিবর্তনীয় মানের ধরণ ছিল তবে আপনি এই সম্পর্কগুলি বাস্তবায়িত করতে সক্ষম হবেন এবং পারস্পরিক ক্রিয়াকলাপের জন্য একটি ভাল নাম হতে পারে


1
কেবল এটি লক্ষ করুন Copy()এবং Clone()বৈশিষ্ট্য নয়, পদ্ধতিগুলি। আমি বিশ্বাস করি যে ওপি নতুন দৃষ্টান্ত ফেরত সম্পত্তি প্রাপ্তদের উল্লেখ করছে to
লিন

6
আমি জানি. তবে বৈশিষ্ট্যগুলি সি ধরণের পদ্ধতিতে (সাজানো) হয়
ইওয়ান

4
যে ক্ষেত্রে, সি # প্রস্তাব আরো অনেক কিছু আছে: String.Substring(), Array.Reverse(), Int32.GetHashCode(), ইত্যাদি
লিন

If your heading class was an immutable value type- আমি মনে করি যে অপরিবর্তনীয় বস্তুগুলির উপর সম্পত্তি সেটটারদের সর্বদা নতুন দৃষ্টান্তগুলি ফিরিয়ে দেওয়া উচিত (বা কমপক্ষে নতুন মানটি যদি পুরানো মানের সমান না হয়), কারণ এটি অপরিবর্তনীয় বস্তুর সংজ্ঞা। :)
ইভান কলমিচেক

17

কোনও শ্রেণির একটি ইন্টারফেস শ্রেণীর ব্যবহারকারীকে কীভাবে এটি কাজ করে তা অনুমান করতে পরিচালিত করে।

যদি এই অনুমানগুলির মধ্যে অনেকগুলি সঠিক হয় এবং কয়েকটি ভুল হয় তবে ইন্টারফেসটি ভাল।

এই অনুমানগুলির মধ্যে অনেকগুলি যদি ভুল হয় এবং কয়েকটি সঠিক হয় তবে ইন্টারফেসটি আবর্জনা।

প্রোপার্টি সম্পর্কে একটি সাধারণ ধারণা হ'ল get ফাংশনটি কল করা সস্তা cheap বৈশিষ্ট্য সম্পর্কে অন্য একটি সাধারণ ধারণা হ'ল পর পর দু'বার get ফাংশনটি কল করা একই জিনিসটি ফিরে আসবে।


প্রত্যাশা পরিবর্তনের জন্য আপনি ধারাবাহিকতা ব্যবহার করে এটি ঘিরে কাজ করতে পারেন। উদাহরণস্বরূপ, একটি ছোট 3D গ্রন্থাগার যেখানে আপনি প্রয়োজন জন্য Vector, Ray Matrixইত্যাদি আপনি এটা যেমন যেমন getters যে করতে পারেন Vector.normalএবং Matrix.inverseপ্রায় কাছাকাছি সবসময় ব্যয়বহুল। দুর্ভাগ্যক্রমে এমনকি যদি আপনার ইন্টারফেসগুলি ধারাবাহিকভাবে ব্যয়বহুল বৈশিষ্ট্যগুলি ব্যবহার করে তবে ইন্টারফেসগুলি সর্বোত্তমভাবে ব্যবহারযোগ্য হিসাবে স্বজ্ঞাত হবে Vector.create_normal()এবং Matrix.create_inverse()- তবুও আমি জানি না এমন কোনও দৃ argument় যুক্তি যা প্রত্যাশা পরিবর্তনের পরেও বৈশিষ্ট্যগুলি ব্যবহার করে আরও স্বজ্ঞাত ইন্টারফেস তৈরি করে made


10

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

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

সম্পত্তিগুলি সাধারণত খুব সাধারণ ক্রিয়াকলাপ হওয়া উচিত যা শ্রেণীর বর্তমান অবস্থার একটি অংশ পায় / সেট করে। কারখানার মতো অপারেশনগুলি এই মানদণ্ডটি পূরণ করে না।


1
DateTime.Nowসম্পত্তি সাধারণভাবে ব্যবহৃত হয় এবং একটি নতুন অবজেক্ট বোঝায়। আমি মনে করি যে কোনও সংখ্যার নাম একই বারে একবারে ফিরে আসে কিনা তা নিয়ে অস্পষ্টতা দূর করতে সাহায্য করতে পারে। এটি সব নামে এবং কীভাবে ব্যবহৃত হয়।
গ্রেগ বার্গার্ড্ট

3
ডেটটাইম.এখন একটি ভুল হিসাবে বিবেচিত হয়। স্ট্যাকওভারফ্লো.com
ব্র্যাড থমাস

@ গ্রেগবার্গার্ড্ট কোনও নতুন অবজেক্টের পার্শ্ব প্রতিক্রিয়াটি নিজের মধ্যে এবং এটি একটি সমস্যা হতে পারে না, কারণ DateTimeএটি একটি মান ধরণের, এবং অবজেক্টের পরিচয়ের কোনও ধারণা নেই। যদি আমি সঠিকভাবে বুঝতে পারি তবে সমস্যাটি হ'ল এটি অ-নিরস্তাত্মক এবং প্রতিবার একটি নতুন মান ফেরত।
জেভ স্পিটজ

1
@ গ্রেগবার্গার্ড্ট DateTime.Newস্থিতিশীল এবং তাই আপনি এটি কোনও বস্তুর অবস্থার প্রতিনিধিত্ব করার আশা করতে পারবেন না।
তসাহী আশের

5

আমি মনে করি না যে এটির জন্য একটি ভাষা-অজ্ঞাত উত্তর রয়েছে যেহেতু "সম্পত্তি" যা একটি ভাষা-নির্দিষ্ট প্রশ্ন এবং একটি "সম্পত্তি" এর কলকারী কী প্রত্যাশা করে তা একটি ভাষা-নির্দিষ্ট প্রশ্ন। আমি মনে করি এটির কল্পনা করার সবচেয়ে কার্যকরী উপায় হ'ল কলারের দৃষ্টিকোণ থেকে এটি কেমন দেখাচ্ছে about

সি # তে, বৈশিষ্ট্যগুলি স্বতন্ত্র যে সেগুলি (প্রচলিত) মূলধনযুক্ত (পদ্ধতিগুলির মতো) তবে বন্ধনীগুলির অভাব রয়েছে (পাবলিক ইনস্ট্যান্স ভেরিয়েবলগুলির মতো)। আপনি যদি নীচের কোডটি, অনুপস্থিত ডকুমেন্টেশনগুলি দেখেন তবে আপনি কী আশা করবেন?

var reciprocalHeading = myHeading.Reciprocal;

আপেক্ষিক সি # নবাগত হিসাবে, তবে যারা মাইক্রোসফ্টের সম্পত্তি ব্যবহারের গাইডলাইন পড়েছেন , আমি Reciprocalঅন্যান্য বিষয়গুলির মধ্যেও আশা করব :

  1. Headingক্লাসের একটি লজিকাল ডেটা সদস্য হতে
  2. কল করার জন্য সস্তা হোন, যেমন মানটি ক্যাশে করার দরকার নেই need
  3. পর্যবেক্ষণযোগ্য পার্শ্ব প্রতিক্রিয়া অভাব
  4. পর পর দুবার আহ্বান করা হলে একই ফলাফল উত্পন্ন করুন
  5. (হতে পারে) একটি ReciprocalChangedইভেন্ট অফার

এই অনুমানগুলির মধ্যে, (3) এবং (4) সম্ভবত সঠিক (ধরে Headingনেওয়া একটি অপরিবর্তনীয় মানের ধরণ, যেমন ইওয়ানের উত্তরে ), (1) বিতর্কযোগ্য, (2) অজানা তবে বিতর্কযোগ্য এবং (5) এর সম্ভাবনা কম অর্থবোধ তৈরি করুন (যদিও শিরোনামের যা কিছু আছে সম্ভবত একটি HeadingChangedইভেন্ট হওয়া উচিত )। এটি আমার কাছে পরামর্শ দেয় যে কোনও সি # এপিআইতে, "পারস্পরিক প্রতিদান গ্রহণ করুন বা গণনা করুন" সম্পত্তি হিসাবে প্রয়োগ করা উচিত নয় , বিশেষত যদি গণনার সস্তা এবং Headingঅপরিবর্তনীয় হয় তবে এটি একটি সীমান্তরেখার ক্ষেত্রে।

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

জাভাতে, বৈশিষ্ট্যগুলি একটি পদ্ধতি নামকরণ কনভেনশন। যদি দেখি

Heading reciprocalHeading = myHeading.getReciprocal();

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

যে booleanপদার্থে তারা অনুরোধ করা হয় তার কোনও অ- কার্যকারিতা বা বৈশিষ্ট্য ফিরে আসে এমন পদ্ধতিগুলির নাম সাধারণত একটি বিশেষ্য, বিশেষ্য বাক্যাংশ, বা ক্রিয়া দিয়ে শুরু হওয়া একটি ক্রিয়া বাক্যাংশ দিয়ে নামকরণ করা হয় get…। এখানে একটি সোচ্চার দল রয়েছে যা দাবি করে যে কেবল তৃতীয় ফর্মটি (শুরু দিয়ে get) গ্রহণযোগ্য, তবে এই দাবির সামান্য ভিত্তি রয়েছে। প্রথম দুটি ফর্ম সাধারণত আরও পঠনযোগ্য কোডে পৌঁছায় ... (পৃষ্ঠা 239)

একটি সমসাময়িক, আরও সাবলীল এপিআই, এরপরে, আমি দেখতে আশা করব

Heading reciprocalHeading = myHeading.reciprocal();

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

রুবিতে সম্পত্তি হিসাবে কিছুই নেই। সেখানে "বৈশিষ্ট্য" রয়েছে, তবে যদি আমি দেখি

reciprocalHeading = my_heading.reciprocal

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

স্কালায় নামকরণের কনভেনশনটি হল যে পার্শ্ব প্রতিক্রিয়াযুক্ত পদ্ধতিগুলি প্যারেন্থিসিস গ্রহণ করে এবং সেগুলি ছাড়া পদ্ধতিগুলি নেয় না, তবে

val reciprocal = heading.reciprocal

যে কোনও হতে পারে:

// immutable public value initialized at creation time
val reciprocal: Heading = … 

// immutable public value initialized on first use
lazy val reciprocal: Heading = … 

// public method, probably recalculating on each invocation
def reciprocal: Heading = …

// as above, with parentheses that, by convention, the caller
// should only omit if they know the method has no side effects
def reciprocal(): Heading = …

(দ্রষ্টব্য যে স্কেল স্টাইল গাইড দ্বারা নিরুৎসাহিত বিভিন্ন জিনিসকে মঞ্জুরি দেয় Sc এটি স্কালাকে নিয়ে আমার অন্যতম প্রধান বিরক্তি))

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

সংক্ষেপে: আপনি যে ভাষাটি ব্যবহার করছেন তা জানুন এবং অন্যান্য প্রোগ্রামাররা আপনার এপিআইতে কী প্রত্যাশা নিয়ে আসবে তা জানুন। অন্য সব কিছুই একটি বাস্তবায়নের বিশদ।


1
আমার প্রিয় উত্তরগুলির মধ্যে একটি +1 করুন, আপনার এটি লেখার জন্য সময় দেওয়ার জন্য ধন্যবাদ।
53777A

2

অন্যরা যেমন বলেছে, একই শ্রেণীর উদাহরণগুলি ফিরিয়ে দেওয়া একটি বরং সাধারণ প্যাটার্ন।

ভাষার নামকরণের কনভেনশনগুলির সাথে নামকরণটি এক সাথে যেতে হবে।

উদাহরণস্বরূপ, জাভাতে আমি সম্ভবত এটি কল হওয়ার আশা করতাম getReciprocal();

বলা হচ্ছে, আমি পরিবর্তনীয় বনাম অপরিবর্তনীয় বস্তু বিবেচনা করব ।

সঙ্গে অপরিবর্তনীয় বেশী, কিছু বেশ সহজ, এবং এটা আঘাত করবে না যদি আপনি একই বস্তু না ফিরে বা।

পরিবর্তনীয়গুলির সাথে এটি খুব ভীতিজনক হতে পারে।

b = a.reciprocal
a += 1
b = what?

এখন বি কি উল্লেখ করা হচ্ছে? মূল মানটির পারস্পরিক? নাকি বদলানো একজনের পারস্পরিক কাজ? এটি উদাহরণের তুলনায় খুব সংক্ষিপ্ত হতে পারে তবে আপনি বিষয়টিটি পেতে পারেন।

এই ক্ষেত্রে আরও ভাল নামকরণের সন্ধান করুন যা যা ঘটে তা যোগাযোগ করে, উদাহরণস্বরূপ createReciprocal()আরও ভাল পছন্দ হতে পারে।

তবে এটি সত্যই প্রসঙ্গেও নির্ভর করে।


আপনি কি পরিবর্তন করতে চান ?
কার্স্টেন এস

@ কার্স্টেনস হ্যাঁ, অবশ্যই, ধন্যবাদ। আমার মাথা কোথায় ছিল ধারণা নেই। :)
Eiko

কিছুটা দ্বিমত getReciprocal()পোষণ করুন , যেহেতু সেই "শব্দ" একটি "সাধারণ" জাভাবিয়ান শৈলী প্রাপ্তির মতো। "ক্রিয়েটএক্সএক্সএক্সএক্স ()" বা সম্ভবত "ক্যালকুলেট এক্সএক্সএক্সএক্স ()" পছন্দ করুন যা অন্য প্রোগ্রামারদের ইঙ্গিত দেয় বা ইঙ্গিত দেয় যে কিছু ভিন্ন ঘটছে
user949300

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

1

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


1
নামের স্বচ্ছতার জন্য +1, তবে অন্যান্য সমাধানে এসআরপি-তে কী ভুল?
53777A

3
আপনি কারখানার পদ্ধতিতে কারখানার শ্রেণির সুপারিশ করেন কেন? (আমার মতে, কোনও
জিনিসের

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

0

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

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


0

যেহেতু অন্যান্য উত্তরগুলি সম্পত্তির অংশটি কভার করে, তাই আমি আপনার # 2 সম্পর্কে ঠিক সম্বোধন করব reciprocal:

ব্যতীত অন্য কিছু ব্যবহার করবেন না reciprocal। আপনি যা বর্ণনা করছেন তার জন্য এটিই সঠিক শব্দ (এবং এটি আনুষ্ঠানিক শব্দ)। আপনার বিকাশকারীরা যে ডোমেনটিতে কাজ করছেন তা শিখতে ভুল সফ্টওয়্যারটি লিখবেন না navigation নেভিগেশনে শর্তাবলীর খুব নির্দিষ্ট অর্থ রয়েছে এবং আপাতদৃষ্টিতে নিরীহ হিসাবে কিছু ব্যবহার করা reverseবা oppositeনির্দিষ্ট প্রসঙ্গে বিভ্রান্তির কারণ হতে পারে।


0

যৌক্তিকভাবে, না, এটি কোনও শিরোনামের সম্পত্তি নয়। যদি এটি হয় তবে আপনি এটিও বলতে পারেন যে কোনও সংখ্যার .ণাত্মক হ'ল সেই সংখ্যার সম্পত্তি, এবং সত্যই এটি "সম্পত্তি" কে সমস্ত অর্থ হারাতে পারে, প্রায় সমস্ত কিছুই সম্পত্তি হবে be

সদৃশ একটি শিরোনামের খাঁটি ফাংশন, সংখ্যার নেতিবাচক হিসাবে একই সংখ্যার খাঁটি ফাংশন।

থাম্বের নিয়ম হিসাবে, এটি সেট করা যদি কোনও অর্থবোধ না করে তবে সম্ভবত এটি কোনও সম্পত্তি হওয়া উচিত নয়। এটি সেট করা এখনও অবশ্যই নিষ্ক্রিয় করা যেতে পারে তবে একটি সেটার যুক্ত করা তাত্ত্বিকভাবে সম্ভব এবং অর্থবোধক হওয়া উচিত।

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


সম্পাদনা: বিশেষত সি # এর জন্য, আমি বিদ্যমান ক্লাসগুলিতে বিশেষত স্ট্যান্ডার্ড লাইব্রেরির দিকে নজর দেব।

  • আছে BigIntegerএবং Complexকাঠামো। তবে সেগুলি কাঠামো, এবং কেবল স্থির ফাংশন রয়েছে এবং সমস্ত বৈশিষ্ট্য বিভিন্ন ধরণের। তাই আপনার Headingক্লাসের জন্য খুব বেশি নকশা সাহায্য করবে না ।
  • ম্যাথ.নেট সংখ্যাগুলির Vectorক্লাস রয়েছে , যার খুব কম বৈশিষ্ট্য রয়েছে এবং এটি আপনার কাছে খুব কাছাকাছি বলে মনে হচ্ছে Heading। আপনি যদি এটির সাথে চলে যান তবে আপনার সম্পত্তি হিসাবে নয় বরং পারস্পরিক জন্য একটি ফাংশন থাকতে হবে।

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


-1

সত্যিই খুব আকর্ষণীয় প্রশ্ন। আপনি যে প্রস্তাব দিচ্ছেন তাতে আমি কোনও সলিড + ড্রাই + কিএসএস লঙ্ঘন দেখছি না, তবে, এটির গন্ধ খারাপ লাগে।

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

প্লাস: আপনি যদি getReciprocal()প্রত্যাবর্তিত অবজেক্টটিতে অনুরোধ করেন তবে কী হবে ? আপনি ক্লাসের আরেকটি উদাহরণ পেয়েছেন, এটি প্রথমটির সঠিক কপি হতে পারে! এবং যদি আপনি এটি প্রার্থনা getReciprocal()করেন? কেউ কি ছড়িয়ে ছিটিয়ে আছে?

আবার: যদি চালকটির পারস্পরিক মূল্য প্রয়োজন (স্কেলার হিসাবে, মানে)? getReciprocal()->getValue()? আমরা সামান্য লাভের জন্য ডেমিটারের আইন লঙ্ঘন করছি ।


আমি আনন্দের সাথে পাল্টা-যুক্তিগুলি ডাউনভোটারকে গ্রহণ করব, ধন্যবাদ!
ডাঃ জিয়ানলুইগি জেন ​​জ্যানেটিটিনি

1
আমি ডাউনভিট করি নি তবে আমার সন্দেহ সন্দেহের কারণটি এটি হতে পারে যে এটি বাকী উত্তরগুলিতে সত্যিই বেশি যোগ করে না, তবে আমি ভুল হতে পারি।
53777A

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