সি শার্পের ধারাবাহিক টিউনের ৮ম পর্বে আপনাকে স্বাগতম। আবার বহুদিন পরে লিখতে বসলাম। আশা করি আপনারা সবাই ভাল আছেন। আজকের এই পর্বে আমি আলোচনা করব তিনটি বিষয় নিয়েঃ
আমাদের প্রথম বিষয় হল নেমস্পেস (namespace), namespace হল একই ধরনের ক্লাসের সমষ্টি। ক্লাস কি-সেটা নিয়ে পূর্বের টিউনে আলোচনা করেছি। এখন প্রশ্ন হতে পারে, namespace
কেন ব্যবহার করব? এটা একটি উদাহরন দিয়ে বোঝানো সম্ভব। যাদের প্রোগ্রামিং ল্যাঙ্গুয়েজ নিয়ে সামান্যতম জ্ঞ্যান রয়েছে, তারা নিশ্চই এটা জানেন যে সকল প্রোগ্রামিং ল্যাঙ্গুয়েজে অসংখ্য নিজস্ব বিল্ট-ইন ক্লাস থাকে যেগুলো সিস্টেম ক্লাস নামে পরিচিত। এখন মনে করুন, আপনি নিজের একটি ক্লাস বানাতে যাচ্ছেন যার নাম Form.cs, এখন সমস্যা হল নামে একটি সিস্টেম ক্লাস আছে। তথাপি, আপনি যখন আপনার Form ক্লাস কে ব্যবহার করবেন, কম্পাইলার কিভাবে বুঝবে যে কোন ক্লাস কল করতে হবে, কারন একই নামে একটি সিস্টেম ক্লাস ও আরেকটি ইউজার-ডিফাইন্ড ক্লাস রয়েছে। এই সমস্যার সমাধান করার জন্যই namespace ব্যাবহার করতে হয়।
আপনি namespace ব্যাবহার করে যেকোন ক্লাস কেই কল করতে পারেন।
যেমনঃ
System.Windows.Form
এভাবে আপনি সিস্টেম ক্লাস Form ব্যবহার করছেন।
অথবা, MyClass.Form
এভাবে নিজের তৈরী ক্লাস কেও ব্যবহার করতে পারেন। এখানে MyClass হল namespace
নিচের স্ক্রীনশট দেখুন, আশা করি বুঝতে পারবেন।
এক্সেপশান হল এমন কোন ঘটনা যা সাধারণত ঘটেনা বা যা স্বাভাবিক নয়। এক্ষেত্রে, এক্সেপশন হল যেকোন ধরনের ক্রুটি যা আপনি আগে থেকে বুঝতে পারবেন না। সাধারনত অধিকাংশ সমস্যা বা এরর আপনি পূর্বেই বুঝতে পারেন যেমন- কোন ডাটা ফিল্ড খালি থাকলে, কোন ফাংশন ভুল কোন কাজ করলে ইত্যাদি। কিন্তু কখনো এমন সমস্যায় পরতে পারেন যা পূর্বেই কোন পূর্বাভাস দেয়া সম্ভব না, যেমন- ফাইল থেকে ডাটা পড়ার সময় কোন এরর দেখা দিলে তা পূর্বেই বোঝার কোন উপায় নেই এবং এই ধরনের এররের কারনে আপনার এপ্লিকেশন হটাৎ করেই হ্যাং করতে পারে যা কোন ভাবেই কাম্য নয়। সাধারণত এই সকল ক্ষেত্রে আমরা এক্সেপশন হ্যান্ডলিং করে থাকি।
Exception সাধারণত তিনটি কিওয়ার্ড ব্যবহার করে।
try
{
//Suspicious Code That May Cause Error
}
catch(Exception)
{
//do something when exception occurs
}
আপনি যখন মনে করবেন যে আপনার কোডের কোন অংশ বা এলিমেন্ট এক্সেপশন দেখাতে পারে, সেটা আপনি try block এর ভিতরে লিখবেন। যদি, try block এ লেখা কোড এলিমেন্ট এক্সেপশন throw করে তাহলে catch block এক্সিকিউট হবে। catch block হল এমন স্থান যেখানে আপনি এক্সেপশন টা ধরবেন এবং এক্সেপশন হলে কি কাজ করতে হবে তা নির্ধারন করে দিতে পারেন।
অনেক সময় এক্সেপশন আপনার প্রোগ্রাম কে একটি অনিশ্চিত পর্যায়ে নিয়ে যেতে পারে, যেখান থেকে আপনি কোন কাজ করতে পারবেন না, অথচ আপনার কম্পিউটারের রিসোর্স (মেমোরি, ডিস্ক স্পেস ইত্যাদি) অপচয় করবে। এমন অবস্থা থেকে বার হবার জন্য সচরাচর উপরের try/catch ব্যাবহার করে থাকি, কিন্তু যদি এমন কোন অবস্থা আসে, যেখানে আপনার প্রোগ্রাম এক্সেপশন দেখাক আর নাই দেখাক আপনাকে আপনার কাজ সম্পন্ন করে কিছু নির্দিষ্ট কাজ অবশ্যই করতে হবে (যেমন, ফাইল ওপেন করে Read এর পর ফাইল বন্ধ করে সকল রিসোর্স ছেড়ে দিতে হবে)। এধরনের নির্দিষ্ট কাজ যা এক্সেপশন হবে কি হবে না, তার উপর নির্ভরশীল নয়, এসকল ক্ষেত্রে Finally ব্যবহার করা হয়। সাধারনতঃ try/catch এর পরে লেখা হয়ে থাকে।
try
{
//Code to be checked for exception
}
catch (Exception e)
{
//Code for taken measures to avoid exception
}
finally
{
//Code that has to be executed irrespective to the occurrence of exception
}
প্রোপার্টিজ একটি গুরুত্বপূর্ণ বিষয় এরজন্য আপনাদের পূর্বের টিউনের কিছু বিষয় সম্পর্কে সম্যক ধারনা থাকতে হবে (যেমন-ক্লাস, এনক্যাপ্সুলেশন, এক্সেস স্পেসিফায়ার)
আমরা জানি, প্রত্যেক ক্লাসের কিছু নিজস্ব ডাটা ভ্যারিয়েবেল থাকে, ডাটা নিরাপত্তা নিশ্চিত করার জন্য আমরা সাধারনতঃ এসকল ভ্যারিয়েবেল এর এক্সেস প্রাইভেট করা হয়। এখন এধরনের প্রাইভেট ভ্যারিয়েবেল গুলা বাইরের কোন ক্লাস থেকে Read/Write এর জন্য প্রবেশাধিকার দরকার। সাধারনতঃ কোন ডাটা ভ্যারিয়েবেল কে যখন আমরা প্রাইভেট হিসেবে ডিক্লেয়ার করি তখন তা বাইরের কোন অংশ থেকে তা প্রবেশ করা সম্ভব নয়। এধরনের অবস্থায় আমরা কি করতে পারি? আমাদের সমস্যা দুইটিঃ
সমাধানঃ
এজন্য এমন একটি তৃতীয় উপায় বার করা প্রয়োজন যা একিসাথে আমাদের দুইটি সমস্যার সমাধান করবে। এমন একটি উপায়ের নাম হলঃ প্রোপার্টিজ ব্যবহার করা।
প্রোপার্টিজ ব্যবহার করে আপনিঃ
আপনি কোন ডাটা ভ্যারিয়েবেল এউপায়ে ব্যাবহার করবেন তখন আপনাকে ডাটা এঙ্ক্যাপ্সুলেট করতে হবে। কিভাবে তা করবেন তা নিচে দেয়া হলঃ
2) এরপর, দেখুন এখানে মাঝামাঝি Encapsulate Field অপশন রয়েছে। তা ক্লিক করুন অথবা Ctrl key চেপে R এবং পরে E press করুন। এরপর নিচের মত একটি উইন্ডো আসবে এবং আপনাকে দেখাবে কোন ডাটা Encapsulate করা হচ্ছে এবং করার পর কি নাম হবে। আপনি এখান থেকে নতুন নাম দিয়ে দিতে পারেন। OK ক্লিক করুন।
এরপর আরেকটি উইন্ডো আসবেঃ
এবার Apply click করুন আর দেখুন আপনার ভ্যারিয়েবেল Encapsulated হয়ে গিয়েছে।
এখানে দেখুন, আমাদের উদাহরনে data_no নামে একটি ইন্টিজার টাইপের প্রাইভেট ভ্যারিয়েবেল এঙ্ক্যাপ্সুলেত করার কারনে একটি Data_no নামে প্রোপার্টি ফিল্ড তৈরী হয়েছে যার নিজস্ব দুইটি ফাংশন আছেঃ
get function টি লক্ষ করুন যেখানে data_no filed টিকে return করা হচ্ছে। এর অর্থ হলঃ এই get function টির মাধ্যমে আমরা ডাটা Read করতে পারব। অনুরূপভাবে set এর মাধ্যমে ডাটা write করা যাবে।
উপরের উদাহরন থেকে লক্ষ করুন, আমরা একটি ভ্যারিয়েবেল কে encapsulate করার সময় get এবং set দুইটি ফাংশন তৈরী হচ্ছে Read/Write এর জন্য। এখন এমন প্রয়োজন হতে পারে যে শুধু ডাটা Read করার প্রয়োজন হল কিন্তু Write করার প্রয়োজন নেই। সেক্ষেত্রে কি করবেন?
সব থেকে সহজ ভাবে চিন্তা করে দেখুন, আমি যদি উপরের উদাহরনে Encapsulated field
Data_no থেকে শুধু set ফাংশন মুছে দেই তাহলে কিন্তু শুধু get ফাংশনের কারনে ডাটা Read করতে পারবেন কিন্তু Write হবে না। তাহলে তাই করুনঃ উপরের পদ্ধতি অনুসারে Data Encapsulate করুন, কিন্তু শুধু set ফাংশন মুছে দিন। নিচের ছবিটি লক্ষ করুনঃ
একি ভাবে আপনি Write Only attribute তৈরী করতে পারবেন।
এতক্ষন দেখলাম কিভাবে ডাটা এঙ্ক্যপাসুলেত করতে হয়, এখন দেখব কিভাবে এসব ডাটা বাইরের ক্লাস থেকে এক্সেস করতে হয়। বাইরের কোন ক্লাস বা মেথড থেকে এক্সেস করার একটি জনপ্রিয় এবং সম্ভবতঃ একমাত্র উপায় হল আপনি যে ডাটা এক্সেস করবেন সেই ডাটা টি যে এক্সটার্নাল ক্লাসের সদস্য সেই ক্লাসের অবজেক্ট/ইন্সটেন্স তৈরী করার মাধ্যমে। আমাদের উদাহরনে ডাটা ফিল্ড গুলো যেগুলা এঙ্ক্যাপ্সুলেট করলাম সেগুলা Encapsulation নামক একটি ক্লাসের সদস্য (Data Member)।
এখন আরেকটি ক্লাস যার নাম Access, তার নিজস্ব ফাংশন থেকে এনক্যাপ্সুলেটেড ফিল্ড গুলো এক্সেস করব।
একিভাবে Write করার জন্যঃ
মনে রাখবেনঃ আপনি ডাটা Read/Write যাই করুন না কেন, সেটা হবে এনক্যাপসুলেটেড ফিল্ড এর get বা set function দিয়ে। তাই যদি কোন Read Only field (যার set function আপনি পূর্বে মুছে দিয়েছেন) উপরের স্ক্রিনশটের মত write করতে চান তাহলে প্রোগ্রাম রান করবে না। একি কথা Write Only field এর ক্ষেত্রেও প্রযোজ্য।
এভাবে আপনি ডাটা এনক্যাপসুলেশনের মাধ্যমে ডাটা নিরাপত্তা ও নিয়ন্ত্রীত প্রবেশাধিকার নিশ্চিত করতে পারেন।
আজকে এই পর্যন্ত। আশা করি আপনাদের সবার ভাল লাগবে। ধন্যবাদ।
আমি জ্যোতি। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 13 বছর 10 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 17 টি টিউন ও 98 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 2 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
আমি জ্যোতি চৌধুরী। কম্পিউটার সাইন্স এন্ড ইঞ্জিনিয়ারিং এর ছাত্র। মিলিটারি ইন্সটিটিউট অফ সাইন্স এন্ড টেকনোলজি, মিরপুর ক্যান্টনমেন্ট এ পড়াশোনা করছি। ভাল লাগে বন্ধুদের সাথে আড্ডা দিতে, কম্পিউটার প্রযুক্তি সম্পর্কে জানতে। আগ্রহ আছে সফটওয়্যার ডেভেলপমেন্ট, প্রোগ্রামিং ও ওয়েব ডেভেলপমেন্টের প্রতি। স্বপ্ন দেখতে ভালবাসি। স্বপ্ন কে বাস্তবে রুপায়ন করতে পছন্দ করি।
Thanks for the tune.
অনেক দিন পর টিউন করলেন।
আপনার আগের টিউন গুলো আমি পরেছি।
চমৎকার।
😀