কেন জাভা ক্লাসের বাইরে ফাংশন সংজ্ঞা উপস্থিত হতে দেয় না?


22

জাভাতে সি ++ এর বিপরীতে, আমরা ক্লাসে ক্লাসের বাইরে সংজ্ঞা এবং সংজ্ঞাতে কেবল ফাংশন ঘোষণা করতে পারি না। এটা এমন কেন?

জাভাতে একটি একক ফাইলের মধ্যে কেবল একটি শ্রেণি থাকা উচিত এবং অন্য কিছুই থাকতে হবে না তা জোর দেওয়ার জন্য?


2
জাভা অভ্যন্তরীণ ক্লাস এবং নেস্টেড ক্লাসগুলিকে অনুমতি দেয়: ডকস.অরাকল. com / জাভাজেট / টিউটোরিয়াল / জাভা / জাভাও / ইনারক্ল্যাশস এইচটিএমএল ডকস.অরাকল. com / জাভাসে / টিউটোরিয়াল / জাভা / জাভাও / নেস্টেড এইচটিএমএল এবং বেনামী ক্লাসগুলি: সিএসআরটি .edu / ~ tmh / কোর্স / allJava / Anonymous.html
FrustratedWithFormsDesigner

1
সংজ্ঞা দ্বারা আপনি কি অর্থ, বা পদ্ধতি স্বাক্ষর দ্বারা আলা শিরোনাম ফাইলগুলি বোঝায়?
ডেকো

আপনার প্রশ্নের একটি ভাল ব্যঙ্গাত্মক উত্তর: স্টিভ-yegge.blogspot.com/2006/03/…
ব্র্যান্ডন

উত্তর:


33

সি ++ এবং জাভা এর মধ্যে পার্থক্য ভাষাগুলি তাদের সংযোগের ক্ষুদ্রতম একক হিসাবে বিবেচনা করে।

যেহেতু সি সমাবেশের সাথে সহাবস্থান করার জন্য ডিজাইন করা হয়েছিল, সেই ইউনিটটি একটি ঠিকানা দ্বারা ডাকা সাবরোটাইন। (এই অন্যান্য ভাষায় সত্য যে এই ধরনের ফোরট্রান হিসাবে। নেটিভ অবজেক্ট ফাইলগুলি, কম্পাইল) অন্য কথায়, একটি বস্তুর একটি ফাংশন ফাইল foo()প্রতীক থাকবে নামক _fooকিছুই কিন্তু এই ধরনের হিসাবে একটি ঠিকানায় সমাধান হবে0xdeadbeefসংযোগের সময়। এটাই তো আছে। যদি ফাংশনটি আর্গুমেন্টগুলি গ্রহণ করা হয়, তবে ফাংশনটির ঠিকানা কল করার আগে ফাংশনটি যা প্রত্যাশা করে তার সবকিছুই যথাযথ। সাধারণত, এটি স্ট্যাকের উপর জিনিসগুলি পাইল করে করা হয়, এবং সংকলক গ্রান্ট কাজের যত্ন নেয় এবং প্রোটোটাইপগুলি মেলে তা নিশ্চিত করে। অবজেক্ট ফাইলগুলির মধ্যে এটির কোনও পরীক্ষণ নেই; যদি আপনি কল লিঙ্কেজটি বুদ্ধিমান করেন তবে কলটি পরিকল্পনা অনুযায়ী বন্ধ হবে না এবং আপনি এটি সম্পর্কে কোনও সতর্কতা পেতে যাচ্ছেন না। বিপদ সত্ত্বেও, একাধিক ভাষা (এসেম্বলিসহ) থেকে সংকলিত অবজেক্ট ফাইলগুলিকে প্রচুর গোলমাল ছাড়াই একটি কার্যকারী প্রোগ্রামে একত্রে সংযুক্ত করা সম্ভব করে তোলে।

সি ++, এর অতিরিক্ত সমস্ত কৌতূহল থাকা সত্ত্বেও একইভাবে কাজ করে। সংকলক জুতার নামগুলির স্থান, শ্রেণি এবং পদ্ধতি / সদস্য / ইত্যাদি। এই কনভেনশনে ক্লাসের বিষয়বস্তুগুলিকে একক নামগুলিতে সমতল করে যা এটিকে অনন্য করে তোলে mang উদাহরণস্বরূপ, কোনও পদ্ধতির কোনও ফাইল এবং রানটাইমের সময় ঠিকানার মতো রাখার মতো কোনও পদ্ধতিতে Foo::bar(int baz)ম্যাঙ্গেল হয়ে যেতে পারে । এটি সম্পূর্ণরূপে সংকলকের উপর নির্ভরশীল, সুতরাং আপনি যদি দুটি ম্যাচিংয়ের বিভিন্ন মংলিংয়ের স্কিমগুলি যুক্ত করার চেষ্টা করেন তবে আপনি ভাগ্যের বাইরে চলে যাবেন। কুৎসিত যেমনটি হয়, এর অর্থ আপনি ম্যাংলিং অক্ষম করতে একটি ব্লক ব্যবহার করতে পারেন , অন্য ভাষাতে সি ++ কোড সহজেই অ্যাক্সেসযোগ্য করে তোলে। সি ++ সি থেকে মুক্ত-ভাসমান ক্রিয়াকলাপগুলির ধারণাটি উত্তরাধিকার সূত্রে পেয়েছে, মূলত কারণ নেটিভ অবজেক্ট ফর্ম্যাট এটির অনুমতি দেয়।_ZN4Foo4barEi0xBADCAFEextern "C"

জাভা হ'ল একটি পৃথক জন্তু যা তার নিজস্ব বস্তু ফাইল ফর্ম্যাট, ফাইল সহ একটি উত্তাপ বিশ্বে বাস করে .class। ক্লাস ফাইলগুলিতে তাদের বিষয়বস্তু সম্পর্কে প্রচুর পরিমাণে তথ্য থাকে যা রানটাইম সময়ে পরিবেশকে ক্লাসগুলির সাথে এমন জিনিসগুলি করতে দেয় যা নেটিভ লিঙ্কেজ প্রক্রিয়াটি স্বপ্নও ভাবতে পারেনি। সেই তথ্যটি কোথাও শুরু করতে হবে, এবং সেই সূচনা পয়েন্টটিclass। উপলভ্য তথ্য সংকলিত কোডটিকে সোর্স কোডে বর্ণিত পৃথক ফাইলের প্রয়োজন ছাড়াই নিজের বর্ণনা করতে দেয় যেমন আপনার সি, সি ++ বা অন্যান্য ভাষায় থাকতে পারে। এটি আপনাকে রান টাইমে এমনকি দেশীয় সংযোগের অভাব ব্যবহার করে সমস্ত প্রকারের সুরক্ষা উপকারের ভাষা দেয় এবং এটিই আপনাকে প্রতিচ্ছবি ব্যবহার করে একটি ফাইলের স্বেচ্ছাসেবী শ্রেণিতে মাছ ধরতে সক্ষম করে এবং যদি কিছু মেলে না তবে গ্যারান্টিযুক্ত ব্যর্থতায় এটি ব্যবহার করে ables ।

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

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


লিঙ্কটি ভাঙা হয়েছে, ওয়েব সংরক্ষণাগারটির লিঙ্কটি পান
noɥʇʎԀʎzɐɹƆ

14

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

আমার জন্য একটি দ্রুত গুগল অনুসন্ধান জাভা ভাষার নকশা প্রেরণাগুলিতে তেমন ফল দেয়নি।


6
আদিম ধরণের অস্তিত্ব জাভাটিকে "খাঁটি ওওপি" হতে বাদ দেয় না?
রাদু মুর্জিয়া

5
@ সোবালান: হ্যাঁ, এবং ক্রিয়াকলাপগুলি যুক্ত করা এটিকে আরও কম "খাঁটি ওওপি" করে তুলবে।
জর্জিও

8
@ সোবালান আপনার "খাঁটি ওওপি" সংজ্ঞাটির উপর নির্ভর করে। কোনও এক মুহুর্তে সমস্ত কিছু হ'ল কম্পিউটার স্মৃতিতে বিটের সংমিশ্রণ ...
জেগে উঠছে

3
@ জওয়েন্টিং: আচ্ছা, প্রোগ্রামিং ভাষাগুলিতে বিমূর্তির উদ্দেশ্য হ'ল যথাসম্ভব অন্তর্নিহিত বিটগুলি আড়াল করা। আপনার প্রোগ্রামে আপনি এই বিটগুলি যত বেশি দেখতে পাচ্ছেন, আপনার ভাবনাটি আরও শুরু করা উচিত যে আপনার প্রোগ্রামিং ভাষাটি ফাঁস বিমূর্ততা সরবরাহ করে (যদি না এটি উদ্দেশ্যটির সাথে ধাতুর নিকটে নির্মিত না হয়)) সুতরাং, হ্যাঁ, বিটগুলি ম্যানিপুলেট করার জন্য সমস্ত কিছু ফোটে, তবে বিভিন্ন ভাষা বিভিন্ন স্তরের বিমূর্ততা সরবরাহ করে, অন্যথায় আপনি সমাবেশকে একটি উচ্চ-স্তরের ভাষা থেকে আলাদা করতে সক্ষম হবেন না।
জর্জিও

2
"খাঁটি ওওপি" আপনার সংজ্ঞার উপর নির্ভর করে: প্রতিটি ডেটা মান হ'ল একটি অবজেক্ট এবং প্রতিটি ডেটা অপারেশন হ'ল বার্তাটি পাস করার মাধ্যমে প্রাপ্ত ফলাফল পদ্ধতির অনুরোধ। যতদূর আমি জানি এটির আর কিছুই নেই।
জর্জিও

11

আসল প্রশ্নটি হল সি ++ উপায়ে কাজগুলি চালিয়ে যাওয়ার যোগ্যতা কী হবে এবং শিরোলেখ ফাইলটির মূল উদ্দেশ্যটি কী ছিল? সংক্ষিপ্ত উত্তরটি হ'ল হেডার ফাইল স্টাইলটি বড় প্রকল্পগুলিতে দ্রুত সংকলনের জন্য মঞ্জুরি দেয় যেখানে অনেক শ্রেণি সম্ভবত একই ধরণের রেফারেন্স করতে পারে। সংকলকগুলির প্রকৃতির কারণে এটি জাভা এবং .NET- এ প্রয়োজনীয় নয়।

এই উত্তরটি এখানে দেখুন: শিরোনামের ফাইলগুলি কি আসলেই ভাল?


1
+1, যদিও আমি আসলে শুনেছি লোকেদের তারা পাবলিক ইন্টারফেস এবং ব্যক্তিগত প্রয়োগের মধ্যে পৃথকীকরণ থাকতে পছন্দ করে যা হেডার ফাইলগুলি সরবরাহ করে files এই লোকেরা অবশ্যই ভুল। ;)
ওয়াঘানড্রয়েড

6
@ বাউকেটা জাভাতে আপনি এটি অর্জন করতে পারেন interfaceএবং class:) শিরোনামের প্রয়োজন নেই!
আন্দ্রেস এফ।

1
একটি সাধারণ শ্রেণীর উদাহরণটি কীভাবে কাজ করে তা বুঝতে আমি 3+ ফাইলের সন্ধান করার আকাঙ্ক্ষা কখনই বুঝতে পারি না।
এরিক রিপেন

@ এরিকাপ্পেন সাধারণতঃ ইন্টারফেস (বা সিতে শিরোনামের ফাইল) হ'ল গ্রাহকরা তাদের সমাধানগুলি লিখতে পাঠযোগ্য আকারে পান, বাকীগুলি কেবল বাইনারি আকারে সরবরাহ করা হয় (অবশ্যই জাভাতে, উত্স সরবরাহ করার প্রয়োজন নেই) ইন্টারফেসের, শ্রেণিবদ্ধ এবং জাভাদোক করবে)।
w

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

3

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

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

যদি বাইরের-শ্রেণীর পদ্ধতির অনুমতি দেওয়া হয়, তবে সম্ভবত এটির শ্রেণীর যেটির ফাইলটি এটি ঘোষিত হয়েছিল তার কোনও বিশেষ অ্যাক্সেস নেই, সুতরাং এটি কোনও ইউটিলিটি ফাংশনে সীমাবদ্ধ করে যা কোনও ডেটা পরিবর্তন করে না।

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

প্রকৃতপক্ষে, জাভা আমদানি করার প্রক্রিয়াটি কাজ করার জন্য এই বিধিনিষেধের প্রয়োজন। সমস্ত এপিআই-এর উপলব্ধ সঙ্গে, জাভা সংকলকটি ঠিক কী সংকলন করতে হবে এবং কোনটির বিরুদ্ধে সংকলন করতে হবে তা সঠিকভাবে জানতে হবে, এইভাবে ফাইলের শীর্ষে সুস্পষ্ট আমদানি বিবৃতি। আপনার গ্লোবালগুলিকে একটি কৃত্রিম শ্রেণিতে গ্রুপ না করে আপনি জাভা সংকলককে কীভাবে আপনার ক্লাসপথের কোনও এবং সমস্ত গ্লোবাল নয় আপনার গ্লোবালগুলি সংকলন করতে বলবেন ? আপনার যেখানে ডস স্টাফ () এবং অন্য কারও কাছে ডস স্টাফ () রয়েছে সেখানে নেমস্পেস সংঘর্ষের বিষয়ে কী বলা যায়? এটি কাজ করবে না। আপনাকে MyClass.doStuff () এবং YourClass.doStuff () নির্দিষ্ট করতে বাধ্য করছে এই সমস্যাগুলি সমাধান করে। আপনার পদ্ধতিগুলি বাইরের পরিবর্তে মাইক্লাসের ভিতরে যেতে বাধ্য করা কেবল এই বিধিনিষেধকে স্পষ্ট করে এবং আপনার কোডে অতিরিক্ত বিধিনিষেধ আরোপ করে না।

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


3

আমি মনে করি যারা উত্তর দিয়েছেন এবং তাদের ভোটাররা বেশিরভাগই প্রশ্নটি ভুল বুঝেছেন। এটি প্রতিফলিত করে যে তারা সি ++ জানে না।

"সংজ্ঞা" এবং "ঘোষণা" সি ++ এর খুব নির্দিষ্ট অর্থ সহ শব্দ very

ওপি মানে জাভা কাজ করার পদ্ধতি পরিবর্তন করা নয়। এটি সিনট্যাক্স সম্পর্কে বিশুদ্ধভাবে একটি প্রশ্ন। আমি মনে করি এটি একটি বৈধ প্রশ্ন।

সি ++ তে সদস্য ফাংশন সংজ্ঞায়নের দুটি উপায় রয়েছে are

প্রথম উপায় জাভা উপায়। ধনুর্বন্ধনী ভিতরে কেবল সমস্ত কোড লিখুন:

class Box {
public:
    // definition of member function
    void change(int newInt) { 
        this._m = newInt;
    }
private:
    int _m
}

দ্বিতীয় উপায়:

class Box {
public:  
    // declaration of member function
    void change(int newInt); 
private:
    int _m
}

// definition of member function
// this can be in the same file as the declaration
void Box::change(int newInt) {
    this._m = newInt;
}

উভয় প্রোগ্রাম একই। ফাংশনটি changeএখনও সদস্য ফাংশন: এটি শ্রেণীর বাইরে নেই। এছাড়াও শ্রেণীর সংজ্ঞাটিতে জাভা এর মতো সমস্ত সদস্য ফাংশন এবং ভেরিয়েবলের নাম এবং প্রকার অন্তর্ভুক্ত থাকতে হবে।

জোনাথন হেনসন ঠিক বলেছেন যে এটি হেডারের সি ++ তে যেভাবে কাজ করে তার একটি নিদর্শন: এটি আপনাকে শিরোনামের ফাইলে ঘোষণা এবং পৃথক .cpp ফাইলে প্রয়োগের অনুমতি দেয় যাতে আপনার প্রোগ্রামটি ওডিআর (ওয়ান ডেফিনিশন রুল) লঙ্ঘন করে না। তবে এর বাইরে এটির যোগ্যতা রয়েছে: এটি আপনাকে এক নজরে একটি বৃহত শ্রেণির ইন্টারফেস দেখতে দেয়।

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


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

আমি প্যাকেজটিকে (বা নেমস্পেস, বা বাইরের শ্রেণি) নামের অংশ হিসাবে বিবেচনা করি।
এরিক ভ্যান ভেলজেন

2

আমি মনে করি এটি ক্লাস লোডিং প্রক্রিয়াটির একটি নিদর্শন। প্রতিটি বর্গ ফাইল লোডযোগ্য বস্তুর জন্য একটি ধারক। ক্লাস ফাইলগুলির "বাইরের" কোনও স্থান নেই।


1
আমি দেখতে পাচ্ছি না কেন আলাদা ইউনিটগুলিতে উত্স কোড সংগঠিত করা ক্লাস ফাইলের ফর্ম্যাটটিকে যেমন রাখে তেমন প্রতিরোধ করবে।
মাদুর

ক্লাস ফাইল এবং উত্স ফাইলগুলির মধ্যে একটি 1: 1 চিঠিপত্র রয়েছে যা সামগ্রিক সিস্টেমে সবচেয়ে ভাল ডিজাইনের সিদ্ধান্তগুলির মধ্যে একটি।
dyer

@ ডিডিয়ার আপনি কি কখনও ফু $ 2 $ 1 ক্লাস দেখেন নি? ( জাভা অভ্যন্তরীণ শ্রেণীর ফাইলের নামগুলি দেখুন )

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

0

আংশিক পদ্ধতি একচেটিয়াভাবে ব্যতীত সি #, যা জাভা এর সাথে খুব সমান, আংশিক পদ্ধতি ব্যবহারের মাধ্যমে এই ধরণের বৈশিষ্ট্য রয়েছে।

আংশিক পদ্ধতি: http://msdn.microsoft.com/en-us/library/6b0scde8.aspx

আংশিক ক্লাস এবং পদ্ধতি: http://msdn.microsoft.com/en-us/library/wa80x488.aspx

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

সি # এর বেশিরভাগ কোড জেনারেশন সরঞ্জামগুলি আংশিক ক্লাস তৈরি করে যাতে বিকাশকারী সহজেই ক্লাসে ম্যানুয়ালি লিখিত কোডটি ক্লাসে যুক্ত করতে পারেন, যদি ইচ্ছা হয় if


0

সি ++ এর জন্য শ্রেণীর পুরো পাঠ্যটি প্রতিটি সংকলনের ইউনিটের অংশ হিসাবে সংকলন করা উচিত যা এর সদস্যদের ব্যবহার করে বা কোনও দৃষ্টান্ত তৈরি করে। সংকলনের সময়গুলি বোধগম্য রাখার একমাত্র উপায় হ'ল ক্লাসের পাঠ্যটি নিজেই থাকতে পারে - যতটা সম্ভব সম্ভব - কেবলমাত্র সেগুলি যা কেবলমাত্র তার গ্রাহকদের জন্য প্রয়োজনীয়। C ++ পদ্ধতিগুলি প্রায়শই ক্লাসগুলির বাইরে লেখা থাকে যা সেগুলি ধারণ করে, এটি সত্যই দ্বারা অনুপ্রাণিত হয় যে ক্লাসটি ব্যবহৃত হয় এমন প্রতিটি সংকলনের ইউনিটের জন্য একবার প্রতি ক্লাস পদ্ধতির পাঠ্য প্রক্রিয়া করার প্রয়োজন হয় যেখানে ক্লাসটি সম্পূর্ণ ব্যবহৃত হত totally উন্মাদ বিল্ড সময়।

জাভাতে, সংকলিত ক্লাস ফাইলগুলিতে অন্যান্য জিনিসগুলির মধ্যে রয়েছে এমন তথ্য যা মূলত সি ++ .h ফাইলের সমতুল্য। ক্লাসের গ্রাহকরা। জাভা ফাইলটি সংকলক প্রসেস না করে file ফাইল থেকে তাদের প্রয়োজনীয় সমস্ত তথ্য বের করতে পারবেন। সি ++ এর বিপরীতে, যেখানে .h ফাইলে তথ্য রয়েছে যা এতে উপস্থিত ক্লাসগুলির বাস্তবায়ন এবং ক্লায়েন্ট উভয়ের জন্য উপলব্ধ করা হয়েছে, জাভা প্রবাহটি বিপরীত: ক্লায়েন্টরা যে ফাইলটি ব্যবহার করে সেগুলি সংকলনে ব্যবহৃত উত্স ফাইল নয় ক্লাস কোড, তবে পরিবর্তে ক্লাস কোড ফাইলের তথ্য ব্যবহার করে সংকলক দ্বারা উত্পাদিত হয়। যেহেতু ক্লায়েন্ট কোডটি কোনও তথ্য ক্লায়েন্টদের প্রয়োজনীয় ফাইল এবং প্রয়োগকারী ফাইলের মধ্যে ভাগ করার দরকার নেই, তাই জাভা এই জাতীয় বিভাজনের জন্য অনুমতি দেয় না।


-1

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

জাভাস্ক্রিপ্টের সাথে তুলনা করুন যেখানে দ্বৈত-উদ্দেশ্যযুক্ত বিশেষ্য / ক্রিয়া প্রথম-শ্রেণীর ফাংশন বৃষ্টি হয় এবং একটি ফাঁকা-খোলা পিনাতা থেকে ক্যান্ডির মতো পাস হয়ে যায়, শ্রেণি-সমতুল্য ফাংশন নির্মাতার কাছে তার প্রোটোটাইপ পরিবর্তন করে নতুন বৈশিষ্ট্য যুক্ত করতে বা পুরানোগুলির উদাহরণ পরিবর্তন করতে পারে ইতিমধ্যে যে কোনও সময় তৈরি করা হয়েছে, একেবারে কিছুই আপনার নিজের সংস্করণের সাথে কোনও নির্মাণ প্রতিস্থাপন করা থেকে বিরত রাখে না, এখানে 5 ধরণের মত রয়েছে এবং তারা বিভিন্ন পরিস্থিতিতে স্বতঃ-রূপান্তর এবং স্বয়ংক্রিয় মূল্যায়ন করে এবং আপনি নতুন বৈশিষ্ট্যকে যেকোনও নিকটে সংযুক্ত করতে পারেন:

function nounAndVerb(){
}
nounAndVerb.newProperty = 'egads!';

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

দিনের শেষে যদিও, এগুলি উভয়ই সাধারণ সাধারণ ব্যবহারের ভাষা তাই সেখানে কিছুটা দার্শনিক যুক্তি রয়েছে। জাভা এবং সি # এর সাথে আমার সবচেয়ে বড় ব্যক্তিগত গরুর মাংসটি হ'ল আমি কোনও উত্তরাধিকার কোডবেজ কখনও দেখিনি বা কাজ করি নি যেখানে বেশিরভাগ ডেভস মনে হয় বেসিক ওওপির মান বুঝতে পেরেছে। আপনি যখন ক্লাসে সমস্ত কিছু মুড়িয়ে দেওয়ার গেমটিতে আসেন, তখন সম্ভবত অনুমান করা সহজ যে আপনি 3-5 লাইন ক্লাসের বিশাল চেইন হিসাবে ছদ্মবেশে ফাংশন স্প্যাগেটির চেয়ে ওওপি করছেন।

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

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