সর্বজনীন, সুরক্ষিত, ব্যক্তিগত ব্যবহারের জন্য সেরা অনুশীলনগুলি?


12

এটা কি বলা উচিত যে কোনও কিছুর privateকোডিং করার সময় সবকিছুকে সামনে রেখে ডিফল্ট করা ভাল অনুশীলন ?

এবং তারপরে কেবল এটিকে আপগ্রেড করুন protectedযদি একটি সাবক্লাসের এটি প্রয়োজন হয়, বা publicঅন্য শ্রেণীর যদি এটির প্রয়োজন হয়?


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

উত্তর:


10

সংক্ষিপ্ত উত্তর: হ্যাঁ

দীর্ঘ উত্তর:

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

শ্রেণি নকশা করার সময় বিবেচনা করা সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলির মধ্যে এটি কীভাবে ব্যবহৃত হবে; যার মধ্যে আপনার ব্যক্তিগত / বাস্তবায়নের বিশদ সম্পর্কে চিন্তা শুরু করার আগে আপনার সর্বজনীন পদ্ধতি সম্পর্কে চিন্তাভাবনা জড়িত।

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

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


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

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

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

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

8

"এবং তারপরে কেবল একটি সাবক্লাসের এটির প্রয়োজন হলে এটি সুরক্ষিত করতে আপগ্রেড করুন, অথবা অন্য শ্রেণীর যদি এটির প্রয়োজন হয় তবে সর্বজনীন?"

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

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


আসুন বলে একটি বর্গ যে আপনি এই সময়ে উপশ্রেণী মনস্থ না (এবং পারে প্রদান করার প্রয়োজন নেই) এবং একটি পদ্ধতি যে আপনি যদি ছিল আপনার বর্গ উপশ্রেণীভুক্ত, দরকারী হবে / উপশ্রেণী দ্বারা / প্রয়োজন। আপনি কি এই পদ্ধতিটি তৈরি করবেন privateনাকি protected?
lfk

গ্রহণযোগ্য উত্তর হওয়া উচিত, প্রথমে শব্দগুলিকে ব্যক্তিগত করে তুলুন যেমন আমি ভাবতে / ডিজাইন করতে চাই না।
নিং

1

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

একটি গাড়ির চাকার মত একটি ইন্টারফেস চিন্তা করুন। আপনি চাকা ঘুরিয়ে গাড়িটি কোন দিকে চলে যায় তা স্থির করে নিন, তবে প্রচ্ছদের নীচে রয়েছে রোটারি ভালভ, হাইড্রোলিকস, পুলগুলি আপনার চাকাগুলির ঘূর্ণন পরিবর্তন করে, তবে গাড়ি চালানোর জন্য আপনার কোনও যান্ত্রিক প্রকৌশলী হওয়ার দরকার নেই।

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

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