ডিজাইন লগ

সফটওয়্যার আর্কিটেকচার, ডিজাইন এবং ডেভেলপমেন্ট নিয়ে আমার যত ভাবনা

LinkedIn Facebook
  • নীড়
  • লেখক
  • প্রোগ্রামিং
    • ডট নেট
    • সি-শার্প
  • সফটওয়্যার আর্কিটেকচার এবং ডিজাইন
    • অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং
    • অবজেক্ট ওরিয়েন্টেড ডিজাইন ও এনালাইসিস
    • সলিড প্রিন্সিপালস
    • ডিজাইন প্যাটার্ন
      • ক্রিয়েশনাল প্যাটার্ন
      • স্ট্রাকচারাল প্যাটার্ন
      • বিহেভিয়ারাল প্যাটার্ন
গত পর্বে আমরা ফ্যাক্টরি অবজেক্ট সম্পর্কে জেনেছি। কেন এবং কীভাবে ফ্যাক্টরি অবজেক্ট ব্যবহার করতে হয় তা নিয়ে আলোচনা  করেছি। আজকে আমরা আলোচনা করব ফ্যাক্টরি মেথড প্যাটার্ন নিয়ে। আপনি যদি আগের পর্বটি পড়ে না থাকেন তাহলে এখানে ক্লিক করে পড়ে নিতে পারেন। এতে করে আজকের প্রসঙ্গটি বুঝতে আপনার বেশ সুবিধা হবে।

যাই হোক, ফ্যাক্টরি মেথড প্যাটার্ন হচ্ছে একটি ক্রিয়েশনাল ডিজাইন প্যাটার্ন। অর্থাৎ আমরা মূলত কোন ক্লাসের ইন্সট্যান্স তৈরি করতে ফ্যাক্টরি মেথড প্যাটার্ন ব্যবহার করব।

- আচ্ছা! যে কোন ক্লাসের ইন্সট্যান্স তৈরি করতে চাইলেই কি আমাকে ফ্যাক্টরি মেথড প্যাটার্ন ইউজ করতে হবে?
- না। আপনার যদি জানা থাকে যে কোন ক্লাসের ইন্সট্যান্স তৈরি করতে হবে সেক্ষেত্রে আপনি ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করে কাজ সেরে ফেলতে পারেন। 
- তাহলে কখন ইউজ করতে হবে?
- কম্পাইল টাইমে আপনার যদি জানা না থাকে যে কোন ক্লাসের ইন্সট্যান্স তৈরি করতে হবে তবে আপনি ফ্যাক্টরি মেথড প্যাটার্ন ব্যবহারের কথা ভাবতে পারেন।
- একটি উদাহরণ দিয়ে বুঝিয়ে বললে ভালো হত!

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

তবে সবসময়ই যে ফ্যাক্টরি মেথড প্যাটার্ন ব্যবহার করতে হবে এমন কিন্তু নয়। ডিজাইন প্যাটার্ন আমাদের কিছু সুবিধা দেয় ঠিক তবে তার সাথে সাথে কিন্তু কোড কমপ্লেক্সটিও বাড়িয়ে দেয়। সেই ক্ষেত্রে হিতে বিপরীত যেন না হয় সেদিকে খেয়াল রাখতে হবে। এই কথাটা একটি সফটওয়্যার ডিজাইন প্রিন্সিপল এভাবে বলছেঃ

Keep it simple, stupid!

মজার তাই না? এই প্রিন্সিপলকে সংক্ষেপে বলা হয় KISS. যাইহোক, সমস্যার উপর ভিত্তি করে আমাদের সমাধান তৈরি করা উচিৎ। প্রথমে সহজ সমাধান দিয়ে শুরু করা উচিৎ এরপর যদি দেখা যায় এভাবে আর কোড মেইনটেইন করা যাচ্ছে না সেক্ষেত্রে আমরা কোড রিফ্যাক্টর করতে পারি।

তো আমাদের বিজনেস প্রবলেমটি যেহেতু খুব সোজা সেহেতু আমরা সহজ একটি সমাধান লিখি। এক্ষেত্রে সমাধানটি হচ্ছে, ফ্যাক্টরি অবজেক্ট ব্যবহার করা। পরে আমরা বিজনেস আরও কমপ্লেক্স করব এবং এই কোড রিফ্যাক্টর করে ফ্যাটরি মেথড প্যাটার্ন দিয়ে ইমপ্লিমেন্ট করব। এখন, ফ্যাক্টরি অবজেক্ট ব্যবহার করে সমাধান লিখার পর আমাদের কোড বেজের যে অবস্থা হলঃ 

(গিস্টে ক্লাসগুলো বর্ণানুক্রমে সর্ট হয়ে যাচ্ছিল তাই ক্লাসের নামের আগে সিরিয়াল নাম্বার বসিয়ে দিয়েছি।)

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

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

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

ফ্যাক্টরি মেথড ডিজাইন প্যাটার্ন ডায়াগ্রাম

তো ফ্যাক্টরি মেথড প্যাটার্নে দুই ধরণের অবজেক্ট থাকে। যথাঃ ক্রিয়েটর এবং প্রডাক্ট। ক্রিয়েটর ফ্যাক্টরি হিসেবে কাজ করে। অর্থাৎ ক্রিয়েটর কোন একটি অবজেক্ট তৈরি করে এবং এজন্যই একে ফ্যাক্টরি বলা হয়। আর ক্রিয়েটর যে অবজেক্টটি তৈরি করে রিটার্ন করে তাকে প্রডাক্ট বলে। যেহেতু মেথড ব্যবহার করে আমরা অবজেক্ট তৈরি করি তাই একে ফ্যাক্টরি মেথড প্যাটার্ন বলা হয়। তো, আমাদের ক্ষেত্রে ক্রিয়েটর/ফ্যাক্টরি হবে DhakaiyaPotatoFactory এবং ChittagonianPotatoFactory আর প্রডাক্ট হবে DhakaiyaRegularPotato, DhakaiyaRoundPotato, DhakaiyaSweetPotato, ChittagonianRegularPotato, ChittagonianRoundPotato, ChittagonianSweetPotato. 

ঝটপট কোড লিখে ফেলি তাহলে আমরা?

বেশি কোড দেখে ঘাবড়ে যাবার কিছুই নেই। কোড খুব সহজ এখানে! আমারা শুধু শাখা অনুযায়ী দায়িত্বটা ভাগ করে দিয়েছি আর কি। আগে আমাদের ফ্যাক্টরি অবজেক্ট ছিল একটি, শুধু মাত্র পটেটো ফ্যাক্টরি। তখন আমরা কন্সট্রাক্টর দিয়ে আমাদের পছন্দের অবজেক্ট ইনিশিয়ালাইজ করতাম। আর এখন আমাদের প্রত্যেক শাখা অনুযায়ী আলাদা ফ্যাক্টরি আছে, এই আরকি! এবার যদি আমরা সিলেটে গিয়ে একটি শাখা খুলি, কী করতে হবে বলুন তো? 

নতুন একটি ফ্যাক্টরি বানাতে হবে যেটা কিনা পটেটো ফ্যাক্টরিকে ইনহেরিট করবে। এবং আলুর ধরণ অনুযায়ী আরও তিনটা ক্লাস বানাতে হবে যেটা কিনা পটেটো ক্লাস কে ইনহেরিট করবে। ব্যস, এতোটুকুই! তবে খেয়াল রাখতে হবে যে অবজেক্টের ভেরিয়েশন অনুযায়ী ক্লাসের সংখ্যা কিন্তু বেড়েই চলবে। তাহলে, কী বুঝলাম?

Design pattern gives us flexibility but it comes with a cost.

যাইহোক, এবার যদি কেউ জিজ্ঞাসা করে ফ্যাক্টরি মেথড প্যাটার্ন কী, বলা যাবে?

ফ্যাক্টরি মেথড প্যাটার্ন হচ্ছে একটি ক্রিয়েশনাল ডিজাইন প্যাটার্ন যেটা কিনা অবজেক্ট তৈরি করার ইন্টারফেস প্রদান করে সুপারক্লাসে/বেজ ক্লাসে কিন্তু ইমপ্লিমেটেশনের দায়িত্ব দেয় সাবক্লাস/ চাইল্ড ক্লাস কে।

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

আর একটি ব্যাপার হচ্ছে, ইন্টারফেস মানে কিন্তু শুধুই "ইন্টারফেস টাইপ" না। একটি মেথড যদি অন্য কোন অবজেক্টের জন্য উন্মুক্ত করে দেওয়া হয় যাতে করে সে মেথডটি একসেস বা ম্যানুপুলেট করতে পারে তাহলে মেথডের এই যে উন্মুক্ত অবস্থা একেও ইন্টারফেস বলে এক্সপ্লেইন করা হয়। এক্ষেত্রে ইন্টারফেস বলতে প্রবেশদ্বারের মত কিছু একটা বোঝানো হয়। আমরা যেমন বলি না, ইউজার ইন্টারফেস? ঠিক ওইরকম অর্থে। যার সাহায্যে কোন কিছু একসেস করা যায় তাই ইন্টারফেস। 

তো, আজকের মত এখানেই শেষ করছি। আগামী পর্বে আমরা গল্প করব এবস্ট্র্যাক্ট ফ্যাক্টরি প্যাটার্ন নিয়ে। 

Share
Tweet
Pin
Share
No মন্তব্য(গুলি)
ফ্যাক্টরি শব্দের অর্থ আমাদের সবারই জানা। বাংলায় আমরা ফ্যাক্টরিকে বলি কারখানা।

- তো, কারখানায় আসলে কী হয়? 
- কিছু একটা তৈরি হয়।
- আচ্ছা! সফটওয়্যার ডেভেলপমেন্টে আবার কারখানার কী প্রয়োজন?
- আমরা যখন কোন সফটওয়্যার লিখি তখন আমাদের বিভিন্ন ধরণের টাইপ (class, structure প্রভৃতি) নিয়ে কাজ করতে হয়। তো এই টাইপ গুলোর ইন্সট্যান্স আমরা ক্লায়েন্ট কোডেও তৈরি করতে পারি বা কোন ফ্যাক্টরিকে দিয়েও তৈরি করিয়ে নিতে পারি। কোন একটি নির্দিষ্ট ক্লাস যদি আমাদেরকে কোন টাইপের ইন্সট্যান্স তৈরি করে দেয় তবে তাকে ফ্যাক্টরি অবজেক্ট বলা হয়।

এখন প্রশ্ন হচ্ছে এই ফ্যাক্টরি অবজেক্ট আমাদের লাগবে কেন? এর সাথে ফ্যাক্টরি মেথড প্যাটার্নেরই বা কী সম্পর্ক? এসব প্রশ্নের উত্তর দেবার আগে চলুন দুটি সফটওয়্যার ডিজাইন প্রিন্সিপলসের সাথে পরিচয় হয়ে নেই। প্রিন্সিপলস দুটি হল DRY (Don't Repeat Yourself) এবং OCP (Open Closed Principle)।

DRY প্রিন্সিপল আমাদের বলে যে, আমরা যেন আমাদের সফটওয়্যারে একই কোড বারবার কপি-পেস্ট করে ব্যবহার না করি।

- কেন? করলে সমস্যা কী?
- প্রথম সমস্যা হচ্ছে, একই কোড বারবার লিখে আমরা আমাদের সময় এবং কম্পিউটারের মেমোরি দুটোরই অপব্যবহার করছি। আর দ্বিতীয় সমস্যা আপাতদৃষ্টিতে চোখে না পরলেও পরবর্তীতে স্টেকহোল্ডার যখন কোন চেঞ্জ চাইবে তখন ঠিকই চোখে পরবে। তখন প্রত্যেক সেসব জায়গায় গিয়ে আমাদের চেঞ্জ করতে হবে যেখানে আমরা কোড ডুপ্লিকেট করেছি। এতে করে মেইন্টেইনেন্স থেকে ইউনিট টেস্টিং পুরোটাই দুঃস্বপ্নে রূপান্তরিত হবে। আর ভুলক্রমে কোথাও যদি কোড রিফ্যাক্টর করতে ভুলে যাই! থাক! সেদিকে আর না-ই বা গেলাম।

OCP হচ্ছে SOLID প্রিন্সিপলসের O। ওসিপি আমাদের বলে যে একটি ক্লাস পরিবর্তনের জন্য বন্ধ এবং সম্প্রসারণের জন্য খোলা রাখতে হবে।

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

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

[নোটঃ যখনই আমরা দেখব যে, রানটাইমে আমাদের কোন অবজেক্ট অ্যালোকেট করতে হচ্ছে অর্থাৎ কম্পাইল টাইমে আমরা আসলে জানিনা যে ক্লায়েন্ট কোডের কোন টাইপের অবজেক্ট লাগবে সেই ক্ষেত্রে আমরা ফ্যাক্টরি মেথড প্যাটার্ন ইমপ্লিমেন্ট করার কথা ভাবতে পারি।]

ধরা যাক, আমাদের কাছে আপাতত দুই ধরণের কলম আছে। ইকনো এবং ম্যাটাডোর। যেহেতু দুইটা অবজেক্টই একই ধরণের সেহেতু আমরা এখানে ইনহেরিটেন্সের ব্যবহার করতে পারি। তো আমরা Pen নামে একটি বেজ ক্লাস বানালাম। বোঝার সুবিধার্থে আমরা এখানে শুধুমাত্র একটি প্রোপার্টি রেখেছি যেটা কিনা Price. আর যেহেতু Pen এখানে অ্যাবস্ট্রাকশন বা ধারণা মাত্র সেহেতু এটিকে আমরা abstract কী-ওয়ার্ড ব্যবহার করে ডিক্লেয়ার করেছি যাতে করে কেউ এই ক্লাসের  ইন্সট্যান্স তৈরি করতে না পারে। তো আমাদের বেজ ক্লাস টা দেখতে এরকম হলঃ 

এখন আমরা EconoPen এবং MatadorPen নামে দুইটা ক্লাস তৈরি করলাম যারা কিনা Pen ক্লাসকে ইনহেরিট করে। এখানে আমরা যার যার মূল্য সেট করে দিলাম। কোড দেখতে কিছুটা এরকম হলঃ 

এবার আমরা নিম্নোক্ত উপায়ে ক্লায়েন্ট কোড থেকে আমাদের সুবিধামত Econo/Matador ক্লাসের ইন্সট্যান্স তৈরি করতে পারব। 

স্পষ্টতই দেখা যাচ্ছে যে আমাদের ডিজাইনে একটি ঝামেলা আছে। ঝামেলাটি হচ্ছে ক্লায়েন্ট কোড নিজে Pen অবজেক্ট তৈরি করার দায়িত্ব নিচ্ছে। ভবিষ্যতে আমরা যদি নতুন কোন ধরণের কলম বিক্রির সিদ্ধান্ত নেই তাহলে ক্লায়েন্ট কোডে আরও একটি else if বাড়ানো লাগবে। অর্থাৎ আমরা কী কী ধরনের কলম বিক্রি করব  ক্লায়েন্ট কোডের সেটা আগে থেকে  জানা থাকতে হবে। আবার আমরা যদি কোন কলম বিক্রি বন্ধ করে দেই তাহলে ক্লায়েন্ট কোডে এসে সেই else if ব্লক টা তুলে দিতে হচ্ছে। 

এই যে আমরা নতুন কোন ফিচার যোগ/বিয়োগ হলে ক্লায়েন্ট কোড পরিবর্তন করছি এটা কিন্তু ওপেন ক্লোজ প্রিন্সিপল ভঙ্গ করছে। তাছাড়া শুধু এক জায়গা থেকেই যে এভাবে Pen অবজেক্ট তৈরি হবে তাও কিন্তু নয়। আমাদের প্রোগ্রামের অন্য কোন ক্লাস থেকে যদি অন্য কেউ Pen অবজেক্ট তৈরি করতে চায় তাকেও এসব কোড পুনরাবৃত্তি করতে হবে যেটা কিনা DRY প্রিন্সিপল ভঙ্গ করে। 

বোঝাই যাচ্ছে নেহাত ছোট একটি অ্যাপ্লিকেশনেই যদি আমাদের এতসব প্রবলেমে পরতে হয় তাহলে রিয়েল লাইফ প্রজেক্টে কী ধরণের বিশৃঙ্খলা তৈরি হতে পারে। আশা করি ফ্যাক্টরি অবজেক্টের প্রয়োজনীয়তা তুলে ধরতে পেরেছি। এবার আমরা দেখব, কীভাবে ফ্যাক্টরি অবজেক্ট আমাদের এসব ঝামেলা থেকে মুক্তি দিতে পারে।

তো আমাদের যেটা করতে হবে সেটা হচ্ছে PenFactory নামে একটি ক্লাস বানাতে হবে। এবং এই ক্লাসে একটি কন্সট্রাক্টর ডিফাইন করতে হবে যেটা কিনা প্যারামিটার হিসেবে penName নিবে এবং সেই অনুযায়ী আমাদেরকে অবজেক্ট বানিয়ে দিবে। অবজেক্ট পাবার জন্য আমরা একটি GetPen নামে একটি মেথড লিখলাম। কোড দেখতে কিছুটা নিচের মত হলঃ

এবার ক্লায়েন্ট কোড থেকে আমরা নিম্নোক্ত উপায়ে যেকোন Pen অবজেক্ট একসেস করতে পারব। 

এখন PenFactory তে আমরা যতখুশি নতুন ধরণের কলম যোগ করি না কেন,  ক্লায়েন্ট কোডের তা জানা লাগবে না এবং নতুন ফিচার যোগ/বিয়োগ করলেও ক্লায়েন্ট কোড ব্রেক করবে না। তাছাড়া Pen অবজেক্ট তৈরি করার দায়িত্ব PenFactory কে দিয়ে দেয়ায় অন্য কাউকে কোড ডুপ্লিকেট ও করতে হবে না।

এবার তাহলে আমরা নতুন একটি ফিচার যোগ করে দেখি যে আমাদের ক্লাসটি কী রকম ফ্লেক্সিবল/মেইন্টেইনবল হল। তো আমরা যেটা করব সেটা হচ্ছে Pen ক্লাসে Stock নামে নতুন একটি প্রোপার্টি যোগ করব। যদি স্টক থাকে তাহলে আমরা অবজেক্ট রিটার্ন করব আর যদি না থাকে তাহলে null রিটার্ন করব। তো দেখি ক্ল্যায়েন্ট কোডে হাত না দিয়ে আমরা এই কাজটা করতে পারি কিনা। নতুন ফিচার যোগ করার পর ক্লাস গুলোর চেহারা কিছুটা এরকম হলঃ 

খেয়াল করার বিষয় হল আমরা কিন্তু ক্লায়েন্ট কোডে কোন চেঞ্জ করিনি। ক্লায়েন্ট কোড টেরও পায়নি যে আমরা নতুন একটা বিজনেস লজিকের উপর ভিত্তি করে এখন Pen অবজেক্ট রিটার্ন করছি। তো এই হচ্ছে ফ্যাক্টরি অবজেক্ট। 

দুঃখের বিষয় হচ্ছে যে আমরা এখনো ফ্যাক্টরি মেথড প্যাটার্ন নিয়ে কথা বলা শুরু করতে পারলাম না। তবে আমরা ব্যাসিক টা কাভার করে ফেলেছি। এবার খুব সহজেই আমরা ফ্যাক্টরি মেথড প্যাটার্ন কীভাবে কাজ করে তা বুঝতে পারব। যেহেতু আর্টিকেল টি খুব বড় হয়ে যাচ্ছে তাই এই পর্বে আর ফ্যাক্টরি মেথড প্যাটার্ন নিয়ে আলোচনা করলাম না। তবে এই আর্টিকেলের পরবর্তী সিকুয়েলে আমরা ফ্যাক্টরি মেথড প্যাটার্ন নিয়ে ইন-ডিটেইলস আলোচনা করব। 
Share
Tweet
Pin
Share
No মন্তব্য(গুলি)
ডট নেট ব্যবহার করে আমরা বিভিন্ন অপারেটিং সিস্টেমের জন্য অ্যাপ্লিকেশন তৈরি করতে পারি। সাধারণত ভিজুয়াল স্টুডিও ব্যবহার করে উইন্ডোজের জন্য ডট নেট অ্যাপ্লিকেশন লিখা হয়। আর লিনাক্স বা ম্যাকের জন্য ব্যবহার করা হয় Mono। Mono হচ্ছে ডট নেট ফ্রেমোয়ার্কের একটি ইমপ্লিমেন্টেশন যেটা ব্যবহার করে আমরা বিভিন্ন অপারেটিং সিস্টেমের জন্য ডট নেট টার্গেটেড অ্যাপ্লিকেশন লিখতে পারি।

এখন কথা হচ্ছে, এই যে একই কোড আমরা বিভিন্ন প্লাটফর্মে রান করতে পারি, এটা আসলে হচ্ছে কিভাবে? এটা হচ্ছে Common Language Runtime এর বদৌলতে। কমন ল্যাঙ্গুয়েজ রানটাইমকে সংক্ষেপে CLR বলা হয়। তো CLR আসলে করে কী? 

আমরা সবাই জানি কম্পিউটার ম্যাশিন ল্যাঙ্গুয়েজ ছাড়া আর কিচ্ছু বোঝে না। প্রোগ্রামিং ল্যাঙ্গুয়েজ ও না! তাহলে কম্পিউটার আমাদের লিখা প্রোগ্রাম এক্সিকিউট করে কিভাবে? প্রথমে কম্পাইলার আমাদের লিখা কোড ম্যাশিন ল্যাংগুয়েজে রূপান্তরিত করে এবং পরে অপারেটিং সিস্টেম সেই কোড এক্সিকিউট করে। তো যেসব কোড অপারেটিং সিস্টেম সরাসরি নিজে এক্সিকিউট করে সেগুলোকে বলা হয় আন-ম্যানেজড কোড। সি বা সি-প্লাস-প্লাসে লিখা কোড কে আমরা আন-ম্যানেজড কোড বলতে পারি।

আন-ম্যানেজড বলার কারণ হচ্ছে, এই সব কোডে ইউজার অনেক লো লেভেল ডিটেইলস নিয়ে কাজ করে। যেমনঃ মেমোরি ম্যানেজমেন্ট, অ্যাপ্লিকেশন হোস্টিং, কো-অর্ডিনেটিং থ্রেডস, সিকিউরিটি চেক প্রভৃতি। তো ইউজার যদি সতর্ক থেকে কাজ না করে বা রিসোর্স ঠিক মত ইউটিলাইজ না করে তাহলে বিভিন্ন ক্ষেত্রে বিভিন্ন ঝামেলায় পরতে হতে পারে।

তবে আমরা যখন ডট নেট ফ্রেমোয়ার্ককে টার্গেট করে কোড লিখি তখন আমাদের এসব লো লেভেল ডিটেইলস নিয়ে কাজ করতে হয় না। CLR আমাদের হয়ে রিসোর্স লোকেট, লোড এবং ম্যানেজ করে দেয়। এই জন্য ডট নেটে লিখা কোড কে ম্যানেজড কোড বলা হয়।

আচ্ছা! CLR তাহলে কাজ করে কিভাবে? আমরা একটু আগে জানলাম যে কম্পিউটার ম্যাশিন ল্যাঙ্গুয়েজ ছাড়া আর কিচ্ছু বোঝে না। কম্পাইলারকে প্রথমে আমাদের লিখা কোড ম্যাশিন ল্যাংগুয়েজে রূপান্তরিত করতে হয় তার পর অপারেটিং সিস্টেম তা এক্সিকিউট করে। তো এই ক্ষেত্রে যেটা হয় সেটা হচ্ছে কম্পাইলার ডিরেক্ট অপারেটিং সিস্টেমের আর্কিটেকচার অনুযায়ী এক্সিকিউটেবল ফাইল তৈরি করে। 

তবে ডট নেটে লিখা কোড সরাসরি এক্সিকিউটেবলে রূপান্তরিত হয় না। কম্পাইলার প্রথমে ম্যানেজড কোড কে Microsoft Intermediate Language (MSIL) এ রূপান্তরিত করে এবং পরে এক্সিকিউটেবল তৈরি করে। প্রোগ্রামার যখন এক্সিকিউটেবল ফাইল রান করে তখন কমন ল্যাঙ্গুয়েজ রানটাইমের "জাস্ট ইন টাইম কম্পাইলার"  ইন্টারমিডিয়েট ল্যাঙ্গুয়েজকে আন্ডারলাইং অপারেটিং সিস্টেমের আর্কিটেকচারের উপযোগী ন্যাটিভ কোডে রূপান্তরিত করে। আর এজন্যই ডট নেটে লিখা কোড বিভিন্ন অপারেটিং সিস্টেমে রান করতে পারে। 
Share
Tweet
Pin
Share
No মন্তব্য(গুলি)
উইকিপিডিয়ার মতে, 

In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions.

এবং

Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data, in the form of fields (often known as attributes or properties), and code, in the form of procedures (often known as methods). 

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

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

কোন বস্তুর বৈশিষ্ট্য এবং আচরণ সমূহ একটি নির্দিষ্ট ক্লাসে এনক্যাপসুলেট করে প্রোগ্রামের বিভিন্ন জায়গায় ব্যবহার করাই হচ্ছে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং। আচ্ছা! ক্লাস আর এনক্যাপসুলেট এসব আবার কি? অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর ফিচার বা পিলার হচ্ছে চারটি। যথাঃ ১। অ্যাবস্ট্রাকশন, ২। এনক্যাপসুলেশন, ৩। ইনহেরিটেন্স এবং ৪। পলিমরফিজম। একটি সহজ অ্যাক্রনেমের সাহায্যে এই চারটি কী-ওয়ার্ড আমরা মনে রাখতে পারি। অ্যাক্রনেম টি হলঃ A PIE. 

A - Abstraction
P - Polymorphism
I - Inheritance
E - Encapsulation

তাহলে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর মূল কনসেপ্ট গুলো হলঃ  ক্লাস, অবজেক্ট, অ্যাবস্ট্রাকশন, এনক্যাপসুলেশন, ইনহেরিটেন্স এবং পলিমরফিজম। এগুলো সম্পর্কে পরবর্তী পর্ব গুলোতে আমরা বিস্তারিত জানবো। (এই ছয়টি কনসেপ্ট ছাড়াও অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর আরও কিছু কনসেপ্ট আছে সেগুলো হলঃ এসোসিয়েশন, কম্পোজিশন এবং এগ্রিগেশন। অবজেক্ট ওরিয়েন্টেড ডিজাইন ও এনালাইসিস সিরিজে আমরা এসব সম্পর্কে জানবো।) 

এখন কথা হচ্ছে, 

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

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

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

এখন ক্লায়েন্ট তার কোড থেকে আমাদের তৈরি ফাংশন টা এভাবে ব্যবহার করলঃ 

এবার আমরা যদি এই প্রোগ্রাম টা তাকে অবজেক্ট ওরিয়েন্টেড টেকনিক ব্যবহার করে লিখে দেই তাহলে কোড দেখতে হবে এমনঃ 

এবং ক্লায়েন্ট তার কোড থেকে আমাদের বানানো কোড ব্যবহার করবে এভাবেঃ

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

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

এছাড়া  অবজেক্ট ওরিয়েন্টেড টেকনিকে কোড করলে আমরা সলিড প্রিন্সিপালস মেনে কোড করতে পারবো। আমাদের কোড ক্লিন থাকবে, যে কেউ রি-ইউজ করতে পারবে। সবচেয়ে বড় কথা আমরা খুব সহজে আমাদের কোড টেস্ট করতে পারব।  

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

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

ভাবুন! এরকম পাঁচ-দশ হাজার ফাংশন যদি আপনার প্রোগ্রামে থাকে তাহলে তা মেইনটেইন করা কত কঠিন হবে। এছাড়া পুনরায় ব্যবহারযোগ্য কোড লিখতে না পারার কারণে আপনার প্রোগ্রামে কোড ডুপ্লিকেশন হবে যা কিনা প্রোডাক্টিভিটি কমিয়ে দিবে। কখনো কোথাও কোন পরিবর্তন করতে হলে একাধিক জায়গায় পরিবর্তন করতে হবে। বাগ সলভিং এবং কোড ডেপ্লোয় করা আপনার জন্য রীতিমত আতঙ্কের নামে পরিণত হবে।

তো সারমর্ম হচ্ছে, অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং টেকনিক ব্যবহার করে কোড করলে আমরা ক্লিন এবং রি-ইউজ্যাবল কোড লিখতে পারব যা কিনা আমাদের প্রচুর সময় বাঁচিয়ে দিবে। 

আজকে এই পর্যন্তই! পরবর্তী পর্বে আমরা ক্লাস নিয়ে আলোচনা করব।  

Share
Tweet
Pin
Share
No মন্তব্য(গুলি)
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং পর্বে আপনাকে স্বাগতম! এই পর্বে আমরা মূলত অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এবং এর সুবিধাসমূহ নিয়ে আলোচনা করব। আলোচনা করতে গিয়ে আমাদের হয়তো কিছু স্যাম্পল কোড দেখতে হতে পারে। তো কোড লিখার জন্য আমরা মূলত সি-শার্প প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করব। তবে আপনি যদি জাভা ব্যাকগ্রাউন্ডের ও হয়ে থাকেন তাহলেও আপনার খুব একটা সমস্যা হবার কথা নয় যেহেতু দুটি ল্যাঙ্গুয়েজের সিনট্যাক্স এবং কনসেপ্ট প্রায় কাছাকাছি। কিন্তু আপনি যদি প্রোগ্রামিং এ একেবারে নতুন হয়ে থাকেন এবং ভেরিয়েবল/ ডেটা টাইপ/ কনট্রোল ফ্লো/ লুপ এবং ফাংশনের সাথে পরিচিত না হয়ে থাকেন তাহলে হয়তো এই টিউটোরিয়াল থেকে খুব বেশি উপকৃত হতে পারবেন না।
 
যাই হোক, আমরা যারা কম্পিউটার সায়েন্স পড়েছি/পড়ছি তাদের হয়তো অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং সম্পর্কে কিছু ধারণা আছে। তবে স্বচ্ছ ধারণা না থাকার কারণে হয়তো বাস্তব জীবনের সাথে খুব একটা রিলেট করতে পারিনা। এতে করে ক্লিন, রি-ইউজ্যাবল কোড লিখতে হয়তো প্রবলেমে পড়তে হয়। এছাড়া ইন্টার্ভিউ বোর্ডে বিভিন্ন অবজেক্ট ওরিয়েন্টেড প্রশ্নের সম্মুখীন হতেও হয়তো অস্বচ্ছন্দ অনুভব করি। 

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

আচ্ছা! অনেক কথা হল। তো আজ এই পর্যন্তই ! পরবর্তী অনুচ্ছেদে আমরা ফাংশনাল প্রোগ্রামিং এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ব্যবহার করে একটি প্রবলেম সমাধান করব এবং দেখবো যে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কিভাবে আমাদের ক্লিন এবং রি-ইউজ্যাবল কোড লিখতে সাহায্য করে।
Share
Tweet
Pin
Share
No মন্তব্য(গুলি)
সহজ কথায় বললে ডট নেট হচ্ছে মাইক্রোসফটের তৈরি একটি প্রডাক্ট যা ব্যবহার করে আমরা বিভিন্ন ধরণের সফটওয়্যার তৈরি করতে পারি। এখন কথা হচ্ছে, ডট নেট আমরা কেন শিখব বা এর সুবিধাই বা কী? তো এই প্রশ্নের সরাসরি কোন উত্তর না দিয়ে চলুন আমরা কাল্পনিক একটি সফটওয়্যার ফার্ম থেকে ঘুরে আসি। 

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

তারপর কিছুদিন পর ক্লায়েন্ট আবার এসে হাজির। এখন সে তার পণ্য অনলাইনে বিক্রি করতে চায়। তো সে আপনাকে বলল একটি ই-কমার্স সাইট তৈরি করে দিতে অর্থাৎ এটা আর ডেক্সটপ অ্যাপ্লিকেশন হলে হবে না। এবার তার ওয়েব এপ্লিকেশন চাই। এখন ভাবুন! আপনার টিমের ডেভেলপররা যে ল্যাংগুয়েজ টি জানে সেটি ব্যবহার করেই যদি তারা ওয়েব অ্যাপ্লিকেশন টি তৈরি করতে পারে তাহলে আপনাকে কিন্তু আর নতুন কোন রিসোর্স নিয়োগ করতে হবে না। অন্যথায় কিন্তু কোন উপায় নেই! তো সুখের খবর হল, আপনাকে নতুন কোন রিসোর্স নিয়োগ করতে হল না। আপনার টিম এবার ASP.NET ব্যবহার করে আপনার ক্লায়েন্ট কে একটি ই-কমার্স সাইট তৈরি করে দিল এবং সেও খুশি মনে ব্যবসা করতে লাগলো। 

এরপর কিছুদিন যেতে না যেতেই  ক্লায়েন্ট আবার এসে হাজির। এবার তার মোবাইল অ্যাপ্লিকেশনের বায়না! তাকে Android এবং iOS অ্যাপ্লিকেশন বানিয়ে দিতে হবে যাতে করে কনজিউমাররা মোবাইল ব্যবহার করেই অর্ডার করতে পারে। পড়লেন তো বিপদে? এখন আবার Android এবং iOS ডেভেলপার নিয়োগ করবেন? তার উপর দুইটা অ্যাপ্লিকেশন মেইন্টেইন করার ঝামেলা তো আছেই। আগের মতোই এবার ও যদি আপনার ডেভেলপাররা সেইম ল্যাংগুয়েজ ব্যবহার করে একটি মোবাইল অ্যাপ্লিকেশন বানিয়ে দিতে পারতো যেটা Android এবং iOS  দুই অপারেটিং সিস্টেমেই চলবে তাহলে কি দারুণ হত, তাই না?

হ্যাঁ! এই দারুণ কাজটিই হবে আপনি যদি ডট নেট ব্যবহার করেন। ডট নেট ব্যবহার করে আমরা ডেক্সটপ, ওয়েব বা মোবাইল যে কোন ধরনের অ্যাপ্লিকেশন তৈরি করতে পারি। ডেক্সটপের জন্য আমরা Winform বা WPF ব্যবহার করতে পারি। ওয়েব অ্যাপ্লিকেশন তৈরি করার জন্য আছে ASP.NET, ASP.NET MVC, ASP.NET Core আর মোবাইল অ্যাপ্লিকেশন তৈরি করার জন্য আছে Xamarin.

এবার আসি ভাষার ব্যাপারে... এই যে বিভিন্ন টেকনোলজির কথা বললাম এই সব গুলো টেকনোলজিই আপনি ব্যবহার করতে পারবেন শুধুমাত্র একটি প্রোগ্রামিং ল্যাংগুয়েজ জানলেই। আমরা C#, F# বা Visual Basic প্রভৃতি ব্যবহার করে ডট নেট অ্যাপ্লিকেশন তৈরি করতে পারি। তবে এই তিনটি ল্যাংগুয়েজের মধ্যে C# হচ্ছে সবচেয়ে জনপ্রিয় এবং শক্তিশালী। 
Share
Tweet
Pin
Share
No মন্তব্য(গুলি)

পরিচিতি

আমি একজন ডট নেট ডেভেলপার। সিটি ইউনিভার্সিটি থেকে ২০১৭ সালে কম্পিউটার সায়েন্স এবং ইঞ্জিনিয়ারিং বিষয়ে স্নাতক পাশ করেছি। বর্তমানে রেলিসোর্সে কর্মরত আছি। সফটওয়্যার আর্কিটেকচার এবং ডিজাইন নিয়ে আমি বেশ আগ্রহী। বিভিন্ন বই/ ব্লগ পড়ে এবং কাজের অভিজ্ঞতা থেকে যা কিছু শিখেছি তার কিছুটা সবার সাথে ভাগ করে নেয়ার উদ্দেশ্যেই এই ব্লগ।

যতবার ব্লগটি দেখা হয়েছে

প্রসঙ্গসমূহ

Design Patterns dotnet oop

সাম্প্রতিক প্রবন্ধসমূহ

সকল প্রবন্ধসমূহ

  • আগস্ট 2020 (6)

পরামর্শ বা মতামত দিন

নাম

ইমেল *

বার্তা *

Created with by BeautyTemplates