এমনকি জাভাতেও স্ট্রাইকগুলির তাদের স্থান রয়েছে। নিম্নলিখিত দুটি জিনিস সত্য হলে আপনার কেবলমাত্র সেগুলি ব্যবহার করা উচিত:
- আপনার কেবলমাত্র সামগ্রিক ডেটা দরকার যাতে কোনও আচরণ নেই, যেমন প্যারামিটার হিসাবে পাস করার জন্য
- সামগ্রিক ডেটাতে কী ধরণের মান রয়েছে তা কিছুটা বিবেচ্য নয়
যদি এটি হয় তবে আপনার ক্ষেত্রগুলি সর্বজনীন করা উচিত এবং গিটার / সেটারদের এড়ানো উচিত। গেটার্স এবং সেটারগুলি যে কোনও উপায়েই চমকপ্রদ এবং জাভা কোনও দরকারী ভাষার মতো বৈশিষ্ট্য না পাওয়ার জন্য নির্বোধ। যেহেতু আপনার কাঠামোর মতো অবজেক্টটির কোনও পদ্ধতি থাকা উচিত নয়, তাই সর্বজনীন ক্ষেত্রগুলি সবচেয়ে বেশি অর্থবোধ করে।
যাইহোক, যদি তাদের মধ্যে একটিরও প্রয়োগ না হয় তবে আপনি একটি বাস্তব শ্রেণীর সাথে কাজ করছেন। তার মানে সমস্ত ক্ষেত্রগুলি ব্যক্তিগত হওয়া উচিত। (আপনার যদি আরও একসেসেবল স্কোপে একেবারে ক্ষেত্রের প্রয়োজন হয় তবে একটি গেটর / সেটার ব্যবহার করুন))
আপনার অনুমিত-কাঠামোর আচরণ রয়েছে কিনা তা পরীক্ষা করতে, ক্ষেত্রগুলি কখন ব্যবহৃত হয় তা দেখুন look যদি মনে হয় বলুন, জিজ্ঞাসা করবেন না লঙ্ঘন করেছে , তবে আপনার সেই আচরণটি আপনার শ্রেণিতে স্থানান্তরিত করা দরকার।
যদি আপনার কিছু ডেটা পরিবর্তন না হয় তবে আপনাকে সেই সমস্ত ক্ষেত্র চূড়ান্ত করতে হবে। আপনি নিজের শ্রেণিকে অপরিবর্তনীয় করে তোলা বিবেচনা করতে পারেন । আপনার যদি আপনার ডেটা বৈধ করতে হয় তবে সেটার এবং কনস্ট্রাক্টরগুলিতে বৈধতা সরবরাহ করুন। (একটি দরকারী কৌশলটি একটি ব্যক্তিগত সেটার সংজ্ঞায়িত করা এবং কেবলমাত্র সেটার ব্যবহার করে আপনার শ্রেণীর মধ্যে আপনার ক্ষেত্রটি সংশোধন করা))
আপনার বোতল উদাহরণটি সম্ভবত উভয় পরীক্ষায় ব্যর্থ হবে। আপনার কাছে এমন (মতামতযুক্ত) কোড থাকতে পারে:
public double calculateVolumeAsCylinder(Bottle bottle) {
return bottle.height * (bottle.diameter / 2.0) * Math.PI);
}
পরিবর্তে এটি করা উচিত
double volume = bottle.calculateVolumeAsCylinder();
আপনি যদি উচ্চতা এবং ব্যাস পরিবর্তন করেন তবে এটি কি একই বোতল হবে? সম্ভবত না. সেগুলি চূড়ান্ত হওয়া উচিত। ব্যাসের জন্য কি নেতিবাচক মান ঠিক আছে? আপনার বোতলটি প্রশস্ত হওয়ার চেয়ে লম্বা হওয়া উচিত? ক্যাপটি কি শূন্য হতে পারে? কোন? আপনি কীভাবে এটি যাচাই করছেন? ধরুন ক্লায়েন্ট হয় বোকা বা দুষ্টু। ( পার্থক্যটি বলা অসম্ভব )) আপনার এই মানগুলি পরীক্ষা করা দরকার।
এটি আপনার নতুন বোতল শ্রেণীর মতো দেখাবে:
public class Bottle {
private final int height, diameter;
private Cap capType;
public Bottle(final int height, final int diameter, final Cap capType) {
if (diameter < 1) throw new IllegalArgumentException("diameter must be positive");
if (height < diameter) throw new IllegalArgumentException("bottle must be taller than its diameter");
setCapType(capType);
this.height = height;
this.diameter = diameter;
}
public double getVolumeAsCylinder() {
return height * (diameter / 2.0) * Math.PI;
}
public void setCapType(final Cap capType) {
if (capType == null) throw new NullPointerException("capType cannot be null");
this.capType = capType;
}
// potentially more methods...
}