আমি এমন পরিস্থিতিতে ছিলাম না যেখানে এই কীওয়ার্ডগুলির কারণে সংকলক ত্রুটি আমাকে একটি ত্রুটি থেকে রক্ষা করতে পারে।
অ্যাপ্লিকেশন লেখককে বাগ থেকে সংরক্ষণ করা এতটা বেশি নয় যে গ্রন্থাগার লেখকরা তাদের প্রয়োগের কোন অংশগুলি বজায় রাখার প্রতিশ্রুতি দিচ্ছেন তা নির্ধারণ করতে দিন।
আমার যদি লাইব্রেরি থাকে
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
শ্রেণীর পরিদর্শন প্রয়োজন , এবং অন্য কোনও কোডের পর্যালোচনা প্রয়োজন হয় না। ফলস্বরূপ, এই সম্পত্তি যাচাই করার জন্য লগিং কোড সম্পর্কে কেবল স্থানীয় যুক্তি প্রয়োজন।