কম্পিউটার

ডেটা অবজেক্ট এবং স্ট্রাকচার


মৌলিক ধারণা

ডেটা স্ট্রাকচারগুলিকে শুধুমাত্র ডেটা রাখার জন্য প্রয়োগ করা বিশেষ ক্লাস হিসাবে সংজ্ঞায়িত করা হয়, যেমন বিশুদ্ধ মডেল, যেমন গাড়ি, বাচ্চা, পশু, ইভেন্ট, কর্মচারী, কোম্পানি, গ্রাহক ... ইত্যাদি। এই ডেটাগুলি সাধারণত অন্যান্য ক্লাসের শুরুতে ইনস্ট্যান্স ভেরিয়েবল হিসাবে ঘোষিত বা বিবেচিত হয়।

এই ক্লাসের পদ্ধতিগুলো কোনো সত্যিকারের উল্লেখযোগ্য কাজ করা উচিত নয়, অন্যথায় ডেটা স্ট্রাকচার ক্লাস আর কোনো ডেটা স্ট্রাকচার নয়!

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

  • সেই প্রেক্ষাপটে, ডেটা স্ট্রাকচার ক্লাস, এর ডেটা (ভেরিয়েবল) প্রকাশ করে বা প্রকাশ করে এবং এর কোনো অর্থবহ (উল্লেখযোগ্য) পদ্ধতি বা ফাংশন নেই।
  • একটি সাধারণ শ্রেণী (এখানে অবজেক্ট বলা হয়), যেমন MainActivity, ListAdapter, Calculator, Iterator, তাদের ডেটা লুকিয়ে রাখে এবং সেই ডেটাতে কাজ করে এমন তাদের পদ্ধতিগুলি প্রকাশ বা প্রকাশ করে৷

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

public class Square {
   public Point topLeft1;
   public double side1;
}
public class Rectangle {
   public Point topLeft1;
   public double height1;
   public double width1;
}
public class Circle {
   public Point center1;
   public double radius1;
}
public class Geometry {
   public final double PI = 3.141592653589793;
   public double area(Object shape) throws NoSuchShapeException {
   if (shape instanceof Square) {
      Square s = (Square)shape;
      return s.side1 x s.side1;
   }else if (shape instanceof Rectangle) {
      Rectangle r = (Rectangle)shape;
      return r.height1 x r.width1;
   }else if (shape instanceof Circle) {
      Circle c = (Circle)shape;
      return PI x c.radius1 x c.radius1; }
      throw new NoSuchShapeException(); }
}

এই সমাধানে আকারগুলিকে ডেটা স্ট্রাকচার হিসাবে বিবেচনা করা হয়, যেখানে জ্যামিতি শ্রেণীকে অবজেক্ট হিসাবে ধরা হয়৷

সুবিধা − যদি আমাদের আরও পদ্ধতি যোগ করার প্রয়োজন হয় তবে আমরা সেগুলিকে শুধুমাত্র জ্যামিতি ক্লাসে যোগ করব (এই সময় এই সমাধানটি প্রয়োগ করা উচিত)।

অসুবিধা − যদি আমাদের আরও ডেটা স্ট্রাকচার (অর্থাৎ আরও আকার) যোগ করতে হয়, তাহলে আমাদের জ্যামিতি ক্লাসে আপনার সমস্ত পদ্ধতি পরিবর্তন করতে হবে৷

ডেটা স্ট্রাকচার এবং অবজেক্টের মধ্যে পার্থক্য

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

  1. করেসপন্ডেন্স ভিত্তিক ডেটা স্ট্রাকচার

  2. ডেটা স্ট্রাকচারে ন্যূনতম স্প্যানিং ট্রি

  3. ডাটা স্ট্রাকচারে বাইনারি ট্রি এবং প্রোপার্টি

  4. ডাটা স্ট্রাকচারে বাইনারি ট্রি রিপ্রেজেন্টেশন