জাভা বিকাশে সাধারণত সি # /। নেট এর চেয়ে বেশি সাবক্লাসিং থাকে?


34

আমি সম্প্রতি অ্যান্ড্রয়েড বিকাশের দিকে তাকাতে শুরু করেছি। এটি আমাকে জাভা সফ্টওয়্যার বিকাশের বিশ্বে ফিরিয়ে এনেছে। শেষবার আমি জাভার সাথে কাজ করার সময়, আমি স্বীকার করব, আমি এখন যতটা করি (আমি মনে করি) ওওপি প্রায় বুঝতে পারি নি।

মূলত আমার কেরিয়ারে সি # ব্যবহার করা, আমি উত্তরাধিকারী জাভা এবং সি # কীভাবে ব্যবহৃত হয় তার মধ্যে একটি চমকপ্রদ পার্থক্য লক্ষ্য করছি।

সি # তে মনে হয়েছিল বেশিরভাগ পরিস্থিতিতে উত্তরাধিকার এড়ানো যেতে পারে। হাতের কাজটি সাধারণত । নেট ফ্রেমওয়ার্কের কংক্রিট ক্লাস ব্যবহার করে সম্পন্ন করা যায় ।

জাভাতে, আমি কোডের নমুনাগুলি থেকে যা সংগ্রহ করছি তা থেকে মনে হচ্ছে জাভা ফ্রেমওয়ার্কটি অনেকগুলি ইন্টারফেস বা বিমূর্ত শ্রেণি সরবরাহ করে যা তখন বিকাশকারী দ্বারা প্রয়োগ / প্রসারিত বোঝানো হয়।

এটি কেবল স্টাইলে সিদ্ধ করতে খুব বড় পার্থক্য বলে মনে হচ্ছে। এর পিছনে যুক্তি কী? আমার মনে হচ্ছে আমি পরিষ্কার জাভা কোডটি লিখব না যতক্ষণ না আমি এটি বুঝতে পারি।

এছাড়াও, এটি কি কেবল অ্যান্ড্রয়েড এসডিকেই সীমাবদ্ধ বা এটি ওওপি-তে জাভা-বিস্তৃত পদ্ধতি?

বা অন্য কোনও উপায়ে,

এই দুটি ভাষার নকশা সম্পর্কে কী বলা যায় (অন্যদের তুলনায় কম-বেশি উত্তরাধিকার ব্যবহারকে উত্সাহিত করে বলে মনে হয়)?

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


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

1
পছন্দ করুন মতামত । জাভা প্রকল্পগুলিতে আমি অংশ নিয়েছি, বিকাশকারীরা প্লেগের মতো উত্তরাধিকার এড়াতে ঝোঁক ছিল। এখানে অনুমোদনের কিছুই নেই, কেবল আমার মতামত । ওয়ানা পোলের ?
gnat

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

1
@ থিংকিংমিডিয়া সাধারণভাবে, জাভা ওএসএস জিলিওট / পিউরিস্টদের চেয়েও বেশি হয়ে যায়। একাডেমিক নীতিগুলি উদ্বিগ্ন উদ্বেগ। । নেট বিকাশকারীরা প্র্যাকম্যাটিস্ট যারা কাজটি করার বিষয়ে উদ্বিগ্ন। এগুলি কাজের কোডটিকে সবচেয়ে পরিষ্কার কোডের চেয়ে বেশি মূল্য দেয়।
অ্যান্ডি

উত্তর:


31

এটি কেবল স্টাইলে সিদ্ধ করতে খুব বড় পার্থক্য বলে মনে হচ্ছে। এর পিছনে যুক্তি কী?

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

উত্তরাধিকারকে উত্সাহিত করতে বা অস্বীকার করার জন্য প্রকৃত ভাষাগুলিতে খুব কমই রয়েছে। কেবল দুটি জিনিসই আমাকে প্রাসঙ্গিক হিসাবে আঘাত করে:

  1. .NET তাদের জীবদ্দশায় জেনেরিকাগুলি প্রবর্তন করেছিল, এর আগে খুব বেশি জেনেরিক কোড প্রয়োগ করা হয়েছিল। বিশেষায়িত জিনিসগুলি টাইপ করার বিকল্পটি হ'ল উত্তরাধিকার।

  2. আরও বড় পরিবর্তনটি ছিল। নেট নেট প্রতিনিধিদের সমর্থন করেছিল। জাভাতে আপনি ভেরিয়েবল কার্যকারিতার সর্বাধিক প্রাথমিক সরবরাহ করতে (বেনামে) উত্তরাধিকারের সাথে আটকে আছেন। প্রতিনিধিদের সুবিধা নেওয়ার জন্য বা জাভাতে এটি করার জন্য প্রয়োজনীয় বিশ্রী উত্তরাধিকার কাঠামো এড়াতে কোড কীভাবে ডিজাইন করা হয়েছে তার তুলনায় এটি একটি তুলনামূলকভাবে বড় পার্থক্যের দিকে পরিচালিত করে।


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

3
.NET 3.5-এ প্রবর্তিত বেনামি প্রকার এবং ল্যাম্বদা সিনট্যাক্স / এক্সপ্রেশন গাছগুলি ভুলবেন না। এবং অবশ্যই নেট নেট 4-এ ডায়নামিক টাইপিং করুন এটি নিঃসন্দেহে এখন মিশ্র-দৃষ্টান্তের ভাষা, কঠোরভাবে বস্তু-ভিত্তিক নয়।
অ্যারোনআউট

হ্যাঁ, আমার অভিজ্ঞতার সাথে উভয়ই ব্যবহার করেছেন (মিশ্র প্রকল্পগুলিতে যেখানে একই লোকেরা উভয় ভাষা ব্যবহার করেন) লোকেরা জাভা কোডিং করার সময় একটি বৃহত সংখ্যক ছোট শ্রেণি ব্যবহার করতে পছন্দ করে, যখন একটি ছোট সংখ্যক বৃহত্তর শ্রেণি ((শ্বরের শ্রেণীর দিকে ঝোঁক) থাকে সি # ব্যবহার করে। উভয় ক্ষেত্রে একই স্টাইল ব্যবহার করে ইচ্ছাকৃতভাবে একই জিনিস প্রোটোটাইপ করে, আপনি একই সংখ্যক ক্লাস দিয়ে শেষ করেন (আংশিক ক্লাস ব্যবহার করে, আপনি সম্ভবত সি # ব্যবহার করার পরেও আরও কোড ফাইলগুলি দিয়ে শেষ করবেন)।
উঠছে

6

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

সি # তে, বেসিক পদ্ধতিটি হল বিভিন্ন ইভেন্টের জন্য পরীক্ষা করা, এমন পদ্ধতি নির্ধারণ করা যা প্রতিটি আকর্ষণীয় ইভেন্টটি ট্রিগার করার সময় কার্যকর হবে। জাভাতে, যার ইভেন্টগুলির অভাব রয়েছে, সাধারণ সমাধানটি হ'ল বিভিন্ন "ইভেন্ট" হ্যান্ডলিং পদ্ধতির সাথে কোনও বিষয়টিকে একটি ইউআইসি নিয়ন্ত্রণ ব্যবস্থাতে পাস করা:

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 জাভাতে উত্তরাধিকারের স্বাচ্ছন্দ্যও নোট করুন যা এটি উত্সাহিত করে। )

আবার, এটি কোনও বিস্তৃত আলোচনা নয়; আমি কেবল এখানে পৃষ্ঠ আঁচড়ানো করছি। তবে হ্যাঁ, জাভা এবং সি # এর মধ্যে উত্তরাধিকার কীভাবে ব্যবহৃত হয় তাতে একটি চমকপ্রদ পার্থক্য রয়েছে। তারা, এই ক্ষেত্রে, খুব ভিন্ন ভাষা। এটা আপনার কল্পনা নয়।


দ্রষ্টব্য: আপনি খালি বাস্তবায়নে পূর্ণ একটি বিমূর্ত শ্রেণি প্রসারিত করে এমন কিছু পদ্ধতি সরবরাহ করা এড়াতে পারেন যা কিছু না করে। এই পদ্ধতিতে আপনি কিছু করে এমন পদ্ধতিগুলি বেছে বেছে ওভাররাইড করতে পারেন। যতটা কুৎসিত নয়, এর অর্থ উত্তরাধিকারের আরও একটি স্তর।
পিটার লরি

-2

জাভা এবং সি # এর মধ্যে যেভাবে উত্তরাধিকার পরিচালনা করা হয় তাতে কোনও পার্থক্য নেই। আপনি যখন উত্তরাধিকার ব্যবহার করবেন বা রচনাটি সংজ্ঞায়িতভাবে একটি ডিজাইনের সিদ্ধান্ত এবং কোনওভাবেই জাভা বা সি # উত্সাহ দেয় বা নিরুৎসাহিত করে something আমি দয়া করে এই নিবন্ধটি পড়ার পরামর্শ দেব

আশা করি আমি সাহায্য করেছি!


5
আপনি নিজেরাই ভাষা নিয়ে কথা বলছেন তবে আমি মনে করি প্রশ্নটি গ্রন্থাগারগুলি এবং সাধারণ ব্যবহার সম্পর্কেও।
সুইভ

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