কেন জাভা এবং সি # তে স্থির প্রধান পদ্ধতিটি কনস্ট্রাক্টরের চেয়ে?


54

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


পটভূমি এবং আমার পূর্ববর্তী গবেষণার বিশদ

এটি আগে জিজ্ঞাসা করা হয়েছে। দুর্ভাগ্যক্রমে, বিদ্যমান উত্তরগুলি কেবল প্রশ্নটি করছে । বিশেষত, নীচের উত্তরগুলি আমাকে সন্তুষ্ট করে না, কারণ আমি সেগুলি ভুল বলে মনে করি:

  • কনস্ট্রাক্টর ওভারলোড হয়ে গেলে অস্পষ্টতা হবে। - প্রকৃতপক্ষে, সি # (পাশাপাশি সি এবং সি ++) Mainএকই সম্ভাব্য অস্পষ্টতা বিদ্যমান থাকার জন্য বিভিন্ন স্বাক্ষরগুলির অনুমতি দেয় এবং এর সাথে মোকাবিলা করা হয়।
  • একটি staticপদ্ধতি মানে কোনও বস্তুর তত্ক্ষণাত্করণ করা যাবে না তাই প্রাথমিককরণের ক্রম পরিষ্কার is - এই মাত্র মোটামুটি ভুল, কিছু বস্তু হয় (একটি স্ট্যাটিক কন্সট্রাকটর মধ্যে যেমন) আগের instantiated।
  • সুতরাং প্যারেন্ট অবজেক্টটি তাত্ক্ষণিক না করেই রানটাইম দ্বারা তাদের ডাকা যেতে পারে। - এটা কোন উত্তর নেই।

আমি কেন এটি একটি বৈধ এবং আকর্ষণীয় প্রশ্ন মনে করি তা আরও ন্যায়সঙ্গত করার জন্য:

  • অনেক অবকাঠামো না ক্লাস ব্যবহার এন্ট্রি পয়েন্ট হিসাবে অ্যাপ্লিকেশন, এবং কন্সট্রাকটর প্রতিনিধিত্ব করতে। উদাহরণস্বরূপ, ভিবি.এনইটি অ্যাপ্লিকেশন কাঠামোটি এন্ট্রি পয়েন্ট 1 হিসাবে একটি উত্সর্গীকৃত মূল ডায়ালগ (এবং এর নির্মাতা) ব্যবহার করে ।

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

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

আমি প্রাথমিক বা গৌণ উত্স থেকে একটি নির্দিষ্ট উত্তর দিতে আগ্রহী, নিছক অনুমান নয়।


1 যদিও এখানে একটি কলব্যাক ( Startup) রয়েছে যা এতে বাধা দিতে পারে।


4
@mjfgates এছাড়াও, আমি এটা পরিষ্কার যে এই হল করেছেন প্রত্যাশিত ছিল না শুধু "মানুষ কেন এটা উপায় আমি চাই না", এবং যে আমি সত্যি সত্যি কারণে আগ্রহী নই।
কনরাড রুডলফ

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

5
@ জারোদ আপনি অন্যায় আমি ভেবেছিলাম যে আমি এটিকে কোনও স্পষ্ট করে বললাম না nt "গঠনমূলক নয়"? তা কেমন করে? আমি স্পষ্টভাবে রেফারেন্স চাইছি, কেবল বন্য আলোচনা নয়। এটি অবশ্যই একটি মজাদার প্রশ্ন যে আপনি দ্বিমত করতে নিঃসন্দেহে মুক্ত । তবে যদি এই ধরণের প্রশ্নগুলি এখানে ওটি হয় তবে আমি প্রোগ্রামার্স.এসই কী উদ্দেশ্যে কাজ করে তা দেখতে সত্যিই ব্যর্থ।
কনরাড রুডলফ

2
প্রাসঙ্গিক মেটা আলোচনা
ইয়ানিস

3
প্রশ্ন: এটি যদি কোনও অ্যাপ্লিকেশন অবজেক্ট হয় তবে আপনার দুটি জিনিসের দরকার নেই। 1) একটি নির্মাণকারী। 2) আপনার অ্যাপ্লিকেশন চালানোর জন্য অবজেক্টের একটি পদ্ধতি। অবজেক্টটি বৈধ হওয়ার জন্য এবং এভাবে রান-সক্ষম হওয়ার জন্য কনস্ট্রাক্টরকে অবশ্যই সম্পূর্ণ করতে হবে।
মার্টিন ইয়র্ক

উত্তর:


38

টি এল; ডিআর

জাভা সালে কারণে public static void main(String[] args)যে

  1. গোসলিং চেয়েছিল
  2. সি তে অভিজ্ঞ কারও দ্বারা লিখিত কোড (জাভাতে নয়)
  3. চলমান করার জন্য ব্যবহৃত কেউ নিষ্পন্ন করা হবে পোস্টস্ক্রিপ্ট উপর খবর

http://i.stack.imgur.com/qcmzP.png

 
সি # এর জন্য, যুক্তিটি ট্রান্সজিটিভলি অনুরূপ তাই বলার জন্য। ভাষা ডিজাইনাররা জাভা থেকে আগত প্রোগ্রামারদের জন্য প্রোগ্রামের এন্ট্রি পয়েন্ট সিনট্যাক্সকে পরিচিত রাখে । সি # স্থপতি আন্ডার হেজলসবার্গ যেমন লিখেছেন ,

... সি # এর সাথে আমাদের দৃষ্টিভঙ্গিটি কেবল জাভা প্রোগ্রামারদের একটি বিকল্প প্রস্তাব দেওয়া ছিল ...

 

দীর্ঘ সংস্করণ

উপরে বিস্তৃত এবং বিরক্তিকর উল্লেখ সহ ব্যাক আপ।

 

জাভা টার্মিনেটর হস্ত লা ভিস্তা বেবি!

ভিএম স্পেস, ২.১17.১ ভার্চুয়াল মেশিন স্টার্ট-আপ

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

java Terminator Hasta la vista Baby!

একটি জাভা ভার্চুয়াল মেশিনটি ক্লাসের মেইন মেথড Terminator(একটি নামবিহীন প্যাকেজের একটি শ্রেণি) এবং চারটি স্ট্রিং "হস্ত", "লা", "ভিস্তা" এবং "বেবি!" সহ একটি অ্যারে পাস করে এটি চালু করবে ...

... আরও দেখুন: পরিশিষ্ট: আমার আপনার জামাকাপড়, আপনার জুতো এবং আপনার মোটরসাইকেলের দরকার

  • আমার ব্যাখ্যা:
    কমান্ড লাইন ইন্টারফেসে সাধারণ স্ক্রিপ্টগুলির মতো ব্যবহারের জন্য লক্ষ্য নির্বাহ করা execution

 

গুরুত্বপূর্ণ দিক

... এটি আমাদের তদন্তে কয়েকটি মিথ্যা চিহ্ন এড়াতে সহায়তা করে।

ভিএম স্পেক, 1.2 জাভা ভার্চুয়াল মেশিন

জাভা ভার্চুয়াল মেশিন জাভা প্রোগ্রামিং ভাষার কিছুই জানে না ...

পূর্বের অধ্যায়টি অধ্যয়ন করার সময় আমি উপরে লক্ষ্য করেছি - 1.1 ইতিহাস যা আমি ভেবেছিলাম সহায়ক হতে পারে (তবে অকেজো হয়ে গেছে)।

  • আমার ব্যাখ্যা:
    মৃত্যুদন্ডটি কেবলমাত্র ভিএম স্পেক দ্বারা পরিচালিত হয়, যা
    স্পষ্টভাবে ঘোষণা করে যে এর জাভা ভাষার সাথে কোনও সম্পর্ক নেই
    => ঠিক আছে জেএলএস এবং জাভা ভাষার সাথে সম্পর্কিত যে কোনও বিষয় উপেক্ষা করা

 

গোসলিং: সি এবং স্ক্রিপ্টিং ভাষার মধ্যে একটি আপস ...

উপরের ভিত্তিতে, আমি জেভিএম ইতিহাসের জন্য ওয়েবে অনুসন্ধান শুরু করেছি । সাহায্য করেনি, ফলাফলগুলিতে খুব বেশি আবর্জনা রয়েছে।

তারপরে, আমি গোসলিং সম্পর্কে কিংবদন্তিগুলি স্মরণ করেছি এবং গোসলিং জেভিএম ইতিহাসে আমার অনুসন্ধানকে সংকীর্ণ করেছি ।

ইউরেকা! জেভিএম স্পেসটি কীভাবে এসেছিল

জেভিএম ল্যাঙ্গুয়েজস সামিট ২০০৮-এর এই মূল বক্তব্যে, জেমস গোসলিং ... জাভার সৃষ্টি, ... সি এবং স্ক্রিপ্টিং ভাষার মধ্যে একটি আপস ...

  • আমার ব্যাখ্যা:
    সুস্পষ্ট ঘোষণা যে সৃষ্টির মুহুর্তে,
    সি এবং স্ক্রিপ্টিং সবচেয়ে গুরুত্বপূর্ণ প্রভাব হিসাবে বিবেচিত হয়েছে।
     
    ইতিমধ্যে VM- র ফটকা খেলা 2.17.1 মধ্যে স্ক্রিপ্টিং অনুমোদন দেখা,
    কমান্ড লাইন আর্গুমেন্ট পর্যাপ্ত ব্যাখ্যা String[] args
    কিন্তু staticএবং mainআরও খনন প্রয়োজন এখনো আছে, ...

এটি টাইপ করার সময় নোট করুন - এর জাভা-এর সাথে সি, স্ক্রিপ্টিং এবং ভিএম স্পেক 1.2 সংযুক্ত করে - আমার মনে হচ্ছে কিছু পরিচিত, কিছু ... অবজেক্ট ওরিয়েন্টেড ধীরে ধীরে চলে যাচ্ছে। আমার হাত ধরুন এবং মুভিন রাখুন 'আমরা এখন প্রায় সেখানে আস্তে আস্তে না

মূল স্লাইডগুলি অনলাইনে উপলব্ধ: 20_Gosling_keynote.pdf , মূল পয়েন্টগুলি অনুলিপি করার জন্য বেশ সুবিধাজনক।

    পৃষ্ঠা 3

        জাভা প্রাগৈতিহাসিক
        * কি আমার চিন্তাভাবনা রুপান্তরিত

    পৃষ্ঠা 9

        খবর
        * নেটওয়ার্কযুক্ত এক্সটেনসিবল উইন্ডো সিস্টেম
        স্ক্রিপ্টিং উপর ভিত্তি করে একটি উইন্ডো সিস্টেম ....
          পোস্টস্ক্রিপ্ট (!!)

    পৃষ্ঠা 16

        একটি বড় (তবে শান্ত) লক্ষ্য:
          আমি কত কাছাকাছি যেতে পারে
          "স্ক্রিপ্টিং" অনুভূতি ...

    পৃষ্ঠা 19

        মূল ধারণা
        * বিল্ডিং সম্পর্কে ছিল
          জিনিসের নেটওয়ার্ক,
          একটি স্ক্রিপ্টিং দ্বারা অর্কেস্টার্ড
          ভাষা
        * (ইউনিক্স শেল, অ্যাপলস্ক্রিপ্ট, ...)

    পৃষ্ঠা 20

        ভেড়া পোশাক একটি নেকড়ে
        ডেভেলপারদের তৈরি করতে সি সিট্যাক্স
          আরামপ্রদ

এ-হা! আসুন সি সিনট্যাক্সের কাছাকাছি তাকান ।

"হ্যালো, ওয়ার্ল্ড" উদাহরণ ...

main()
{
    printf("hello, world\n");
}

... প্রধান নামের একটি ফাংশন সংজ্ঞায়িত করা হচ্ছে। প্রধান ফাংশন সি প্রোগ্রাম একটি বিশেষ উদ্দেশ্য করে তোলে; রান-টাইম এনভায়রনমেন্ট প্রোগ্রামটি কার্যকর করা শুরু করার জন্য মূল ফাংশনটিকে কল করে।

... মূল ফাংশনে আসলে দুটি আর্গুমেন্ট রয়েছে int argcএবং char *argv[]যথাক্রমে যা কমান্ড লাইন আর্গুমেন্টগুলি পরিচালনা করতে ব্যবহার করা যেতে পারে ...

আমরা কি কাছাকাছি আসছি? আপনি বাজি ধরুন। উপরের উদ্ধৃতি থেকে এটি "মূল" লিঙ্কটি অনুসরণ করার মতো:

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

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

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

 

উপসংহার

উপরের ভিত্তিতে আমি এটি বলব static, mainএবং String[] argsজাভা এবং সি # তৈরির মুহুর্তে প্রোগ্রামের প্রবেশের স্থানটি সংজ্ঞায়িত করার জন্য সবচেয়ে যুক্তিসঙ্গত পছন্দ ছিল ।

 

পরিশিষ্ট: আমার আপনার জামাকাপড়, আপনার জুতো এবং আপনার মোটরসাইকেলের দরকার

স্বীকার করতে হবে, ভিএম স্পেস ২.১17.১ পড়াটা ছিল মজাদার।

... কমান্ড লাইন

java Terminator Hasta la vista Baby!

একটি জাভা ভার্চুয়াল মেশিনটি ক্লাসের মেইন মেথড Terminator(একটি নামবিহীন প্যাকেজের একটি শ্রেণি) এবং এটি "হস্ত", "লা", "ভিস্তা" এবং "বেবি!" চারটি স্ট্রিং যুক্ত একটি অ্যারে পাস করে শুরু করবে।

ভার্চুয়াল মেশিনটি কার্যকর করতে যে পদক্ষেপগুলি গ্রহণ করতে পারে Terminatorসেগুলির রূপরেখাটি আমরা এখন পরবর্তী অংশে আরও বর্ণিত লোডিং, লিঙ্কিং এবং প্রারম্ভিককরণের প্রক্রিয়াগুলির রূপরেখা হিসাবে রূপরেখা করি ।

প্রাথমিক প্রয়াস ... আবিষ্কার করে যে ক্লাস Terminatorলোড করা হয়নি ...

Terminatorলোড হওয়ার পরে , মূলটি চালিত হওয়ার আগে এটি আরম্ভ করাতে হবে এবং প্রারম্ভিক হওয়ার আগে কোনও ধরণের (শ্রেণি বা ইন্টারফেস) সর্বদা সংযুক্ত থাকতে হবে। লিঙ্কিংয়ের (§2.17.3) যাচাইকরণ, প্রস্তুতি এবং (allyচ্ছিকভাবে) রেজোলিউশন জড়িত ...

যাচাইকরণ (§2.17.3) পরীক্ষা করে যে লোড হওয়া উপস্থাপনাটি Terminatorভাল গঠন করেছে ...

রেজোলিউশন (.12.17.3) ক্লাস থেকে প্রতীকী রেফারেন্সগুলি পরীক্ষা করার প্রক্রিয়া Terminator...

 
Terminatorওহ থেকে প্রতীকী রেফারেন্স ।


2
কিছু কারণে "আধুনিকতা" একটি আসল শব্দ ছিল এই বিশ্বাস করতে আমার বেশ কষ্ট হয়েছিল।
সোমু

@ সঙ্গোর উত্তরের গল্পটিও সিনেমার মতো। এটি প্রথমে মেটাতে পোস্ট করা হয়েছিল , প্রশ্ন সমাপ্তির আলোচনায়: "যদি প্রশ্নটি আবার খোলা হত তবে আমি সম্ভবত নীচের মতো উত্তর লিখতাম ..." তারপরে এটি পুনরায় খোলার আবেদনটি ব্যাক আপ করার জন্য ব্যবহৃত হয়েছিল এবং শেষ পর্যন্ত এখানে সরিয়ে নেওয়া হয়েছিল
gnat

16

এটি আমার কাছে অস্পষ্টভাবে আপত্তিজনক বলে মনে হচ্ছে। কোনও অবজেক্টের সূচনা করার জন্য একটি কনস্ট্রাক্টর ব্যবহার করা হয়: এটি একটি অবজেক্ট সেট আপ করে, এটি তারপরে তৈরি করা কোড দ্বারা ব্যবহৃত হয়।

আপনি যদি কনস্ট্রাক্টরের অভ্যন্তরে মৌলিক ব্যবহারের কার্যকারিতা রাখেন এবং তারপরে বাহ্যিক কোডে কনস্ট্রাক্টর যে বস্তুটি তৈরি করে তা আসলে কখনও ব্যবহার না করে তবে আপনি ওওপির নীতিগুলি লঙ্ঘন করছেন। মূলত, আপাত কোনও কারণ ছাড়াই সত্যই অদ্ভুত কিছু করা।

আপনি যেভাবেই তা করতে চান?


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

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

9

জাভার জন্য আমি যুক্তিটি সহজ বলে মনে করব: জাভা বিকাশের সময়, ডেভসরা জানত যে ভাষা শেখার বেশিরভাগ লোক সি / সি ++ আগে জানত।

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

আমি দৃ sure়ভাবে নিশ্চিত যে আমি ব্লচকে স্মরণ করেছি বা কেউ এই লাইন ধরে কিছু বলছে কেন তারা অক্টাল পূর্ণসংখ্যার আক্ষরিক যোগ করেছে, আমি দেখতে পাচ্ছি যদি আমি কিছু উত্স খুঁজে পেতে পারি তবে :)


2
যদি সি ++ এর মতো দেখতে জাভাটির জন্য এতটা গুরুত্বপূর্ণ ছিল তবে তারা উদাহরণস্বরূপ কেন এ পরিবর্তিত :হল extends? এবং public static void main(String [ ] args)ক্লাসের ভিতরে ক্লাসের int main(int argc, char **argv)বাইরের চেয়ে বেশ আলাদা ।
সুইভ

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

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

@ মিশেলটি কিন্তু সেগুলি হ'ল ডিজাইনের সিদ্ধান্ত যা জাভা সি ++ থেকে আলাদা করে তোলে। তবে জাভাটিকে সি ++ এর মতোই কেন রাখা উচিত main(), যখন অন্য ক্ষেত্রে এটি দৃশ্যত যথেষ্ট গুরুত্বপূর্ণ ছিল না।
সুইভ

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

6

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

এই ধারণাটি সম্পর্কে অনেক মজার জিনিস রয়েছে। আপনার যুক্তি একটি অনাগত অবজেক্টের শীর্ষে চলছে, এমন বস্তু যা মরতে জন্মেছিল (যেহেতু তারা নির্মাতারা তাদের সমস্ত কাজ করে), ...

এই সমস্ত পার্শ্ব প্রতিক্রিয়াগুলি কি সাধারণ জনগণের চেয়ে ওও ওয়াগনকে আরও অনেক বেশি দূষিত করবে না (কারণ এটি কোনও অজানা দ্বারা অ্যাক্সেস করা দরকার) স্থির (কারণ আমাদের শুরু করার জন্য কোনও উদাহরণ প্রয়োজন নেই) শূন্য মূল (কারণ এটি এন্ট্রি পয়েন্ট) )?

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

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


1
আমি বলব যে সমস্যাটি প্রথম শ্রেণির ফাংশনগুলি হচ্ছিল না। কোনও বস্তুর অভ্যন্তরে মূল () স্টিক করা (যা মূল বলার আগে তাত্ক্ষণিকভাবে শুরু হয় না) কিছুটা অ্যান্টি-প্যাটার্ন। হতে পারে তাদের একটি "অ্যাপ্লিকেশন" অবজেক্ট থাকা উচিত যা নির্মাণ হয়ে যায় এবং এটির অ স্থিতিশীল মূল () পদ্ধতিটি চালায়, তারপরে আপনি কনস্ট্রাক্টারে স্টার্টআপ আরম্ভ করতে পারেন এবং এটি স্ট্যাটিক পদ্ধতিগুলির চেয়ে অনেক বেশি ভাল বোধ করবে যদিও একটি সরল শীর্ষস্থানীয়- = স্তর প্রধান () fn ভাল হবে। স্ট্যাটিক মেইন সব মিলিয়ে কিছুটা ক্লেজ।
gbjbaanb

3

আপনি main()যে শ্রেণীর পরীক্ষার চেষ্টা করছেন তার ক্লাসে স্টিক রেখে আপনি বিকাশের সময় কোনও ক্লাসে দ্রুত কয়েকটি স্ট্যান্ডেলোন পরীক্ষা চালাতে পারেন ।


1
আমার কাছে এটি সম্ভবত সবচেয়ে আকর্ষণীয় কারণ, কারণ এটি বিভিন্ন কনফিগারেশন ইত্যাদি পরীক্ষার জন্য বিকাশের সময় একাধিক এন্ট্রি পয়েন্টগুলিও মঞ্জুরি দেয়
cgull

0

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

মূলত কেআইএসএসের একটি অ্যাপ্লিকেশন।

[এবং, অবশ্যই মূল কারণ: কেন নয়?]


3
আমি যেমন বলেছি, আমি মোটেই নিশ্চিত নই। অবজেক্টস না সামনে instantiated পেতে, এবং কোড সামনে মৃত্যুদন্ড কার্যকর হয়। এটির কারণ বলে আমাকে বোঝাতে এটির মূল বিকাশকারীদের একজনের একটি উক্তি প্রয়োজন।
কনরাড রুডলফ

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

কোনও ব্যবহারকারীর অবজেক্ট তৈরি করার দরকার নেই। অবজেক্ট কনস্ট্রাক্টর এক্সিকিউট হয় না। এপিআই স্পষ্টতই সহজ। এবং এটি বোঝা সহজ।
ড্যানিয়েল আর হিক্স

0

আমার বোঝার পক্ষে প্রাথমিক কারণটি সহজ। সান ইউনিক্স মেশিন বিক্রয়কারী একটি ইউনিক্স সংস্থা ছিল এবং ইউনিক্স বাইনারি আহ্বানের জন্য সি "মেইন (আরগস)" কনভেনশনটি তৈরি করা হয়েছিল।

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

প্রতিটি শ্রেণীর একটি অনুরোধ পদ্ধতি থাকতে পারে এমন বাছাই করা পদ্ধতিটি বেশ নমনীয়, বিশেষত Main-Classএকটি চলমান পাত্রে MANIFEST.MF ফাইলের লাইনের সাথে একত্রে ।


অবশ্যই, জার ফাইলটি অনেক পরে আবিষ্কার করা হয়নি।
ড্যানিয়েল আর হিক্স

-1

এটি ওওপি দর্শনের সাথে সামঞ্জস্যপূর্ণ নয় যে কোনও প্রোগ্রাম কোনও ওএস প্রক্রিয়া দৃষ্টিকোণ থেকে একটি বিষয় হতে পারে, কারণ সংজ্ঞা অনুসারে একাধিক হওয়ার কোনও উপায় নেই।

তার উপরে, কোনও কনস্ট্রাক্টর কোনও উপায়ে প্রবেশের পয়েন্ট নয়।

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


1
আমি মনে করি আপনি সেখানে ভুল। এটা তোলে হয় একাধিক প্রক্রিয়া, অত: পর একাধিক বস্তু আছে সম্ভব। ঘটনাচক্রে, এটি Runnableএকাধিক থ্রেড রাখতে অবজেক্টগুলিকে তাত্ক্ষণিকভাবে সম্পূর্ণ সমান ।
কনরাড রুডলফ

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

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

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