មាន​យុទ្ធសាស្ត្រ​​ជា​ច្រើនបែប​​យ៉ាង​នៅ​ក្នង​ការសរសេរ​កម្មវិធី​កំព្យូទ័រ។ យុទ្ធសាស្ត្រ​​ទាំងនោះ​មាន​ដូចជា​ការសរសេរ​កម្មវិធី​ដោយ​​ត្រឹម​តែការបង្កើត​ក្បួន​ដែល​ភាសា​អង់គ្លេស​ហៅ​ថា​ procedural programming (PP) និង​ការសរសេរ​កម្មវិធី​​ដោយ​ការ​បង្កើត​ថ្នាក់​ដែល​ភាសា​អង់គ្លេស​ហៅ​ថា object oriented programming (OOP) ​។

 

ដោយ​ឡែក​ ភាសា ES6 អនុញ្ញាត​អោយ​យើង​​អាច​ប្រើប្រាស់​យុទ្ធសាស្ត្រ​ PP ក៏បាន​ យុទ្ធសាស្ត្រ OOP ក៏​បាន​នៅ​ក្នុង​ការសរសេរ​កម្មវិធី​គ្រប់​បែបយ៉ាង​ទាំងអស់ ដោយ​គ្មានបញ្ហាអ្វី​ឡើយ​។

 

នៅ​ក្នុង​ភាសា ES6 ថ្នាក់ (class) គឺ​ជា​កន្លែង​មួយ​នៅ​ក្នុង​សតិ​របស់​កំព្យូទ័រ ​​ប្រើប្រាស់​​​ជា​កន្លែង​សម្រាប់​​រក្សា​ទុក​​​ក្បួន​និង​ឬ​អថេរ​មួយ​ចំនួន​​ ដែល​នឹង​ត្រូវ​យក​ទៅ​ប្រើ​ប្រាស់​នៅ​ពេល​ក្រោយ​ៗ​ទៀត​​។ ដើម្បី​បង្កើត​ថ្នាក់ យើង​ត្រូវ​ធ្វើ​ដូច​ខាងក្រោម​នេះ​៖

 

class Area{
  constructor(){
    this.pi = 3.14
  }

  rectangle(width,height){
    let surface = width * height
    console.log(`The area of the rectangle is: ${surface}`)
  }
}

 

គ្រប់​ក្បួន​និង​ឬ​អថេរទាំងឡាយ​ដែល​ត្រូវ​បាន​បង្កើត​ឡើង​និង​ទុក​នៅ​ក្នុង​ថ្នាក់​ ត្រូវ​គេ​ឲ្យ​ឈ្មោះ​ថា​ជា សម្បត្តិថ្នាក់ (class attribute) ដែល​អាច​ជា​ក្បួន និង​ឬ​ទិន្នន័យ​ផ្សេង​ៗ​។ ក្បួន​នៅ​ក្នុង​ថ្នាក់​ត្រូវ​គេ​​ឲ្យ​ឈ្មោះ​​ថា​ជា វិធី (method) ឯ​ចំណែក​ទិន្នន័យ​នៅ​ក្នុង​ថា្នក់ ដែល​ត្រូវ​បង្កើត​ឡើង​នៅ​ក្នុង​វិធី​ពិសេស​មាន​ឈ្មោះ​ថា constructor​ ត្រូវ​គេ​ចាត់ទុក​ថា​ជា ទិន្នន័យសិស្ស (instance attribute) ។ ជាក់ស្តែង នៅ​ក្នុង​ថ្នាក់​ឈ្មោះ Area ខាង​លើ​ អថេរ​ឈ្មោះ pi គឺ​ជា​ទិន្នន័យ​សិស្ស និង​ក្បួន​ឈ្មោះ​ rectangle​ គឺ​ជា​វិធី​។

 

ក្រោយ​ពី​ត្រូវ​បង្កើត​ឡើង​រួច​ហើយ ​យើង​អាច​យក​ឈ្មោះ​ជា​ច្រើន​ទៅ​ភ្ជាប់​នឹង​ថ្នាក់​ណាមួយ បាន​ដោយ​គ្មាន​បញ្ហា​អ្វី​ឡើយ​។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ​៖

 

class Area{
  constructor(){
    this.pi = 3.14
  }

  rectangle(width,height){
    let surface = width * height
    console.log(`The area of the rectangle is: ${surface}`)
  }
}

let plane = layer = Area

console.log(plane)
console.log(layer)
console.log(Area)

 

ក្រៅ​ពី​ការផ្តល់​ផលប្រយោជន៍​នៃ​ការរក្សា​ទុក​ក្បួនខ្នាត​និងឬ​​ទិន្នន័យ​ផ្សេង​ៗ​សំរាប់​យក​ទៅ​ប្រើការ​នៅ​ពេល​ក្រោយ​ទៀត (code reused) ថ្នាក់​ផ្តល់​ផល​ប្រយោជន៍​ចំនួន ៣ ថែម​ទៀត​គឺ encapsulation, inheritance, និង polymorphism ។

 

ផល​ប្រយោជន៍​ encapsulation មាន​ន័យ​ថា ថ្នាក់​អាច​ជួយ​រក្សារ​ទុក​នូវ​​ទិន្នន័យ​ទាំងឡាយ​ប្រកប​ដោយ​សុវត្ថភាព​ជាង​​ទិន្នន័យ​នៅ​ក្រៅ​ថ្នាក់ ពីព្រោះ​ទិន្នន័យ​នៅ​ក្នុង​ថ្នាក់​អាច​ត្រូវ​យក​ទៅ​ប្រើប្រាស់​បាន​ តែ​តាម​រយៈ​វិធី​នានា​នៅ​ក្នុង​ថ្នាក់​តែប៉ុណ្ណោះ​ (data hiding) ។

 

ផល​ប្រយោជន៍​ inheritance បាន​ន័យ​ថា​យើង​អាច​យក​ថ្នាក់​នៃ​ក្បួន​ខ្នាត​ផ្សេង​ៗ​ មក​ពង្រីក​អោយ​កាន់​ធំ​ថែម​ទៀត ដោយ​បង្កើត​ថ្នាក់​នៃ​ក្បួន​ខ្នាត​ថ្មី​ៗ​ទៀត​បន្ត​ចេញ​ពី​ថ្នាក់​​​​ដើម​​​ទាំងនោះ​។

 

ផលប្រយោជន៍ polymorphism បាន​ន័យ​ថា នៅ​ក្នុង​ថ្នាក់​ថ្មី​របស់​យើង ដែល​ត្រូវ​បង្កើត​ឡើង​​ដោយ​បន្ត​ចេញ​ពី​ថ្នាក់​ដើម​ទាំនោះ យើង​​អាច​បង្កើត​​វិធី​​និង​ឬ​ទិន្នន័យ​ផ្សេង​ៗ​មាន​ឈ្មោះ​ដូចគ្នា​ទៅ​នឹង​វិធី​​និងឬ​ទិន្នន័យ​មួយ​ចំនួន​ នៅ​ក្នុង​ថា្នក់​​ដើម។ ហើយ​នៅ​ពេល​ដែល​យើង​យក​​វិធី​​និង​ឬ​ទិន្នន័យ​មាន​ឈ្មោះ​ដូច​គ្នា​ទាំងនោះមក​ប្រើ​ វិធី​និង​ឬ​ទិន្នន័យ​ទាំងនោះ​នឹង​ត្រូវ​ប្រែរូប​ទៅ​ជា​របស់​ថ្នាក់​ណា​មួយ​ អាស្រ័យ​ទៅតាម​កាលទេស​ខុស​ៗ​គ្នា​៕