সি-শার্প -০১


1.   সি-শার্প (C#) কী ?
C# is an elegant and type-safe object-oriented programming language that enables developers to build a variety of secure and robust applications that run on the .NET Framework. You can use C# to create Windows client applications, XML Web services, distributed components, client-server applications, database applications, and much, much more.
Basically it’s a combination of C++ and visual basic and also contains features similar to those of Java.
সি শার্প একটি সহজ, আধুনিক অবজেকট ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ। পূর্ববর্তী প্রোগ্রামিং ল্যাঙ্গুয়েজ গুলোর বিভিন্ন সীমাবদ্বতা দূর করার লক্ষ্যে মাইক্রোসফট করপোরেশান ২০০০ সালে এই নতুন প্রোগ্রামিং ল্যাঙ্গুয়েজের উদ্ভাবন করেন। Danish software engineer Anders Hejlsberg এর চীফ আর্কিটেকচার।

2.   অবজেক্ট (Object): বিশদ ভাবে বলতে গেলে আমরা যা দেখি, যা স্পর্শ করতে পারি অথবা যা চিন্তা করতে পারি তাকেই অবজেক্ট বলা যায়। প্রোগ্রামিং এর ভাষায়, অবজেক্ট বলতে এমন কিছুকে বুঝানো হয় যার কিছু বৈশিষ্ট(Attribute) এবং আচরন(Behavior) থাকবে। অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এ বৈশিষ্টকে ডাটা ফিল্ড(Data Field) আর আচরনকে মেথড(Method) বা ফাংশন(Function) বলে।

3.   ক্লাস (Class): সাধারণ সংগা অনুসারে ক্লাস বলতে অবজেক্ট এর নীলনকশা(Blue Print) কে বুঝায়। আরেকটু ব্যাখ্যা করে বলতে গেলে আমরা বলতে পারি যে একটা অবজেক্ট কেমন হবে তা যেখানে নির্ধারণ করা থাকে তার নাম ক্লাস। এই ক্লাস দিয়ে তৈরি অবজেক্টকে ঐ ক্লাসের অস্তিত্ব(Instance) বলে।

4.   Public class কি?
সাধারন কথায় যে ক্লাস কে সব অবজেক্ট access করতে পারবে তাই হল public class. আমরা যে বাসে চড়ি তা হল পাবলিক বাস এটাতে যে কেউ চড়তে পারে কিন্তু যে গাড়ি চলতে দেখা যায় তা হল প্রাইভেট কার এটাতে শুধু যার গাড়ি সে আর সে যাদের access দেবে তারা চড়তে পারবে এটা হল private class

5.   অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP):  অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কি? ক্লাস এবং অবজেক্টের ধারণাকে কাজে লাগিয়ে যে প্রোগ্রামিং করা হয় তাকেই বলা হয় অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং। Object Oriented এর core concept টি
a.     Encapsulation
b.    Inheritance
c.     Polymorphism
d.    Abstraction


6.   Encapsulation:
Encapsulation হল অবজেক্ট এবং মেথড কে একটা capsul এর মধ্যে আবদ্ধ রাখা এর অপর নাম Data hiding বা Data protectionঅর্থাৎ টা সেমিকোলনের ভিতরে Encapsulated মেথড create করলে একটা মেথড অন্য মেথড এর variable কে access করতে পারবে না ফলে এক মেথডের ডাটা অন্য মেথডের কাছে সুরক্ষিত থাকে
একজন সফটওয়্যার ব্যবহারকারীর জানার দরকার নেই সফটওয়্যারটি কীভাবে কাজ করে (যারা নন ডেভলপার) তার শুধু কাজ চললে বা মনমত পার্ফর্মেন্স পেলেই হল। ইউজার থেকে ডাটা হাইডিং এর এই কাজটি করাই হলো Encapsulationকোন ক্লাসের Attribute গুলোকে সাধারণত আমরা Encapsulated করে থাকি এবং সেটা করা হয় বিভিন্ন Access Modifier (যেমন, public, private, protected, internal ইত্যাদি) দিয়ে।
এককথায় প্রোগ্রামিং এ Encapsulation হলো ডাটা ও মেথডকে একসাথে একটি সিঙ্গেল ইউনিটে (যেমনঃ- ক্লাস) র‍্যাপিং/বাইন্ড বা একত্র করে ফেলা যাতে ক্লায়েন্ট বা ইউজার এ ব্যাপারে না জানতে পারে
What is encapsulation?
Encapsulation is the process of hiding irrelevant data from the user. To understand encapsulation, consider an example of mobile phone. Whenever you buy a mobile, you don’t see how circuit board works. You are also not interested to know how digital signal converts into analog signal and vice versa. These are the irrelevant information for the mobile user, that’s why it is encapsulated inside a cabinet.
In C# programming, we will do same thing. We will create a cabinet and keep all the irrelevant information in it that will be unavailable for the user.

7.   Inheritance:
Inheritance বলতে আসলে বুঝায় উত্তরাধিকার সুত্রে কোন কিছু পাওয়া। আমরা প্রত্যেকেই আমাদের নিজ নিজ পিতামাতার কিছু বৈশিষ্ট্যধারণ করে থাকি। একই বংশের লোকজনদের মধ্যে সাধারণত কিছু Common বৈশিষ্ট্য থাকা অস্বাভাবিক কিছু নয়। দোষগুণ যা আছে তা বংশানুক্রমে চলতে থাকে। পুরনো কোড ব্যবহার করা এবং আপনার নতুন ক্লাসকে আরও কিছু Method Attribute যোগ করে আরও শক্তিশালী করে তোলা Inheritance এর অন্যতম কাজ।
যেমন আমরা Animal ক্লাসে লক্ষ্য করি। Animal ক্লাসের সদস্যরা কি করে? খায়দায়, ঘুমায়, শিকার করে, চলাফেরা করে আরও অনেক কিছু করেআমরা যদি এখন বলি Bird inherits Animal তাহলে Animal class এর eat, sleep hunt মেথডগুলো অটোমেটিক` চলে আসবে Bird ক্লাসে এবং তার জন্য আমার আর কিছুই করতে হবে না। যেটা অতিরিক্ত লাগবে সেটা শুধু অ্যাড করে দেব।
class derivedClass : public baseClass
class Bird : public Animal

8.   Polymorphism কী?
Poly মানে বহু সেটা আমরা আগেই জানি। Polymorphism কে সেই হিসেবে বহুরূপী বলা যেতে পারে। একই জিনিসের বিভিন্ন রূপ থাকা মানেই সেই জিনিসটি বহুরূপী। অর্থাৎ polymorphism বলতে বোঝায় একই নামের function ভিন্ন ভিন্ন object এর জন্য ভিন্ন ভিন্ন ভাবে response করবে।
পলিমর্ফিজমও বিশাল একটি টপিক। আগেই বলে রাখা ভাল, Function Overloading, operator overloading কে সরাসরি Polymorphism বলা যাবে না। পলিমর্ফিজমের সংজ্ঞায় Function/Method overloading পড়ে না কিন্তু একে পলিমর্ফিজমের একটি অংশমাত্র হিসেবে বলতে ক্ষতি নেই।

9.   What is abstraction?
Abstraction হলো Implementation hiding... কোন অবজেক্ট বা মেথড কিভাবে ইমপ্লিমেন্ট হয় এরকম প্রয়োজনীয় ব্যাপার ব্যবহারকারীর কাছে গোপন রাখা তবে ব্যবহারকারীকে শুধুমাত্র প্রাসঙ্গিক সর্বনিম্ন ডাটা দেখানো হয় যেটা না দেখালেই নয়। Abstraction is mechanism to show only relevant data to the user.
Consider mobile example. Whenever you buy a mobile phone, you see their different types of functionalities as camera, mp3 player, calling function, recording function, multimedia etc. It is abstraction, because you are seeing only relevant information instead of their internal engineering.

10.  Abstraction এবং Encapsulation এর মধ্যে পার্থক্য?
a.     Abstraction হলো Implementation hiding আর Encapsulation হলো Data Hiding অর্থাৎ একটি অব্জেক্টের ডাটাকে আরেকটি অবজেক্ট থেকে প্রোটেক্ট করা বা এক্সেস কন্ট্রোল করা
b.    Abstraction হলো মেথডের সাথে সম্পর্কযুক্ত যেখানে শুধুমাত্র প্রাসঙ্গিক সর্বনিম্ন ডাটা দেখানো হয় কিন্তু কিভাবে Implementation হয় এরকম অপ্রয়োজনীয় তথ্য ক্লায়েন্ট বা ইউজারকে জানতে দেয়া হয় না। আর Encapsulation হলো ডাটা ও মেথডকে একসাথে একটি সিঙ্গেল ইউনিটে (যেমনঃ- ক্লাস) র‍্যাপিং/বাইন্ড বা একত্র করে ফেলা এবং সেটা করা হয় বিভিন্ন Access Modifier (যেমন, public, private, protected, internal ইত্যাদি) দিয়ে। অর্থাৎ Encapsulation মূলত ক্লায়েন্টকে একটি অবজেকটের ভিতরের ভিউ অর্থাৎ একটি অব্জেকটের ইন্টার্নাল ডিটেইলস জানতে দেয় না।

11.  কেন এবং কখন আমরা Abstract Class ব্যবহার করি?
আমরা যখন পরষ্পর সম্পর্কযুক্ত দুই বা ততোধিক ক্লাসের কমন functionalities গুলো একটা base class এ সরিয়ে নিতে চাই কিন্তু উক্ত base class এর কোন ইন্সট্যান্স বা অব্জেক্ট তৈরি হোক সেটা আমরা চাই না তখনি আমরা Abstract Base Class তৈরি করি।
Abstract মানে হচ্ছে অবাস্তব বা নির্বস্তুক... সাধারণত একটি ক্লাস তৈরি করা হয় যেন তার একটি অব্জেক্ট বা ইন্সট্যান্স তৈরী করতে পারি। কিন্তু Abstract Class এর কোন অবজেক্ট তৈরি করা যায় না। শুধু মাত্র Derived Class এ এর ইমপ্লিমেন্টেশান করা হয়।

12.  Abstract Class এবং Interface এর মধ্যে পার্থক্য?
a.     একটি ক্লাস একসাথে multiple Interfaces থেকে Inherit হতে পারে কিন্তু একসাথে multiple Abstract Class ক্লাস থেকে Inherit হতে পারে না অর্থাৎ একটি ক্লাস শুধুমাত্র একটি Abstract ক্লাসকেই Inherit করতে পারে কিন্তু অন্যদিকে একটি ক্লাস এক বা একাধিক Interfaces কে Inherit করতে পারে।
b.    একটি Abstract Class অন্য আরেকটি Abstract Class কিংবা অন্য আরেকটি Interface থেকে Inherit হতে পারে। কিন্তু একটি Interface শুধু অন্য আরেকটি Interface থেকেই Inherit হতে পারে কোন Abstract Class ক্লাস থেকে Inherit হতে পারে না
c.     Abstract Class এর ফিল্ড বা কনস্ট্রেইনটস থাকতে পারে (যেমনঃ int ID;) কিন্তু  Interface এর কোন ফিল্ড থাকতে পারবে না।
d.    Abstract Class এর access modifier থাকতে পারে (যেমনঃ private, public, protected, internal), কিন্তু  Interface এর কোন access modifier থাকতে পারবে না।
e.     Abstract Class  তার নিজস্ব যেকোন মেম্বার বা মেথড এর জন্য উক্ত মেথডে সে নিজেই ইম্লিমেন্ট হতে পারে। কিন্তু কোন Interface তার নিজস্ব কোন মেম্বারের জন্য ইম্লিমেন্ট হতে পারে না।

f.     একটি Abstract Class সম্পূর্ন কোড provide করতে পারে কিন্তু একটি Interface কোন কোড না শুধু signature provide করতে পারে।

No comments:

Post a Comment