তথ্য কি কোনও সম্মেলনের চেয়ে বেশি লুকিয়ে থাকে?


20

জাভাতে, সি # এবং আরও অনেকগুলি দৃ strongly়-টাইপযুক্ত, স্ট্যাটিকালি পরীক্ষিত ভাষাগুলিতে আমরা এই জাতীয় কোড ব্যবহার করতে ব্যবহৃত হয়:

public void m1() { ... }
protected void m2() { ... }
private void m2() { ... }
void m2() { ... }

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

_m(self): pass

এটি যুক্তিযুক্ত হতে পারে যে ডায়নামিকভাবে চেক করা ভাষায় এই জাতীয় কীওয়ার্ড সরবরাহ করা খুব কম ব্যবহার যুক্ত করবে কারণ এটি কেবল রানটাইম-এ পরীক্ষা করা হয়।

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

এটি মাথায় রেখে, আমার প্রশ্নটি হ'ল:

কোনও শ্রেণীর অফিসিয়াল ইন্টারফেসের অংশটি কী তা নির্ধারণ করতে প্রোগ্রামারদের মধ্যে কনভেনশনের চেয়ে বেশি তথ্য গোপন করা হয়?

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


10
দুঃখিত, এরিক লিপার্ট ছুটিতে আছে :)
বেনজল

আপনার প্রশ্নটি বোঝা কিছুটা কঠিন। আপনি কি কেবল জিজ্ঞাসা করছেন যে কেউ বাইরে থেকে কোনও ব্যক্তিগত সদস্যকে অ্যাক্সেস করতে পারে কিনা?
মরগান হের্লোকার


@ আইরনকোড: আমি বলতে পারি যে আমি কিছু উত্তর থেকে যথেষ্ট পরিস্কারভাবে প্রকাশ করি না। আপনি কি বলতে পারেন যে বিশেষত এটি বুঝতে শক্ত হয়? আমি স্পষ্ট করার চেষ্টা করব।
blubb

2
"সংকলনের সময় তথ্য সরবরাহ করা বাজে কথা এবং তারপর কেবল রানটাইম এ এটি পরীক্ষা করা" - সত্য? মাইক্রোসফ্টকে এটি আরও ভাল বলুন কারণ এটিই বর্তমান .NET কাঠামোর একটি উল্লেখযোগ্য অংশ ভিত্তিক: বেছে বেছে বেছে বেছে বেছে বেছে বেছে বেছে বেছে বেছে বেছে বেছে নেওয়া বা বেছে নেওয়া। আমি মনে করি না যদিও এটি সত্যই আপনি যা বোঝাতে চেয়েছেন; প্রশ্নটি "স্ট্যাটিক" বনাম "গতিশীল" পরীক্ষা সম্পর্কে বারবার কথা বলে, তবে সেগুলি টাইপ সিস্টেমের বৈশিষ্ট্য; এখানে আসলে কী সংকলন-সময় বনাম রান-টাইম বাঁধাই
অ্যারোনআউট

উত্তর:


4

আমি জাভা শংসাপত্রের জন্য অধ্যয়ন করছি এবং এটির পুরো গোটা বিষয়টিতে উদ্বেগ রয়েছে যে কীভাবে অ্যাক্সেস মডিফায়ারগুলি পরিচালনা করবেন। এবং তারা বোঝায় এবং সেগুলি সঠিকভাবে ব্যবহার করা উচিত।

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

অজগর নেতৃস্থানীয় আন্ডারস্কোর সম্পর্কিত এই আলোচনাটি পড়ুন

কোনও শ্রেণীর অফিসিয়াল ইন্টারফেসের অংশটি কী তা নির্ধারণ করতে প্রোগ্রামারদের মধ্যে কনভেনশনের চেয়ে বেশি তথ্য গোপন করা হয়?

আমি যা বলেছিলাম তা থেকে, হ্যাঁ।

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

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

সম্পাদনা হ্যাঁ, প্রতিচ্ছবি করতে পারেন, মন্তব্যগুলি পরীক্ষা করতে পারেন

শেষ প্রশ্নটি একটি আকর্ষণীয় এবং আমি এটি সম্পর্কিত উত্তরগুলি পড়তে ইচ্ছুক।


3
প্রতিচ্ছবি সাধারণত অ্যাক্সেস সুরক্ষা বাইপাস করতে পারে। জাভা এবং সি # এর জন্য তারা উভয়ই ব্যক্তিগত ডেটা অ্যাক্সেস করতে পারে।
এইচ

ধন্যবাদ! উত্তরগুলি এখানে: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 1565734/… এটি ব্যাখ্যা করুন!
wleao

1
জাভাস্ক্রিপ্ট সংস্কৃতি পাইথন সংস্কৃতি থেকে খুব আলাদা। পাইথনের পিপ -08 রয়েছে এবং প্রায় সমস্ত পাইথন বিকাশকারীরা এই সম্মেলনগুলি অনুসরণ করে। পিইপি -08 লঙ্ঘনগুলি প্রায়শই বাগ হিসাবে বিবেচিত হয়। সুতরাং আমি মনে করি জাভাস্ক্রিপ্ট / পিএইচপি / পার্ল / রুবি অভিজ্ঞতা এই দিকটিতে পাইথন অভিজ্ঞতার খুব কম অনুবাদ করে: _ ব্যক্তিগত অজগরটিতে খুব ভাল কাজ করে।
মাইক Korobov

1
কিছু (তবে সমস্ত নয়) প্রোগ্রামিং ভাষায়, তথ্য গোপন করা প্রতিকূল কোডের বিরুদ্ধে সুরক্ষার জন্য ব্যবহার করা যেতে পারে। প্রতিকূল ব্যবহারকারীর বিরুদ্ধে সুরক্ষার জন্য তথ্য গোপনীয়তা ব্যবহার করা যায় না।
ব্রায়ান

2
@ মাইক যদি PEP-08 লঙ্ঘনগুলি প্রায়শই "বাগ হিসাবে বিবেচিত হয়" এবং কোনও পাইথন দেব সম্মেলনগুলি অনুসরণ না করার স্বপ্ন দেখেন না, তবে আপনি তাদের ভাষা দ্বারা প্রয়োগ করতেও পারেন! ভাষা যখন স্বয়ংক্রিয়ভাবে এটি করতে পারে তখন কেন মেনিল কাজ করবে?
অ্যান্ড্রেস এফ

27

"প্রাইভেট" অ্যাক্সেস সুনির্দিষ্ট এটি প্রথমবার যখন দেখবেন তখন এটি সংকলক ত্রুটি তৈরি করে না। বাস্তবে এটি এমন কোনও কিছু অ্যাক্সেস করা থেকে বিরত রাখার বিষয়ে যা ব্যক্তিগত সদস্যভুক্ত শ্রেণীর প্রয়োগের পরিবর্তনের সাথে সাথে এখনও পরিবর্তনযোগ্য।

অন্য কথায়, এটি যখন এখনও কাজ করে তখন আপনাকে এটি ব্যবহারের অনুমতি না দেওয়া দুর্ঘটনাক্রমে এখনও যখন এটি আর কাজ করে না তখন এটি ব্যবহার করতে বাধা দেয়

ডেলানান প্রিফিক্স কনভেনশনটির নীচে মন্তব্য করেছিলেন যে যতক্ষণ না এই সম্মেলনটি যথাযথভাবে অনুসরণ করা হয় এবং সঠিকভাবে বোঝা যায় ততক্ষণ পরিবর্তিত হতে পারে এমন সদস্যদের দুর্ঘটনাজনিত ব্যবহারকে নিরুৎসাহিত করে। দূষিত (বা অজ্ঞ) ব্যবহারকারীর পক্ষে সমস্ত সম্ভাব্য পরিণতি সহ সেই সদস্যকে অ্যাক্সেস করা থেকে বিরত রাখতে কিছুই করে না। অ্যাক্সেস সুনির্দিষ্টদের জন্য অন্তর্নিহিত সমর্থনযুক্ত ভাষায় এটি অজ্ঞতা (সংকলক ত্রুটি) এ ঘটবে না এবং দূষিত (ব্যক্তিগত সদস্যের কাছে যাওয়ার জন্য অদ্ভুত নির্মাণগুলি) যখন ঘাড়ে থাম্বের মতো দাঁড়িয়ে থাকে।

"সুরক্ষিত" অ্যাক্সেস সুনির্দিষ্ট আলাদা গল্প - এটিকে কেবল "বেশ সরকারী নয়" বা "অনেকটা ব্যক্তিগতের মতো" বলে মনে করবেন না। "সুরক্ষিত" এর অর্থ হ'ল আপনি যখন সুরক্ষিত সদস্যযুক্ত শ্রেণি থেকে প্রাপ্ত তখন সম্ভবত আপনি সেই কার্যকারিতাটি ব্যবহার করতে চাইবেন । সুরক্ষিত সদস্যরা "এক্সটেনশন ইন্টারফেস" এর একটি অংশ যা আপনি বিদ্যমান বর্গগুলি নিজেরাই পরিবর্তন না করে বিদ্যমান ক্লাসগুলির শীর্ষে কার্যকারিতা যুক্ত করতে ব্যবহার করবেন।

সুতরাং, সংক্ষিপ্ত পুনরুদ্ধার:

  • সর্বজনীন: ক্লাসের উদাহরণগুলিতে নিরাপদে ব্যবহার করুন, শ্রেণীর উদ্দেশ্য পরিবর্তন হবে না।
  • সুরক্ষিত: শ্রেণি প্রসারিত করার সময় (ব্যবহার করা) ব্যবহার করতে - বাস্তবায়নে খুব দ্রুত পরিবর্তন করতে হবে তবে পরিবর্তন হতে পারে।
  • ব্যক্তিগত: স্পর্শ করবেন না! প্রত্যাশিত ইন্টারফেসগুলির আরও ভাল প্রয়োগের জন্য ইচ্ছায় পরিবর্তন হতে পারে।

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

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

1
@ ম্যাডকিথভি: তারপরে একটি ভাষা-স্তরের কীওয়ার্ডটি "কারণ স্পর্শ করবেন না ..." বলতে কী একই অর্থ বোঝায়? কেবলমাত্র সংকলক এটি প্রয়োগ করছে, তবে তারপরে আমরা আপনারা ফিরে আসছি স্থির বনাম গতিশীল আলোচনায়।

7
@ সিমন স্টেলিং (এবং ডেলানান) - আমার কাছে এ জাতীয় ধরণ "একটি ইঞ্জিন সীমিতার একটি গতির সীমা চিহ্নের চেয়ে আলাদা কীভাবে" জিজ্ঞাসা করার মতো।
জোরিস টিমারম্যানস

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

11

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


2
আমি পুরোপুরি একমত, কিন্তু এটি আমার প্রশ্নের উত্তর দেয় না। আমি ব্যবহার করি _memberবা private memberআমার ক্লাসে তা উপেক্ষিত না হয় যতক্ষণ না অন্যান্য প্রোগ্রামার বুঝতে পারে যে তার কেবলমাত্র publicপ্রিফিক্সড সদস্যদের দিকে নজর দেওয়া উচিত ।
blubb

6
হ্যাঁ, তবে গতিশীল ভাষায় লিখিত কোনও শ্রেণীর পাবলিক ডকুমেন্টেশন সেই those 36 টি ব্যক্তিগত অংশ আপনার কাছে ফেলবে না (কমপক্ষে ডিফল্টরূপে নয়)।

3
@ সিমন এটি "মাত্র একটি সম্মেলন" এই বক্তব্যটি বিভ্রান্তিকর, যেহেতু এর সত্যিকারের সুবিধা রয়েছে। "কেবল একটি সম্মেলন" হ'ল পরের লাইনে কোঁকড়ানো ধনুর্বন্ধনী হিসাবে। সুবিধাগুলি সহ একটি কনভেনশন অর্থপূর্ণ নাম ব্যবহার করার মতো কিছু যা আমি বলব এটি সম্পূর্ণ আলাদা। কোনও গোপনীয়তার সাথে সেট করা কি আপনাকে "গোপনীয় পদ্ধতি" দেখা থেকে থামিয়ে দেয়? না, তারা দৃ are়প্রত্যয়ী হলে নয়।
মরগান হের্লোকার

1
@ সাইমন- এছাড়াও, কেবল ব্যবহারের জন্য নিরাপদ যে উদ্ভাসিত পদ্ধতিগুলি ক্লাসটি ব্যবহারের চেষ্টা করার সময় ব্যবহারকারী কিছু ভাঙ্গবে না এমন সম্ভাব্য হুড বাড়িয়ে তোলে। এমন একাধিক পদ্ধতি রয়েছে যা হাজারবার ফোন করা হলে একটি ওয়েবসারভার ক্র্যাশ করতে পারে। আপনি চান না যে আপনার গ্রাহকরা এপিআই এ সক্ষম হবেন। বিমূর্ততা কেবল একটি সম্মেলনের চেয়ে বেশি।
মরগান হের্লোকার

4

আমি পরামর্শ দেব যে পটভূমির জন্য, আপনি শ্রেণি আক্রমণকারীদের সম্পর্কে পড়ে শুরু করুন ।

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

আসুন একটি খুব সাধারণ সি # উদাহরণ ব্যবহার করুন:

public class EmailAlert
{
    private readonly List<string> addresses = new List<string>();

    public void AddRecipient(string address)
    {
        if (!string.IsNullOrEmpty(address))
            addresses.Add(address);
    }

    public void Send(string message)
    {
        foreach (string address in addresses)
            SendTo(address, message);
    }

    // Details of SendTo not shown
}

এখানে কি হচ্ছে?

  • সদস্য addressesশ্রেণি নির্মাণ শুরু হয়।
  • এটি ব্যক্তিগত, তাই বাইরে থেকে কিছুই এটি স্পর্শ করতে পারে না।
  • আমরা এটিও তৈরি করেছি readonly, সুতরাং নির্মাণের পরে অভ্যন্তর থেকে কিছুই এটি স্পর্শ করতে পারে না (এটি সর্বদা সঠিক / প্রয়োজনীয় নয়, তবে এটি এখানে দরকারী)।
  • সুতরাং, Sendপদ্ধতিটি এমন একটি ধারণা তৈরি করতে পারে addressesযা কখনই হবে না null। এটি চেক করতে হবে না কারণ মান পরিবর্তন করার কোনও উপায় নেই

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

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

এই অন্যান্য প্রশ্নের:

এটি কোনও শ্রেণীর গোপনীয় অবস্থা আক্রমণ থেকে বাঁচানোর জন্য ব্যবহার করা যেতে পারে?

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

প্রতিবিম্ব এই পদ্ধতিটি ওভাররাইড করতে পারে?

অবশ্যই পারে। তবে প্রতিবিম্বের জন্য কলিং কোডটির সেই বিশেষাধিকার / বিশ্বাসের স্তর থাকা দরকার। আপনি যদি পুরো বিশ্বাস এবং / অথবা প্রশাসনিক সুযোগ-সুবিধার সাথে দূষিত কোড চালাচ্ছেন তবে আপনি ইতিমধ্যে সেই যুদ্ধটি হেরে গেছেন।

সংকলকটির জন্য তথ্য গোপনের প্রয়োগ কার্যকর করা কী উপকারী হবে?

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


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

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

3

তথ্য গোপন করা কেবল একটি সম্মেলনের চেয়ে অনেক বেশি; এটি ঘুরে দেখার চেষ্টা আসলে অনেক ক্ষেত্রে ক্লাসের কার্যকারিতাটি ভেঙে দিতে পারে। উদাহরণস্বরূপ, কোনও privateভেরিয়েবলের মধ্যে একটি মান সংরক্ষণ করা, একই সময়ের একটি protectedবা publicসম্পত্তি ব্যবহার করে তা প্রকাশ করা এবং গেটরে নালটি পরীক্ষা করে দেখুন এবং প্রয়োজনীয় কোনও সূচনা (যেমন অলস লোডিং) করুন load অথবা কোনও privateভেরিয়েবলে কিছু সঞ্চয় করুন , কোনও সম্পত্তি ব্যবহার করে তা প্রকাশ করুন এবং সেটারে মানটি পরিবর্তন হয়েছে এবং আগুন PropertyChanging/ PropertyChangedইভেন্টগুলি দেখুন কিনা তা পরীক্ষা করে দেখুন । তবে অভ্যন্তরীণ বাস্তবায়ন না দেখে আপনি কখনই জানতেন না যে পর্দার আড়ালে কী চলছে।


3

শীর্ষস্থানীয় নকশার দর্শন থেকে তথ্য আড়ালকরণ বিকশিত হয়েছিল। পাইথনকে নীচের অংশের ভাষা বলা হয়

জাভা, সি ++ এবং সি # তে শ্রেণি পর্যায়ে তথ্য গোপনীয়করণ কার্যকরভাবে প্রয়োগ করা হয়, সুতরাং এটি এই স্তরের কোনও সম্মেলন নয়। জনসাধারণের ইন্টারফেস এবং গোপনীয় (ব্যক্তিগত) বিশদ সহ একটি শ্রেণিকে একটি "ব্ল্যাক বক্স" তৈরি করা খুব সহজ।

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

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

একটি ভাষা যা আনুষ্ঠানিকভাবে অ্যাক্সেসকে সংজ্ঞায়িত করার চেষ্টা করে তা হ'ল আইফেল। এই নিবন্ধটি জাভা হিসাবে ভাষার আরও কিছু তথ্য-আড়ালকরণ দুর্বলতাগুলি নির্দেশ করে।

পটভূমি: ডেভিড পার্নাস একাত্তরে তথ্য গোপনের প্রস্তাব করেছিলেন । তিনি এই নিবন্ধে উল্লেখ করেছেন যে অন্যান্য মডিউল সম্পর্কে তথ্যের ব্যবহার "সিস্টেম কাঠামোর সংযোগ বিপর্যয়করভাবে বাড়িয়ে তুলতে পারে।" এই ধারণা অনুসারে, তথ্য গোপনের অভাবে দৃly়ভাবে সংযোজনযোগ্য সিস্টেমগুলি পরিচালনা করতে পারে যা পরিচালনা করা শক্ত to তিনি এর সাথে চালিয়ে যান:

আমরা প্রোগ্রামার এর তথ্যের ব্যবহারের দ্বারা অজান্তেই না করে প্রোগ্রামিং শুরু হওয়ার আগে ডিজাইনারদের দ্বারা সিস্টেমের কাঠামোটি সুস্পষ্টভাবে নির্ধারণ করতে চাই।


1
"প্রোগ্রামারের তথ্য ব্যবহারের জন্য" এই উক্তিটির জন্য +1, এটি ঠিক (যদিও আপনার শেষে অতিরিক্ত কমা রয়েছে)।
jmoreno

2

রুবি এবং পিএইচপি এটি রয়েছে এবং রানটাইম এ এটি প্রয়োগ করে।

তথ্য গোপন করার বিষয়টি আসলে তথ্য প্রদর্শন করা। অভ্যন্তরীণ বিবরণ "গোপন" করে, উদ্দেশ্যটি বাইরের দৃষ্টিকোণ থেকে স্পষ্ট হয়। ভাষা আছে, যা এই আলিঙ্গন। জাভাতে, অভ্যন্তরীণ প্যাকেজটিতে ডিফল্ট অ্যাক্সেস করুন সুরক্ষিত থেকে হ্যাক্সে। আপনি তাদের প্রকাশ করার জন্য স্পষ্টভাবে তাদের প্রকাশ্যে ঘোষণা করুন।

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

এছাড়াও, রানটাইম এ যখন অ্যাক্সেস মডিফায়ারগুলি প্রয়োগ করা হয়, আপনি নির্দিষ্ট স্তরের সুরক্ষা প্রয়োগের জন্য এগুলি ব্যবহার করতে পারেন, তবে আমি মনে করি এটি বিশেষত ভাল সমাধান নয়।


1
যদি আপনার লাইব্রেরি একই সংস্থায় ব্যবহার করা হচ্ছে যেখানে আপনি কাজ করছেন আপনি যত্ন নেবেন ... যদি তিনি তার অ্যাপটি ক্র্যাশ করে থাকেন তবে আপনাকে এটি ঠিক করতে বেশ কষ্ট হবে।
wleao

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

1
@ সিমন: আপনি যে জিনিসটি ব্যবহার করতে চান না এমন জিনিসগুলির সাথে একটি ইন্টারফেস কেন বিশৃঙ্খলা করবে। আমি ঘৃণা করি যে সি ++ এর জন্য প্রতিটি সদস্যকে একটি শিরোনাম ফাইলে শ্রেণীর সংজ্ঞায় উপস্থিত থাকতে হবে (কেন আমি বুঝতে পারি)। ইন্টারফেসগুলি অন্য লোকের জন্য এবং সেগুলি ব্যবহার করতে পারে না এমন জিনিসগুলিতে লিখিত হওয়া উচিত নয়।
phkahler

1
@ ফকাহেলার: ইন্টারফেস থেকে pydocসরিয়ে দেয় _prefixedMembers। সংকলক দ্বারা পরীক্ষিত কোনও কীওয়ার্ড নির্বাচনের সাথে বিশৃঙ্খল ইন্টারফেসের কোনও সম্পর্ক নেই।
blubb

2

অ্যাকসেস মডিফায়াররা অবশ্যই এমন কিছু করতে পারে যা কনভেনশন করতে পারে না।

উদাহরণস্বরূপ, জাভাতে আপনি ব্যক্তিগত সদস্য / ক্ষেত্র অ্যাক্সেস করতে পারবেন না আপনি যদি না প্রতিফলন ব্যবহার করেন।

তাই যদি আমি কোনও প্লাগইনটির জন্য ইন্টারফেসটি লিখি এবং প্রতিবিম্বের মাধ্যমে ব্যক্তিগত ক্ষেত্রগুলি সংশোধন করার অধিকারকে সঠিকভাবে অস্বীকার করি (এবং সুরক্ষা পরিচালককে সেট করতে :)) তবে আমি কারও দ্বারা প্রয়োগকৃত কার্যগুলিতে কিছু বস্তু প্রেরণ করতে পারি এবং জানতে পারি যে সে এর ব্যক্তিগত ক্ষেত্রগুলিতে অ্যাক্সেস করতে পারে না।

অবশ্যই কিছু সুরক্ষা বাগ থাকতে পারে যা তাকে এ থেকে উত্তরণের অনুমতি দেয় তবে এটি দার্শনিক দিক থেকে গুরুত্বপূর্ণ নয় (তবে বাস্তবে এটি অবশ্যই রয়েছে)।

যদি ব্যবহারকারী তার পরিবেশে আমার ইন্টারফেস চালায় তবে তার নিয়ন্ত্রণ থাকে এবং এভাবে অ্যাক্সেস পরিবর্তনকারীদের বাধা দিতে পারে।


2

আমি এমন পরিস্থিতিতে ছিলাম না যেখানে এই কীওয়ার্ডগুলির কারণে সংকলক ত্রুটি আমাকে একটি ত্রুটি থেকে রক্ষা করতে পারে।

অ্যাপ্লিকেশন লেখককে বাগ থেকে সংরক্ষণ করা এতটা বেশি নয় যে গ্রন্থাগার লেখকরা তাদের প্রয়োগের কোন অংশগুলি বজায় রাখার প্রতিশ্রুতি দিচ্ছেন তা নির্ধারণ করতে দিন।

আমার যদি লাইব্রেরি থাকে

class C {
  public void foo() { ... }

  private void fooHelper() { /* lots of complex code */ }
}

আমি fooএর বাস্তবায়ন প্রতিস্থাপন করতে সক্ষম হতে এবং সম্ভাব্য fooHelperমৌলিক উপায়ে পরিবর্তন করতে চাই। যদি fooHelperআমার দলিলগুলিতে সমস্ত সতর্কতা থাকা সত্ত্বেও যদি একগুচ্ছ লোক ব্যবহার করার সিদ্ধান্ত নিয়েছে তবে আমি এটি করতে সক্ষম হতে পারি না।

privateগ্রন্থাগার লেখকরা privateবছরের পর বছর ধরে এই অভ্যন্তরীণ বিবরণ বজায় রাখতে বাধ্য হবেন এই ভয় ছাড়াই পরিচালনাযোগ্য আকারের পদ্ধতিতে (এবং সহায়ক শ্রেণিতে) লাইব্রেরিগুলি ভাঙ্গতে দেয় ।


সংকলকটির জন্য তথ্য গোপনের প্রয়োগ কার্যকর করা কী উপকারী হবে?

পাশের নোটে, জাভাতে privateসংকলক দ্বারা প্রয়োগ করা হয়নি, তবে জাভা বাইটকোড যাচাইকারী দ্বারা


প্রতিবিম্ব এই পদ্ধতিটি ওভাররাইড করতে পারে? সংকলকটির জন্য তথ্য গোপনের প্রয়োগ কার্যকর করা কী উপকারী হবে?

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

 public class C {
   private int i = 42;

   public class B {
     public void incr() { ++i; }
   }
 }

যেহেতু শ্রেণি B(সত্যই নামযুক্ত C$B) ব্যবহার করে i, সংকলক একটি সিন্থেটিক অ্যাকসেসর পদ্ধতি তৈরি করে যা এমনভাবে Bঅ্যাক্সেস করতে দেয় C.iযা বাইটোকোড ভেরিফায়ার পেরিয়ে যায়। দুর্ভাগ্যক্রমে, যেহেতু ClassLoaderআপনি একটি থেকে একটি ক্লাস তৈরি করতে পারবেন byte[], এটি প্রাইভেটের কাছে পাওয়া মোটামুটি সহজ যা 'প্যাকেজে Cএকটি নতুন ক্লাস তৈরি করে অভ্যন্তরীণ ক্লাসগুলির সংস্পর্শে এসেছে Cযা সম্ভব যদিC এর জারটি সিল না করা হয় ।

যথাযথ privateপ্রয়োগের জন্য শ্রেণি লোডার, বাইটকোড যাচাইকারী এবং সুরক্ষা নীতি যা ব্যক্তিগতকে প্রতিফলিত অ্যাক্সেস প্রতিরোধ করতে পারে এর মধ্যে সমন্বয় প্রয়োজন।


এটি কোনও শ্রেণীর গোপনীয় অবস্থা আক্রমণ থেকে বাঁচানোর জন্য ব্যবহার করা যেতে পারে?

হ্যাঁ. "সুরক্ষিত পচন" সম্ভব যখন প্রোগ্রামাররা তাদের মডিউলগুলির সুরক্ষা বৈশিষ্ট্যগুলি সংরক্ষণ করার সময় সহযোগিতা করতে পারে - আমার মডিউলটির সুরক্ষা বৈশিষ্ট্য লঙ্ঘন না করার জন্য আমাকে অন্য কোড মডিউলটির লেখককে বিশ্বাস করতে হবে না।

জো-ই এর মতো অবজেক্টের সক্ষমতার ভাষাগুলি তথ্য গোপন এবং অন্যান্য উপায়গুলি সুরক্ষিত ক্ষয়কে সম্ভব করার জন্য ব্যবহার করে:

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

সেই পৃষ্ঠা থেকে লিঙ্ক করা কাগজটি privateপ্রয়োগ করে কীভাবে সুরক্ষিত পচা সম্ভব করে তোলে তার একটি উদাহরণ দেয় ।

সুরক্ষিত এনক্যাপসুলেশন সরবরাহ করা।

চিত্র 1. একটি পরিমিত-শুধুমাত্র লগিং সুবিধা।

public final class Log {
  private final StringBuilder content;
  public Log() {
    content = new StringBuilder();
  }
  public void write(String s) {
    content.append(s);
  }
}

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


1

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


1

সুরক্ষা ভাষার একটি অংশ তৈরি করে আপনি কিছু অর্জন করেছেন: যুক্তিসঙ্গত নিশ্চয়তা।

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

সিনথেটিক সুরক্ষা পেতে এখন কী উপায় আছে? একেবারে; বেশিরভাগ ভাষা তাদের আছে them সি ++ এ আপনি সর্বদা ক্লাসটিকে অন্য কোনও প্রকারে ফেলে দিতে পারেন এবং এর বিটগুলিতে ঝুঁকতে পারেন। জাভা এবং সি # তে আপনি নিজেকে এতে প্রতিফলিত করতে পারেন। এবং তাই এগিয়ে।

তবে এটি করা কঠিন । এটা সুস্পষ্ট যে আপনি এমন কিছু করছেন যা আপনার করা উচিত নয়। আপনি দুর্ঘটনাক্রমে এটি করতে পারবেন না (বন্যার বাইরে সি ++ তে লেখেন)। আপনার অবশ্যই স্বেচ্ছায় ভাবতে হবে, "আমি এমন কিছু স্পর্শ করতে যাচ্ছি যা আমাকে আমার সংকলক দ্বারা বলা হয়নি।" আপনাকে স্বেচ্ছায় অযৌক্তিক কিছু করতে হবে

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

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

কোনও এপিআই এর চেয়ে খারাপ আর কিছু নেই যেখানে আপনি যদি ভুল কাজটি করেন তবে সবকিছুই যেভাবে চলতে পারে। এটি ব্যবহারকারীকে মিথ্যা আশ্বাস দেয় যে তারা সঠিক কাজ করেছে, সবকিছু ঠিক আছে ইত্যাদি provides

এবং নতুন ভাষা ব্যবহারকারী কি? তাদের কেবল প্রকৃত বাক্য গঠন (সংকলক দ্বারা প্রয়োগ করা) শিখতে এবং অনুসরণ করতে হবে তা নয়, এখন তাদের অবশ্যই এই সম্মেলনটি অনুসরণ করতে হবে (সর্বোত্তমভাবে তাদের সমকক্ষদের দ্বারা প্রয়োগ করা)। এবং যদি তারা না করে তবে খারাপ কিছু ঘটতে পারে না। যদি কোনও প্রোগ্রামার বুঝতে না পারে কেন কনভেনশনটি বিদ্যমান? যখন সে "এটিকে স্ক্রু" বলে এবং কেবল আপনার ব্যক্তিগতকে দেখায় তখন কী ঘটে? এবং যদি তিনি সবকিছু কাজ চালিয়ে যান তবে তিনি কী ভাবেন?

তিনি মনে করেন যে এই সম্মেলনটি বোকা। এবং সে আর কখনও তা অনুসরণ করবে না। এবং তিনি তার সমস্ত বন্ধুদেরও বিরক্ত করবেন না বলে দেবেন।

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