এগুলি বিশেষত এই অঞ্চলে খুব আলাদা ভাষা। ধরা যাক আপনার একটা ক্লাস আছে। এই ক্ষেত্রে, আমরা এটিকে একটি ব্যবহারকারী নিয়ন্ত্রণ, পাঠ্যবক্সের মতো কিছু করব। একে ইউআইসিএন্ট্রোল বলুন। এখন আমরা এটি অন্য একটি ক্লাসে রাখতে চাই। এই ক্ষেত্রে, যেহেতু আমরা আমাদের উদাহরণের জন্য একটি ইউআই ব্যবহার করছি, আমরা একে ক্লিভারপ্যানেল ক্লাস বলব। আমাদের ক্লিভারপ্যানেল দৃষ্টান্তটি বিভিন্ন কারণে তার ইউআইসিআরন্টোল ইভেন্টে ঘটে যাওয়া জিনিসগুলি সম্পর্কে জানতে চাইবে। এই কিভাবে করবেন?
সি # তে, বেসিক পদ্ধতিটি হল বিভিন্ন ইভেন্টের জন্য পরীক্ষা করা, এমন পদ্ধতি নির্ধারণ করা যা প্রতিটি আকর্ষণীয় ইভেন্টটি ট্রিগার করার সময় কার্যকর হবে। জাভাতে, যার ইভেন্টগুলির অভাব রয়েছে, সাধারণ সমাধানটি হ'ল বিভিন্ন "ইভেন্ট" হ্যান্ডলিং পদ্ধতির সাথে কোনও বিষয়টিকে একটি ইউআইসি নিয়ন্ত্রণ ব্যবস্থাতে পাস করা:
boolean stillNeedIt = ... ;
uiControl.whenSomethingHappens( new DoSomething() {
public void resized( Rectangle r ) { ... }
public boolean canICloseNow() { return !stillNeedIt; }
public void closed() { ... }
...
} );
এখনও অবধি, সি # এবং জাভার মধ্যে পার্থক্য গভীর নয়। তবে, আমাদের কাছে ডসোমিংং ইন্টারফেস রয়েছে যা সি # তে প্রয়োজন হয় না। এছাড়াও, এই ইন্টারফেসে অনেকগুলি পদ্ধতি থাকতে পারে যা বেশিরভাগ সময় প্রয়োজন হয় না। সি # তে, আমরা কেবল সেই ইভেন্টটি পরিচালনা করি না। জাভাতে, আমরা একটি ক্লাস তৈরি করি যা সমস্ত ইন্টারফেস পদ্ধতি, ডসোমিংথিং অ্যাডাপ্টারের জন্য নাল বাস্তবায়ন সরবরাহ করে। এখন আমরা ডসোমথিং অ্যাডাপ্টারের সাথে ডসমিংথিং প্রতিস্থাপন করি এবং পরিষ্কার সংকলনের জন্য আমাদের কোনও পদ্ধতি লেখার দরকার নেই। প্রোগ্রামটি সঠিকভাবে চালিত করার জন্য আমাদের যে পদ্ধতিগুলি প্রয়োজন তা আমরা ওভাররাইড করে শেষ করি। সুতরাং আমরা একটি ইন্টারফেস এবং শেষ প্রয়োজন কি আমরা C # ঘটনা সঙ্গে করেনি মেলে জাভা উত্তরাধিকার ব্যবহার করে।
এটি একটি উদাহরণ, একটি বিস্তৃত আলোচনা নয়, তবে এটি জাভাতে কেন সি # এর বিপরীতে এত উত্তরাধিকার আছে তার মূল বিষয়গুলি দেয়।
এখন, জাভা কেন এইভাবে কাজ করে? নমনীয়তা. যখন অন্য কিছু থেকে সম্পূর্ণ কিছু ক্লিভারপ্যানেলে পাস করা যেতে পারে তখন বস্তুটি স্যামসিংহ্যাপেন্সে চলে গেছে। এটি ক্লিয়ারভার উইন্ডো অবজেক্টকে কোথাও সহায়তা করার জন্য বেশ কয়েকটি ক্লিভারপ্যানেলের উদাহরণগুলি তাদের ইউআইসিএন্ট্রোল-জাতীয় বস্তুগুলিতে প্রেরণ করা উচিত। অথবা ইউআইসিএন্ট্রোল এটির একটির হাতে তুলে দিতে পারে তার উপাদান।
তদতিরিক্ত, অ্যাডাপ্টারের পরিবর্তে কোথাও ডসোমিংথিং বাস্তবায়ন থাকতে পারে যার পিছনে কয়েক হাজার লাইনের কোড রয়েছে। আমরা এটির একটি নতুন উদাহরণ তৈরি করতে পারি এবং এটি পাস করতে পারি। আমাদের একটি পদ্ধতি ওভাররাইডের প্রয়োজন হতে পারে। জাভাতে একটি সাধারণ কৌশলটি এমন একটি পদ্ধতি সহ একটি বৃহত শ্রেণি হ'ল:
public class BigClass implements DoSomething {
...many long methods...
protected int getDiameter() { return 5; }
}
তারপরে ক্লিভারেলপ্যানেলে:
uiControl.whenSomethingHappens( new BigClass() {
@Override
public int getDiameter() { return UIPanel.currentDiameter; }
} );
ওপেন সোর্স জাভা প্ল্যাটফর্ম এগুলি অনেক কিছু করে, যা প্রোগ্রামারদের আরও বেশি করার জন্য চাপ দেয় - উভয়ই কারণ তারা এটিকে উদাহরণ হিসাবে অনুসরণ করে এবং কেবল এটি ব্যবহার করার জন্য। আমি মনে করি যে ভাষার প্রাথমিক নকশাটি সূর্যের কাঠামোর নকশার পিছনে এবং জাভা প্রোগ্রামার যখন প্রযুক্তিগুলি ব্যবহার করছে তখন তার পিছনে রয়েছে কাঠামোটি ব্যবহার না করার ।
জাভাতে ফ্লাইতে ক্লাস তৈরি করা আসল সহজ। বেনামে বা নাম দেওয়া ক্লাসটি কেবল একটি পদ্ধতিতে গভীর কবর দেওয়া কোডের একটি ছোট ব্লকে উল্লেখ করা দরকার। এটি সম্পূর্ণ নতুন বা খুব বড়, বিদ্যমান শ্রেণিতে সামান্য পরিবর্তন করে তৈরি করা যেতে পারে। (এবং বিদ্যমান শ্রেণিটি তার নিজস্ব ফাইলে শীর্ষ স্তরের হতে পারে, বা শীর্ষ স্তরের শ্রেণিতে বাসা বাঁধতে পারে, বা কেবল কোডের একক ব্লকের মধ্যে সংজ্ঞায়িত করা যেতে পারে)। নতুন শ্রেণীর দৃষ্টান্তটিতে সমস্ত তৈরি বস্তুর ডেটাতে সম্পূর্ণ অ্যাক্সেস থাকতে পারে। এবং নতুন উদাহরণটি পাসওয়ার্ড এবং পুরো প্রোগ্রাম জুড়ে ব্যবহার করা যেতে পারে, এটি তৈরি করা অবজেক্টটির প্রতিনিধিত্ব করে।
(একদিকে যেমন, নোট করুন যে এখানে উত্তরাধিকারের একটি বড় ব্যবহার - জাভাতে অন্যান্য জায়গাগুলির মতো - এটি কেবল ডিআরওয়াইয়ের উদ্দেশ্যে classes এটি বিভিন্ন শ্রেণিকে একই কোডটি পুনরায় ব্যবহার করতে দেয় Java জাভাতে উত্তরাধিকারের স্বাচ্ছন্দ্যও নোট করুন যা এটি উত্সাহিত করে। )
আবার, এটি কোনও বিস্তৃত আলোচনা নয়; আমি কেবল এখানে পৃষ্ঠ আঁচড়ানো করছি। তবে হ্যাঁ, জাভা এবং সি # এর মধ্যে উত্তরাধিকার কীভাবে ব্যবহৃত হয় তাতে একটি চমকপ্রদ পার্থক্য রয়েছে। তারা, এই ক্ষেত্রে, খুব ভিন্ন ভাষা। এটা আপনার কল্পনা নয়।