জাভাতে কি কোনও "ব্যক্তিগত সুরক্ষিত" অ্যাক্সেস সংশোধক রয়েছে?


160

আমি কিছু রেফারেন্স দেখেছি জাভাতে একটি অ্যাক্সেস মডিফায়ারকে উল্লেখ করে private protected(উভয় শব্দ একসাথে):

private protected someMethod() {

}

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

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

সম্পাদনা: আমি কীওয়ার্ড সম্পর্কে তথ্য খুঁজছি না protected


60
আপনি যে পৃষ্ঠাটি পেয়েছেন তাতে একটি "সর্বশেষ-সংশোধিত" HTTP শিরোনাম সেট করে: সোম, 26 ফেব্রুয়ারী 1996 18:14:04 GMT!
জি। সেলভি ডেভিস

6
@ জো আমি যখন সম্ভব তখন দু'পক্ষের মতো প্রশ্ন বন্ধ করার পক্ষে, তবে আমি সেখানে সম্মিলিত সংশোধক সম্পর্কে কিছুই দেখতে পাচ্ছি না private protected
jpmc26

2
@ jpmc26 দেখুন "জাভা 1.0 তে একটি অতিরিক্ত অ্যাক্সেস মডিফায়ার ছিল, ব্যক্তিগত সুরক্ষিত।" তবে এখানে উত্তরটি ইতিহাসের আরও ভাল সংক্ষিপ্তসার।
জো

2
@ জো এর উত্তরটিতে প্রকৃতপক্ষে একটি উল্লেখ রয়েছে private protected, তবে এটি কেন বা কী হয়েছে, যা এই প্রশ্নটি সম্পর্কে তা ব্যাখ্যা করে না।
m0skit0

3
ওপ স্কুলে এই শিখছে কি অন্য কেউ ভয়ঙ্কর মনে করে .... ডক্স থেকে সরানোর 20 বছরেরও বেশি সময় পরে? ইতিহাসের আকর্ষণীয় পাঠ, তবে এখনও কিছুটা ভীতিজনক যে জাভা 1 নামকরণের আগে লোকেরা এমন কিছু শিখছিল যা মুছে ফেলা হয়েছিল ...
জাওলিংবাও

উত্তর:


191

অ্যাক্সেস মডিফায়ার অপসারণ

জাভাতে মূলত private protectedমডিফায়ার ছিল, তবে এটি জেডিকে 1.0.2 এ সরানো হয়েছে (প্রথম স্থিতিশীল সংস্করণ, জাভা 1.0 যেখানে আমরা জানি)। জেডিকে ১.০.২ সম্পর্কিত কয়েকটি টিউটোরিয়াল ( এখানে এবং এখানে ) নিম্নলিখিতটি বলে:

দ্রষ্টব্য: জাভা ভাষার 1.0 টি রিলিজ পাঁচটি অ্যাক্সেস স্তরকে সমর্থন করেছে: উপরে বর্ণিত চারটি প্লাস private protectedprivate protectedঅ্যাক্সেস স্তর 1.0 চেয়ে জাভা উচ্চতর সংস্করণ সমর্থিত নয়; আপনার আর এটি আপনার জাভা প্রোগ্রামগুলিতে ব্যবহার করা উচিত নয়।

সফটওয়্যারইজিনিয়ারিং.এসই-তে অন্য একটি উত্তর বলে:

জাভাতে মূলত এমন একটি সংশোধক ছিল। এটি private protectedজাভা 1.0 তে লিখিত ছিল কিন্তু সরানো হয়েছিল।

এখন জাভা সংস্করণ ইতিহাস দেখুন :

জেডিকে 1.0

প্রথম সংস্করণ 23 জানুয়ারী, 1996 এ প্রকাশিত হয়েছিল এবং ওক নামে পরিচিত। প্রথম স্থিতিশীল সংস্করণ, জেডিকে ১.০.২, যাকে জাভা 1 বলে।

এর থেকে, আমরা সংস্করণ 1.0.2 সম্পর্কিত টিউটোরিয়ালগুলি শেষ করতে পারি খুব প্রথম সংস্করণ, জেডিকে 1.0, যেখানে ভাষাটিকে ওক বলা হত, তবে সফটওয়্যারইঞ্জিনিয়ারিং.এসই থেকে পাওয়া একটি প্রথম স্থিতিশীল সংস্করণ, জেডি কে ১.০.২ জাভা বলা হয় 1.0, যেখানে এটি সরানো হয়েছিল।

এখন আপনি যদি জাভা 1.0 ডকুমেন্টেশনে এটি সন্ধান করার চেষ্টা করেন তবে আপনি এটি পাবেন না, কারণ আগেই বলা হয়েছে, এটি জেডিকে 1.0.2 এ সরানো হয়েছে, অন্যথায় জাভা 1.0 হিসাবে পরিচিত। আপনার পোস্ট করা লিঙ্কটির জন্য আপনি "সর্বশেষ পরিবর্তিত" বারটি দেখলে এটি আবার প্রমাণিত হয়। আপনি যে লিংক পোস্ট করা শেষ, 1996 ফেব্রুয়ারিতে জাভা 1.0 / JDK 1.0.2 পরিবর্তন হয় যখন private protectedসরানো হয়ে থাকে, মুক্তি 1996 ফেব্রুয়ারি পর , এবং স্পেসিফিকেশন, 1996 আগস্ট অনুযায়ী।

অপসারণের কারণ

কিছু সূত্র আরো কারণ ব্যাখ্যা private protectedযেমন এই এক। উদ্ধৃতি থেকে:

কী ব্যক্তিগত সুরক্ষিত ছিল?

প্রথমদিকে, জাভা ভাষাতে কিছু সংশোধনকারী সংমিশ্রণের অনুমতি দেওয়া হয়েছিল, যার মধ্যে একটি ছিল private protected। এর অর্থ private protectedহ'ল সাবস্কুলের (এবং প্যাকেজ অ্যাক্সেস সরিয়ে ফেলতে) কঠোরভাবে দৃশ্যমানতা সীমাবদ্ধ করা। এটি পরে কিছুটা বেমানান এবং অত্যধিক জটিল হিসাবে বিবেচিত হয়েছিল এবং এটি আর সমর্থন করে না [[5]

[5] protectedজাভা বিটা 2 রিলিজের পরিবর্তনের অর্থ পরিবর্তিত হয়েছিল এবং private protectedসংমিশ্রণটি একই সাথে উপস্থিত হয়েছিল। তারা কিছু সম্ভাব্য সুরক্ষা গর্ত ঠাঁই করেছে, কিন্তু বহু লোককে বিভ্রান্ত করেছে।

এবং সফ্টওয়্যারইজিনিয়ারিং.এসই এটি সমর্থন করে, এটি বলে যে এটি অসঙ্গতি এবং অতিরিক্ত জটিলতার পক্ষে মূল্যহীন নয়, তাই এটি খুব তাড়াতাড়ি সরানো হয়েছিল।

ব্যাখ্যা

এই সমস্ত বিষয়ে আমার ব্যাখ্যাটি হ'ল সম্ভবত ওকের দিনগুলিতে উভয়কেই সহাবস্থান করার অনুমতি দেওয়া হয়েছিল (সুতরাং সংমিশ্রণে)। যেহেতু protectedএর অর্থ পরিবর্তন করেছে 1 , সেখানে অনুমোদন করার জন্য প্রয়োজন হতে পারে হয়েছে privateএবং protectedএকই সময়ে। পরিচিতিটি খুব জটিল হয়ে উঠল এবং এটির পক্ষে মূল্যহীন ছিল না, এবং শেষ পর্যন্ত ফেলে দেওয়া হয়েছিল। জাভা ০.০ / জেডিকে ১.০.২ ঘূর্ণায়মান অবধি, এটি ফেলে দেওয়া হয়েছিল এবং এভাবে নথিতে পাওয়া যায় না।


1 সালে ওক ভাষা নির্দিষ্টকরণ , বিভাগ 4.10, ভেরিয়েবল এবং পদ্ধতি ব্যবহার , এটা উল্লেখ করা হয়েছে ডিফল্ট পরিবর্তক ছিল protected:

ডিফল্টরূপে একটি শ্রেণীর সমস্ত চলক এবং পদ্ধতি সুরক্ষিত

এটি আমাদের আজকের ডিফল্ট প্যাকেজ অ্যাক্সেসের থেকে বেশ আলাদা different এটি সম্ভবত প্রয়োজনের পথ প্রশস্ত করেছে private protected, কারণ privateখুব সীমাবদ্ধ protectedছিল এবং অত্যধিক আলস্য ছিল।


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

Early on, the Java language allowed for certain combinations of modifiers, এর অর্থ কি কেবল "ব্যক্তিগত সুরক্ষিত" ছাড়াও কিছু ছিল?
জাওলিংবাও

@ কেওলিংবাও অবশ্যই, এক অ্যাক্সেসরটি অ্যাক্সেসারের মতো নয় :) প্রদত্ত লিঙ্কগুলিতে আপনার প্রশ্নটি পরিষ্কার করা উচিত।
m0skit0

52

বিভ্রান্তিকর / অস্পষ্ট গল্প আছে:

একটি, আপনি যে প্রিন্টসন উত্স রেখেছেন তা থেকে এবং এমআইটি সংরক্ষণাগারগুলি থেকেও বলা হয়েছে:

দ্রষ্টব্য: জাভা ভাষার 1.0 টি রিলিজ পাঁচটি অ্যাক্সেস স্তরকে সমর্থন করেছে: উপরে উল্লিখিত চারটি অতিরিক্ত ব্যক্তিগত সুরক্ষিত। প্রাইভেট সুরক্ষিত অ্যাক্সেস স্তরটি 1.0 এর চেয়ে বেশি জাভা সংস্করণগুলিতে সমর্থিত নয়; আপনার আর এটি আপনার জাভা প্রোগ্রামগুলিতে ব্যবহার করা উচিত নয়।

তবে জাভা 1.0 এর জন্য এখানে বা এখানে কোনও অফিসিয়াল ডকুমেন্টেশনে এই বৈশিষ্ট্যটি নির্দিষ্ট করা হয়নি ।

আমার অনুমান যে এই বৈশিষ্ট্যটি অফিসিয়াল 1.0 সংস্করণে স্থান দেয়নি, যেহেতু অফিসিয়াল ভাষার স্পেসিফিকেশন আগস্ট 1996 থেকে এবং প্রিন্সটনের উত্সটি সর্বশেষে ফেব্রুয়ারী 1996 এ পরিবর্তন করা হয়েছিল ।

PS: পুরানো সংস্করণগুলির জন্য সংরক্ষণাগারগুলি সরানোর জন্য ওরাকলকে লজ্জা


তাহলে কি আমার লিঙ্কটি একই সামগ্রীর একটি পুরানো সংস্করণ? : ডি

আপনি যে নোটটি রেখেছিলেন তা অনুপস্থিত তথ্যের সাথে কিছু যুক্ত থাকতে পারে।

@ অ্যান্ড্রুলি কোথাও প্রদত্ত রেফারেন্সগুলিতে স্থিতিশীল হিসাবে বলা হয়নি। এবং প্রকৃত 1.0 আছে যখন এটি 1.0.2 হিসাবে 1.0 হিসাবে উল্লেখ অবশ্যই স্পষ্ট বিভ্রান্তিমূলক।
m0skit0

10

আপনি যে প্রশ্নটিতে প্রস্তাবিত লিঙ্কটি ক্লাসের কোনওটিতে private protectedব্যবহৃত হয়েছিল element/member, আপনি যখন চান subclassযে আপনি উপাদানটিতে অ্যাক্সেস করতে সক্ষম হন তবে এটির অন্যান্য শ্রেণি থেকে এটি লুকিয়ে রাখেন package

Javaযদি তুলনা করা হয় তবে C++এনক্যাপসুলেটিং উপাদানগুলির একটি অতিরিক্ত ধারণা রয়েছে - এবং এটি একটি প্যাকেজ । তোলা যায় বুঝতে হবে কি মধ্যে অথবা একটি প্যাকেজ বাহিরে প্রবেশযোগ্য Javaযখন এটা পছন্দ এই এক্সেস-নির্দিষ্টকরী আসে private, public& protected

দয়া করে মনে রাখবেন যে এটি কেন ব্যবহৃত হয়েছিল তা আমি ব্যাখ্যা করেছি। অবশ্যই বর্তমান সংস্করণে নেই


আমার লিঙ্কটি পদ্ধতি অ্যাক্সেসের জন্য। সদস্য অ্যাক্সেস না।

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

ঠিক আছে, তবে টিউটোরিয়ালটি (আকর্ষণীয়ভাবে) ভেরিয়েবলগুলিতে ব্যক্তিগত সুরক্ষিত উল্লেখ করা হয়নি mention

1
আপনি সঠিক ! এখানে: cs.princeton.edu/courses/archive/spr96/cs333/ java

0

না, আপনি উভয় ব্যবহার করতে পারবেন না privateএকটি protectedএকসঙ্গে। আপনার টিউটোরিয়ালটি আজব is আপনার কাছে যা আছে তাই তাকে প্যাকেজটি ব্যক্তিগত বা ওটি re রেফারেন্সে প্যাকেজ সুরক্ষিত অ্যাক্সেস বলা হয়। এটি কোনও ডিফল্ট অ্যাক্সেস যা সক্ষম হয় যখন কোনও acc6 কোয়ালিফায়ার স্পষ্টভাবে লেখা হয় না।


3
আমি সচেতন ছিলাম আপনি এটি ব্যবহার করতে পারবেন না। আমি এর কী হয়েছে তা জানতে চাই, যা অন্য উত্তরগুলি আরও ভালভাবে ব্যাখ্যা করে।

4
ঠিক আছে, লিঙ্কটি
১৯৯

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

6
@AlexR আপনার বানান ভুল লাইনচ্যুত আসলে একটি শ্লেষ (ট্রেন) হয়। এই মাত্র লক্ষ্য করা হল. : ডি

1
@ মার্কইইসরি, বিস্তারিত। ফোন ব্যবহার করে লেখাটি এসও-তে উত্তর পোস্ট করার সর্বোত্তম উপায় নয়।
অ্যালেক্সআর

-2

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

নির্বিঘ্নে আপনি যদি প্যাকেজের বাইরে আপনার পরিবর্তনশীল / পদ্ধতিগুলি অ্যাক্সেস করতে চান তবে আপনাকে সুরক্ষিত / পাবলিক হিসাবে নির্ধারণ করতে হবে অন্যথায় ব্যক্তিগত বা অন্য কোনও অ্যাক্সেস স্পেসিফায়ার।

সুরক্ষিত পদ্ধতিগুলি সাধারণত বাইরের প্যাকেজ থেকে এবং উপ-শ্রেণীর মধ্যে অ্যাক্সেসযোগ্য হয়, অর্থাত্ কোনও শ্রেণিকে সুরক্ষিত সংজ্ঞায়িত পদ্ধতিগুলি অর্জন করতে স্ব স্ব শ্রেণিকে প্রসারিত করতে হয়।

ব্যক্তিগত পদ্ধতি / ভেরিয়েবলগুলির ক্লাসের মধ্যে সুযোগ রয়েছে y তারা ক্লাসের বাইরে প্রবেশযোগ্য নয়।

অতএব আপনি একই সময়ে ব্যক্তিগত সুরক্ষিত সংজ্ঞা দিতে পারবেন না!


এটি প্রশ্নের উত্তর দেয়নি। আমি জিজ্ঞাসা করেছি কেন এটি কাজ করে না। অন্যান্য উত্তরগুলি প্রশ্নের উত্তর দেওয়ার জন্য আরও ভাল কাজ করে।

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