নির্বাচিত পোস্ট | লগইন | রেজিস্ট্রেশন করুন | রিফ্রেস

ফারজানুল নাইম

পিকলুচ

পিকলুচ › বিস্তারিত পোস্টঃ

ভালো প্রোগ্রামার হতে হলে সফটওয়্যার ডিজাইন প্যাটার্ন সম্পর্কে অন্তত বেসিক জ্ঞান থাকলেও থাকা জরুরী

০৬ ই জুলাই, ২০১৫ রাত ১:৫১

শুধু কিছু if … else conditional statement দিয়ে লাইনের পর লাইন কোড লিখতে পারার মানে এই নয় যে। আপনি ভাল প্রোগ্রামার। ভাল প্রোগামার হতে হলে কোড কোয়ালিটি মেইনটেইন করাও অনেক গুরুত্বপূর্ণ বিষয়। ভাল ডিজাইন প্যাটার্নে করা প্রোগ্রামিং কোডের কোয়ালিটিই আলাদা।

.Wikipedia এর মতে “In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design”

.ভাল Design Pattern-এর অন্যতম বৈশিষ্ট্য, এটি হবে language independent. অর্থাৎ আপনি কোন Pattern Design করলেন তবে আপনি PHP প্রোগ্রামার হন, বা C++ বা C# বা Java যে ল্যাঙ্গুয়েজেই কোড লিখেন না কেন। কিছু ক্ষেত্র বাদে আপনার ডিজাইন করা প্যাটার্ন সবার সাথেই ইমপ্লিমেন্ট করা যাবে।

.সহজ ভাষায়, Software Design Pattern হল আপনার প্রোগ্রামিং এর সমস্যার reusable অংশ গুলো চিহ্নিত করে ছোট ছোট ব্লকে ভাগ করে নেয়া, যখন যেটা প্রয়োজন তখন সেটা ব্যবহার করা।

.আপনি প্রতিদিন ঘুমান, রান্না-বান্না করেন, খাওয়া-দাওয়া করেন আর টয়লেট করেন। এটা আপনার প্রতিদিনের reusable কাজ।

.এখন আপনি যদি আপনার বাড়িকে সুবিশাল একটা হল রুম বানিয়ে সেখানেই থাকা শুরু করেন, মানে এক রুমেই রান্না-বান্না করেন, এক রুমেই ঘুমান, খাওয়া-দাওয়াও সেই রুমেই ... আবার টয়লেটও সেখানেই করেন। তাহলে কোন সমস্যা নেই।

.অথবা যদি বাড়িটা ছোট ছোট ব্লকে ভাগ করে নেন। মানে এক ব্লক আপনার কিচেন, এক ব্লক আপনার বেড রুম। অন্য একটা ব্লকে ডাইনি। আর একটা ব্লক বাথরুম বা টয়লেট। তাহলে সেটা ভাল হবে না প্রথমটা?

.আমি যদি আপনাকে নির্দেশ দেই, যাও ভাত রান্না কর। তবে বড় হল রুমের ক্ষেত্রে কি হবে? আপনি পুরো রুম জুড়ে আতিপাতি করে খুঁজবেন চুলা কই, রান্নার হাড়িটা বা কই, চাল কোথায় রাখা আছে? চামচ রাখা কোথায়? পানি কই পাব ইত্যাদি ইত্যাদি।

.আর যদি দ্বিতীয় ক্ষেত্রে একই নির্দেশ দেই। তবে আপনি সোজা রান্না ঘরে চলে যাবেন। কারণ আপনি জানেন ভাত রান্নার প্রয়োজনীয় সব উপকরণ আপনি সেখানেই সাজানো-গোছানো পাবেন।

.ভাত হয়তো দুই ক্ষেত্রেই রান্না হবে। কিনতু পারফরমেন্স কোন ক্ষেত্রে ফাস্ট এন্ড বেস্ট হবে সেটাতো বুঝাই যাচ্ছে, তাই না ? এটাই হল Pattern Design এর মহাত্ম। একটা বাড়ির কোথায় কি হবে তা যেমন নির্ধারণ করেন একজন Building Architect, ঠিক তেমনি Pattern Design হল Software Architect দের হাতিয়ার।

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

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

.কিনতু একই সমস্যা যদি সেই বড় হল রুমে ক্ষেত্রে হোত তবে? তখন পুরো হল রুমে আমার স্পাই গিরি করা লাগত তাই নয় কি? যা সময় সাপেক্ষ হোত বেশি কেননা আমি জানতাম না ঠিক কোন জায়গায় সমস্যা।

.ঠিক সেই রকম Software Pattern Design এর ক্ষেত্রে কোন কোড ব্লকে সমস্যা বা Bug দেখা দিলে শুধু সেই ব্লকে Fix করলেই কাজ শেষ। পুরো সিস্টেম নিয়ে ভাবতে হবে না।

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

.এভাবেই Software Pattern Design আপনার জটিল কাজ গুলোকে সহজ করে দেয়। সেই সাথে encapsulation ও ভাল SDP এর বৈশিষ্ট্য। আমি আপনাকে নির্দেশ দেব যাও ভাত রান্না কর। আপনি রান্না ঘরে গিয়ে রান্না করে নিয়ে আসবেন। আপনি কিভাবে রান্না করে আনলেন সেটা আমার ভাবনার বিষয় নয়। কারণ আমি আগেই ভাত রান্নার সব উপকরণ রান্না ঘরে সিস্টেম করে সাজিয়ে রেখেছি। এখন আমি শুধু নির্দেশ দেব আর আপনি কাজ করবেন। C Programming শিখতে এখানে টু মারুন

মন্তব্য ০ টি রেটিং +২/-০

মন্তব্য (০) মন্তব্য লিখুন

আপনার মন্তব্য লিখুনঃ

মন্তব্য করতে লগ ইন করুন

আলোচিত ব্লগ


full version

©somewhere in net ltd.