সম্পর্কটি উল্টিয়ে দিয়ে বৃত্ত-উপবৃত্ত সমস্যা সমাধান করা যেতে পারে?


13

রয়ে Circleপ্রসারিতEllipse বিরতি Liskov Substition নীতি যথা, আপনি সেট করতে পারেন X এবং Y স্বাধীনভাবে একটি উপবৃত্ত আঁকা, কিন্তু এক্স সবসময় চেনাশোনা জন্য Y সমান হবে:, কারণ এটি একটি postcondition পরিবর্তন।

কিন্তু বৃত্তটি কোনও উপবৃত্তের উপ-প্রকার হওয়ায় এখানে সমস্যাটি হয় না? আমরা কি সম্পর্কটা উল্টাতে পারি না?

সুতরাং, বৃত্তটি সুপারটাইপ - এটির একটি একক পদ্ধতি রয়েছে setRadius

তারপরে, এলিপস যুক্ত করে setXএবং বৃত্তটি প্রসারিত করে setYsetRadiusএলিপসে ফোন করা X এবং Y উভয়ই সেট করে would যার অর্থ সেটরেডিয়াসে পোস্টকন্ডিশনটি বজায় থাকে তবে আপনি এখন এক্সটেন্ডেড ইন্টারফেসের মাধ্যমে স্বাধীনভাবে এক্স এবং ওয়াই সেট করতে পারবেন।


1
আপনি কি প্রথমে উইকিপিডিয়ায় দেখেছেন ( en.wikedia.org/wiki/Circle-ellipse_problem )?
ডক ব্রাউন

1
হ্যাঁ - আমি এমনকি আমার প্রশ্নের সাথে এটি লিঙ্ক করেছি ...
HorusKol

6
এবং এই নিখুঁত পয়েন্টটি সেই নিবন্ধে আচ্ছাদিত, সুতরাং আপনি যা জিজ্ঞাসা করছেন তা সম্পর্কে আমি অস্পষ্ট?
ফিলিপ কেন্ডল

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

3
এই সমস্যাটির কেন খারাপ জায়গা রয়েছে সে সম্পর্কে আমি স্পষ্ট ব্যাখ্যাটি খুঁজে পেয়েছি যেটি উইকিপিডিয়া নিবন্ধের একেবারে নীচে রয়েছে: en.wikedia.org/wiki/… । পরিস্থিতির নির্ভর করে, বেশ কিছু পরিষ্কার ডিজাইন, কিন্তু এটা এই দুটি শ্রেণীর থেকে আপনার যা দরকার কি নির্ভর করে না , না হতে
আর্থার হাভলিসেক

উত্তর:


37

কিন্তু বৃত্তটি কোনও উপবৃত্তের উপ-প্রকার হওয়ায় এখানে সমস্যাটি হয় না? আমরা কি সম্পর্কটা উল্টাতে পারি না?

এটির (এবং বর্গক্ষেত্র / আয়তক্ষেত্রের সমস্যা) সমস্যাটি মিথ্যাভাবে এক ডোমেনে একটি সম্পর্ক ধরে নিয়েছে (জ্যামিতি) অন্যটিতে (আচরণ)

আপনি যদি জ্যামিতিক তত্ত্বের প্রিজমের মাধ্যমে দেখেন তবে একটি বৃত্ত এবং উপবৃত্ত সম্পর্কিত হয়। তবে এটি কেবলমাত্র ডোমেন নয় যা আপনি দেখতে পারেন।

অবজেক্ট ওরিয়েন্টেটেড ডিজাইন আচরণের সাথে সম্পর্কিত

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

এখানে পাঠটি হ'ল এমন ডোমেনটি বেছে নেওয়া যা ওওডের পক্ষে সর্বাধিক অর্থবোধ তৈরি করে, কোনও সম্পর্কের ক্ষেত্রে চেষ্টা এবং জুতোচর্চা না করে কেবল এটি অন্য কোনও ডোমেনে বিদ্যমান।

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


(অ্যাপ্লিকেশন) ডোমেনের বনাম বনাম। ওওডি এর আচরণগত এবং দায়িত্বের দক্ষতার উদ্বেগগুলি আলাদা করা একটি খুব গুরুত্বপূর্ণ বিষয়। উদাহরণস্বরূপ, একটি অঙ্কন অ্যাপ্লিকেশনটিতে আপনার সম্ভবত একটি বৃত্তটি একটি বর্গক্ষেত্রের আকারে পরিণত করতে সক্ষম হওয়া উচিত, তবে এটি বেশিরভাগ ভাষায় ক্লাস / অবজেক্টগুলি ব্যবহার করে সহজেই মডেলিং করা হয় না (কারণ বস্তুগুলি সাধারণত শ্রেণি পরিবর্তন করতে পারে না)। সুতরাং, অ্যাপ্লিকেশন ডোমেন সর্বদা প্রদত্ত ওওপি ভাষার উত্তরাধিকার শ্রেণিবিন্যাসের জন্য ম্যাপ করে না এবং এটিতে আমাদের জোর করার চেষ্টা করা উচিত নয়; অনেক ক্ষেত্রে, রচনাটি আরও ভাল।
এরিক tদ

3
এই উত্তরটি পুরো বিষয়টি সম্পর্কে আমি সবচেয়ে ভালভাবে দেখেছি এবং আরও সাধারণ ক্ষেত্রে কীভাবে নকশার ত্রুটিগুলির সম্ভাবনা দেখা দিতে পারে is ধন্যবাদ
HorusKol

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

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

1
তবে একটি চাকরি একটি বেতন যাচাই করা যেতে পারে।

8

বৃত্তগুলি উপবৃত্তের একটি বিশেষ কেস, অর্থাত্ উপবৃত্তের উভয় অক্ষ একই are উপবৃত্তাকারগুলি একধরণের বৃত্ত হতে পারে তা বোঝাতে সমস্যা ডোমেনে (জ্যামিতি) এটি মূলত মিথ্যা। এই ত্রুটিযুক্ত মডেলটি ব্যবহার করা একটি চেনাশোনাগুলির অনেক গ্যারান্টি লঙ্ঘন করবে, উদাহরণস্বরূপ "বৃত্তের সমস্ত পয়েন্টের কেন্দ্রের সমান দূরত্ব রয়েছে"। সেটিও লিসকো সাবস্টিটিউশন নীতি লঙ্ঘন হবে। একটি উপবৃত্তের একক ব্যাসার্ধ কীভাবে থাকবে? (না setRadius()তবে আরও গুরুত্বপূর্ণভাবে getRadius())

উপবৃত্তের উপপ্রকার হিসাবে চেনাশোনাগুলির মডেলিং মৌলিকভাবে ভুল নয়, তবে এই মডেলটিকে ভেঙে দেয় এমন পরিবর্তনের পরিচয়। setX()এবং setY()পদ্ধতিগুলি ছাড়া , কোনও এলএসপি লঙ্ঘন নেই। যদি বিভিন্ন মাত্রা সহ কোনও বস্তু থাকার প্রয়োজন হয় তবে একটি নতুন উদাহরণ তৈরি করা আরও ভাল সমাধান:

class Ellipse {
  final double x;
  final double y;
  ...
  Ellipse withX(double newX) {
    return new Ellipse(x: newX, y: y);
  }
}

1
ঠিক আছে - সুতরাং, যদি Ellipseএবং Circle(যেমন getArea) এর মধ্যে কিছু সাধারণ ইন্টারফেস থাকে যা কোনও ধরণের বিমূর্ত হবে Shape- Ellipseএবং Circleআলাদাভাবে Shapeএলএসপি থেকে সাব টাইপ করে সন্তুষ্ট করতে পারে ?
হুরুসকোল

1
@ হারুসকোল হ্যাঁ একটি ইন্টারফেস উত্তরাধিকার সূত্রে প্রাপ্ত দুটি শ্রেণি যা তারা উভয়ই সত্যিকার অর্থে সঠিকভাবে প্রয়োগ করে তা সম্পূর্ণ জরিমানা।
Ixrec

7

করম্যাকের সত্যিই দুর্দান্ত উত্তর রয়েছে তবে আমি প্রথমে বিভ্রান্তির কারণটি নিয়ে কিছুটা বিশদভাবে বলতে চাই।

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

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

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

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

  1. বিভিন্ন UI (যেমন একটি উপবৃত্তের উপর দুটি আকার পরিবর্তন-হ্যান্ডলগুলি, একটি বৃত্তের একটি হ্যান্ডেল) দিয়ে আলাদা আলাদা আকারের আকার হিসাবে চেনাশোনা এবং উপবৃত্তাকারগুলি আচরণ করুন। এর অর্থ আপনার একটি উপবৃত্ত থাকতে পারে যা জ্যামিতিকভাবে একটি বৃত্ত তবে আবেদনের দৃষ্টিকোণ থেকে একটি বৃত্ত নয়।

  2. চেনাশোনা সহ সমস্ত উপবৃত্ত একইরকম আচরণ করুন, তবে একই তালিকায় x এবং y "লক" করার বিকল্প রয়েছে।

  3. উপবৃত্তান্ত কেবলমাত্র চেনাশোনা যেখানে স্কেলিং রূপান্তর প্রয়োগ করা হয়েছে।

প্রতিটি সম্ভাব্য নকশা বিভিন্ন অবজেক্টের মডেলকে নিয়ে যাবে -

1 ম ক্ষেত্রে, বৃত্ত এবং উপবৃত্তগণ সহোদর শ্রেণি হবে classes

২ য় শ্রেণিতে কোনও স্বতন্ত্র সার্কেল শ্রেণি থাকবে না

তৃতীয় শ্রেণিতে স্বতন্ত্র উপবৃত্ত শ্রেণি থাকবে না। সুতরাং তথাকথিত চেনাশোনা-উপবৃত্ত সমস্যা এইগুলির মধ্যে কোনওটিতে ছবি প্রবেশ করে না।

সুতরাং উত্থাপিত প্রশ্নের উত্তর দেওয়ার জন্য: বৃত্তটি কি উপবৃত্তাকার প্রসারিত করা উচিত? উত্তরটি হ'ল: এটির মাধ্যমে আপনি কী করতে চান তা নির্ভর করে। তবে সম্ভবত না।


1
খুব ভাল উত্তর!
উত্সব টি

6

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

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


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

3

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

আমাকে যা শেখানো হয়েছিল তা হ'ল:

সাব-টাইপটি সুপার-টাইপের মতো একই আচরণ করতে না পারলে সম্পর্কটি আইএস-এ ভিত্তিতে রাখে না - এটি পরিবর্তন করা উচিত।

  • একটি উপ-টাইপ সুপার-টাইপের একটি সুপারসেট UP
  • একটি সুপার-টাইপ হল সাব-টাইপের একটি সাবসেট T

ইংরেজীতে:

  • একটি উত্পন্ন ধরণটি বেস-প্রকারের একটি সুপারসেট।
  • একটি বেস-প্রকার হ'ল উদ্ভূত প্রকারের একটি সাবসেট।

(উদাহরণ:

  • খারাপ-ছেলের নিষ্কাশনকারী গাড়ি এখনও একটি গাড়ি (কারও কারও মতে)।
  • ইঞ্জিনবিহীন গাড়ি, চাকা, স্টিয়ারিং রাক, ড্রাইভট্রাইন এবং কেবল শেল বাকি রয়েছে, এটি 'গাড়ি' নয়, এটি কেবল একটি শেল))

শ্রেণিবিন্যাসটি কীভাবে কাজ করে (যেমন প্রাণীজগতে) এবং মূলত ওওতে works

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

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

তার ভিত্তিতে, আমি মনে করি সমাধানটি কিছুটা পুনরায় বানানো উচিত।

একটি শেপ বেস টাইপ করুন, তারপরে গোলটেড শেপ করুন (কার্যকরভাবে একটি বৃত্ত তবে আমি আলাদাভাবে এখানে নামটি ব্যবহার করেছি স্বচ্ছলভাবে ...)

... তাহলে উপবৃত্ত।

ঐ দিকে:

  • গোলটেড শেপ একটি শেপ।
  • উপবৃত্তাকার একটি বৃত্তাকার শেপ is

(এটি এখন ভাষায় লোকের কাছে উপলব্ধি করে already


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

-1

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

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