আমি নামক একটি বিমূর্ত ক্লাস আছে ধরুন Task
।
এমন কোনও মানদণ্ড বা কনভেনশন রয়েছে যা এর AbstractTask
পরিবর্তে আমার নাম রাখার পরামর্শ দেয় ?
আমি নামক একটি বিমূর্ত ক্লাস আছে ধরুন Task
।
এমন কোনও মানদণ্ড বা কনভেনশন রয়েছে যা এর AbstractTask
পরিবর্তে আমার নাম রাখার পরামর্শ দেয় ?
উত্তর:
ব্লচের কার্যকর জাভা (আইটেম 18) অনুসারে অ্যাবস্ট্রাক্ট উপসর্গ একটি বিশেষ ক্ষেত্রে ব্যবহৃত একটি সম্মেলন।
আপনি রফতানি করে এমন প্রতিটি অ্যান্টিগ্রিভাল ইন্টারফেসের সাথে যেতে একটি বিমূর্ত কঙ্কাল বাস্তবায়ন ক্লাস সরবরাহ করে আপনি ইন্টারফেস এবং বিমূর্ত শ্রেণির গুণাবলী একত্রিত করতে পারেন। ... কনভেনশন অনুসারে কঙ্কালের বাস্তবায়নকে অ্যাবস্ট্রাক্ট ইন্টারফেস বলা হয়, যেখানে ইন্টারফেসটি তারা প্রয়োগ করা ইন্টারফেসের নাম।
তবে ব্লাচ আরও উল্লেখ করেছেন যে স্কেলেটাল ইন্টারফেস নামটি বোধগম্য হত, তবে এটি উপসংহারে আসে
বিমূর্ত কনভেনশন এখন দৃly়ভাবে প্রতিষ্ঠিত is
অন্যান্য উত্তরগুলি যেমন উল্লেখ করেছে, সাধারণভাবে এই নামকরণ কনভেনশনটি সমস্ত বিমূর্ত শ্রেণিতে প্রয়োগ করার কোনও কারণ নেই।
কোন কনভেনশন নেই। এটি বিকাশকারী হিসাবে দ্রুত এবং উন্নততর কোড হিসাবে আপনাকে কীভাবে সহায়তা করবে এবং অন্যদের আপনার কোড বুঝতে সহায়তা করবে সে সম্পর্কে এগুলিই রয়েছে।
কোডটি দেখছেন এবং পরিচালনা করছেন এমন লোকদের জিজ্ঞাসা করুন। তারা বরং কি দেখতে হবে? এগুলি কী সহজ করে তুলবে? তারপরে তারা যা পছন্দ করবে তার ভিত্তিতে এটির নাম দিন।
অন্য নোটে, জাভা প্রোগ্রামিং ভাষার জন্য কোড কনভেনশনসমূহ: ৯. নামকরণ কনভেনশনগুলির কোনও প্রয়োজন নেই:
প্রতিটি অভ্যন্তরীণ শব্দের প্রথম অক্ষরের সাথে মিশ্র ক্ষেত্রে শ্রেণীর নাম বিশেষ্য হওয়া উচিত case আপনার শ্রেণীর নামগুলি সহজ এবং বর্ণনামূলক রাখার চেষ্টা করুন। সংক্ষিপ্ত বিবরণ এবং সংক্ষিপ্ত বিবরণগুলি সম্পূর্ণ শব্দ ব্যবহার করুন (সংক্ষিপ্ত বিবরণ দীর্ঘতর ফর্মের চেয়ে বেশি যেমন ব্যাপকভাবে ব্যবহৃত হয় না যেমন URL বা HTML)।
না। ইন্টেলিজেন্স আমাকে তুচ্ছভাবে বলবে যদি এটি বিমূর্ত হয়, তাই আপনি এখানে DRY লঙ্ঘন করছেন।
abstract
শ্রেণীর নাম যুক্ত করা DRY লঙ্ঘন করে না, এবং প্রত্যেকেই বুদ্ধি ব্যবহার করে না। উদাহরণস্বরূপ, আপনি যদি কোনও ওয়েব পৃষ্ঠায় কোডটি পড়ছেন, বা আপনি যদি কোনও সরল পাঠ্য সম্পাদক বা বাহ্যিক ডিফ সরঞ্জামটিতে সন্ধান করছেন এমন কোনও প্যাচের অংশ হয় তবে আপনি কী করবেন?
abstract class AbstractName
? স্পষ্টতই দুবার "বিমূর্ত" হয়েছে। এবং যদি আপনি ইন্টেলিজেন্স ব্যবহার না করেন তবে আপনার সমস্যাটি, অন্য প্রত্যেকে কোড দেখার জন্য বুদ্ধিমান সরঞ্জামগুলি ব্যবহার করে।
এটি কিছুটা পছন্দের বিষয় (তবে বর্ডারলাইন খারাপ অনুশীলন) তবে বেশিরভাগ মানুষ ক্লাসের নামে বাছাইপর্বের অংশ দেখতে পছন্দ করে না।
বেশিরভাগ আইডিই সেই তথ্য আপনার পক্ষে যে কোনও উপায়ে সহজেই উপলভ্য করে দেবে, সুতরাং এটি নামটিতে রাখার প্রয়োজন নেই এবং এটি বাদ দেওয়া আরও পরিষ্কার হবে। পরিবর্তনশীল নামকরণের জন্য এটি হানিয়ার স্বরলিপি স্মরণ করিয়ে দেয় এবং এটি এখনকার দিনে অবশ্যই খারাপ রূপ হিসাবে বিবেচিত হয়। আমি কেবল এটি কল করার পরামর্শ দিই Task
।
.NET- এ, অ্যাবস্ট্রাক্ট বেস ক্লাসটি বোঝাতে প্রত্যয় হিসাবে "বেস" এর ব্যবহার প্রায়শই দেখা যায়। আমি অন্য উত্তরগুলি স্থগিত করবো এটি জাভাতে প্রচলিত অনুশীলন কিনা।
আমার মতে, কোনও সত্তার নামটি তার ধরণের কাঠামো সম্পর্কে নয়, তবে শব্দার্থকতা সম্পর্কে তথ্য সরবরাহ করা উচিত। সুতরাং যদি বিমূর্ততা তার রানটাইম গোলের অংশ না হয় তবে আপনার শ্রেণিকে "অ্যাবস্ট্রাক্টসামিংথিং" হিসাবে সংজ্ঞায়িত করার কোনও অর্থ হয় না। এটি একটি বেস বিমূর্ত শ্রেণি প্রোগ্রামারটির জন্য দৃশ্যমান এবং নামটিতে প্রতিবিম্বিত হওয়ার দরকার নেই।
যাইহোক, যদি একটি বিমূর্ত কারখানার একটি বাস্তবায়নকে একটি অ্যাবস্ট্রাকফ্যাক্টরি কল করতে নিখুঁত করে তোলে, কারণ এটি শ্রেণীর উদ্দেশ্য সম্পর্কিত নয়।
সাধারণভাবে, নামকরণের সম্মেলনের পক্ষে নিন যা আপনার শ্রেণীর লক্ষ্য সম্পর্কে সর্বাধিক তথ্য জানাতে সহায়তা করে।
একইভাবে, থেকে পরিষ্কার থাকুন SomethingImpl
। আমরা এটি বিবেচনা করি না যে এটি বাস্তবায়ন এবং বেস ক্লাস নয়। যদি আপনার শ্রেণি শ্রেণিবিন্যাসটি উত্তরাধিকারের জন্য সঠিকভাবে ডিজাইন করা হয়, তবে কেউ এখান থেকে উত্তরাধিকারী হতে পারে। অবশ্যই তাদের মধ্যে আরও "ইমপ্লেল" প্রত্যয় বা অন্যান্য শিল্পকলা যুক্ত করার কোনও মূল্য থাকবে না। "ইন্টারফেস" প্রত্যয় বা "আমি" উপসর্গ যুক্ত করার কোনও মূল্য নেই।
বিবেচনা:
IVehicle <-- IMotoredVehicle <-- AbstractCar <-- CarImpl
উল্টোদিকে:
Vehicle <-- MotoredVehicle <-- Car <-- DefaultCar
<-- Ferrari
<-- Trabi
আমি এখন পর্যন্ত খুব বেশি পছন্দ করি।
এই কিছু ক্ষেত্রে, অনুরূপ স্থূল অপব্যবহার এর হাঙ্গেরীয় স্বরলিপি আধুনিক যে এটা তার খারাপ প্রতিনিধির দিলেন , যেমন মানুষ ভুলভাবে পরিবর্তনশীল এর ধরনের একটি সূচক সঙ্গে তাদের ভেরিয়েবল প্রিফিক্স ডেভেলপারদের প্রয়োজন যেমন ব্যাখ্যা করা শুরু করে। যদিও এর মাঝে মাঝে এর ব্যবহার থাকতে পারে (বেশিরভাগ ক্ষেত্রে যদি আপনি টাইপের সংজ্ঞাটি দেখতে অলস হন) তবে এটি বেশিরভাগই অকেজো। হাঙ্গেরীয় নোটেশনের সাথে সিমোনির আসল ধারণাটি বিকাশকারীর সত্তার দক্ষতার কথা স্মরণ করিয়ে দেওয়ার জন্য এটি স্মরণক হিসাবে ব্যবহার করা ছিল, তার ধরণের নয়।
থাম্বের একটি ভাল নিয়ম সিন্টেক্স থেকে সুস্পষ্ট যে কোনও নাম অন্তর্ভুক্ত করা নয়। জাভাতে যেহেতু আপনাকে যথাযথভাবে নামের abstract
কীওয়ার্ড সহ একটি বিমূর্ত শ্রেণি চিহ্নিত করতে হবে , আমি এটি নামটিতে অন্তর্ভুক্ত করব না। সি ++ এ, উদাহরণস্বরূপ, কেসটি এত পরিষ্কার কাটা নয় তবে কমপক্ষে সংকলক আপনাকে বলবে যখন আপনি ভুলভাবে একটি বিমূর্ত ক্লাস ব্যবহার করেছেন। পাইথনের মতো আবার কিছুতে স্পষ্ট করে একটি বিমূর্ত শ্রেণীর নামকরণ করা খারাপ ধারণা নয়।
নামটি অস্পষ্ট হলে নিয়মের স্বাভাবিক ব্যতিক্রম। যদি, যে কারণেই হোক না কেন, সেখানে একটি কংক্রিট সাবক্লাস রয়েছে Task
(অন্য উদাহরণে এটি আরও বুদ্ধিমান হতে পারে তবে যাই হোক না কেন), তবে অবশ্যই, ব্যবহার করুন AbstractTask
।
protected abstract SomeClass { }
এটি আমাকে বলে যে এটি একটি বিমূর্ত শ্রেণি। উপসর্গ যুক্ত করা একটি টাউটোলজি এবং অ্যান্টি-প্যাটার্ন এবং বেশিরভাগ ক্ষেত্রে উপযুক্ত নয়, লিঙ্কটি দেখুন যেখানে এটি package local
উদাহরণস্বরূপ ব্যতিক্রম হওয়ার কথা বলে।
বেশিরভাগ ক্ষেত্রে Abstract
ক্লাসগুলি জনসাধারণের মুখোমুখি এপিআই-র অংশ হওয়া উচিত নয়, যদি এটি সত্যিই থাকে তবে একটি ভাল কারণ হওয়া উচিত এবং একটি ভাল কারণের ব্যতীত অবশ্যই একটি ভাল নাম দেওয়া উচিত AbstractSomeClass
।
বেশিরভাগ ক্ষেত্রে যদি আপনি আরও বর্ণনামূলক নাম নিয়ে আসতে না পারেন তবে আপনাকে সম্ভবত কিছু পুনরায় নকশা করা দরকার।
আমার পাঁচটি সেন্ট, সম্ভবত আপনার সেই বিমূর্ত শ্রেণির বাস্তবায়ন হবে এবং তাদের নাম দেওয়া হবে 'সামসস্পিফিকটিক টাস্ক', 'টাস্ক উইথ বুবলস', 'স্ট্রেঞ্জটাস্ক' ইত্যাদি So সুতরাং আপনার বিমূর্ত 'টাস্ক' এবং তাদের মধ্যে কোনও নাম সংঘর্ষ হবে না।
অতিরিক্ত হিসাবে, 'বিমূর্ত' শব্দটি ভাষা সংশ্লেষ সম্পর্কিত, ব্যবসায়িক ডোমেন সত্তা নয়, তাই আমি নামের অংশ হিসাবে এটি ব্যবহার না করাকে পছন্দ করব।
অন্যদিকে, এখানে একটি উত্তরে আমি জে.ব্লোক কার্যকর জাভা থেকে উদ্ধৃত অংশটি দেখতে পেয়েছি যা বলে যে একটি নামের অংশ হিসাবে 'অ্যাবস্ট্রাক্ট' ব্যবহার করা একটি সুপ্রতিষ্ঠিত অনুশীলন। এটা হতে পারে। তবে যাইহোক সরকারী জাভা কোড কনভেনশনে সে সম্পর্কে কিছুই নেই।
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
- কেউ ক্লাসের List
নাম হিসাবে ব্যবহার করতে পারে না AbstractList
কারণ এটি ইন্টারফেসের নাম। এটি একটি সুপ্রতিষ্ঠিত অনুশীলন এবং অফিসিয়াল জাভা কোডের একটি অংশ যা ব্যবহারে রয়েছে যেখানে ইন্টারফেস প্রয়োগ করে এমন কিছু বিমূর্ত শ্রেণি বাড়াতে পারে (এটি ইন্টারফেস প্রয়োগ করে (কিছু) প্রয়োগও করে)।
আমি জাভা বিকাশকারী (আইএনএজেডি?) নই এবং এ জাতীয় জিনিসের মানক নামকরণ জানি না, তবে আমি মনে করি Task
এটি যথেষ্ট বিমূর্ত বলে মনে হয় যে এটি একা যেমন দাঁড়িয়ে থাকতে পারে।
আমি এটা করেছি। আমি আমার অ্যাবস্ট্রাক্ট ওপ্রেশন নামে আমার বিমূর্ত শ্রেণিতে উপসর্গ হিসাবে 'অ্যাবস্ট্রাক্ট' যুক্ত করেছি। আমি এটি করার কারণটি হ'ল অপর প্যাকেজটিতে অপারেশন নামে একটি অ-বিমূর্ত শ্রেণি ছিল এবং এটি আমার দল এবং প্রোগ্রামারদের সাহায্য করেছিল যারা দুজনের মধ্যে কোনও বিভ্রান্তি এড়াতে পরে দায়িত্ব গ্রহণ করেছিলেন।