Showing posts with label Object Oriented Programming. Show all posts
Showing posts with label Object Oriented Programming. Show all posts

Monday, May 13, 2024

সাবটাইপিং

Subtyping: এখানে এমন একটি function কাজ করে যা argument হিসেবে নেয় কেবল একটি নির্দিষ্ট type ও তার subtype কে। Object oriented programming এ এটি subclassing (inheritance) এর মাধ্যমে হয়ে থাকে।
উদাহরণে Nationality abstract class এবং তার subclass UK,Bangladesh, China এর সাহায্যে আমরা Demo class এর showNat() মেথডের মাধ্যমে নাগরিকত্ব দেখাতে চাচ্ছি। এজন্য এখানে Nationality'র object কে argument হিসেবে pass করা হচ্ছে। তারপর প্রযোজ্য subclass এর des() কে call করা হচ্ছে। C++ এ pointer arithmetic এর মাধ্যমে এটি করা হচ্ছে। এখানে Nationality base/abstract class এর des() কে virtual function () ঘোষণা করা হয়েছে যেন ভিন্ন ভিন্ন subclass এর object এর des() ভিন্ন ভিন্ন বার্তা/কাজ দেখাতে পারে। এখানে একই function des() কে call করলে বিভিন্ন subclass এর object অনুযায়ি এটি আলাদা আলাদা আচরণ করছে। এখানে n হলো একটি Nationality pointer object। এবং n নির্দেশ(point) করছে কোন একটি subclass এর object এর addressকে। কাজেই সরাসরি subclass এর object এর মাধ্যমে des() কে call না করে Pointer এর মাধ্যমে এটি করা হচ্ছে।

উদাহরণ(C++):
#include ‹iostream›
#include ‹string›
class Nationality{
public:
Nationality (){}
virtual std::string des()=0;
};
class UK:public Nationality{
public:
UK(){}
std::string des(){
return "British\n";
}
};
class Bangladesh:public Nationality{
public:
std::string des(){
return "Bangladeshi\n";
}
};
class China:public Nationality{
public:
China(){}
std::string des(){
return "Chinese \n";}
};
class Demo {
public:
Demo(){}
void showNat(Nationality *n){
std::cout«n->des();
}
};
int main()
{
China c;
Demo a;
Nationality * n=&c;
a.showNat(n);
Bangladesh b;
n=&b;
a.showNat(n);
return 0;
}

JavaScript যেহেতু type safe language তাই আমাদের এখানে compile time এ Demo class এ একটি Nationality object তৈরি করা হয়েছে,আর তারপর তাকে assign করা হচ্ছে showNat() এর argument কে । এরপর runtime এ যে object ই pass করা হচ্ছে তার des() এর বার্তা আমরা screen এ দেখতে পাচ্ছি। কারণ সব object ই Nationality class এর subclass।

উদাহরণ(JavaScript):
class Nationality{
constructor(){}
des(){}
}
class Bangladesh extends Nationality {
constructor(){super();}
des(){
return " Bangladeshi \n";
}
}
class Uk extends Nationality {
constructor(){super();}
des(){
return " British \n";
}
}
class China extends Nationality {
constructor(){super();}
des(){
return "Chinese\n";
}
}
class Demo{
constructor (){
this.s=new Nationality();
}
showNat(n){
this.s=n;
document.write(this.s.des());
}
}
var a=new Demo();
a.showNat(new China());
a.showNat(new Bangladesh());

কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে Wikipedia, internet ও আমার তৈরি করা নানা program থেকে।
মন্তব্য ও যোগাযোগঃ mrh4478@gmail.com

প্যারামেট্রিক পলিমরফিজম

Parametric Polymorphism: এখানে function কে এমন abstract ভাবে লেখা হয় যেন function টি বিভিন্ন value কে argument হিসেবে নিতে পারে তাদের data type এর উপর নির্ভর না করে। উদাহরণে C++ এ template এর মাধ্যমে add() function টিতে যেকোন data type কে argument হিসেবে নেবার সুযোগ করে দেয়া হয়েছে। add() প্রথমে দু'টি integer কে argument হিসেবে নিয়েছে, পরে দু'টি string কে এবং শেষে একটি string ও একটি integer কে argument হিসেবে নিয়েছে।

উদাহরণ(C++):
#include ‹iostream›
#include ‹string›
class Demo{
public:
Demo(){}
template ‹class T›
T add(T a,T c){
return a+c;
}
};
int main()
{
Demo m;
int w=5,y=7;
//add(int,int)
std::cout «m.add(5,7);
std::string s="Hello, ",z="there!";
//add(string,string)
std::cout«"\n"«m.add(s,z);
//add(string, int)
std::cout«"\n"«m.add("May",13);
return 0;
}

JavaScript উদাহরণটিতে add() এ কোন template বা data type ব্যবহার করা হয়নি কারণ JavaScript একটি type safe language অর্থাৎ compile time এ এটি data type check না করে একেবারে run time এ check করছে। যার কারণে run time এ যাই add() এ pass করা হচ্ছে তাই সে screen এ দেখাচ্ছে।

উদাহরণ(JavaScript):
class Demo{
constructor(){}
add(a,c){
return a+c;
}
}
var m=new Demo();
document.write(m.add(5,7));
document.write(m.add("hi","there!"));
document.write(m.add("May", 13));

কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে Wikipedia, internet ও আমার তৈরি করা নানা program থেকে।
মন্তব্য ও যোগাযোগঃ mrh4478@gmail.com

Friday, May 3, 2024

ফাংশন ওভারলোডিং

একই নামের function এ যখন একেক সময় অনেক ধরণের parameter ব্যবহার করা হয় তখন সেটিকে function overloading বলা হয়। যেমন আমরা এখানে কারো ঠিকানা/address এর জন্য একবার শুধু city আর আরেকবার city ও house দেখতে চাই। এজন্য adds() নামের একটি function এ আমরা city নামের একটি parameter আবার একই adds() নামের আরেকটি function এ city এবং house নামের দুইটি parameter দিতে পারি। parameter এর সংখ্যার উপর নির্ভর করে ঠিক adds() function এর argument/data গুলো screen এ দেখাবে show () নামের method/function। নিচে C++ এ function overloading এর উদাহরণটি দেয়া হল।

#include ‹iostream›
#include ‹string›
class Demo{
public:
std::string c,h;
Demo(){}
void adds(city){
this.c=city;
}
void adds(city,house){
this.c=city;
this.h=house;
}
void show(){
std::cout«this.c«" "«this.h«" \n";
}
}
int main(){
Demo s;
s.adds("Utoville");
s.show ();
return 0;
}

JavaScript এ function overloading কাজ করে না; কাজ করে function overriding। একই উদাহরণ JavaScript এ চালালে screen এ দেখা যাবে "Utoville undefined" বার্তা/text। কারণ হল দু'টি parameter সহ পরের adds() function এক্ষেত্রে প্রথম adds() function কে override করে কাজ করছে। আর তাই পরের adds() এর দ্বিতীয় parameter যা দেয়া হয়নি সেটিও undefined রুপে screen এ দেখা যাচ্ছে।JavaScript এ function overloading পেতে হলে একটু অন্য ভাবে কাজ করতে হবে। এখানে switch statement এর ব্যবহার দেখানো হয়েছে। adds() function টিতে ৩টি parameter c,h,ops দেয়া হয়েছে। ops হচ্ছে একটি integer argument যা parameter এর সংখ্যা নির্দেশ করছে। ops বা option এর সংখ্যার উপর নির্ভর করে show() ঠিক বার্তা screen এ দেখাচ্ছে। এক্ষেত্রে আমাদের ৩টি arguments pass করতে হচ্ছে আর কোন argument দেখাতে না চাইলে সেটি blank রাখতে হচ্ছে । আর এক্ষেত্রে কিন্তু আগেরবারের মত undefined দেখা যাচ্ছে না।

উদাহরণ:
class Demo{
constructor(){}
adds(c,h,ops){
this.c=c;
this.h=h;
this.ops=ops;
}
show (){
switch (this.ops)
{
case 1:
return this.c;
case 2:
return this.c+" "+this.h;
default:
return " Sorry ,not defined!";
}
}
}
var s=new Demo();
s.adds("Utoville","00", 2);
document.write(s.show());

কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে Wikipedia, internet ও আমার তৈরি করা নানা program থেকে।
মন্তব্য ও যোগাযোগঃ mrh4478@gmail.com

Tuesday, April 23, 2024

সিউডোকোড ডেভেলপমেন্ট

Pseudocode:সিউডোকোড ডেভেলপমেন্ট হল অনাড়ম্বর ভাবে প্রোগ্রামিং এর syntax অনুসরণ না করে একটি বিষয়/সমস্যাকে program আকারে প্রকাশ করা । আর তারপর syntax মেনে program টা লেখা। অনেকের ক্ষেত্রে Pseudocode development নিজের ভেতরেই হয়ে যায়,আবার অনেকে কাগজে-কলমে pseudocode develop/refine করতে করতে চূড়ান্ত program/final refinement এ পৌঁছে যান। শুরুর দিকে কাগজে-কলমে pseudocode develop করা উচিত। কিছুটা অভিজ্ঞ হলে নিজের ভেতরেই তা করা যাবে। আমরা যদি 5,10,15,20 এই চারটি সংখ্যার গড় বের করতে চাই,তবে কিভাবে pseudocode develop করব তাই এখানে দেখানো হয়েছে।

Statement:
5,10,15,20 এর গড় বের করতে হবে।
First refinement:
সংখ্যাগুলোকে একটি Arrayতে নিতে হবে।
তারপর এদের যোগ করে গড় বের করতে হবে। গড় বের করতে হলে আমাদের দরকার সংখ্যাগুলোর যোগফল আর মোট সংখ্যা।
Second refinement:
Array a-তে সংখ্যাগুলোকে রাখি।
Arrayএর length হচ্ছে মোট কয়টি সংখ্যা নিয়ে আমরা কাজ করছি।
Arrayএর element গুলো যোগ করব।
যোগফলকে মোট সংখ্যা দিয়ে ভাগ করব।
গড়/ফলাফলকে screen এ দেখাব।
Third refinement:
a নামের একটি Array declare করি তারপর এটিকে initialize করি 5,10,15,20 সংখ্যাগুলো দিয়ে।
যোগফলের জন্য sum নামে একটি variable declare করি আর একে initialize করি 0 দিয়ে। aএর প্রথম element দিয়ে শুরু করে একে একে শেষ elementটিও sum এর সাথে যোগ করি।যোগ করবার কাজটি একেবারে শেষ element পর্যন্ত চলবে(Looping হচ্ছে)।
যোগফলকে(sum) aএর length দিয়ে ভাগ করলে গড় পাওয়া যাবে। res নামের একটি variable declare করে এই গড়কে ধারণ করি।
resকে screen এ দেখাই।
Final refinement:
var a=5,10,15,20
var sum=0
for var h=0 to a.length:
sum +=a[h]
h++
var res=sum/a.length
document. write(res)

উদাহরণ:
var a=[5,10,15,20];
var sum=0;
for(var h=0;h< a.length;h++){
sum +=a[h];
}
var res=sum/a.length;
document. write(res);

সময় বেশি বা একঘেয়ে লাগলেও একটু কষ্ট করে শুরুর দিকে এভাবেই pseudocode development এর মাধ্যমে programming সমস্যা গুলো সমাধান করা উচিত। ধীরে ধীরে অভ্যস্ত হয়ে গেলে আর কাগজ-কলম লাগবে না মাথার ভেতরে দ্রুতই এটি হয়ে যাবে আর জটিল সমস্যাগুলো সহজে সমাধান করা যাবে।

কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে Wikipedia, internet ও আমার তৈরি করা নানা program থেকে।
মন্তব্য ও যোগাযোগঃ mrh4478@gmail.com