স্কেলে বস্তু এবং শ্রেণীর মধ্যে পার্থক্য


635

আমি কেবল ইন্টারনেটে কয়েকটি স্কালা টিউটোরিয়াল নিয়ে যাচ্ছি এবং কয়েকটি উদাহরণে লক্ষ্য করেছি যে উদাহরণের শুরুতে একটি বস্তু ঘোষিত হয়েছে।

স্কালার মধ্যে classএবং পার্থক্য কী object?

উত্তর:


578

TL; ড

  • class C একটি শ্রেণি সংজ্ঞায়িত করে ঠিক যেমন জাভা বা সি ++ তে।
  • object Oকিছু বেনাম শ্রেণীর উদাহরণ হিসাবে একটি সিঙ্গলটন অবজেক্ট তৈরি করে O; এটি স্থির সদস্যদের ধরে রাখতে ব্যবহার করা যেতে পারে যা কিছু শ্রেণির উদাহরণের সাথে সম্পর্কিত নয়।
  • object O extends Tবস্তুকে Oউদাহরণ হিসাবে দেখায় trait T; তারপরে আপনি Oযে কোনও জায়গায় যেতে পারবেন , একটি Tপ্রত্যাশিত।
  • যদি একটি class C, তারপর object Cহয় সহচর বস্তুর ক্লাসের C; নোট করুন যে সহযোগী বস্তুটি স্বয়ংক্রিয়ভাবে এর উদাহরণ নয়C

বস্তু এবং শ্রেণীর জন্য স্কালার ডকুমেন্টেশনও দেখুন ।

object স্থির সদস্যদের হোস্ট হিসাবে

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

object A {
  def twice(i: Int): Int = 2*i
}

তারপরে আপনি উপরের পদ্ধতিটি ব্যবহার করে কল করতে পারেন A.twice(2)

যদি twiceকোনও শ্রেণির সদস্য হতামA , তবে আপনাকে প্রথমে একটি উদাহরণ তৈরি করতে হবে:

class A() {
  def twice(i: Int): Int = 2 * i
}

val a = new A()
a.twice(2)

আপনি দেখতে পাচ্ছেন যে এটি কতটা অপ্রয়োজনীয়, যেমন twiceকোনও উদাহরণ-নির্দিষ্ট ডেটার প্রয়োজন হয় না।

object একটি বিশেষ নামকরণ হিসাবে

আপনি objectনিজে কোনও শ্রেণি বা বৈশিষ্ট্যের বিশেষ উদাহরণ হিসাবে নিজেকে ব্যবহার করতে পারেন । আপনি যখন এটি করেন, আপনার অবজেক্টের কিছুটা বাড়ানো দরকারtrait এটির একটি সাবক্লাসের উদাহরণ হয়ে উঠতে ।

নিম্নলিখিত কোড বিবেচনা করুন:

object A extends B with C {
  ...
}

এই ঘোষণাটি প্রথমে একটি বেনাম (অ্যাক্সেসযোগ্য) শ্রেণি ঘোষণা করে যা উভয়কে প্রসারিত করে Bএবং Cএই শ্রেণীর নামটির একক উদাহরণ ইনস্ট্যান্ট করে দেয়A

এর অর্থগুলি Aটাইপের Bবা C, বা এর প্রত্যাশার প্রত্যাশায় ফাংশনগুলিতে যেতে পারে B with C

অতিরিক্ত বৈশিষ্ট্য object

স্কালায় বস্তুর কিছু বিশেষ বৈশিষ্ট্যও রয়েছে। আমি অফিসিয়াল ডকুমেন্টেশন পড়ার পরামর্শ দিই ।

  • def apply(...) এর সাধারণ পদ্ধতির নাম-কম সিনট্যাক্স সক্ষম করে A(...)
  • def unapply(...)কাস্টম প্যাটার্ন মেলানো এক্সট্র্যাক্টর তৈরি করতে দেয়
  • একই নামের শ্রেণীর সাথে থাকলে, অন্তর্নিহিত পরামিতিগুলি সমাধান করার সময় অবজেক্টটি একটি বিশেষ ভূমিকা গ্রহণ করে

38
এটি ক্লাস এটিকে সংজ্ঞায়িত করবে এবং বস্তু এ এর ​​সমস্ত পদ্ধতিকে ক্লাস এ-তে (জাভাতে ইন্টারফেস করার জন্য) স্থির পদ্ধতি হিসাবে তৈরি করবে। (স্কাল ২.৮ এ মডুলো একটি বাগ যা স্কেলা ২.৮-এ স্থির করা হয়েছে)
কেন ব্লুম

2
@ কেনব্লুম সত্যিই? আমি চেষ্টা করেছি এবং কাজ করে না: স্কেল> কমার্স রেজিস 8: কমার্স.টাইপ = কমার্স 6 @ 6eb2756 স্কেল> ক্লাস অফ [কমার্স] <কনসোল>: 23: ত্রুটি: পাওয়া যায় নি: কমার্স ক্লাসে টাইপ করুন [বাণিজ্য] ^ স্কেলা> নতুন বাণিজ্য < কনসোল>: 23: ত্রুটি: পাওয়া যায় নি: টাইপ কমার্স নিউ কমার্স ^
হেন্ডি ইরওয়ান

3
@ হেন্ডি: স্কেলা Commerceক্লাসটি স্বীকৃতি দেবে না , তবে জেভিএম এবং জাভা ভাষা তা জানবে। (আপনি এটি করতে পারেন object Foo{ def main(args:Seq[String]) }এবং প্রোগ্রামটি চালানোর আশা করতে পারেন ))
কেন ব্লুম

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

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

249

classএকটি সংজ্ঞা, একটি বিবরণ। এটি অন্যান্য ধরণের পদ্ধতি এবং রচনার ক্ষেত্রে কোনও প্রকারের সংজ্ঞা দেয়।

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

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

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

class X {
  // class X can see private members of object X
  // Prefix to call
  def m(x: Int) = X.f(x)

  // Import and use
  import X._
  def n(x: Int) = f(x)

  private def o = 2
}

object X {
  private def f(x: Int) = x * x

  // object X can see private members of class X
  def g(x: X) = {
    import x._
    x.o * o // fully specified and imported
   }
}

1
আপনাকে বিরক্ত করার জন্য দুঃখিত, তবে কী আপনি সম্ভবত কোনও সহকর্মী অবজেক্টে পদ্ধতি আমদানি করবেন বা কীভাবে সেগুলি উপস্থাপন করবেন সে সম্পর্কে কোনও উদাহরণের দিকে নির্দেশ করতে পারেন?
ithkuil

4
@ithkuil সম্পন্ন নির্বোধ উদাহরণটির জন্য দুঃখিত, আমি একটি ভাল এবং সংক্ষিপ্ত উদাহরণটি ভাবতে পারি না।
ড্যানিয়েল সি সোব্রাল

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

পছন্দ করেছেন বলুন যে অবজেক্টটির একটি পদ্ধতি রয়েছে def f(x: X) = ???, তারপরে এটি xসহকারী শ্রেণীর প্রাইভেট পদ্ধতিগুলিতে কল করতে সক্ষম হবে X
ড্যানিয়েল সি সোব্রাল

এখানে ফাংশনে এক্স পাশ করা দ্বাদশ শ্রেণির অনুমানের উদাহরণ? যদি হ্যাঁ, তবে অবশেষে আপনি অবজেক্ট এক্স ব্যবহার করছেন ডিফ এফ ক্লাসের পদ্ধতিটি কল করতে .. ডান?
পীযুষগয়াল

76

কোনও বস্তুর ঠিক এক উদাহরণ রয়েছে (আপনি কল করতে পারবেন না new MyObject)। আপনি একটি শ্রেণীর একাধিক উদাহরণ থাকতে পারে ।

অবজেক্টটি জাভাতে স্থির পদ্ধতি এবং ক্ষেত্রগুলির মতো একই (এবং কিছু অতিরিক্ত) উদ্দেশ্যে কাজ করে।


19

যেমনটি অনেকের দ্বারা ব্যাখ্যা করা হয়েছে, objectএকটি সিঙ্গলটন উদাহরণকে সংজ্ঞায়িত করে। এখানে যে উত্তরে আমি বিশ্বাস করি যে একটি বিষয় বাদ পড়েছে তা হ'ল এটি objectবিভিন্ন উদ্দেশ্যে কাজ করে।

  • এটি স্থিতিশীল পদ্ধতি বা সুবিধার পদ্ধতি হিসাবে বিবেচিত হতে পারে এমন একটি class/ এর সহযাত্রী বস্তু traitহতে পারে।

  • এটি সম্পর্কিত / সহায়ক সংজ্ঞা এবং সংজ্ঞা ইত্যাদি সমন্বিত মডিউলটির মতো কাজ করতে পারে much

  • এটি একটি classবা এক বা একাধিক traitগুলি বাড়িয়ে একটি ইন্টারফেস বাস্তবায়ন করতে পারে ।

  • এটি sealed traitএমন কোনও মামলার প্রতিনিধিত্ব করতে পারে যাতে কোনও ডেটা থাকে না। এই ক্ষেত্রে, এটি প্রায়শই case classকোনও পরামিতি ছাড়াই বেশি সঠিক বলে বিবেচিত হয় । sealed traitকেবলমাত্র case objectবাস্তবায়নকারীদের সহ একটি বিশেষ ক্ষেত্রে একটি এনামের স্কেল সংস্করণ কম বেশি is

  • এটি- implicitচালিত যুক্তির প্রমাণ হিসাবে কাজ করতে পারে ।

  • এটি একটি সিঙ্গলটন প্রকারের সাথে পরিচয় করিয়ে দেয়।

এটি একটি খুব শক্তিশালী এবং সাধারণ নির্মাণ। স্কালার শুরুর জন্য বিভ্রান্তিকর কি হতে পারে তা হ'ল একই কনস্ট্রাক্টটির বিবিধ ব্যবহার হতে পারে। এবং একটি objectএই সমস্ত বিভিন্ন ব্যবহার একবারে একবারে পরিবেশন করতে পারে যা আরও বিভ্রান্তিকর হতে পারে।


18

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


17

আনুষ্ঠানিক পার্থক্য -

  1. আপনি অবজেক্টগুলির জন্য কনস্ট্রাক্টর পরামিতি সরবরাহ করতে পারবেন না
  2. অবজেক্ট কোনও ধরণের নয় - আপনি নতুন অপারেটরের সাথে কোনও উদাহরণ তৈরি করতে পারেন না। তবে এতে ক্ষেত্র, পদ্ধতি, একটি সুপারক্লাস প্রসারিত এবং বৈশিষ্ট্যগুলি মিশ্রিত থাকতে পারে।

ব্যবহারের পার্থক্য:

  • স্কালায় স্থির পদ্ধতি বা ক্ষেত্র নেই। পরিবর্তে আপনি ব্যবহার করা উচিত object। আপনি এটি সম্পর্কিত ক্লাসের সাথে বা ছাড়াই ব্যবহার করতে পারেন। প্রথম ক্ষেত্রে এটিকে সহকর্মী অবজেক্ট বলা হয়। তোমাকে করতেই হবে:
    1. ক্লাস এবং অবজেক্ট উভয়ের জন্য একই নাম ব্যবহার করুন
    2. তাদের একই উত্স ফাইলে রাখুন।
  • একটি প্রোগ্রাম তৈরি করতে আপনার মূল পদ্ধতিটি ব্যবহার করা উচিত object, ভিতরে নয় class

    object Hello {
      def main(args: Array[String]) {
        println("Hello, World!")
      }
    }
  • আপনি জাভাতে সিঙ্গলটন অবজেক্টটি ব্যবহার করার সময় এটি ব্যবহার করতে পারেন।

      
        
      


"আপনি অবজেক্টগুলির জন্য কনস্ট্রাক্টর প্যারামিটার সরবরাহ করতে পারবেন না" অবজেক্টগুলির প্রয়োগ (...) পদ্ধতি রয়েছে যা কনস্ট্রাক্টরের মতো অনেকগুলি কাজ করে। এটি আমাকে কিছুটা বিভ্রান্ত করে ফেলে।
ড্যানিয়েল

7

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

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


6

অবজেক্টটি একটি শ্রেণি তবে এটি ইতিমধ্যে একটি (উদাহরণ) উদাহরণ রয়েছে, সুতরাং আপনি কল করতে পারবেন না new ObjectName। অন্যদিকে, ক্লাসটি কেবল টাইপ করা হয় এবং এটি কল করে উদাহরণ হতে পারে new ClassName()


4

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

স্কেল একক বস্তুর উদাহরণ Example

object Singleton{  
    def main(args:Array[String]){  
        SingletonObject.hello()         // No need to create object.  
    }  
}  


object SingletonObject{  
    def hello(){  
        println("Hello, This is Singleton Object")  
    }  
}  

আউটপুট:

Hello, This is Singleton Object

স্কেলে, যখন আপনার সিঙ্গেলটন অবজেক্টের একই নামের একটি ক্লাস থাকে, তখন তাকে সহকর্মী ক্লাস বলা হয় এবং সিঙ্গলটন অবজেক্টকে সহকর্মী অবজেক্ট বলে।

সহযোগী বর্গ এবং তার সহযোগী বস্তু উভয়ই একই উত্স ফাইলে সংজ্ঞায়িত করা উচিত।

স্কেলা কম্পেনিয়ান অবজেক্টের উদাহরণ

class ComapanionClass{  
    def hello(){  
        println("Hello, this is Companion Class.")  
    }  
}  
object CompanoinObject{  
    def main(args:Array[String]){  
        new ComapanionClass().hello()  
        println("And this is Companion Object.")  
    }  
}  

আউটপুট:

Hello, this is Companion Class.
And this is Companion Object.

স্ক্যালায়, একটি শ্রেণি থাকতে পারে:

1. ডেটা সদস্য

2. সদস্য পদ্ধতি

৩. কনস্ট্রাক্টর ব্লক

৪. নেস্টেড ক্লাস

৫. সুপার ক্লাসের তথ্য ইত্যাদি

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

শ্রেণীর উদাহরণ স্ক্যালাল ala

class Student{  
    var id:Int = 0;                         // All fields must be initialized  
    var name:String = null;  
}  
object MainObject{  
    def main(args:Array[String]){  
        var s = new Student()               // Creating an object  
        println(s.id+" "+s.name);  
    }  
} 

আমি দুঃখিত, আমি অনেক দেরী করেছি তবে আমি আশা করি এটি আপনাকে সহায়তা করবে।


2

জাভা ক্লাসের মতো স্কাল ক্লাস তবে স্কোয়া আপনাকে জাভাতে মেইন মেথডের মতো ক্লাসে কোনও এন্ট্রি পদ্ধতি দেয় না। মূল পদ্ধতিটি অবজেক্ট কীওয়ার্ডের সাথে সম্পর্কিত। আপনি অবজেক্ট কীওয়ার্ডটিকে ক্লাসের একটি সিঙ্গলটন অবজেক্ট তৈরির মতো ভাবতে পারেন যা অন্তর্নিহিত সংজ্ঞায়িত হয়।

আরও তথ্য এই নিবন্ধের ক্লাসটি পরীক্ষা করুন এবং স্কালা প্রোগ্রামিংয়ে বস্তুর কীওয়ার্ড


2

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


1

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

class Person(val name: String)
val me = new Person("My name")

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

class Person(var name: String) {

  import Person._

  def hi(): String = sayHello(name)
}

object Person {
  private def sayHello(name: String): String = "Hello " + name
}

val me = new Person("My name")
me.hi()

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

আপনি যদি জেডিবিসির জন্য সংযোগ তৈরির সংজ্ঞা দিচ্ছেন, তবে সিভিলটন অবজেক্টের সাথে জাভাতে যেমন করুন তেমন নকল এড়াতে আপনি সেগুলি ভিতরে তৈরি করতে পারেন।


0

আপনি যদি জাভা ব্যাকগ্রাউন্ড থেকে আসেন তবে স্কালায় ক্লাসের ধারণা জাভা এর মতোই, তবে স্কেলা ক্যান্টের ক্লাসে স্থির সদস্য থাকে।

স্কালায় থাকা অবজেক্টগুলি সিঙ্গেলটন টাইপের হয় যার মাধ্যমে আপনি অবজেক্টের নাম ব্যবহার করে এর অভ্যন্তরে পদ্ধতিগুলি কল করেন, স্কেলা অবজেক্টে একটি কীওয়ার্ড এবং জাভা অবজেক্টে শ্রেণীর উদাহরণ using

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