CodeGym /Java Blog /এলোমেলো /ক্লাসের মধ্যে সম্পর্ক। উত্তরাধিকার, রচনা এবং সমষ্টি
John Squirrels
লেভেল 41
San Francisco

ক্লাসের মধ্যে সম্পর্ক। উত্তরাধিকার, রচনা এবং সমষ্টি

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

জাভাতে উত্তরাধিকার এবং এর সুবিধা

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

public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }


public void gas() {
       // Gas
   }

   	public void brake() {
       // Brake
   }
}


public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}



public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
আমাদের একটি নির্দিষ্ট প্রোগ্রাম রয়েছে যা বিভিন্ন ধরণের গাড়ির সাথে কাজ করে। এমনকি যদি আপনি একজন গাড়ি উত্সাহী না হন তবে আপনি সম্ভবত জানেন যে পৃথিবীতে অনেক ধরণের গাড়ি রয়েছে। :) তদনুসারে, আমরা গাড়ির সাধারণ বৈশিষ্ট্যগুলিকে একটি সাধারণ অভিভাবক শ্রেণিতে আলাদা করব যাকে বলা হয় Car। তাই সব গাড়ির সাধারণ কি, নির্বিশেষে তাদের প্রকার? প্রতিটি গাড়ির উত্পাদনের একটি বছর, মডেলের নাম এবং সর্বোচ্চ গতি রয়েছে। আমরা এই বৈশিষ্ট্যগুলি model, maxSpeed, এবং yearOfManufactureক্ষেত্রগুলিতে রাখি। আচরণ হিসাবে, যে কোনও গাড়ি ত্বরান্বিত এবং ধীর হতে পারে। gas():) আমরা এবং এই আচরণ সংজ্ঞায়িতbrake()পদ্ধতি এটা আমাদের কি সুবিধা দেয়? প্রথমত, এটি কোডের পরিমাণ হ্রাস করে। অবশ্যই, আমরা পিতামাতার শ্রেণী ছাড়া করতে পারি। কিন্তু যেহেতু প্রতিটি গাড়িকে ত্বরান্বিত করতে এবং ধীর করতে সক্ষম হতে হবে, তাই আমাদের , , , এবং ক্লাসে এবং অন্য প্রতিটি গাড়ির ক্লাসে gas()পদ্ধতি তৈরি করতে হবে। কল্পনা করুন কত অতিরিক্ত কোড আমাদের লিখতে হবে। এবং , , এবং ক্ষেত্রগুলি সম্পর্কে ভুলবেন না : যদি আমরা অভিভাবক শ্রেণী থেকে পরিত্রাণ পাই, আমাদের প্রতিটি গাড়ির ক্লাসে সেগুলি তৈরি করতে হবে! brake()TruckSedanF1CarSportsCarmodelmaxSpeedyearOfManufactureক্লাসের মধ্যে সম্পর্ক।  উত্তরাধিকার, রচনা এবং সমষ্টি - 2যখন আমাদের কয়েক ডজন গাড়ি ক্লাস থাকে, তখন ডুপ্লিকেট কোডের পরিমাণ সত্যিই গুরুতর হয়ে যায়। অভিভাবক শ্রেণীতে সাধারণ ক্ষেত্র এবং পদ্ধতিগুলি (এছাড়াও "স্টেট" এবং "আচরণ" বলা হয়) সরানো আমাদের অনেক সময় এবং স্থান বাঁচাতে দেয়। যদি কিছু টাইপের অনন্য বৈশিষ্ট্য বা পদ্ধতি থাকে যা অন্য গাড়ির ধরনে নেই, কোন বড় ব্যাপার নয়। আপনি সর্বদা তাদের একটি বংশধর শ্রেণীতে তৈরি করতে পারেন, অন্য সবার থেকে আলাদা।

public class F1Car extends Car {

   public void pitStop() {

       // Only race cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
আসুন উদাহরণ হিসাবে ফর্মুলা ওয়ান রেস কারগুলি দেখি। তাদের "আত্মীয়" থেকে ভিন্ন, তাদের একটি অনন্য আচরণ রয়েছে - তারা সময়ে সময়ে একটি পিট স্টপ নেয়। এই আমাদের বিরক্ত না. আমরা ইতিমধ্যেই অভিভাবক শ্রেণীর সাধারণ আচরণ বর্ণনা করেছি Car, এবং বংশধর শ্রেণীর নির্দিষ্ট আচরণ সেই শ্রেণীতে যোগ করা যেতে পারে। ক্লাসের মধ্যে সম্পর্ক।  উত্তরাধিকার, রচনা এবং সমষ্টি - 3ক্ষেত্রগুলির ক্ষেত্রেও একই কথা প্রযোজ্য: যদি একটি শিশু শ্রেণীর অনন্য বৈশিষ্ট্য থাকে, তাহলে আমরা শান্তভাবে শিশু শ্রেণীর মধ্যে এই ক্ষেত্রগুলি ঘোষণা করি এবং উদ্বেগ করা বন্ধ করি। :) কোড পুনরায় ব্যবহার করার ক্ষমতা উত্তরাধিকারের প্রধান সুবিধা। প্রোগ্রামারদের জন্য, অতিরিক্ত কোড না লেখা খুবই গুরুত্বপূর্ণ। আপনি আপনার কাজের মধ্যে এটি বারবার দেখতে পাবেন। অনুগ্রহ করে অন্য কিছু গুরুত্বপূর্ণ মনে রাখবেন: জাভার একাধিক উত্তরাধিকার নেই. প্রতিটি শ্রেণী শুধুমাত্র একটি শ্রেণীর উত্তরাধিকারী হয়। আমরা ভবিষ্যতের পাঠে এর কারণ সম্পর্কে আরও কথা বলব। আপাতত, শুধু মনে রাখবেন। যাইহোক, এটি জাভাকে অন্য কিছু OOP ভাষার থেকে আলাদা করে তোলে। উদাহরণস্বরূপ, C++ একাধিক উত্তরাধিকার সমর্থন করে। উত্তরাধিকারের সাথে সবকিছুই কমবেশি স্পষ্ট। চল এগোই.

রচনা এবং সমষ্টি

ক্লাস এবং অবজেক্ট একসাথে সংযুক্ত করা যেতে পারে। উত্তরাধিকার একটি "is-a" সম্পর্ককে বর্ণনা করে। সিংহ একটি প্রাণী। এই ধরনের সম্পর্ক সহজেই উত্তরাধিকার ব্যবহার করে প্রকাশ করা হয়, যেখানে Animalপিতামাতার শ্রেণী এবং Lionশিশুটি। যাইহোক, সব সম্পর্ক এভাবে বর্ণনা করা হয় না। উদাহরণস্বরূপ, একটি কীবোর্ড অবশ্যই একটি কম্পিউটারের সাথে সম্পর্কিত, তবে এটি একটি কম্পিউটার নয় । হাতগুলি কোনওভাবে কোনও ব্যক্তির সাথে সম্পর্কিত, তবে তারা কোনও ব্যক্তি নয়। এই ক্ষেত্রে, আমাদের অন্য ধরনের সম্পর্ক রয়েছে: "is-a" নয়, "has-a"। একটি হাত একটি ব্যক্তি নয়, কিন্তু একটি ব্যক্তির অংশ. একটি কীবোর্ড একটি কম্পিউটার নয়, কিন্তু একটি কম্পিউটারের অংশ। একটি আছে-একটি সম্পর্ক রচনা এবং সমষ্টি ব্যবহার করে কোডে বর্ণনা করা যেতে পারে. পার্থক্যটি সম্পর্কের "কঠোরতা" এর মধ্যে রয়েছে। একটি সহজ উদাহরণ দেওয়া যাক: আমাদের একটি Carক্লাস আছে। প্রতিটি গাড়ির একটি ইঞ্জিন আছে। উপরন্তু, প্রতিটি গাড়ী যাত্রী আছে. Engine engineএবং ক্ষেত্রের মধ্যে মৌলিক পার্থক্য কি Passenger[] passengers? যাত্রীরা Aগাড়িতে বসে থাকার মানে এই নয় যে যাত্রীরা Bগাড়িতে Cনেই। একটি গাড়ি একাধিক যাত্রীর সাথে মিলিত হতে পারে। আরও কী, যদি সমস্ত যাত্রী একটি গাড়ি থেকে নেমে যায়, তবে এটি এখনও মসৃণভাবে কাজ করবে। Carক্লাস এবং অ্যারের মধ্যে সম্পর্ক Passenger[] passengersকম কঠোর। একে একত্রীকরণ বলে । এটি সমষ্টির আরেকটি ভাল উদাহরণ প্রদান করে। ধরুন আমাদের একটি Studentক্লাস আছে এবং কStudentGroupক্লাস একজন ছাত্র একাধিক ছাত্র সংগঠনে যোগ দিতে পারে: একটি পদার্থবিদ্যা ক্লাব, একটি স্টার ওয়ার্স ফ্যান ক্লাব এবং/অথবা একটি ছাত্র কমেডি ক্লাব। রচনা একটি কঠোর সম্পর্ক। রচনা ব্যবহার করার সময়, একটি বস্তু কিছু বস্তুর অংশ এবং একই ধরনের অন্য বস্তুর অন্তর্গত হতে পারে না। সবচেয়ে সহজ উদাহরণ হল একটি গাড়ির ইঞ্জিন। একটি ইঞ্জিন একটি গাড়ির অংশ এবং অন্য গাড়ির অংশ হতে পারে না। Carআপনি দেখতে পাচ্ছেন, তাদের সম্পর্ক এবং এর মধ্যে সম্পর্কের চেয়ে অনেক বেশি কঠোর Passengersক্লাসের মধ্যে সম্পর্ক।  উত্তরাধিকার, রচনা এবং সমষ্টি - 4
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION