ক্লাসের মাধ্যমে সমস্ত কোডকে কাঠামোগত করা এবং ক্লাসগুলিতে সংকলন করার সুবিধা এবং অসুবিধা (জাভা এর মতো)


13

সম্পাদনা করুন: আমার ভাষা জাভা থেকে আলাদা একাধিক উত্তরাধিকারের অনুমতি দেয়।

আমি শিক্ষামূলক, বিনোদনমূলক এবং সম্ভাব্য দরকারী উদ্দেশ্যে নিজের প্রোগ্রামিং ভাষার নকশা তৈরি এবং বিকাশ শুরু করেছি।

প্রথমদিকে, আমি এটি জাভা থেকে বেস করার সিদ্ধান্ত নিয়েছি।

এটি সূচিত করেছিল যে সমস্ত কোড ক্লাস আকারে লিখিত হবে, এবং সেই কোডটি ক্লাসে সংকলিত হয়, যা ভিএম দ্বারা লোড করা হয়।

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

তারপরে আমি লক্ষ্য করেছি যে আমি মূলত একটি মডিউল সিস্টেম রেখে এসেছি, যেখানে ক্লাসগুলি হয় "নেমস্পেস" হিসাবে ব্যবহার করা যেতে পারে, staticনির্দেশ ব্যবহার করে ধ্রুবক এবং ফাংশন সরবরাহ করে বা অবজেক্টগুলির জন্য টেমপ্লেট হিসাবে ব্যবহার করা যেতে পারে (ক্লাসগুলির "প্রকৃত" উদ্দেশ্য) অন্যান্য ভাষায়)।

এখন আমি অবাক হয়েই রয়েছি : সংকলন ইউনিট হিসাবে ক্লাস করার উত্সাহ এবং ডাউনসাইডগুলি কী?

এছাড়াও, আমার নকশা সম্পর্কে যে কোনও সাধারণ মন্তব্য খুব প্রশংসিত হবে। আমার ভাষা সম্পর্কে একটি তথ্যমূলক পোস্ট এখানে পাওয়া যাবে: http://www.yannbane.com/2012/12/kava.html


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

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

1
@ ডেলান: আসলে, আপনি কার্যকারিতা বাড়ানোর জন্য রচনাটি এখনও ব্যবহার করতে পারেন।
রবার্ট হার্ভে

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

@ ডেলান: সাবটিপিং এবং পলিমারফিজমের জন্য উত্তরাধিকার ব্যবহারে কী দোষ হয়েছে? উত্তরাধিকার হ'ল এটিই ...
ম্যাসন হুইলারের

উত্তর:


6

সংকলন ইউনিট হিসাবে ক্লাস থাকার সুবিধা কি?

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

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

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


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

@ অন্নবনে - আমার অর্থ এই নয় object, আমি বলতে চাইছি এমন ক্লাসগুলি যা অন্তর্ভুক্ত ক্লাসগুলির চেয়ে মডিউলগুলির মতো আচরণ করছে যা তাদের সংকলনের ইউনিটের বাইরে অগত্যা পাবলিক নয়। আপনি যদি কোনও ধরণের ডিএলএল স্টাইলের আচরণ চান তবে 'নির্ভরতাগুলি কার্যকর করে' বিশদে বিশিষ্ট হর্নেটের বাসাতে পরিণত হয়; ymmv। স্থির হিসাবে ।
তেলস্তিন

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

@ আয়ন্নবনে - না, সত্যই নয়। মডিউলগুলি মডিউল কারণ তারা তাত্ক্ষণিক able অন্যথায় আপনার কাছে কেবল সি ++ শৈলীর নেমস্পেস রয়েছে। আপনি একবার আপনার শীর্ষ স্তরের শ্রেণিগুলিকে সি ++ শৈলীর নাম স্থান হিসাবে সীমাবদ্ধ করে ফেললে তারা আসলে আর ক্লাস হয় না।
টেলাস্টিন

হুঁ, আমি এখনও ঠিক আছি এবং ক্লাস সহ মডিউল তৈরির ক্ষেত্রে সমস্যাটি সত্যিই দেখছি না। এবং হ্যাঁ, মডিউলগুলি নেমস্পেস হিসাবে কাজ করে, বিশেষত পাইথন মডিউলগুলি।
jcora

4

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

কম্পিউটার ভাষা প্রকৌশল

জাভা একমাত্র পূর্ব প্রয়োজনীয়তা।

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-035-computer-language-engineering-spring-2010/lecture-notes/

পাঠ্যসূচী বর্ণনা

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

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