অভ্যন্তরীণ ভেরিয়েবলগুলি সর্বজনীন এবং অ্যাক্সেসযোগ্য হিসাবে ঘোষিত হলে কি কোনও শব্দ ব্যবহৃত হয়?


10

যদি কেউ কোড লেখেন যাতে অভ্যন্তরীণ ভেরিয়েবল $ _ ক্ষেত্রগুলি গিটার / সেটার পদ্ধতি ব্যবহার না করে অ্যাক্সেসযোগ্য হয়, তবে সেখানে কি এটি বর্ণনা করার জন্য কোনও উপযুক্ত শব্দ ব্যবহৃত হয়?

ম্যানেজমেন্টের সাথে ব্যবহার করার জন্য যথেষ্ট নম্র কিছু :)


9
এনক্যাপসুলেশনের অভাব?
ওডে

@ ওবেদ আমি মনে করি আপনি ঠিক বলেছেন - দুর্বল এনক্যাপসুলেশনের অভাবে এটি ভালভাবে বর্ণনা করেছে
পিটারবি

এই প্রশ্নের উত্তর দেওয়ার চেষ্টা করার সময় আমি যে দুটি বাক্যাংশটি ভেবেছিলাম সেগুলি হ'ল "ফুটো বিমূর্ততা" এবং "আলগা স্কোপিং" - এইগুলির প্রত্যেকটি কী (আমার মাথার বাইরে) বোঝায়?
পিটারবি

1
ফাঁস বিমূর্ততা হ'ল আপনি যখন কোনও ধারণাকে বিমূর্ত করার চেষ্টা করেন তবে এটি সত্যই কার্যকর হয় না - অন্তর্নিহিত ধারণাগুলি এখনও ফাঁস হয়ে যায় (এইচটিপিএল / এইচটিএমএল এর ওআরএমগুলি এবং এইচটিটিপি / এইচটিএমএল এর ওয়েব ফ্রেমওয়ার্কগুলি ফাঁস বিমূর্ততা থাকে)।
ওডে

@ পিটারবি - ওডেদের ব্যাখ্যা যোগ করতে, এটি দেখুন: joelonsoftware.com/articles/LeakyAbstferences.html
জরিস

উত্তর:


30

ব্যক্তিগত বেসরকারী সদস্যদের এক্সপোজ করা ভদ্র সমাজে কখনও ভাল জিনিস হয় না ...

এই অনুশীলনটি হ'ল / দুর্বল এনক্যাপসুলেশনের অভাব।


6
+1, আচ্ছা, আপনি কি অফিসে আপনার প্রাইভেটগুলি পাবেন না ?
স্টুপারউজার

6
-1: এনক্যাপসুলেশন সত্যিই ঘটেছিল এবং ভাল ঘটেছে। তবে এটি সাধারণত গৃহীত উপায়ে সোর্স কোডের মাধ্যমে নথিভুক্ত করা হয়নি । কিছু ভাষার (পাইথনের মতো) সত্যই ব্যক্তিগত ভেরিয়েবলের অভাব রয়েছে, তবুও এনক্যাপসুলেশন অনুশীলন করে।
এস .লট

6
@ ওজেড: এনক্যাপসুলেশন একটি ডিজাইনের ধারণা । বিভিন্ন ভাষার ধারণার বিভিন্ন প্রয়োগ রয়েছে। একটি ব্যক্তিগত ঘোষণার সহ একটি ভাষা একটি প্রয়োগের অনুমতি দেয়। স্টেটলেস অবজেক্টস সহ ফাংশনাল প্রোগ্রামিং ভাষার একটি আলাদা বাস্তবায়ন থাকতে পারে। পাইথন (যার অভাব রয়েছে private) এর এনক্যাপসুলেশন ধারণার আরও একটি বাস্তবায়ন রয়েছে।
এসলট

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

2
@ দ্রিজিম্বোব: পাইথন কোড খুব কমই __নাম ম্যাংলিং ব্যবহার করে । ছাড়া __এটি নকশাটি এখনও ভাল এনক্যাপসুলেশন প্রতিফলিত করে। "জনসাধারণ" অর্থ দাবী করার অর্থ "দুর্বল এনক্যাপসুলেশনের অভাব" বা ভুল। ধারণাটি এখনও বিদ্যমান। উত্স কোড যথাযথ সজ্জা অভাব আছে।
এসলট

10

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



2

একে একটি সম্পত্তি ব্যাগ বলা হয়।

সাধারণত এটি সম্পর্কিত সম্পর্কিত সংস্থাগুলির একটি সেট ধরে রাখতে ব্যবহৃত হয় (প্রতিটি সম্ভবত সম্ভাব্যরূপে কোনও শ্রেণীর অবজেক্ট হতে পারে যার উপযুক্ত অ্যাক্সেস স্পেসিফায়ার রয়েছে বা না)। তবে পার্শ্ববর্তী কাঠামো সম্পত্তিগুলির একটি ব্যাগ মাত্র।


2

একে "নির্দিষ্ট কোডিং মান অনুসরণ না করা" বলা হয়।

ওপি লিখেছেন:

অভ্যন্তরীণ পরিবর্তনশীল $ _ ক্ষেত্রগুলি গিটার / সেটার পদ্ধতিগুলি ব্যবহার না করেই অ্যাক্সেসযোগ্য

এটি আপনার স্ট্যান্ডার্ডের বিপরীতে হতে পারে এবং (এভাবে) এটি কোড গন্ধ হতে পারে। তবে এটি অগত্যা অল্প প্রয়োজনীয় নয় ulation অভ্যন্তরীণ (যেমন "কেবলমাত্র অভ্যন্তরীণ ব্যবহারের মতো") বহিরাগত বিশ্বের গেটর এবং সেটটারগুলির তুলনায় ভেরিয়েবল এক্সপোজ করা আরও খারাপ হতে পারে।

প্রশ্নটি হল: $_fieldsবাইরের বিশ্বের জন্য কি অ্যাক্সেসযোগ্য হওয়া উচিত ?

যদি তা হয় তবে আমাদের কাছে একটি কেস রয়েছে যেখানে আপনি গেটার / সেটার পদ্ধতি যুক্ত করবেন। এই পদ্ধতিগুলি কোনও কিছুকেই আবদ্ধ করে না তবে সত্য যে $_fieldsকোনও ধরণের পরিবর্তনশীল (যেমনটি ফ্লাইতে গণনা করা / আনীত / ইত্যাদির বিপরীতে)। ভাষার উপর নির্ভর করে, আপনি সম্ভবত এখনও প্রকারটি (ওরফে একটি বাস্তবায়ন বিশদ) বাইরে থেকে ফাঁস করবেন। আপনি সর্বদা getters / setters চান কিনা, বা শুধুমাত্র যখন "প্রয়োজন" কোডিং মানক সমস্যা।

তাহলে $_fieldsউচিত নয় অ্যাক্সেস করা, তারপর, ভাল, এটি অ্যাক্সেস করবেন না। আপনার অন্যকে ভাষা স্তরে অ্যাক্সেস করা থেকে বিরত রাখা উচিত (ব্যক্তিগত এবং বন্ধুবান্ধব) বা না (যা কিছু পরিস্থিতিতে ডিবাগ করা সহজ করতে পারে) - তা আবার - একটি কোডিং মানক সমস্যা।

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

আমি খারাপ উপমাগুলির ভক্ত: দরিদ্র এনক্যাপসুলেশনকে কল করা বন্দুকটিকে খুনি বলে ডাকার মতো।



-2

যদি আপনার সেটার / গেটর পদ্ধতিগুলি আর কিছু না থাকে

void setfoo(bar){foo=bar;}
foo getfoo{return foo;}

তারপরে কেবল একটি পাবলিক ভেরিয়েবল তৈরি করা কিছু পার্শ্বের ক্ষেত্রে যেখানে কিছু পার্থক্য রয়েছে তার বাইরে কিছু টাইপিং সংরক্ষণ করা।


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

@ প্লুটর: যদি এটির সমস্ত বস্তু কখনই করবে (উদাহরণস্বরূপ, কারণ এটি অন্য কোনও প্রক্রিয়াতে প্রেরিত বার্তা বা একটি ডাটাবেসে কোনও রেকর্ড উপস্থাপন করে) তবে এটি ঠিক আছে; এগুলি এমন জিনিস যা অত্যন্ত সংরক্ষণ করা উচিত
ডোনাল ফেলো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.