কোডজিম ইউনিভার্সিটি কোর্সের অংশ হিসাবে একজন পরামর্শদাতার সাথে একটি বক্তৃতা স্নিপেট। সম্পূর্ণ কোর্সের জন্য সাইন আপ করুন।


"শুভেচ্ছা, আমিগো! আমি শুনেছি আপনি ইতিমধ্যে পদ্ধতি সম্পর্কে ভাল উপলব্ধি আছে?"

"হাই, ঋষি। হ্যাঁ, আমি ইতিমধ্যেই সেই শিক্ষকের কৌশলের মাধ্যমে আমার পথ কেটে ফেলেছি। আমি বলব যে এটি এতটা খারাপ ছিল না, কিন্তু আপনি আমাকে বলবেন, 'না, না! আপনি কিছুই বুঝতে পারেননি। '"

"আপনি স্পষ্টতই নির্দিষ্ট কিছু শিক্ষকের সাথে চ্যাট করতে অনেক বেশি সময় ব্যয় করছেন, সম্ভবত ডিয়েগোর সাথে। যাইহোক... আমি এখনও আশা করি আপনি পদ্ধতিগুলি যথেষ্ট ভালভাবে বুঝতে পেরেছেন। সর্বোপরি, আজ আমি আপনাকে কিছু জাদু শব্দ শেখাতে যাচ্ছি যা পদ্ধতিগুলিকে বর্ণনা করতে সাহায্য করে ' প্রভাবের ক্ষেত্র।"

"কৌতুহলজনক শোনাচ্ছে।"

"আসলে, এটি সব সহজ। প্রতিটি পদ্ধতির আগে, প্রোগ্রামাররা তথাকথিত অ্যাক্সেস মডিফায়ারগুলি নির্দিষ্ট করতে পারে। এর মধ্যে নিম্নলিখিত কীওয়ার্ডগুলি অন্তর্ভুক্ত রয়েছে: public, protected, private.

"এই অ্যাক্সেস মডিফায়ারগুলি আপনাকে একটি পদ্ধতিতে অন্যান্য ক্লাসের অ্যাক্সেস সীমাবদ্ধ করতে দেয়।

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

এই ধরনের মোট 3টি মডিফায়ার আছে, কিন্তু একটি পদ্ধতিতে 4 ধরনের অ্যাক্সেস রয়েছে। এর কারণ হল অ্যাক্সেস মডিফায়ারের অনুপস্থিতির অর্থও কিছু। এখানে একটি সম্পূর্ণ টেবিল আছে:

থেকে অ্যাক্সেস...
সংশোধক যেকোন ক্লাস শিশু শ্রেণী এর প্যাকেজ এর ক্লাস
public হ্যাঁ হ্যাঁ হ্যাঁ হ্যাঁ
protected না হ্যাঁ হ্যাঁ হ্যাঁ
কোন পরিবর্তনকারী নেই না না হ্যাঁ হ্যাঁ
private না না না হ্যাঁ

"এবং এখানে অ্যাক্সেস মডিফায়ারগুলির একটি সম্পূর্ণ ব্যাখ্যা রয়েছে:

1. publicসংশোধক

সংশোধক দ্বারা চিহ্নিত একটি পদ্ধতি (বা পরিবর্তনশীল বা শ্রেণী) প্রোগ্রামের যেকোনো স্থান থেকেpublic অ্যাক্সেস করা যেতে পারে । এটি উন্মুক্ততার সর্বোচ্চ ডিগ্রী - কোন বিধিনিষেধ নেই।

2. privateসংশোধক

সংশোধক দ্বারা চিহ্নিত একটি পদ্ধতি (বা পরিবর্তনশীল, বা শ্রেণী) শুধুমাত্র একই ক্লাস থেকেprivate অ্যাক্সেস করা যেতে পারে যেখানে এটি ঘোষণা করা হয়েছে । অন্য সব শ্রেণীর জন্য, চিহ্নিত পদ্ধতি (বা পরিবর্তনশীল) অদৃশ্য। এটা যেন অস্তিত্ব নেই. এটি সর্বোচ্চ স্তরের সীমাবদ্ধতা - শুধুমাত্র তার নিজস্ব শ্রেণী।

3. কোন সংশোধক নেই (ডিফল্ট সংশোধক)

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

4. protectedসংশোধক

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

"আকর্ষণীয়, কিন্তু আমি নিশ্চিত নই যে আমি অবিলম্বে এই মডিফায়ারগুলিকে সঠিক জায়গায় রাখতে পারি কিনা।

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

"আপনি কি আরও বিস্তারিতভাবে ব্যাখ্যা করতে পারেন কেন অ্যাক্সেস মডিফায়ার প্রয়োজন?"

"এগুলি একই সময়ে দশ এবং শত শত প্রোগ্রামার দ্বারা লিখিত বড় প্রকল্পগুলির জন্য প্রয়োজনীয় হয়ে ওঠে।

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

"তাই তারা এই অ্যাক্সেস মডিফায়ারগুলি নিয়ে এসেছে৷ আপনি যদি ব্যক্তিগত শব্দটি দিয়ে একটি সহায়ক পদ্ধতি চিহ্নিত করেন , তাহলে আপনার ক্লাস ছাড়া অন্য কোনও কোড আপনার সাহায্যকারী পদ্ধতি দেখতে পাবে না৷"

"আমি ভাবছি, আমি বুঝতে পেরেছি."

staticকীওয়ার্ড

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

"ওটার মানে কি?"

"আমি আপনাকে পরে এটি সম্পর্কে আরও বলব। চিন্তা করবেন না। আপাতত, স্ট্যাটিক পদ্ধতি সম্পর্কে কয়েকটি তথ্য মনে রাখার চেষ্টা করুন।

ঘটনা 1. একটি স্থির পদ্ধতি কোনো বস্তুর সাথে সংযুক্ত নয়, বরং এটি যে শ্রেণিতে এটি ঘোষণা করা হয়েছে তার অন্তর্গত। একটি স্ট্যাটিক পদ্ধতি কল করতে, আপনাকে লিখতে হবে:

ClassName.MethodName()

স্ট্যাটিক পদ্ধতির উদাহরণ:

শ্রেণির নাম স্ট্যাটিক পদ্ধতির নাম
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

স্ট্যাটিক মেথডের নামের আগে ক্লাসের নাম বাদ দেওয়া যেতে পারে যদি আপনি স্ট্যাটিক মেথডকে ক্লাসের মধ্যে থেকে কল করেন। এই কারণেই আপনাকে বলা হয় প্রতিটি স্ট্যাটিক পদ্ধতির নামের আগে লিখতে হবে না ।Solution

ঘটনা 2. একটি স্ট্যাটিক পদ্ধতি তার নিজস্ব শ্রেণীর অ-স্ট্যাটিক পদ্ধতি অ্যাক্সেস করতে পারে না। একটি স্ট্যাটিক পদ্ধতি শুধুমাত্র স্ট্যাটিক পদ্ধতি অ্যাক্সেস করতে পারে। ফলস্বরূপ, আমরা mainস্ট্যাটিক পদ্ধতি থেকে যে সমস্ত পদ্ধতিকে কল করতে চাই তা ঘোষণা করি।"

"সেটা কেন?"

"আপনি যখন OOP শেখা শুরু করবেন এবং স্ট্যাটিক পদ্ধতিগুলি কীভাবে কাজ করে তা বুঝবেন তখন আপনি নিজেই এই প্রশ্নের উত্তর দেবেন৷ ততক্ষণ পর্যন্ত, আমাকে বিশ্বাস করুন৷

throwsকীওয়ার্ড

"আরেকটি কীওয়ার্ড আছে যা আপনি সম্ভবত একটি পদ্ধতি ঘোষণায় দেখেছেন — throwsকীওয়ার্ড৷ অ্যাক্সেস মডিফায়ার এবং staticকীওয়ার্ডের বিপরীতে, এই কীওয়ার্ডটি মেথড প্যারামিটারের পরে স্থাপন করা হয়েছে:

public static Type name(parameters) throws Exception
{
  method body
}

"এবং এটা মানে কি?"

"আবারও আমি আপনাকে বলতে চাই যে আপনি এর আসল উদ্দেশ্যটি পরে শিখবেন, যখন আমরা ব্যতিক্রমগুলি অধ্যয়ন করি (লেভেল 15 এ)।

কিন্তু এটিকে অতিমাত্রায় স্পর্শ করার জন্য, আমরা বলতে পারি যে কীওয়ার্ড দ্বারা চিহ্নিত একটি পদ্ধতি throwsত্রুটি (ব্যতিক্রম) নিক্ষেপ করতে পারে, যার অর্থ ক্লাসের উদাহরণ Exception(এবং এটির উত্তরাধিকারী শ্রেণী)। যদি একটি ক্লাসে বিভিন্ন ধরণের ত্রুটি দেখা দিতে পারে, তাহলে আপনাকে তাদের প্রতিটিকে কমা দ্বারা আলাদা করে তালিকাভুক্ত করতে হবে।"

"রহস্যময় এবং বোধগম্য শোনাচ্ছে! আমাকে লেভেল 14 এর জন্য অপেক্ষা করতে হবে।"

প্রধান পদ্ধতি

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

"এই ধরনের লাইনটিকে একটি পদ্ধতি ঘোষণা বলা হয় এবং নিম্নলিখিত সাধারণ বিন্যাস রয়েছে:

access modifier static Type name(parameters) throws exceptions
একটি পদ্ধতি ঘোষণার সাধারণ বিন্যাস

যেখানে , , , বা কিছুই access modifiersদ্বারা প্রতিস্থাপিত হয় ;publicprotectedprivate

যদি পদ্ধতিটি স্ট্যাটিক হয়, তাহলে staticকীওয়ার্ডটি প্রদর্শিত হবে (এটি অ-স্ট্যাটিক পদ্ধতির জন্য অনুপস্থিত)

Typeরিটার্ন মানের প্রকার ( voidযদি কোন ফলাফল না থাকে)

"এখন আপনি পদ্ধতির ঘোষণায় এই সমস্ত শব্দের অর্থ কী তা আরও ভালভাবে বুঝতে পেরেছেন main:

public static void main(String[] args) throws Exception
mainপদ্ধতি ঘোষণা

"ঠিক আছে, এখন আমি বুঝতে পারি যে কিওয়ার্ড main()দ্বারা নির্দেশিত যে কোনও ক্লাস থেকে পদ্ধতিতে অ্যাক্সেস সম্ভব public। পদ্ধতিটি স্থির, তাই এটিকে স্পষ্টভাবে বলা যেতে পারে Solution.main()।"

"পদ্ধতিটি কী ফলাফল main()দেয়?"

"কিছুই না! ফলাফলের ধরন হল void। এটি খালি টাইপের মতো, একটি স্থানধারক।"

main()" এর বন্ধনীতে কি আছে?"

"হুম... দেখা যাচ্ছে যে mainপদ্ধতিটি আর্গুমেন্ট (!) নেয়। সেগুলিকে স্ট্রিংগুলির একটি অ্যারে হিসাবে দেওয়া হয়।"

"এটা ঠিক। এবং প্যারামিটারের নামটি argsআমাদের মনে 'আর্গুমেন্টস' প্রস্তাব করে। প্রোগ্রাম শুরু হলে, আপনি এটিকে আর্গুমেন্ট পাস করতে পারেন - স্ট্রিংয়ের একটি অ্যারে। সেগুলি argsপদ্ধতিতে অ্যারেতে থাকবে main()।"

"ওহ! আমি প্রথমবার যখন এটি দেখেছিলাম তখন আমি এটি সম্পর্কে অবাক হয়েছিলাম, কিন্তু তারপরে আমি এটিতে অভ্যস্ত হয়েছি এবং চিন্তা না করেই প্যারামিটার তালিকা লিখতে শুরু করেছি।"

"আমরা সবাই সেখানে রয়েছি। অবশেষে, Exceptionপদ্ধতিতে (বা এর উত্তরসূরিদের) মতো অনিয়ন্ত্রিত ত্রুটিগুলি ঘটতে পারে । ঘোষণার অংশটির main()জন্য আমরা এটি জানি ।"throws Exception

"ধন্যবাদ, ঋষি। আমি সবকিছু বুঝতে পারিনি, কিন্তু এটি আকর্ষণীয় ছিল।"

"আপনাকে স্বাগতম। ধীরে ধীরে আপনি এই সমস্ত সূক্ষ্ম বিষয়গুলি বুঝতে পারবেন, আমি নিশ্চিত।"