BASIC DEFINITIONS OF OOP(Основные понятия объектно-ориентированного программирования)


Basic definitions of object-oriented programming(Основные понятия объектно-ориентированного программирования)

Object-oriented programming(OOP) သည္ ေအာက္ေဖာ္ၿပပါ သေဘာတရားအယူအဆ(၃)  ခု ေပၚမူတည္၍ အေၿခၿပဳတည္ေဆာက္ထားသည္ဟု ေၿပာဆိုနိဳင္သည္။

Objet-oriented ၏ အေၿခခံ လုပ္ေဆာင္ခ်က္သည္ data မ်ားနွင့္ action မ်ားအား object ဟုေခၚေသာ language တစ္ခုကဲ့သို႕ ေပါင္းစပ္ၿပီး ကိုင္တြယ္ေၿဖရွင္းခ်င္းၿဖစ္သည္။ထိုသို႕ data မ်ားနွင့္ code မ်ားအား ေပါင္းစပ္ၿပီး ၎တို႕၏ processing မ်ားအား ေဆာင္ရြက္ေစေသာ လုပ္ထံုးလုပ္နည္းအား encapsulation ဟုေခၚဆိုသည္။
ထို object မ်ားအား user(programmer) မ်ားမွ variable data-type အခ်ိဳ႕ သတ္မွတ္နိဳင္ၿပီး ထို object အား class ဟုေခၚဆိုသည္။ဆိုလိုသည္မွာ class ဆိုေသာ စကားလံုးအစား object ဟုလည္း ေခၚဆိုနိဳင္ၿခင္းၿဖစ္သည္။ Class ဆိုသည္မွာ object ဟုေခၚေသာ data type အမ်ိဳးအစားအသစ္မ်ား ၿဖစ္ေပၚ၇န္အတြက္ object-oriented ၏ tool တစ္ခုၿဖစ္သည္။

Inheritance ဆိုသည္မွာ object တစ္ခုမွ တစ္ၿခား object ၏ properties မ်ားအား inherit (အေမြဆက္ခံလိုၿခင္း) (ရယူလိုခ်င္း)နွင့္ ၎တို႕ထံသို႕ မိမိတို႕၏ ကိုယ္ပိုင္ feature မ်ားအား ထပ္မံေပါင္းထည့္နိဳင္ရန္အတြက္ ၿပဳလုပ္နိဳင္သည့္ process တစ္ခုၿဖစ္သည္။Inheritance သည္ class hierarchy system အားအသံုးၿပဳထားသည္ဟုေၿပာဆိုနိဳင္သည္။(hierarchy သည္ tree system သကဲ့သို႕ၿဖစ္သည္)

Class definitation ၏ syntax သည္ structure ၏ syntax ေရးနည္းနွင့္  တူညီသည္ဟုေၿပာဆိုနိဳင္သည္။
class class_name {  data_member_of_class;
        function_member_of_class;
                                } List_of_object;
  
  • data members of class (data members);
  • code, which is a member function of class (member functions), or methods.

Class သည္ user မ်ားက define ၿပဳလုပ္ေသာ type ၿဖစ္သည္။List_of_object အားမေၾကၿငာ၍လည္း ရနိဳင္သည္ သို႕ေသာ္ program တြင္ object အားမၿဖစ္မေနေၾကၿငာေပးရန္လိုအပ္သည္။ ထိုသို ႕ ေၾကၿငာေပးမွသာ structure template နွင့္ structure type ၏ variable သည္ အသက္၀င္မည္ၿဖစ္သည္။

Class ၏ member မ်ားအား နွစ္ပိုင္းခြဲၿခားနိဳင္သည္။
Class member မ်ားအား auto(local variable),extern(external) (သို႕) register သကဲ့သို႕ သတ္မွတ္၍မရေပ။class ၏ data member မ်ားသည္ ထို class ၏ data အၿဖစ္ထပ္မံ၍ အသံုးၿပဳ၍ မရေပ။သို႕ေသာ္ ထို class ကို ကိုယ္စားၿပဳေသာ pointer (သို႕) reference မ်ားအသံုးၿပဳ၍ ထပ္မံအသံုးၿပဳ၍ရနိဳင္ေပသည္။
Class ထဲတြင္ပါ၀င္ေသာ data members နွင့္ function members မ်ားအား class ၏ data element နွင့္ function element မ်ားဟု တစ္ခါတစ္ရံ ေခၚဆိုၾကသည္။
Default အားၿဖင့္ class ၏ data member မ်ားနွင့္ function member မ်ားသည္ private မ်ားၿဖစ္ၾကသည္။(private ဆိုသည္မွာ ထို class ထဲရွိ အရာမ်ားအတြက္သာ အသံုးၿပဳနိဳင္ၿခင္းကိုဆိုလိုၿခင္းၿဖစ္သည္) ။class ၏ member မ်ားအား အၿခား class ထဲတြင္ရွိေသာ အၿခား program အပိုင္းမ်ားတြင္ပါ အလုပ္လုပ္နိဳင္ရန္အတြက္ open ၿပဳလုပ္ေပးရန္လိုအပ္ေပသည္။ထိုသို႕ ၿပဳလုပ္ေပး၇န္အတြက္ public ကိုအသံုးၿပဳသည္။
class AnyClass {int data;               / / Close (default) element class
                       public:
                       void set_data (int num);               / / Open (for modifier) ​​public
                       int get _ data ();                             / / Function-class members
           };


Public member function(Открытые функции-члены) မ်ားသည္ ထို class ၏ private member မ်ားအပါအ၀င္ အားလံုးဆီသို႕ access ၿပဳလုပ္နိဳင္မည္ၿဖစ္သည္။ဤသို႕ၿဖင့္ class ၏ program အစိတ္အပိုင္းမ်ားအား ဆက္စပ္အလုပ္ေစပံုအား ေအာက္ေဖာ္ၿပပါပံုတြင္ၾကည့္ရွဳ႕နိဳင္သည္။
အထက္ေဖာ္ၿပပါ program code တြင္ AnyClass ၏ member function မ်ားသည္ declare ၿပဳလုပ္ၿပီးၿဖစ္ေသာ္လည္း သူတို႕၏ define(အဓိပါယ္) သတ္မွတ္ၿခင္း မလုပ္ရေသးေပ။ထို member function မ်ားအား define ၿပဳလုပ္ရန္အတြက္၎ function ၏class နာမည္နွင့္အတူ function name ပါလိုအပ္ေပသည္။ထိုသို႕ define ၿပဳလုပ္ရန္အတြက္ ပထမဦးစြာ function ၏ data return type အားအရင္ဦးစြာ ေရးသားသည္ ထို႕ေနာက္တြင္ class name နွင့္ function name တို႕အား ::(expanding the scope of the operation) ၿခား၍ function name ေနာက္တြင္ parameter list အား ေရးသားေပးရမည္။
 public and private function member
(Открытые и закрытые члены класса)


void AnyClass :: set_data (int num)
   {    data = num;                             // Function body
   }
int AnyClass :: get_data ()
{     return data;                             // function body
   }


Class အား declaration(Объявление) ၿပဳလုပ္ၿခင္းသည္ object type အား define( определять) ၿပဳလုပ္ၿခင္းပင္ၿဖစ္သည္။ သို႕ေသာ္ မည္သည့္ object ကိုမွ ဖန္တီးၿခင္းၿပဳလုပ္လိမ့္မည္မဟုတ္ေပ။ထို႕ေၾကာင့္ memory ေပၚတြင္လည္း object အတြက္ေနရာသတ္မွတ္ေပးလိမ့္မည္မဟုတ္ေပ။object တစ္ခု တည္ေဆာက္ရန္အတြက္ object_name အား data_type သကဲ့သို႕သတ္မွတ္ေပးၿခင္းၿဖင့္ အသံုးၿပဳရမည္ၿဖစ္သည္။
AnyClass ob1,ob2;  //creates two objects of type AnyClass
ထိုကဲ့သို႕ object တည္ေဆာက္ၿပီးလွ်င္ operator period(.) အားအသံုးၿပဳ၍ class ၏ public member မ်ားအား access ၿပဳလုပ္နိဳင္သည္။
ob1.set_data(10);   //ob1.data ဆီသို႕ 10 ေရာက္ရွိမည္။
ob2.set_data(99);   //ob2.data ဆိသို႕ 99 ေရာက္ရွိမည္။
class ၏ object တိုင္းသည္ class ထဲတြင္ ေၾကၿငာထားေသာ variable အားလံုးအတြက္ ကိုယ္ပိုင္ copy မ်ားရွိတက္ၾကသည္။
ယခု screen ေပၚတြင္ data_element ၏တန္ဖိုးမ်ားအား ouput ထုတ္နိဳင္မည္ၿဖစ္သည္။
cout<<ob1.get_data()<<endl;
cout<<ob2.get_data()<<endl;


Operation form
ob1.data =10;
ob2.data =100;

class ၏ data element မ်ားသည္ close ၿဖစ္ေနလွ်င္ complier သည္ error ထုတ္ေပးလိမ့္မည္ၿဖစ္သည္။
အကယ္၍ class အားေအာက္ပါအတိုင္း declareၿပဳလုပ္လွ်င္;
class AnyClass { public:
                             int data;       //open(by the public modifier) element class
                             // void set_data(int num); //open(by the public modifier)
                             //int get_data();     //function member of the class
                       };
ယခု operators မ်ားသည္      ob1.data =10;    
                                      ob2.data = 100;
ဟု complie ၿပဳလုပ္လိမ့္မည္ၿဖစ္ၿပီး မွန္ကန္စြာ အလုပ္လုပ္လိမ့္မည္ၿဖစ္သည္။ အဘယ္ေၾကာင့္ဆိုေသာ္ access ၿပဳလုပ္ရာတြင္ class ၏ open element မ်ားဆီသို႕ ၿပဳလုပ္ေသာေၾကာင့္ ၿဖစ္သည္။အထပ္ေဖာ္ၿပပါ ပံုစံတြင္ public function_element မ်ားၿဖစ္ေသာ set_data() နွင့္ get_data() တို႕သည္ မရွိမၿဖစ္လိုအပ္ၿခင္းေတာ့္မဟုတ္ေပ။


Example. Creating the "mobile phone", the installation of data and display them on screen.
#include <iostream>
using namespace std;
class phone {          int kode;                          // code
unsigned long int number; // number
int PIN;                           // PIN-code SIM-card
unsigned long int IMEI;     // ID device
public:
void set_phone(int k, unsigned long int n, int p, unsigned long int i);
void print_phone();
};

int main()
{ phone MyLG;                 //  an object of class phone
MyLG.set_phone(916, 3751831, 3182, 58316897143);
MyLG.print_phone();
return 0;
}

void phone::set_phone(int k, unsigned long int n, int p, unsigned long int i)
{  kode = k;
    number = n;
   PIN = p;
   IMEI = i;
}
void phone::print_phone()
{  cout << "Code" << kode <<endl;
    cout << "Number " << number <<endl;
    cout << "PIN-code " << PIN <<endl;
cout << "ID " << IMEI <<endl;
}


class ၏ function_element မ်ားသည္ inline အၿဖစ္အသံုးၿပဳနိဳင္သည္။inline function ၏ element မ်ားသည္ class member မဟုတ္ေသာ inline function ဆီသို႕ တိုက္ရိုက္ခ်ိတ္ဆက္နိဳင္မည္ ၿဖစ္သည္။ ေအာက္ေဖာ္ၿပပါ ဥပမာသည္ class ၏ function _member မ်ားအား Inline(build-in )အေနၿဖင့္ ၿပန္လည္ေရးသားထားၿခင္းၿဖစ္သည္။
Example . Creating the "mobile phone" functions inline with the elements.
#include <iostream>
using namespace std;
class phone {  int kode;                          // code
                     unsigned long int number; // number
                     int PIN;                           // PIN-code SIM-card
                     unsigned long int IMEI;     // ID device
            public:
            void set_phone(int k, unsigned long int n, int p, unsigned long int i)
           {  kode = k;
                number = n;
                PIN = p;
                IMEI = i;
           }
           void print_phone()
          {  cout << "Code: " << kode <<endl;
                cout << "Number: " << number <<endl;
                cout << "PIN-код: " << PIN <<endl;
                cout << "ID: " << IMEI <<endl;
         }
};
int main()
{ phone MyLG;                 //  объект класса phone
  MyLG.set_phone(916, 3751831, 3182, 58316897143);
  MyLG.print_phone();
  return 0;
}


Object တိုင္းသည္ ၎တို႕၏ data_element မ်ားအား ကိုယ္ပိုင္ copy မ်ားပိုင္ဆိုင္ၾကသည္။ သို႕ေသာ္ ၎တို႕၏ function_element (method)မ်ားသည္ အတူတူပင္ၿဖစ္ၾကသည္။ဆိုလိုသည္မွာ class သည္ method(function) အားဖန္တီးလိုက္လွ်င္ ၎ class အားတည္ေဆာက္လိုက္သည္နွင့္ ထို function(method) အား ကြန္ပ်ဴတာ memory တြင္ ေနရာခ်လိုက္ၿပီးၿဖစ္သည္။

class AnyCls {   static type st_d;
                       type d1;
                       type d2;
                       type d2;
                      specification:
                       type fn1(list_of_parameters);
                       type fn2(list_of_parameters);
                 } ob1, ob2;



Function_element မ်ားၿဖစ္ေသာ ob1 နွင့္ ob2 တို႕အား memory တြင္ေနရာခ်ထားၿခင္းအား ေအာက္ေဖာ္ၿပပါ ပံုတြင္ေတြ႕ၿမင္နိဳင္သည္။
အကယ္၍ မည္သည့္ non-static class_member မ်ားဆီသို႕ access ၿပဳလုပ္ၿခင္း မၿပဳလွ်င္ function_element မ်ားအား static အၿဖစ္ေၾကၿငာအသံုးၿပဳနိဳင္သည္။non-static function_element နွင့္static function_element မ်ား၏ ၿခားနားခ်က္သည္ static function_element တြင္ pointer *this မတည္ရွိေပ။

ပံုမွန္အားၿဖင့္ class ၏ object တိုင္းသည္ ၎တို႕၏ data_element မ်ား၏ copy မ်ားပိုင္ဆိုင္ၾကသည္။သို႕ေသာ္ တစ္ခ်ိဳ႕ေသာ အၿဖစ္အပ်က္မ်ားတြင္ class ၏ object မ်ားအားလံုးသည္ ၎ class ၏ object အားလံုးအတြက္ copy အကုန္လံုးအား မပိုင္ဆိုင္ပဲ အခ်ိဳ႕ေသာ data_element အတြက္သာလွ်င္ပိုင္ဆိုင္ၿခင္းလည္းရွိတက္ၾကသည္။ထိုသို႕ အသံုးၿပဳရန္အတြက္ static data မ်ားအား အသံုးၿပဳၿခင္းၿဖစ္သည္။(static data မ်ားတြင္ class တစ္ခုလံုးအတြက္ information မ်ားပါ၀င္သည္)။ထိုသို႕ အသံုးၿပဳရန္အတြက္ static ဆိုေသာ စကားလံုးအား အစတြင္ ေၾကၿငာၿခင္းၿဖစ္သည္။
အကယ္၍ ေပးထားေသာ element မ်ားအား static ဟုေရးသားေဖာ္ၿပခဲ့ပါက ၎သည္ static ၿဖစ္မည္ၿဖစ္ၿပီး ေပးထားေသာ class ၏ object အားလံုးအတြက္ တန္ဖိုးတစ္ခုတည္းသာ တည္ရွိလိမ့္မည္ၿဖစ္သည္။ထိုသို႕ variable မ်ားအတြက္ တန္ဖိုးတစ္ခုတည္းသာ copy တည္ရွိ
ေသာေၾကာင့္ တစ္ၿခား object မ်ားမွ အသံုးၿပဳလိုလွ်င္ object အားလံုးအား share ၿပဳလုပ္ေသာနည္း ၿဖင့္ အသံုးၿပဳနိဳင္သည္။ထို class မွဆင္းသက္လာေသာ class မ်ားအားလံုးအတြက္ ထို static_variable ကိုပင္ အသံုးၿပဳလိမ့္မည္ၿဖစ္သည္။data မ်ားအား  class ၏ object မ်ားအားလံုးအတြက္ အမ်ားသံုးအေနၿဖင့္ store ၿပဳလုပ္ရန္အတြက္ class တြင္ static variable မ်ားအား အသံုးၿပဳရၿခင္းသည္ ၿဖစ္သည္။
Static field အား declaration ၿပဳလုပ္ၿခင္းသည္ စည္းမ်ဥ္းအရ class definition အတြင္းတြင္ ၿပဳလုပ္ရမည္ၿဖစ္ၿပီး ၎ static field ၏ definition အား class အၿပင္တြင္ ၿပဳလုပ္ရေလ့ရွိၿပီး ရံဖန္ရံခါတြင္ global variable အၿဖစ္ အသံုးၿပဳေလ့ရွိသည္။ထို႕ေၾကာင့္ class ၏ static_variable မ်ားဆီ access ၿပဳလုပ္ရန္အတြက္ object မ်ားနွင့္ ဆက္စပ္မွဳ႕မရွိပဲနွင့္လည္း ၿပဳလုပ္နိဳင္သည္။ (အဘယ္ေၾကာင့္ဆိုေသာ္ global variable အၿဖစ္အသံုးၿပဳေသာေၾကာင့္)။


Пример 16.3.
#include <iostream>
using namespace std;
class stat_var 
 { public:
   static int st_i;
   void set_st_i(int n)  {  st_i = n;  }
   int get_st_i()  {  return st_i;  }
   };
int stat_var :: st_i;
int main()
{  stat_var ob1, ob2;
    stat_var :: st_i = 125;            // assign a value to a static variable without
                                        // reference to object name
    cout << ob1.get_st_i() << endl;
    cout << ob2.get_st_i() << endl;
    return 0;
}


Function elements and static data elements.
(Функции-элементы и статические данные-элементы)


translated by zmk@miet51


No comments:

Post a Comment