Skip to main content

Posts

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং - এ SOLID

এই পোস্টে ব্যাখ্যা দেওয়া হলো SOLID এর। যা অবজেক্ট ওরিয়েন্টেড ডিজাইনে বহুল ব্যবহৃত।  SOLID এর পুরো অর্থ হলো - S – Single Responsibility Principle (SRP) O – Open Closed Principle (OCP) L – Liskov Substitution Principle (LSP) I – Interface Segregation Principle (ISP) D – Dependency Inversion Principle (DIP) Single Responsibility Principle (SRP) বলছে - A class should have one, and only one, reason to change. এর মানে হচ্ছে , আমাদের একেকটি ক্লাসকে অন্তত একটি এবং সর্বোচ্চ একটি  কাজেই ব্যবহার করতে হবে। ধরা যাক , Bank management system প্রজেক্টে , একটি ক্লাস খোলা  হলো account, এখানে দুইটি মেথড আছে = registration, deposite ।  একটি ক্লাসেই টাস্ক পড়লো দুইটি। আদতে সমস্যা না থাকলেও এটি ভাল  ওওপি ডিজাইন না কারণ এটি কে ভঙ্গ করছে। দুইটি কাজ দুই ক্লাসে করলে   SRP মেইন্টেইন হবে। Open Closed Principle (OCP) বলছে - You should be able to  extend a classes behavior, without modi...
Recent posts

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং - ২

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

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ ইনক্যাপসুলেশন

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

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ পলিমরফিজম

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

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ এবস্ট্রাকশন

এবস্ট্রাকশনঃ এবস্ট্রাকশন মানে হচ্ছে বিমূর্তন বা পরম কোন কিছুকে বোঝায়। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে এবস্ট্রাক্ট ক্লাস ব্যবহার করে আমরা অনেকগুলি ক্লাসের কোন সাধারণ বৈশিষ্ট্যকে ধারণ করতে পারি। ঐ ক্লাসে কমন মেথড লিখে অন্যান্য ক্লাসে ব্যবহার করা যাবে। ধরা যাক, আমরা বিভিন্ন প্রাণীর বৈশিষ্ট্য নিয়ে কাজ করব। বেশিরভাগ প্রাণী মুখ দিয়ে শব্দ করে, হাঁটতে পারে এটা তাঁদের সাধারণ বৈশিষ্ট্য। কিন্তু সবাই একভাবে হাঁটেনা, শব্দ করেনা। সেগুলো আলাদা করে আমরা মেথড ইমপ্লিমেন্ট বা ওভাররাইড করে বৈশিষ্ট্য প্রদান করতে পারব। এবস্ট্রাক্ট ক্লাস লিখে, অন্য ক্লাস দিয়ে inherit করে মেথড override করে। এবস্ট্রাক্ট ক্লাস এমন একটি ক্লাস যার করা যায় না, অর্থাৎ new কিওয়ার্ড দিয়ে নতুন অবজেক্ট খোলা যাবেনা, কিন্তু ইনহেরিট করা যাবে অর্থাৎ extends করা যাবে। এবস্ট্রাক্ট ক্লাসে কোন মেথডের বডি থাকতে পারে, ভ্যারিয়েবলও রাখা যেতে পারে।   অথবা, ইন্টারফেস তৈরি করে, অন্য ক্লাসে ইমপ্লিমেন্ট করতে হবে। ঐ ক্লাসে অবশ্যই ইন্টারফেসের মেথডগুলির বডির কোড লিখতে হবে। ইন্টারফেসে শুধু মেথড ছাড়া কিছু রাখা যাবেনা, কোন মেথ...

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ ইনহেরিটেন্স

ইনহেরিটেন্সঃ ইনহেরিটেন্স অর্থ উত্তরাধিকারী। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ একটি ক্লাস অন্য আরেকটি ক্লাসকে ইনহেরিট করলে ঐ ক্লাস যে ক্লাসকে ইনহেরিট করেছে, সে ক্লাসের ডেটাগুলো ব্যবহার করতে পারে। উত্তরাধিকারসূত্রে পিতার সম্পত্তিপ্রাপ্তির মতই হয়ে যাচ্ছে ব্যাপারটা! তাই সুবিধার জন্য ইনহেরিট যে ক্লাসকে করা হয়েছে সে ক্লাস প্যারেন্ট ক্লাস ও যে ক্লাস ইনহেরিট করেছে সেই ক্লাস চাইল্ড ক্লাস হিসেবে বহুল ব্যবহৃত। আমিও এই নামেই ডাকছি। ইনহেরিট করার জন্য আমরা extends কিওয়ার্ডটি ব্যবহার করি। এখানে চাইন্ড ক্লাস প্যারেন্ট ক্লাসকে এক্সটেন্ড করে প্যারেন্ট ক্লাসের মেথডটি এক্সেস করতে পারছে। inheritance এর প্রকারভেদ, সিঙ্গেল লেভেল, মাল্টীলেভেল, হায়ারকিক্যাল, হাইব্রিড। সিঙ্গেল লেভেলঃ একটি প্যারেন্ট ক্লাস ও চাইল্ড ক্লাসের ডিরেক্ট সম্পর্ক।   মাল্টিলেভেলঃ প্যারেন্ট ক্লাস যদি অন্য আরেকটি ক্লাসকে ইনহেরিট করে তবে ঐ ক্লাসের সাথে চাইল্ড ক্লাসের সম্পর্ক। হায়ারকিক্যালঃ এক প্যারেন্টকে একাধিক চাইল্ড ইনহেরিট করলে হাইব্রিডঃ বাকি প্রকারভেদগুলোর মিশ্রণ এখন পর্যন্ত যা দেখলাম, তা আ...

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং

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

গিট

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

প্রোগ্রামিং কেন করব?

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