Tuesday, March 11, 2014

চলুন সফটওয়্যার বানাই (Lesson 4)

  বড় কিছু বানানোর আগে চলুন ছোটখাটো কিছু বানাই। এমন একটা সফটওয়্যার বানাই যেটা দিয়ে হিসাব নিকাষ করতে পারবেন। মোবাইল ফোনে তো সবাই কথা বলেন। চলুন C# দিয়ে এমন একটা সফটওয়্যার বানাই যেটা মোবাইল এর বিল হিসাব করবে। এই Lesson টা শুরু করার আগে আমি বলবো, সি শার্পে যোগ বিয়োগ আশা করি এতদিনে শিখে গেছেন, না শিখলে আগের লেসনগুলি দেখে নিতে পারেন। চলুন শুরু করিঃ
.    একটা Project খুলে এর নাম দিন MobileMoneyManager যেটা আপনার প্রোজেক্ট এর namespace.
.    নিচের মত design করুন। প্রথমে Button এবং TextBox গুলো নিন

.   দেখুন আমি control গুলোর উপরে একটি cover দিয়েছি। এটাকে groupBox বলে। Toolbox থেকে drug and drop করুন
.    এবার groupBox এর উপরে right click  করে Send to Back option select করুন
.   Properties থেকে Text option গিয়ে নামটা মুছে দিন
.   এবার repositioning করুন
.    এখন properties থেকে প্রতিটি control এর method name and Text নিচের মত change করে নিন। ৪ নাম্বার টেক্সটবক্সের propertise থেকে multiline option এ "true" দিন
Control name
(Name)
Text
textBox1
txtMainBalance
Null
textBox2
txtTalkTime
Null
textBox3
txtVAT
Null
textBox4
txtCurrentBalance
Null
button1
btnShow
হিসাব করুন
groupBox1
Default
null
label1
Default
Main Balance
label2
Default
Talk Time
label3
Default
VAT
label4
Default
TK
label5
Default
Min
label6
Default
%

. Button Double click করুন
. নিচের কোড গুলো লিখুন

private void btnShow_Click(object sender, EventArgs e)

{

  {
                try
                {
                    double main = double.Parse(txtMainBalance.Text);
                    double talktime = double.Parse(txtTalkTime.Text) *
                    60;
                    double regularcost = (talktime * 0.5);
                    double VAT = (double.Parse(txtVAT.Text) * regularcost)
                    / 100;
                    double totalcost = (regularcost + VAT) / 100;
                    double remain = (main - totalcost);
                    if (remain >= 0)
                    {
                        txtCurrentBalance.Text = "Your call cost is " +
                        totalcost + " tk and your remaining balance is " +
                        remain + " tk";
                    }
                    else
                    {
                        txtCurrentBalance.Text = "আপনার একাউন্টে টাকা নাই।";
                    }
                }
                catch
                {
                    MessageBox.Show("আপনার ইনপুট ডাটা চেক করুন");
                }
            }

}
১০. Logic খুব সাধারন। এখানে same operator এর জন্য প্রতি ১০ sec pulse পয়সা করে ধরে হিসাব করা হয়েছে। তারপর যত min কথা হবে তাকে 0.5 দিয়ে গুণ দেয়া হয়েছে। এটাকে রাখা হয়েছে regularcost variable এর ভিতর। তারপর VAT হিসাব করা হয়েছে। তারপর regular cost আর VAT যোগ করে totalcost variable এর ভিতরে রাখা হয়েছে। সবশেষে main balance থেকে totalcost বাদ দেয়া হয়েছে এবং আলাদা variable remain এর ভিতর রাখা হয়েছে। হিসাবের সুবিধার জন্য প্রয়োজন মত টাকা থেকে পয়সা বা পয়সা থেকে টাকায় convert করা হয়েছে
১১.  এবার Compile করুন এবং Test করুন। Test করার আগে আপনার main windows form কে সিলেক্ট করুন এবং properties যান। তারপর StartPosition > CenterScreen যান এবং ok করুন

Monday, March 10, 2014

Lesson 3 এর লেজ :P

  ধরুন আগের লেসনে শেখা প্রোগ্রামটি রান করে যোগ করতে গেলো কিন্তু ইনপুট কিছুই দিলো না। কি হবে? 
প্রোগ্রামটি নিচের চিত্রের মতন ক্রাশ করবে।

 Debug>Stop Debugging দিন।
 
যাতে এই সমস্যা না হয়, সেজন্য কিছু কন্ডিশন add করে নিতে পারেন। সেটা অনেকভাবেই করা যায়।
পদ্ধতি ১:  আপনার কোড টির আগে নিচের মত if-else  যুক্ত করুন।
          private void btnResult_Click(object sender, EventArgs e)
        {
            if (txtNum1.Text.Length > 0 && txtNum2.Text.Length > 0)
            {
                double num1 = double.Parse(txtNum1.Text);
                double num2 = double.Parse(txtNum2.Text);
                double res = num1 + num2;
                txtResult.Text = res.ToString();
            }
            else
            {
        MessageBox.Show("Please check your text box", "Error",
          MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
            }
        }
এবার execute করে দেখুন। 
 
এই logic এর মানে হল user যখন textbox কোন কিছু input না দিবে তখন textbox string length null দেখাবে। যদি input string length 0 থেকে বড়ো হয় তাহলেই program execute করবে। আর input string length 0 বা null হলে message show করবে।  
পদ্ধতি ২:
          private void btnResult_Click(object sender, EventArgs e)
        {
            try
            {
                double num1 = double.Parse(txtNum1.Text);
                double num2 = double.Parse(txtNum2.Text);
                double res = num1 + num2;
                txtResult.Text = res.ToString();
            }
           
            catch
            {
              MessageBox.Show("Please check your text box", "Error",
                   MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
            }
        }
এর মানে হল try অংশের ভিতরে যা থাকবে C# প্রথমে সেটাকে execute করবে। আর যদি user কোন ভুল করে তাহলে সেটা catch অংশে প্রদর্শন করবে। ক্রিকেট খেলায় ব্যাটসম্যান try করে ব্যাট বলে লাগানোর জন্য। যদি না পারে তাহলে উইকেটকিপার catch ধরে। ব্যাপারটা অনেকটা সেরকম।
একটা জিনিস মনে রাখবেন, if-else বা try…catch করতে হবে ক্ষেত্র বুঝে। if-else use করতে হয় logically আপনি কোন কাজ করলে। আর try…catch করতে হয় exception throw করতে।
এখন আমি দেখাব কিভাবে কোডিং করে আপনার সফটওয়্যার কে close করবেন।
Toolbox থেকে আরেকটি button drug and drop করুন। properties থেকে method name এবং Text name change করুন। method name দিন btnClose এবং Text name দিন "প্রোগ্রাম বন্ধ করুন".


Close Button Double Click করে নিচের কোডটি লিখুন।
          private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
এবার Compile করে test করুন।
 

হযবরল

যারা প্রোগ্রামিং করতে ভালবাসেন তারা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর নাম শোনেননি এমন কেউ নেই বলেই আমি মনে করি। 
C# একটি High level Object Oriented Programming. কাজেই আপনি যদি C# সম্পর্কে দক্ষতা অর্জন করতে চান (শুধু C# নয়, Java, C++, Python ইত্যাদি যেকোনো ল্যাঙ্গুয়েজ সম্পর্কে) তাহলে অবজেক্ট ওরিয়েন্টেড এর ধারণা থাকা জরুরী।  
 
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কি?
টটাইটেল শুনেই বোঝা যায় যে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং মানে হল অবজেক্ট সম্পর্কিত প্রোগ্রাম
 
অবজেক্ট কি?
আমাদের পৃথিবী এবং মহাকাশে যা কিছু আছে সবই হল অবজেক্ট। আমরা নিজেরাও একেকজন অবজেক্ট। সোজা কথায় আমরা যা দেখতে পাই এবং যা পাই না, যা কল্পনা করতে পারি আর যা বাস্তব সবই হল অবজেক্ট। এখন বুঝতে পারছেন তো? In our day to day life, or real life or virtual life we see whatever is called Object. সুতরাং এই অবজেক্ট নিয়ে আমরা যে প্রোগ্রামিং করব তাই হল অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং
 
অবজেক্ট ওরিয়েন্টেড নিয়ে প্রোগ্রামিং করতে চাইলে আপনাকে বাস্তব জীবন নিয়ে ভাবতে হবে। কারন আপনি যদি কল্পনা করতে না শিখেন তাহলে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং আপনার কোন কাজে আসবে না। প্রোগ্রামিং কে একটি নতুন পথে হাঁটতে শিখিয়েছে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং
যা হোক, অবজেক্ট এর পরপরই যেটি জানতে হবে তা হল
 
মেথড কি?
আগের পর্ব গুলোতে আমি মেথড নিয়ে কাজ করেছি। মেথড হল ক্রিয়া, আচরণ। অর্থাঅবজেক্ট এর  ক্রিয়া বা আচরণই হল মেথড। আমরা মানুষ এর কি কি মেথড আছে? আমরা হাঁটতে পারি, খেতে পারি, চিন্তা করতে পারি, দৌড়াতে পারি, গান গাইতে পারি, নাচতে পারি আরও কত কি!! বলে শেষ করা সম্ভব নয়। আমরা যাই কিছু করতে পারি তাই হল আমাদের মেথড। বুঝতে পেরেছেন? A method is basically a behavior.  A class can contain many methods. It is in methods where the logics are written, data is manipulated and all the actions are executed.
আগের পর্ব গুলোতে দেখেছি কোন কন্ট্রোল কে ডাবল ক্লিক করলে মেথড Auto generate হয়। এই কন্ট্রোল হল অবজেক্ট। আর private void…..
হল অবজেক্ট টির মেথড। মানে আমরা একটি অবজেক্ট কে সিলেক্ট করে তার মেথড তৈরি করেছি
যেমন বাটন ডাবল ক্লিক করলে যে মেথড লেখার জায়গা আসে, সেখানে আমি লিখে দিচ্ছি বাটনে ক্লিক করলে কি হবে। যদি যোগ করতে চাই তাহলে তার প্রোগ্রাম আমি বাটন এর ভিতর লিখব। যদি মেসেজ দেখতে চাই তাহলে তার প্রোগ্রাম লিখব। তাই অবজেক্ট কে বলা হয় মেথড তৈরির কারখানা।

 
ক্লাস কি?
ক্লাস হল এমন একটা বিষয় যেখানে C এর শেষ আর অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর শুরু। ক্লাস ছাড়া অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং সম্ভব নয়। কারন প্রতিটা অবজেক্ট একটা ক্লাসের মধ্যে থাকবেই। যেমন, মানুষের ক্লাস কি? হিউম্যান ক্লাস। গরু, ছাগল, বাঘ, ভালুক, সিংহ ইত্যাদি অ্যানিম্যাল ক্লাস এর অন্তর্গত। ঘুঘু, শালিক, ময়না, ছিল,শালিক ইত্যাদি বার্ড ক্লাস এর অন্তর্গত।তার মানে ক্লাস হল একটা জাতি যা নির্ধারণ করবে কোন একই শ্রেণির এক একটা অবজেক্ট এবং তার মেথড কে
A class can be defined as a template/ blue print that describe the behaviors/states that object of its type support.
ক্লাস এর মাধ্যমে নতুন ডাটা টাইপ তৈরির পর সেই ডাটা টাইপের variable declare করা যায় এবং এই variable গুলই হল একেকটা অবজেক্ট। তাই ক্লাস কে বলা হয় অবজেক্ট তৈরির কারখানা আর অবজেক্ট কে বলা হয় ক্লাস এর একেকটা instance.
সাধারন ভাবে প্রোগ্রামিং করার সময় instance তৈরি করা হয় এভাবেঃ
Object.method=instance
আমরা Lesson 1 মেসেজ শো করেছিলাম এভাবেঃ
 

MessageBox.Show();
 
এই instance ব্রাকেট দিয়ে create করা হয়। এখানে MessageBox হল অবজেক্ট এবং Show হল তার মেথড এবং এই code লেখার ফলে আমাদের একটা মেসেজ শো করছে। অর্থা মেসেজ হল instance.
আমরা তাহলে কি কি বিষয় নিয়ে আলোচনা করলাম? অবজেক্ট, মেথড এবং ক্লাস সম্পর্কে
এখন আসি ক্লাস কত প্রকার? ক্লাস প্রধানত প্রকার। public class and private class. আরেকটা বিশেষ ক্লাস আছে। এটাকে বলা হয় protected class/friend class.
আমরা এখন public class এবং private নিয়ে আলোচনা করব
 
Public class কি?
সাধারন কথায় যে ক্লাস কে সব অবজেক্ট access করতে পারবে তাই হল public class. আমরা যে বাসে চড়ি তা হল পাবলিক বাস। এটাতে যে কেউ চড়তে পারে। কিন্তু যে গাড়ি চলতে দেখা যায় তা হল প্রাইভেট কার। এটাতে শুধু যার গাড়ি সে আর সে যাদের access দেবে তারা চড়তে পারবে। এটা হল private class. এখন গত পর্বের প্রোগ্রাম গুলো দেখুন। namespace এর পরে public partial class Form1:Form এই লাইনটি আছে। মানে আপনি যে উইন্ডোজ ফর্ম টি নিলেন সেই ফর্ম টি হল public class এর under এবং আপনি যে যে control গুলো নিলেন তারা সবাই windows form কে access করতে পারবে কিন্তু একটা control অন্য control কে access করতে পারবে না। তাই control গুলোর উপর ডাবল ক্লিক করলে script editor মেথড এর আগে private void কথাটি আসে
 
এখন প্রশ্ন হল partial class অর্থ কি?
এটা মানে হল আপনি যে windows form টি use করছেন সেটা আসলে একটা child class যার নাম form1 আর child class inherit হয় parent class থেকে। একটা জিনিস মনে রাখবেন যে toolbox থেকে আপনি যে control গুলো দেখেন সেগুলো আসলে visual studio এর তৈরি একেকটা ক্লাস আর আপনি ক্লাস গুলো drug and drop করে অবজেক্ট create করছেন। তাই আপনি New>project থেকে যে ফর্ম টি select করলেন তা আসলে একটি child class এবং Form1:Form নির্দেশ করে আপনি Form নামের ক্লাস থেকে Form1 নামের একটি object create করেছেন। এখানে Form1 হল Child class আর Form হল Parent class.
 
Object Oriented এর core concept টি
  • Inheritance
  • Encapsulation
  • Polymorphism
Inheritance:
Inheritance মানে হল বংশ পরিক্রমা। আপনি আপনার বাবার থেকে এসেছেন। আপনার বাবা আপনার দাদার থেকে এসেছেন। এটাই হল inheritance. যেমনঃ Form1:Form নির্দেশ করে Form নামের ক্লাস থেকে Form1 নামের একটি object হয়ে এসেছে। এখানে “:” inheritance নির্দেশ করে
 
Encapsulation:
Encapsulation হল অবজেক্ট এবং মেথড কে একটা capsul এর মধ্যে আবদ্ধ রাখা। অর্থাঅবজেক্ট এবং ক্লাস কখনো আলাদা থাকতে পারে না। যেমন ধরুনঃ আপনি বাজারে গিয়ে কেজি চাল কিনলেন। দোকানদার আপনাকে কিভাবে চাল দিবে? অবশ্যই একটা ব্যাগ তাই না? ধরুন ব্যাগ টা হল অবজেক্ট আর চাল হল মেথড। এখন আপনি যেখানে যাবেন ব্যাগ করেই আপনাকে চাল নিয়ে যেতে হবে। আবার ধরুন আপনি ভাল গান গাইতে পারেন। আপনি যেখানেই যান, আপনি গান গাইতে পারবেন। তাই না? মানে গান আপনার থেকে কোনোভাবে আলাদা করা সম্ভব নয়। সহজ ভাষায় এটাই হল Encapsulation. তাছাড়া আমরা আগেও দেখেছি যে object.method=instance. মানে instance create করার শর্তই হল object এবং method কে capsul এর মধ্যে রাখা এবং এদের একটি ডট দিয়ে encapsulate করে রাখা হয়
Encapsulation করার আরেকটি গুণ হল ডাটা হাইড করে রাখা যায়। অর্থা টা সেমিকোলনের ভিতরে মেথড create করলে একটা মেথড অন্য মেথড এর variable কে access করতে পারবে না। ফলে এক মেথডের ডাটা অন্য মেথডের কাছে সুরক্ষিত থাকে। Data Hiding Encapsulation এর একটি বড়ো বৈশিষ্ট্য
 
Polymorphism:
Poly অর্থ বহু। Morph অর্থ ফর্ম। তার মানে Polymorphism মানে হল ফর্মের বহুরূপতা
এটা কেমন ফর্ম? এটা অবশ্যই windows form না। এটা হল আপনার অবস্থা বা state
আপনি ভাল গান গাইতে পারেন। আপনার বাবার থেকে inherit হয়ে এই বৈশিষ্ট্য আপনার মাঝে এসেছে। কিন্তু আপনি আপনার বাবার থেকে ভাল গান করতে পারেন। এটাই হল polymorphism. আবার আপনার বাবার অনেক রাগ। কিন্তু আপনি সহজে রাগেন না। এটাও polymorphism. polymorphism positive এবং negative হতে পারে। আপনি একটা windows form নিয়ে নানাভাবে ডিজাইন করতে পারেন। এটা হল আপনার windows এর বহুরূপতা
 
;