আমি কি আমার বিমূর্ত ক্লাসগুলিতে একটি "বিমূর্ত" উপসর্গ যুক্ত করব? [বন্ধ]


20

আমি নামক একটি বিমূর্ত ক্লাস আছে ধরুন Task

এমন কোনও মানদণ্ড বা কনভেনশন রয়েছে যা এর AbstractTaskপরিবর্তে আমার নাম রাখার পরামর্শ দেয় ?


: এখানে তালিকাভুক্ত নিয়মাবলী নামকরণ oracle.com/technetwork/java/codeconventions-135099.html তবে কোনো পরামর্শ এই লিঙ্কে যদিও: stackoverflow.com/questions/1006332/... বলেছে তুমি পারে এবং এটি একটি ভয়ানক জিনিস যদি তুমি করেছ হবে না।
হতাশ

সি # তে স্ট্যান্ডার্ড কনভেনশনটি '* বেস' সহ প্রত্যয় হয়।
ডেন

উত্তর:


26

ব্লচের কার্যকর জাভা (আইটেম 18) অনুসারে অ্যাবস্ট্রাক্ট উপসর্গ একটি বিশেষ ক্ষেত্রে ব্যবহৃত একটি সম্মেলন।

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

তবে ব্লাচ আরও উল্লেখ করেছেন যে স্কেলেটাল ইন্টারফেস নামটি বোধগম্য হত, তবে এটি উপসংহারে আসে

বিমূর্ত কনভেনশন এখন দৃly়ভাবে প্রতিষ্ঠিত is

অন্যান্য উত্তরগুলি যেমন উল্লেখ করেছে, সাধারণভাবে এই নামকরণ কনভেনশনটি সমস্ত বিমূর্ত শ্রেণিতে প্রয়োগ করার কোনও কারণ নেই।


15

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

কোডটি দেখছেন এবং পরিচালনা করছেন এমন লোকদের জিজ্ঞাসা করুন। তারা বরং কি দেখতে হবে? এগুলি কী সহজ করে তুলবে? তারপরে তারা যা পছন্দ করবে তার ভিত্তিতে এটির নাম দিন।

অন্য নোটে, জাভা প্রোগ্রামিং ভাষার জন্য কোড কনভেনশনসমূহ: ৯. নামকরণ কনভেনশনগুলির কোনও প্রয়োজন নেই:

প্রতিটি অভ্যন্তরীণ শব্দের প্রথম অক্ষরের সাথে মিশ্র ক্ষেত্রে শ্রেণীর নাম বিশেষ্য হওয়া উচিত case আপনার শ্রেণীর নামগুলি সহজ এবং বর্ণনামূলক রাখার চেষ্টা করুন। সংক্ষিপ্ত বিবরণ এবং সংক্ষিপ্ত বিবরণগুলি সম্পূর্ণ শব্দ ব্যবহার করুন (সংক্ষিপ্ত বিবরণ দীর্ঘতর ফর্মের চেয়ে বেশি যেমন ব্যাপকভাবে ব্যবহৃত হয় না যেমন URL বা HTML)।


13

না। ইন্টেলিজেন্স আমাকে তুচ্ছভাবে বলবে যদি এটি বিমূর্ত হয়, তাই আপনি এখানে DRY লঙ্ঘন করছেন।


21
-1 abstractশ্রেণীর নাম যুক্ত করা DRY লঙ্ঘন করে না, এবং প্রত্যেকেই বুদ্ধি ব্যবহার করে না। উদাহরণস্বরূপ, আপনি যদি কোনও ওয়েব পৃষ্ঠায় কোডটি পড়ছেন, বা আপনি যদি কোনও সরল পাঠ্য সম্পাদক বা বাহ্যিক ডিফ সরঞ্জামটিতে সন্ধান করছেন এমন কোনও প্যাচের অংশ হয় তবে আপনি কী করবেন?
ব্রায়ান ওকলে

10
@ ব্রায়ান: অবশ্যই এটি ডিআরওয়াই লঙ্ঘন করে। abstract class AbstractName? স্পষ্টতই দুবার "বিমূর্ত" হয়েছে। এবং যদি আপনি ইন্টেলিজেন্স ব্যবহার না করেন তবে আপনার সমস্যাটি, অন্য প্রত্যেকে কোড দেখার জন্য বুদ্ধিমান সরঞ্জামগুলি ব্যবহার করে।
ডেডএমজি

13
"Everbody"? আমি জানি এমন বেশিরভাগ লোকেরা গ্রহনটি ব্যবহার করেন এমন কয়েকজনের সাথে ইমাস এবং ভিআই ব্যবহার করেন। কিছু বলা "আপনার সমস্যা" হ'ল টিম ওয়ার্কের সংজ্ঞা নয়। আমার দুর্বলতম বিন্দুটি ছিল, আপনি কেবল একটি কম্বল বিধি সেট করতে পারবেন না এবং বলতে পারেন যে এটি কীভাবে হয়ে গেছে। বিভিন্ন দলের আলাদা আলাদা প্রয়োজনীয়তা থাকে এবং প্রত্যেকের ইন্টেলিজেন্স সাহায্যের প্রয়োজন হয় না। প্লাস, যেমনটা আমি বলেছি, অনেক সময় এমন হয় যখন আপনি নিজের প্রাথমিক সম্পাদক বা আইডিই ব্যতীত অন্য কোনও সরঞ্জামে কোড দেখছেন।
ব্রায়ান ওকলে

1
+1 অবশ্যই ডিআরওয়াই লঙ্ঘন করে। ইন্টেলিসেন্সের উপর নির্ভর করা কিছুটা শক্তিশালী তবে বেস ক্লাসটি ব্যবহার করে যে কেউ সলাইডের অংশ হিসাবে তারা কী প্রসারিত করছে তা অন্তত দেখতে হবে।
গ্যারি রোয়ে

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

9

এটি কিছুটা পছন্দের বিষয় (তবে বর্ডারলাইন খারাপ অনুশীলন) তবে বেশিরভাগ মানুষ ক্লাসের নামে বাছাইপর্বের অংশ দেখতে পছন্দ করে না।

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


9

.NET- এ, অ্যাবস্ট্রাক্ট বেস ক্লাসটি বোঝাতে প্রত্যয় হিসাবে "বেস" এর ব্যবহার প্রায়শই দেখা যায়। আমি অন্য উত্তরগুলি স্থগিত করবো এটি জাভাতে প্রচলিত অনুশীলন কিনা।


1
"বেস" এবং "ইমপ্ল" প্রত্যয়গুলির জন্য +1। তারা একটি কাঠামোগত পয়েন্ট তৈরি করে (একটি বিমূর্ত শ্রেণি কোনও কিছুর ভিত্তি হবে)।
vski

7
@vski: না, আমি দৃ strongly়ভাবে একমত নই: এগুলি পাছার একটি অকেজো ব্যথা। আপনার ইন্টারফেসটির নামকরণ করা বা জেনেরিক ইন্টারফেসটির বর্ণনা দেওয়ার সাথে বেস সংঘর্ষের নামকরণ এবং আরও প্রশংসনীয় নাম সহ আপনার কংক্রিটের প্রয়োগের পক্ষে সাধারণত পুরোপুরি ঠিক।
হাইলেম

3
আমি ব্যবহার করার ঝোঁক ... একটি ইন্টারফেস পিছনে একটি বেস শ্রেণীর জন্য বেস। ভাল নামটি ইতিমধ্যে ইন্টারফেস দ্বারা নেওয়া হয়েছে এবং ক্লায়েন্ট কোড দ্বারা বেস ক্লাসটি কোনওভাবেই ব্যবহৃত হয় না।
স্টার ব্লু

1
@ হাইলেম অনেক জাভা ডিজাইনের নিদর্শন শুধুমাত্র একটি প্রত্যাশিত বাস্তবায়ন সহ ইন্টারফেস ব্যবহার করে। এই ক্ষেত্রে ইমপ্ল একটি খুব দরকারী প্রত্যয়।
ফানকিব্রো

ইমপ্লের ব্যবহার সম্পর্কে, ডিফল্ট বনাম ইমপ্ল দেখুন - ইমপ্ল থেকে দূরে থাকুন! বেসকে প্রত্যয় হিসাবে ব্যবহার করা (যেমন টাস্কবেস) বোঝায় যে একটি বেস ক্লাসটি ভাষা গঠনের পরিবর্তে একটি বিন্যাস।
গ্যারি রোউ

8

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

যাইহোক, যদি একটি বিমূর্ত কারখানার একটি বাস্তবায়নকে একটি অ্যাবস্ট্রাকফ্যাক্টরি কল করতে নিখুঁত করে তোলে, কারণ এটি শ্রেণীর উদ্দেশ্য সম্পর্কিত নয়।

সাধারণভাবে, নামকরণের সম্মেলনের পক্ষে নিন যা আপনার শ্রেণীর লক্ষ্য সম্পর্কে সর্বাধিক তথ্য জানাতে সহায়তা করে।

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

বিবেচনা:

IVehicle <-- IMotoredVehicle <-- AbstractCar <-- CarImpl

উল্টোদিকে:

Vehicle <-- MotoredVehicle <-- Car <-- DefaultCar
                                   <-- Ferrari
                                   <-- Trabi

আমি এখন পর্যন্ত খুব বেশি পছন্দ করি।


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


3

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

নামটি অস্পষ্ট হলে নিয়মের স্বাভাবিক ব্যতিক্রম। যদি, যে কারণেই হোক না কেন, সেখানে একটি কংক্রিট সাবক্লাস রয়েছে Task(অন্য উদাহরণে এটি আরও বুদ্ধিমান হতে পারে তবে যাই হোক না কেন), তবে অবশ্যই, ব্যবহার করুন AbstractTask


... বা একটি ইন্টারফেস যেমন Listএবং AbstractListক্লাস (যা এটি প্রয়োগ করে)।

3
protected abstract SomeClass { }

এটি আমাকে বলে যে এটি একটি বিমূর্ত শ্রেণি। উপসর্গ যুক্ত করা একটি টাউটোলজি এবং অ্যান্টি-প্যাটার্ন এবং বেশিরভাগ ক্ষেত্রে উপযুক্ত নয়, লিঙ্কটি দেখুন যেখানে এটি package localউদাহরণস্বরূপ ব্যতিক্রম হওয়ার কথা বলে।

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

বেশিরভাগ ক্ষেত্রে যদি আপনি আরও বর্ণনামূলক নাম নিয়ে আসতে না পারেন তবে আপনাকে সম্ভবত কিছু পুনরায় নকশা করা দরকার।


0

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

অতিরিক্ত হিসাবে, 'বিমূর্ত' শব্দটি ভাষা সংশ্লেষ সম্পর্কিত, ব্যবসায়িক ডোমেন সত্তা নয়, তাই আমি নামের অংশ হিসাবে এটি ব্যবহার না করাকে পছন্দ করব।

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


public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>- কেউ ক্লাসের Listনাম হিসাবে ব্যবহার করতে পারে না AbstractListকারণ এটি ইন্টারফেসের নাম। এটি একটি সুপ্রতিষ্ঠিত অনুশীলন এবং অফিসিয়াল জাভা কোডের একটি অংশ যা ব্যবহারে রয়েছে যেখানে ইন্টারফেস প্রয়োগ করে এমন কিছু বিমূর্ত শ্রেণি বাড়াতে পারে (এটি ইন্টারফেস প্রয়োগ করে (কিছু) প্রয়োগও করে)।

-1

আপনি যদি একটি দলে কাজ করেন, তবে পুরো টিমকে অবশ্যই সিদ্ধান্ত নিতে হবে যে আপনাকে "বিমূর্ত" দিয়ে বিমূর্ত শ্রেণির উপসর্গ করা উচিত কিনা।

আপনি যদি নিজেরাই কাজ করেন, তবে এটি সম্পূর্ণরূপে আপনার উপর নির্ভর করে, আমি বা এই সাইটে অন্য কেউ নয়।


-2

আমি জাভা বিকাশকারী (আইএনএজেডি?) নই এবং এ জাতীয় জিনিসের মানক নামকরণ জানি না, তবে আমি মনে করি Taskএটি যথেষ্ট বিমূর্ত বলে মনে হয় যে এটি একা যেমন দাঁড়িয়ে থাকতে পারে।


Re: বেজ প্রত্যয়: stackoverflow.com/a/429494/1782
জুয়ান

-2

আপনি যদি একটি বিমূর্ত AbstractSyntaxTreeক্লাস লিখতে চান ? বা সম্ভবত একটি বিমূর্ত SyntaxTree?

এটি প্রচলিত নয় এবং এটি সহজেই মানুষকে বিভ্রান্ত করতে পারে।


-2

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

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