জাভা কেন সি ++ এর মতো শিরোনাম ব্যবহারের অনুমতি দেয় না


18

আমার একটি প্রশ্ন রয়েছে যে আমার প্রয়োজনীয়তা পূরণ করে না এমন নিম্নলিখিত উত্তর ব্যতীত আমি কোনও উত্তর পাই না:

"কারণ জেমস গোসলিং চাননি"

আমি জানি যে জাভাতে ইন্টারফেস থাকতে পারে (কেবল খাঁটি ভার্চুয়াল ফাংশন, কোনও বৈশিষ্ট্য নেই) তবে শ্রেণি সংজ্ঞা হিসাবে এটি ঠিক একই জিনিস নয়।


14
তুমি তাদের চাওয়ার কারণ কী?


6
আমি মনে করি বেশিরভাগ সি ++ বিকাশকারীরা 40 বছরের পুরানো পাঠ্য প্রতিস্থাপন ইঞ্জিনটি প্রতি সিপিপি ফাইলের জন্য কয়েকশ 'কেএলওসি সদৃশ করে, C ++' দীর্ঘ সংকলনের সময়কে সরিয়ে ফেলতে পছন্দ করবেন। আসলে সি ++ 11 এর জন্য একটি উপযুক্ত মডিউল সিস্টেম বিবেচনা করা হয়েছিল, তবে সময় অভাবের কারণে বাদ পড়েছে। আমি মনে করি এটি আবার আসবে, যদিও।
sbi

আমি মনে করি এটি আবার আসবে, যদিও। আসলে ডাব্লুজি 21 (আইএসও সি ++ ওয়ার্কিং গ্রুপ) কেবলমাত্র "মডিউল" ধারণাটি আরও মূল্যায়ন / বিকাশের লক্ষ্যে একটি স্টাডি গ্রুপ রয়েছে: এসজি 2 "মডিউলগুলি"। খুব খারাপ এটির বর্তমান অবস্থা সুপ্ত
সর্বোচ্চ ট্রুক্সা

উত্তর:


46

নিম্নলিখিত উত্তরগুলি যা আমার প্রয়োজনীয়তাগুলি পূরণ করে না: "কারণ জেমস গোসলিং চাইতেন না।"

যদিও এটি সঠিক উত্তর। ভাষা নকশা দল (গোসলিং, শেরিডান, নটন, পরে বিল জয়, কেন আর্নল্ড ইত্যাদি) সিদ্ধান্ত নিয়েছে যে শিরোনামগুলি তাদের সমস্যার সমাধানের চেয়ে আরও বেশি সমস্যা তৈরি করেছে । সুতরাং তারা এগুলি ডিজাইন করে দেখিয়েছে যে তারা তাদের প্রয়োজন ছাড়াই নিখুঁতভাবে কার্যকর ভাষা তৈরি করতে পারে।

জাভা ভাষা পরিবেশ শ্বেত পত্রের বিভাগের ২.২.১ থেকে :

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

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


6
আপনার জবাবের জন্য ধন্যবাদ, তারপরে, শিরোনামগুলি এর কারণেই আরও সমস্যার সৃষ্টি করেছে: রিলান্ডান্ট সংজ্ঞা, ফাইলগুলি সিঙ্কে রাখা, বিরোধী সংজ্ঞা, লুকানো সংজ্ঞা। এ কারণেই কি এর অনুমতি দেওয়া হয়নি?
এটিয়েন নোল

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

5
এটি পুরোপুরি ব্যবহারযোগ্য নয়। কোড পরিবর্তনের পরে কোন ফাইলগুলি পুনরায় সংযুক্ত করতে হবে তা জাভা বিল্ড সিস্টেমগুলি নির্ধারণ করতে অক্ষম। কোনও আইডিই নির্ধারণ করবে যে কোন ফাইলগুলিতে একটি কোড পরিবর্তন দরকার, তবে কোনটির পুনঃসংশোধনের প্রয়োজন নেই। যদি কোনও পদ্ধতিতে স্বাক্ষর পরিবর্তিত হয় তবে পরিবর্তনটি পুরানো স্বাক্ষরের সাথে কোডের সাথে সামঞ্জস্যপূর্ণ (উদাহরণস্বরূপ ফ্লোট থেকে ডাবল রূপে একটি যুক্তির ধরণ পরিবর্তন করা), মেথডনটফাউন্ডএক্সসেপশন প্রতিরোধের জন্য একটি পরিষ্কার বিল্ড প্রয়োজন build
কেভিন cline

1
@ কেভিন: তবে সাধারণত খুব বেশি ব্যয় না করে সবকিছু পুনর্নির্মাণ করা সম্ভব। সি ++ (তবে পৃথিবীর প্রায় প্রতিটি সংকলিত ভাষার মতো) জাভা আপনার আঞ্চলিক সংকলনটি আপনার বিকাশের কার্যপ্রবাহের খুব উপযুক্ত উপযোগীকরণটি সংকলন করতে খুব বেশি সময় নেয় না।
ডোনাল ফেলো

1
@ ডোনাল: এটি সত্য যে জাভা খুব দ্রুত সংকলন করে, তবে আমার পুরো পুনঃনির্মাণ করা উচিত কিনা তা অনুমান করা আমি ঘৃণা করি। বিল্ডগুলি কেবল প্রতিবারই কাজ করা উচিত ।
কেভিন

16

শ্রেণি সংজ্ঞা এবং পৃথক ফাইলে ঘোষণার জন্য সি ++ তে আসল প্রয়োজন নেই। এটির অর্থ হ'ল আপনি কমপক্ষে সি দিনগুলিতে কোডের একক শীর্ষ-নীচে স্ক্যান করতে পার্স করতে পারবেন। এলোমেলো অ্যাক্সেস স্টোরেজ ছাড়াই মেশিনে এটি ছিল বড় ব্যাপার!

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

একটি সি ++ পরিবেশ তৈরি করার চেষ্টা করা হয়েছে যেখানে সমস্ত ডাটাবেস ধরণের কাঠামোতে সংরক্ষণ করা হয়েছিল এবং কোনও ফাইল নেই তবে এটি কার্যকর হয়নি।


আমি এটি জানি, তবে কমপক্ষে আপনি এটি সি ++ এ জাভাতে নয়; এটাই ছিল আমার মূল তদন্ত। উত্তরের জন্য ধন্যবাদ.
এটিয়েন নোল

14

কারণ DRY নীতি। জাভাতে, প্যাকেজে ক্লাসগুলি ব্যবহার করার জন্য প্রয়োজনীয় তথ্য (বা শ্রেণি) .ক্লাস ফাইলের মধ্যে রয়েছে। একই তথ্যযুক্ত পৃথক শিরোনাম ফাইল তৈরি করা এটি দুটি জায়গায় পুনরাবৃত্তি জড়িত involve


দুর্ভাগ্যক্রমে, আপনি প্রায়শই এটি পুনরাবৃত্তি করতে চান - ডাব্লুএসডিএল ফাইল, আইডিএল ফাইল ইত্যাদির কথা চিন্তা করুন One সি ++ শিরোনাম হ'ল (দুর্বল) ইন্টারফেস সংজ্ঞা।
gbjbaanb

6

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

সেখানে হয় তবে এর জন্য সি ++ ঘোষণা এবং সংজ্ঞা আলাদা করে দেওয়ার একটি প্রয়োজন নেই,। আপনি যদি প্রয়োগটি শিরোনামে রাখেন, এবং যদি শিরোনামের ফাইলটি পরিবর্তন হয় তবে এর সাথে সংযুক্ত কোডটি পুনরায় সংযুক্ত করা দরকার। যেখানে সংজ্ঞাটি আলাদা ফাইলে রয়েছে সেখানে কোডটি কেবল পুনরায় সংযুক্ত হওয়া দরকার।

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

জাভার পরিস্থিতি খুব আলাদা। প্রতিটি ক্লাসের ফাইল .class ফাইল দিয়ে সংকলিত হয়। প্রকৃতপক্ষে, কলার ক্লাস ফাংশন সংকলনের প্রয়োজনীয়তা যা .class ফাইলের শিরোনাম বিভাগ হিসাবে পরিবেশন করা হয়। তবে জাভাতে চূড়ান্ত লিঙ্কিং কেবলমাত্র রানটাইম (ভার্চুয়াল মেশিন) এর ভিতরে সম্পন্ন করা হয় কেবল ক্লাস ফাইলের বাইট কোডের স্পেসিফিকেশন দিয়ে।

দেখুন এই এবং এই


4

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


1

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

এছাড়াও, সংকলক এবং বিল্ড সিস্টেমগুলি একাধিকবার পার্সিং এড়াতে প্রাকম্পম্পাইল্ড শিরোনামগুলি ক্যাশে করতে পারে।


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