একটি প্রয়োগকরণের পরিবর্তে একটি ইন্টারফেসে কোডিংয়ের পিছনে মূল বিষয়টি হ'ল বাস্তবায়ন সংক্রান্ত বিশদটি ফাঁস করা এড়ানো যা অন্যথায় আপনার প্রোগ্রামকে বাধা দেয়।
আপনার কোডের মূল সংস্করণটি যেটি ব্যবহার করেছে HashMap
এবং তা প্রকাশ করেছে সেই পরিস্থিতিটি বিবেচনা করুন ।
private HashMap foo = new HashMap();
public HashMap getFoo() { return foo; } // This is bad, don't do this.
এর অর্থ হ'ল যে কোনও পরিবর্তন getFoo()
হ'ল একটি ব্রেকিং এপিআই পরিবর্তন এবং এটি ব্যবহার করে লোককে অসন্তুষ্ট করবে। আপনি যে সমস্ত গ্যারান্টি দিচ্ছেন সেগুলি foo
যদি মানচিত্র হয় তবে পরিবর্তে আপনার এটি ফিরিয়ে দেওয়া উচিত।
private Map foo = new HashMap();
public Map getFoo() { return foo; }
এটি আপনাকে কীভাবে আপনার কোডের অভ্যন্তরে কাজ করে তা পরিবর্তন করার নমনীয়তা দেয়। আপনি বুঝতে পারেন যে foo
আসলে একটি মানচিত্র হওয়া দরকার যা কোনও নির্দিষ্ট ক্রমে জিনিসগুলি ফিরিয়ে দেয়।
private NavigableMap foo = new TreeMap();
public Map getFoo() { return foo; }
private void doBar() { ... foo.lastEntry(); ... }
এবং এটি বাকী কোডটির জন্য কিছু ভঙ্গ করে না।
পরে কোনও কিছু না ভাঙিয়ে ক্লাসটি দেয় চুক্তিটি আপনি পরে শক্ত করতে পারেন।
private NavigableMap foo = new TreeMap();
public NavigableMap getFoo() { return foo; }
private void doBar() { ... foo.lastEntry(); ... }
এটি লিসকোভের প্রতিস্থাপনের নীতিটি আবিষ্কার করে
সাবস্টিটিউটেবিলিটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি নীতি principle এটিতে বলা হয়েছে যে একটি কম্পিউটার প্রোগ্রামে যদি এস টি এর টিউব টাইপ হয়, তবে টাইপ টির জিনিসগুলি এস টাইপের এসের সাথে প্রতিস্থাপন করা যেতে পারে (অর্থাত, এস টাইপের এসের অবজেক্টগুলি টাইপ টি-এর বস্তুর প্রতিস্থাপন করতে পারে) কাঙ্ক্ষিত কোনও পরিবর্তন ছাড়াই সেই প্রোগ্রামের বৈশিষ্ট্য (সঠিকতা, কার্য সম্পাদন, ইত্যাদি)।
যেহেতু নাভিগিয়েবলম্যাপ মানচিত্রের একটি সাব টাইপ, তাই প্রোগ্রামটি পরিবর্তন না করেই এই প্রতিস্থাপনটি করা যেতে পারে।
বাস্তবায়ন প্রকারের বহিঃপ্রকাশটি পরিবর্তন পরিবর্তন করা দরকার হলে প্রোগ্রামটি অভ্যন্তরীণভাবে কীভাবে কাজ করে তা পরিবর্তন করা শক্ত করে তোলে। এটি একটি বেদনাদায়ক প্রক্রিয়া এবং অনেক সময় কুৎসিত ওয়ার্কআরউন্ডস তৈরি করে যা পরে কেবল কোডারে আরও ব্যথার জন্ম দেয় (আমি আপনাকে পূর্ববর্তী কোডারটির দিকে চেয়ে দেখছি যিনি কোনও কারণে কোনও লিঙ্কডহ্যাশম্যাপ এবং একটি ট্রিম্যাপের মধ্যে ডেটা পরিবর্তন করে রেখেছেন - আমার উপর বিশ্বাস করুন, যখনই আমি থাকি এসএনএন-তে আপনার নাম দেখুন আমি উদ্বিগ্ন)।
আপনি এখনও বাস্তবায়ন ধরণের ফাঁস এড়াতে চাইবেন। উদাহরণস্বরূপ, আপনি কিছু পারফরম্যান্স বৈশিষ্ট্যের কারণে বা আপনার আমদানি বিবৃতি বা যা java.util.concurrent.ConcurrentSkipListMap
কিছু java.util.TreeMap
না করে বরং পছন্দ করেন তার পরিবর্তে আপনি কনকন্টারস্কিপলিস্টম্যাপটি প্রয়োগ করতে চাইতে পারেন ।