Tag Archives: বাংলা

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



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

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

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

তাহলে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কাকে বলে ?
অবজেক্ট কে আমরা একটা সুন্দর করে র‍্যাপিং পেপার দিয়ে মোড়ানো একটা গিফট বাক্সের মতন চিন্তা করতে পারি যার ভেতরের অবস্থা সম্পর্কে আমরা বাইরে থেকে অবগত নই…

কিন্তু অবজেক্ট গুলো একটার সাথে আরেকটা যোগাযোগ করতে পারবে মেসেজের মাধ্যমে…মেথড নামক একটা সিস্টেম মেসেজ গুলো নিয়ে কাজ করবে। আর প্রতিটা অবজেক্ট এরই কিছু ব্যাক্তিগত দায়িত্ব থাকবে.

তো যেই সফটওয়্যার আমরা বানাবো সেটা বানাতে গেলে যখন এই উপরোক্ত বৈশিষ্ট্যগুলো মেনে চলে তাকে আমরা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বলতে পারি।

 

অবজেক্ট = ডাটা(অবজেক্ট এর প্রপার্টি গুলা স্টোর করতে ) + মেথড(যোগাযোগ রক্ষা জাতীয় কিছু করা)

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

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

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

ইনহেরিট্যান্সঃ এটাকে বলা যায় অনেকটা উত্তরাধিকার বা জেনেটিকালি/পৈত্রিক সম্পত্তি পাওয়ার মতন.. যেমনঃ একজন চাইল্ড তার প্যারেন্টের সব সম্পত্তি অটোমেটিকালি পেয়ে যাবে…অর্থাত পাবলিক কিংবা প্রোটেক্টেড সব প্রপার্টি একজন চাইল্ড তার প্যারেন্টের থেকে পাবে(কিন্তু কেবল অটোমেটিকালি প্রাইভেট বা ব্যাক্তিগত জিনিস পাবে না)। এই ব্যাপারটাকে “is a” রিলেশানশিপ দিয়ে প্রকাশ করা হয়।
যেমনঃ
A car is a vehicle এখানে কার ভেহিকল কে ইনহেরিট করতেসে
A teacher is a person এখানে টিচার পারস ন কে ইনহেরিট করতেসে
A dog is an animal এখানে ডগ এনিমেল কে ইনহেরিট করবে

পলিমরফিজমঃ এটাকে বলা যায় বহুরূপী আচরণ, যেমন একজন ছেলে মানুষ পড়ালেখা শেষে হাসপাতালে একজন ডাক্তার আবার তিনি তাঁর নিজের বাসাতে তাঁর সন্তানের একজন বাবা/টিচার হিসেবে কাজ করেন। সুতরাং, এই যে একটা মানুষের বহুরুপ ভিন্ন ভিন্ন ক্ষেত্রে এই ব্যাপার টাকেই পলিমরফিজম বলে।

যেমনঃ উপরের কোড টায় person  ক্লাসে displayDetails() স্টুডেন্ট হিসেবে একধরনের মেসেজ দিভে আবার ডাক্তার হিসেবে আরেকধরনের মেসেজ দিবে যদিও দুজনেই person.

এগ্রিগেশনঃ একটা অবজেক্ট আরেকটা অবজেক্টের অংশ বিশেষ হলে তাকে বলে এগ্রিগেশান। এটাকে “has a” রিলেশনশীপ দিয়ে প্রকাশ করা যায়।
যেমনঃ A car has wheels এক্ষেত্রে একটা গাড়ীর অনেকগুলা চাকা আছে এটা composite aggregation
আবার অনেক গুলা চাকা অনেক গুলা গাড়ির অংশ হলে সেটাকে আমরা বলতাম shared aggregation অর্থাৎ একের চেয়ে বেশী অবজেক্ট এটা শেয়ার করতেসে

বিহেভিয়ার এবং মেসেজঃ একটা অবজেক্টে সাধারণত কাজ করে তাঁর মেথড এর মাধামে এবং ত থ্য আদান প্রদান করে। এবং এটা কি কাজ করে সেটা তাঁর বিহেভিয়ার।
যেমনঃ আমি যদি কাউকে জিজ্ঞেস করি How are you? সে যদি রিপ্লাইয়ে রিটার্ন করে “i am fine” ব্যাপার তা আসলে এমনই।

আমরা যখন অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং নিয়ে কাজ করব, তখন আমাদের মাথায় দুইটা জিনিস রাখতে হবে,

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

আমি যে লিংক থেকে এ বিষয় গুলো লিখার চেস্টা করেছি তা নিচে দিলামঃ
http://jompesh.com/videos/1/1143/oop-lesson-1-introduction-to-object-oriented-programming

বাংলা



এখানে বাংলাতে লিখব

Algorithmic Thoughts : বাহিরের চাকচিক্য ভিতরের মন



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

‪#‎Thoughts‬