bayonsmile

OOP – Interface vs Abstract class

សព្វ​ថ្ងៃ​នេះ​បើ​ទោះ​ជា​ផ្នែក OOP មានការ​ពេញ​និយម​ក៏​ដោយ​តែ​ភាគ​ច្រើន​អ្នក​ប្រើ​ប្រាស់​នៅ​ស្រពិច​ស្រពិល​ក្នុង​ការ​បែង​ចែក និង​ការ​​កំណត់អត្ថន័យ ទាំងពីរ​យ៉ាង​នេះ គឺ Interface និង Abstract class។ អាច​ប្រហែលជា​បញ្ហា​នេះ គឺមិន​បានទទួល​ការ​ពន្យល់​ក្បោះ​ក្បាយ​នៅសាលាឬ អាច​អ្នក​ពន្យល់ មិន​សូម​យល់​ច្បាស់ តែ​យ៉ាង​ណា​ក្នុង​នាម​យើង​ជា​អ្នក​សិក្សា ត្រូវសិក្សានិង​ស្វែង​យល់​អោយច្បាស់ ដើម្បីជា​ទុន​សម្រាប់​ការ​ប្រើ​ប្រាស់ ហើយ​ក៏​ដូច​ជាត្រៀម​រាល់​ការ​សាក​សួរ​ពីសំណាក់​ការ​សម្ភាសការ​ងារ​ផ្សេងៗ ព្រោះវា​សំខាន់ណាស់ សម្រាប់​អ្នក​សរសេរ​កូដបង្កើត​កម្ម​វិធីប្រើ​ប្រាស់។

Is-a(គឺជា) និង Can-do(អាចធ្វើបាន)

ក្នុង​អត្ថបទ​នេះ ខ្ញុំ​បាទ​សុំ​មិន​និយាយ​លម្អិត លើ​ផ្នែក​ទ្រឹស្ដី ដូច​ជាពី​ការ​បង្កើត abstract class និង interface ជា​លក្ខណ​បង្ហាញ​កូដ​ ឬនិយាយ​អំពី​​ការ​ប្រកាស ឬថា​តើមានការដាក់កូដ​អ្វី​ខ្លះ យ៉ាង​នេះ ឬ​យ៉ាង​ណា​ នោះទេ ។ សម្រាប់ខ្ញុំពេល​នេះ គឺ​យើងមិន​និយាយ​ដល់ថា​តើ abstract មាន​ប្រកាស​អ្វី​បានខ្លះ? ឬ interface
តើ​អនុញ្ញាតិ​បាន​អោយ​កំណត់ខ្លឹមសា អនុគមន៏​ឬវិធីសាស្ត្រ​បាន​ដែរ​ឬ​អត់​នោះទេ។ តាម​គំនិត​ខ្ញុំ ជា​មូលដ្ឋាន​បើ​សិន​យើង​យល់​ច្បាស់​ពី​ភាព​ខុស​គ្នា​រវាងវា​ទាំង​ពីរថា​មាន អ្វី​ខ្លះ នោះ​គឺ​ជា​គោល​ដៅដែល​អាច​យល់​និង​ទាយ​មក​ប្រើ​ប្រាស់បាន​យ៉ាងមាន​ប្រសិទ្ធិភាព:

– Abstract class: គឺ​ជា class មេគេ កំរិត​ខ្ពស់ជាង សម្រាប់បណ្ដា classផ្សេងៗ ដែល​មាន​លក្ខណរួម​គ្នាឬត្រូវ​បានចាត់​ថ្នាក់ដូច​គ្នា។ រួម​គ្នា​ ត្រង់ទី​នេះ គឺ​សំដៅ​លើ​ប្រភេទ​ទិនិ្នន័យ, ចំនាត់​ថ្នាក់, ឬ ភារកិច្ច​របស់ class នោះ។ តែថា បើ class ពីរ អាច អនុវត្ត interface តែមួយ​ដួច​គ្នា គឺ Class ទាំង​ពីរ​នោះ អាចមាន​លក្ខណខុស​គ្នា​ទាំង​ស្រុង។

– Interface: ជា​មុខ​ងារ​ ឬ​ជា​ភារកិច្ច ដែល​យើង​អាច​បន្ថែម​ទៅអោយ class ណាមួយ​ក៏​បាន។ ពាក្យ​ថា “មុខ​ងារ”ទី​នេះ គឺ​សំដៅទៅអនុគមន៏ (ឬ​វិធី​សាស្ត្រ)។ Interface អាច​មាន​អនុគមន៏/វិធីសាស្ត្រ ច្រើន​ តែការ​រួម​ផ្សំ​របស់​វា​គឺសម្រាប់ ឆ្លើយ​តប​និង​ មុខ​ងារ​តែ​មួយ។

ដូច្នេះ , អ្នក​មិនមាន​ការ​យល់​ខុស​ពេលដែល​​និយាយ​ដល់ class មួយ ថា​ត្រូវ implementextend នោះ​ទៀត​ទេ។អ្នក​សិក្សា​ភាគ​ច្រើន​មិន​ទាន់បាន​បែក​ចែក​ច្បាស់នៅ​ ពាក្យ​សំខាន់ទាំង​ពីរ​យ៉ាង​នេះ​នៅ​ឡើយ​ទេ, មក​ដល់​ពេល​នេះ អ្នក​អាច​ធ្វើ​ការ​សំគាល់ អំពីពាក្យ​ពីរ​នេះ interface និង abstract class។
អ្នកអាច ទទួលបន្ថែម(extend) ពី class មួយ (abstract class) ហើយ​អ្នក​អាច​អនុវត្ត (implement) រាល់​មុខ​ងារ (interface) សម្រាប់ class របស់​ខ្លួន។

និយាយ​ដោយ​ខ្លីគឺ​ថា ទំនាក់ទំនងរវាង class មួយ​ពេល​ដែល​ ទទួលបន្ថែម abstract class មួយគឺ​ហៅថា is-a(គឺជា), ចំណែក class មួយពេល អនុវត្ត interface មួយ​ត្រូវ​បាន​ហៅ​ថា​ can-do (ឬ –able) (អាច​ធ្វើបាន).

ចូរ​ក្រឡេកមើល​ឧទាហារណ៏​ខាង​ក្រោម​នេះ , ខ្ញុំមាន:

– Interface: Barkable, Runable, Flyable, Swimable.

– Abstract class Animal និង បណ្ដា sub class: Bolt, AngryBird និង Nemo.

– Abstract class Machine និង បណ្ដា sub class: McQueen, Siddeley.

abstract-class-interface-oop

 

Abstract class – interface – OOP

ដូច​ដែល​អ្នក​ឃើញ, បើទោះជា McQueen និង Bolt សុទ្ធ​តែត្រូវ​បានអនុវត្ត interface Runable, តែ​វាទាំង​ពីរ​នេះ គឺ​សុទ្ធ​តែស្ថិត​ក្នុងចំនាត់ថ្នាក់ ឬ ពពួក​ពីរ​ផ្សេងៗ​គ្នា ។ ហើយ​ប្រាកដណាស់ចំពោះ class មួយ​គឺ អាច can-do មុខ​ងារ​ច្រើន, ឧទាហរណ៏ Bolt អាច រត់ និង អាច “bow wow”.

angry-bird-fly

សួរ​ថា​តើ ប្រើ Interface សម្រាប់ជា “គំរួ​ឬ​ជាម៉ូដែល” របស់ class បានអត់?
នេះ គឺ​សំណួរ​ដែលគ្រប់​គ្នា​មាន​ចំងល់ តែ​ដើម្បីឆ្លើយ​នឹង​សំណួរ​ខាង​លើ យើង​ត្រូវ​និយាយ​ដល់​សំណួរ​ពីរ​ទៀត:

– Interface ត្រូវ​បាន​ប្រើដើម្បី​អ្វី ?

– មូល​ហេតុអ្វី​បាន​មិន​អាច​កំណត់ខ្លឹមសារអោយផ្នែក វិធីសាស្ត្រ (Method Body) របស់ interface បាន?.

បើ​ពនិត្យ​នៅ​ក្នុង​កំរិត​ណា​មួយ ការ​ប្រើ​ប្រាស់​នេះ គឺត្រឹម​ត្រូវ, តែដូច​បាន​និយាយ​នៅ​ផ្នែក​ខាង​លើ​,ចំពោះ interface វាត្រូវ​បាន​ប្រើត្រឹម​តែ​សម្រាប់​ការពណ៌នាអំពី​ “គំរូរចនា” សម្រាប់​តែ អោយ ជា​លក្ខណមុខ​ងារ របស់ class តែ​ប៉ុណ្ណោះ។ ហើយ​បើ​សិន​ជា​ចង់​បង្កើត​ជា​លក្ខណណជា​គំរូ​ទូទៅ, សូម​អ្នក​ប្រើ abstract class.។ដូច​យើង​ដឹង​ស្រាប់ថា ចំពោះ គំរូរចនាគឺ មាន​វា​តែង​តែ​មាន​ស្រាប់ ហើយ​ក៏​មាន​ របស់​ផ្សេងៗ​ដែលជា​ abstract.

ឆ្លើយ​តប​នឹង​សំណួរ​ទី២ ដែល​ទាក់ទិន​នឹង​ការ​សរសេរ​ខ្លឹម​សារ​ អោយ វិធីសាស្ត្រ(Method body) គឺ​ថា​ការ​សរសេរ​ខ្លឹមសារអោយ​អនុគមន៏​ដែល​មាន​ក្នុង​ interface វា​នឹង​ធ្វើ​អោយ លទ្ធ​ផល​យឺត​យ៉ាវ​។ហេតុ​ផល​ត្រង់​គឺ​វា​នឹង​រក​មើល​ វិធីសាស្ត្រដើម្បី​នឹង​អនុវត្ត​ចំណាយ​ពេល​យូរ​ក្នុងរុក​រកលើបណ្ដា interface,ជំនួស​មក​វិញ​ដោយ​ការ​រក​មើល​ក្នុង​ class មេរបស់វា។

angry-bird1

បើ​និយាយ​ពី​ការ​ប្រើ​ប្រាស់ របស់ interface, គ្រប់ interface យើង​អាច​យល់ថា​វា​ដូច​ទៅ​នឹង​ plugin ឬ Library/third-party របស់​កម្ម​វិធីកុំព្យទ័រ។
ការអនុវត្ត interface អោយ class ក៏​ដូច​ទៅនឹង​តំឡើងបន្ថែម plugin អោយកម្ម​វិធីកុំព្យទ័រ​យ៉ាង​ដូច្នោះអច្ចឹង​ដែរ។

តារាង​ប្រៀប​ធៀប

ចុង​ក្រោយ, យើង​នឹង​រៀប​រាប់​ភាព​ខុស​គ្នា ជា​តារាង​ដែល​យើង​អាច​សំគាល់​បាន​អោយ​កាន់​តែ ងាយ​ស្រួល
. ភាព​ខុស​គ្នា​នេះ ក៏ អាស្រ័យ​លើ​ភាសារ​បង្កើត​កម្ម​វិធី​ផង​ដែរ​។ ដូច្នេះ អ្នកដោយ​គ្រាន់យល់​នូវ​ចំនុច​ជា​គន្លឹះដូច​ខាង​ក្រោម:

Interface Abstract class
Multiple inheritance class អាច​អនុវត្ត  interface ច្រើន.(យើង​តែង​ហៅថា ទទួល​មរតក) មិនអាចធ្វើការ​ទទួលមរតកបាន​ច្រើន
Default implementation មិន​អាច​កំណត់ខ្លឹម​សារ​កូដដំណើរ​ការ Method body,គឺ​អាច​ដាក់ត្រឹម​តែឈ្មោះ​ចំណង​ជើង Method heading. អាច​ធ្វើ​ការ​កំណត់ខ្លឹមសាអោយ វិធីសាស្ត្រ​ឬ​អនុគមន៏ Method body or function definition , property.
Access Modifiers គ្រប់Method, property សុទ្ធតែ​កំណត់​ដោយ  public ជាស្រាប់. អាច​ធ្វើ​ការ​កំណត់ modifier ​បាន​ដោយ​ខ្លួន​អ្នក​ផ្ទាល់.
Adding functionality គ្រប់Method, property របស់ interface ចាំបាច់​ត្រូវសរសេរ​លំអិត​ឬ​អនុវត្ត​ នៅផ្នែក class មិនចាំ​បាច់
Fields and Constants គ្មាន មាន

យល់ពី: Object & Class

Object & Class ជា ធាតុ​សំខាន់ពីរ​ក្នុង​ OOP ដែល​យើង​ចាំ​បាច់ ឈ្វេង​យល់​ដោយ​ខាន​តែ​បាន។

objects

Object-វត្ថុ ជា​អ្វី?
ការ​ប្រៀប​ធៀប Object-វត្ថុ ក្នុង​ជិវីត ជាក់​ស្កែង​និង​ក្នុង​ Object-វត្ថុ ក្នុង​ការ​សរសេរ​កម្ម​វិធី​កុំព្យូទ័រ

Object-វត្ថុ ក្នុង​ជីវិត​ជាក់​ស្ដែង:
បើសិនយើង​ក្រឡេក​មើល​ក្នុង​ជិវិតជាក់ស្ដែង​យើង​នឹង​សង្កេត​ឃើញ Object-វត្ថុ ជា​ច្រើន​នៅជុំវិញ​ខ្លួន​យើង​ដូចជា​: ឡាន, ឆ្កែ, មនុស្ស,..
Object-វត្ថុ ទាំង​នេះ គឺ​សុទ្ធ​តែ​មាន លក្ខណសំគាល់ ពីរ គឺ អត្តសញ្ញាណ(ពណ៌ កំពស់,ស្បែក) ​និង ​សកម្ម​ភាព(រត់ ដេក​ ដើរ​ ឈរ​ អង្កុយ)

Object-វត្ថុ ក្នុង​ការ​សរសេរ​កម្ម​វិធី​កុំព្យូទ័រ:
Object-វត្ថុ ក្នុង​ការ​សរសេរ​កម្ម​វិធី​កុំព្យូទ័រ ក៏​មាន​អត្តសញ្ញាណ​និង​សកម្ម​ភាព។ ​អត្តសញ្ញាណ​និង​សកម្ម​ភាព ត្រូវ​បាន​សម្ដែង​ចេញ​តាម​រយៈរូប​រាង និង​សកម្ម​ភាព
ដូច្នេះ Object-វត្ថុ ក្នុង ការ​សរសេរ​កម្ម​វិធី​កុំព្យូទ័រ គឺ​ជា​ការ​ពណ៌នា អំពី រូប​រាង អត្តសញ្ញាណ ដែល​ជា​ចំនុច​សំគាល់វត្ថុ​ ជាក់​ស្ដែង​នោះ តាម​រយៈ Properties និង Methods
សូម​ចាំពាក្យ​ពីរ​នេះ Properties និង Methods និយាយ​ដល់ Object គឺ និយាយ ដល់ Properties និង Methods។

Class – ថ្នាក់ជា​អ្វី?
មិន​មែន​ជា​ថ្នាក់រៀន​ទេ សូម​កុំច្រលំ តែវាគឺជា គំរូ ជាម៉ូដែល ឬ ជា​ប្លង់ ទូទៅ មួយ​របស់ object។

ឧទាហរណ៏: Class : Person មាន​អត្តសញ្ញាណគឺ Name,Age,Address… និង​សកម្ម​ភាព ដើរ,ឈរ,អង្កុយ… និង​ត្រូវ​បាន​ពណ៌នា​នៅលើ Class.
ឧទាហរណ៏:Object: Object ជាក់ស្ដែង Person ដែល​ត្រូវ​បាន​បង្កើតចេញពី Class Person ហើយ​នឹង​មាន​លក្ខណសំគាល់ Name = Soeng HengLee,Age =2,Address = Cambodia…និង បណ្ដា​ សកម្មភាព ដែល​មាន​នៅ​ក្នុង Class។

226px-CPT-OOP-objects_and_classes.svg

*យល់ថា class គឺជា​ការ​ពណ៌នាភាព​ជា​គំរូ ទូទៅមួយ (ឧទាហរណ៏៖ ឡាន), ចំណែក Object ជា​វត្ថុជាក់ស្ដែង (ឧទាហរណ៏៖ ឡាន TOYOA, BMW,HONDA)

*យល់ទៀតថា Class គឺ​បង្កើត​ចេញ​បាន ជា​ Object

object-class

Java webជាមួយនឹងJSP/Servlet-មេរៀនទី0​: សេចក្តី​ផ្តើ​ម

សូម​ស្វាគមន៍​មក​កាន់​ ប្លុក Javabodia ដែល​ថ្ងៃ​នេះ ខ្ញុំ​នឹង​ សរសេរ​ពី​ស៊េរី​នៃមេរៀនមួយ ​ក្នុង​បង្កើត​វែបជាមួយ JSP / Servlet តាម​បែប​បទ MVC ​។

អំពី​ស៊េរីមេរៀន

សម្រាប់​មេរៀន​ដំបូង​នេះ គឺ អ្នក​នឹង​បាន​ទទួល​នូវ​ចំនេះ ជា​មូល​ដ្ខាន​គ្រឹះ:

– ចេះវិភាគក្នុង​ការ​បង្កើត​ជា​ប្រពន្ធ័​កម្ម​វីធីមួយ​បាន​។

– ចេះ​បន្ថែម​លើមូលដ្ឋាន​ទិន្នន័យ​​។

– ការ​រចនា​ចំណុច​ប្រទាក់ (ជាមួយ HTML / CSS និង / JS​) ។

– ការ​បង្កើត​គេហទំព័រ​ដោយ​ប្រើប្រាស់ JSP / Servlet យក​គំរូ​តាម MVC

ចំ​នេះ​ដឹង​ជា​មូលដ្ឋាន​មួយ​ចំនួន​ដែល​អ្នក​ត្រូវការ​:

– JSP / Servlet

– JDBC

– ចំនណេះដឹងលើ HTML / CSS

ប្រសិន​បើ​អ្នក​មិន​បាន​ដឹង​អំពីចំនេះ​មូល​ដ្ឋាន​សំខាន់ៗ​ទាំង​នេះ​អ្នក​គួររៀន​​វា​ជាមុន​សិន​។ គឺអ្នក​អាច​រៀន​តាម​រយៈ​គេហទំព័រ​មួយ​ចំនួន​: Tutorialspoint , W3Schools ឬ​អ្នក​អាច​រក​ឃើញ​ការ​បង្រៀន​វីដេអូជា​ស៊េរី​ដែល​មាន​នៅ​តាម​Youtube ។
អ្នក​ត្រូវចាំ​ថា ការ​ងារវែបជាមួយ JAVA គឺ​ត្រូវ​​ច្បាស់​នៅ​លើ JSP / Servlet នេះ​តែ​ម្ដង។

មេរៀន​ក្រោយ​ និង​ប្រកាស​ជា​បន្ត​បន្ទាប់

សូម​អរគុណ

យល់​ច្បាស់​ពី Interface

សួរស្ដី អ្នកទាំង​អស់​គ្នា

អត្ថបទ​ក្នុង​ថ្ងៃ​នេះ ខ្ញុំ​បាទ នឹង​បរិយាយដល់​បង​ប្អូន​ទាំងអស់ទាំងគ្នានូវការ​វិភាគមួយ ដើម្បី​អោយងាយ​យល់កាន់តែយល់ច្បាស់ពីភាព​ខុស​គ្នា​រវាង Interface (កុំច្រលំគឺមិន​មែន GUI នោះទេ )  និង Abstract ក្នុងភាសា JAVA ក៏​ដូច​ជា​ក្នុង​ ការ​សរសេរ​កម្ម​វិធី​បែប ទំនោរជា OOP។ .

តោះ​ ចាប់​ផ្ដើម :

ដំបូង​ឡើង យើងចាំ​ផ្ដើមកំនត់​និយម​ន័យ ពាក្យដែល​ពិបាក​យល់​នេះ

Interface : តាម​អ្វីដែល​មនុស្ស​ភាគ​ច្រើនយល់ ក៏​ដូច​ជា​អ្វី​ដែល​បាន​សរសេរ​ក្នុង​សៀវភៅប្រែសម្រួល​ន័យ​ថា “ថ្នាក់ ផ្ទៃ​ប្រសព្វ” ស្ដាប់ទៅ​ក្រញាញ់ខូរ… #@!#$#@%@%$ តើវា​ជា​អ្វី​ទៅ
ចំពោះខ្ញុំ Interface គឺ​ងាយ​ស្រួល​យល់ ដូច​ការ​ពន្យល់ខាង​ក្រោម​នេះ :

ដោយ​ស្រមៃថា , អ្នកជាមហាសេដ្ឋី​មួយ​រូប។ អ្នក​មាន​ផ្ទះរហូត​ដល់​ទៅ 20 ផ្ទះ ហើយ​ផ្ទះ​និមួយៗ​មាន​មាន​សោរចាក់ចូល​ផ្ទះ​ផ្សេងៗ​គ្នា។
បើ​អ្នក​ចង់​ចូល​ផ្ទះណាមួយ​ក្នុង​ចំនោម​២០ នោះ​អ្នក​ចាំ​បាច់ ចាំច្បាស់សោរ​ណាមួយ​សម្រាប់​ផ្ទះនោះ។
វាច្បាស់ជា​មានការ​លំបាកសម្រាប់​អ្នក ?វា​មិន​លំបាកណាស់​ណា​ទេ តែ​បញ្ហា​ត្រង់​ថា គឺ​អ្នក​លំបាក​ក្នុង​ការ​ចាំវា​នឹង​យក​មក​ចាក់បាន​ភ្លាមៗ
ដូច្នេះយើង​ក៏​គិត​ដល់​មធ្យោបាយ​ងាយ​ស្រួល​នឹង​ប្រសើរជាង​នេះ​គឺ​ប្រើស សោរ​បញ្ជ តែមួយ​ដែល​អាច​បើក​ទ្វាបាន​គ្រប់ផ្ទះដែលចង់​ចូល​។

អាន​ដល់​ចំនុច​នេះ​សាក​គិត ដល់​គំនិត​ក្នុង​ការ​ពណ៌នាជាទំនោរ OOP …

– ផ្ទះ​និមួយៗគឺជា class មួយ​របស់​អ្នក​បង្កើត​ឡើង
– សោរ នីមួយៗគឺជា វិធីសាស្ត្រ​មួយៗ(method) សម្រាប់ class ទាំង​នោះ ។ method (សោរ )ទាំង​អស់​ គឺសុទ្ធ​តែ​មាន​មុខ​ងារ​រួម​តែ​មួយ​គឺ​ដើម្បី​បើក​ទ្វា​ផ្ទះ​– ច្បាស់​ណាស់​វិធីសាស្ត្រនៃ​ការ​​បើក​ទ្វាគឺមាន​របៀប​ផ្សេងៗ​គ្នា។
– សោរ​បញ្ជា​គឺ ជា​ interface មួយ​របស់​អ្នក​

តាម​ការ​ពណ៌នាខាង​លើ , អ្នក​អាច​យល់​បានមុខងារខ្លះៗ interface ហើយ​មែន​ទេ ?ពេល​នេះ​យើង​អាច​ចាប់​ផ្ដើម​នូវ​ឧទាហរណ៏ជាក់​ស្ដែង​មួយ​

អ្នក​មាន​ interface មួយ


Public interface KeyPro {
public void key();//ចាំថា អត់​មាន​សរសេរកូដផ្សេងៗ នៅអ្វីទី​នេះទេ គឺ​មាន​តឺ​ឈ្មោះ វិធីសាស្ត្រ Method key();
}

អ្នក​មាន class ចំនួន2 សុទ្ធ​តែ​ implement interface KeyPro :


Public Class Home1 implements KeyPro{
public void key(){
// your code
}
}

Public Class Home2 implements KeyPro{
public void key(){
// your code
}
}

ក្រោយ​ពីបាន​បង្កើតនូវ interface និងធ្វើការ implement ពីបណ្ដា class, ការ​ងារ​យើង​នា​ពេល​នេះ គឺ ត្រូត​ពិនិ្យ​មើល​ថា​តើវា​ដំណើរ​ការ​បាន​យ៉ាង​ដូច​ម្ដេច និង​ដោយ​របៀប​ណា?

– ឧបមាថា អ្នក​ចង់ ចូល Home1 នោះនឹង​អនុវត្ត​ដូច​ខាង​ក្រោម :

public static void main (String[] args)
{
KeyPro key = new Home1(); // (ត្រូវ​នឹង​ន័យ​ដែល​ថា: “ខ្ញុំចង់​ចូល​ផ្ទះទី 1” )
key.key(); // ( ត្រូវ​នឹង​ន័យ​ដែល​ថា : “ប្រើ​សោរ​បញ្ជា​ដើម្បី​ចូល​ផ្ទះ” )
}

–ឧបមាថា អ្នក​ចង់ ចូល Home2 នោះនឹង​អនុវត្ត​ដូច​ខាង​ក្រោម :

public static void main (String[] args)
{
KeyPro key = new Home2(); // (ត្រូវ​នឹង​ន័យ​ដែល​ថា: “ខ្ញុំចង់​ចូល​ផ្ទះទី 2” )
key.key(); // ( ត្រូវ​នឹង​ន័យ​ដែល​ថា : “ប្រើ​សោរ​បញ្ជា​ដើម្បី​ចូល​ផ្ទះ” )
}

មក​ដល់​ចំនុច​នេះ ខ្ញុំ​បាទ​សង្ឃឹម​ថា​អ្នកយល់​បាន​នូវ​អត្ថន័យរបស់ interface ច្បាស់ជាង​មុន​ហើយ​មាន​ទេ !

សន្យា​ជួបបង​ប្អូន​ ពេល​ក្រោយ…

Design Pattern គឺ​ជា​អ្វី?

ការ​នែនាំពី Design Pattern

     Design Pattern គឺ​ជា​បច្ចេកទេសក្នុង​ការ​បង្កើត​កម្ម​វិធីកុំព្យូទ័រតាម​លក្ខណៈ Object, វា​មាន​សារសំខាន់សម្រាប់អ្នកសរសេរកម្ម​វិធី។សម្រាប់​អ្នក​ដែល​ពូកែសរសេរ​កម្ម​វិធី ​គឺ​ត្រូវ​ចេះ​ផ្នែក​នេះ​អោយ​ច្បាស់។

វា​ត្រូវ​បាន​គេ​ប្រើភាគច្រើន​ក្នុង​ភាសាបង្កើត​កម្ម​វិធីជា​ទំនោរOOP។វា​នឹង​ផ្តល់អោយ អ្នក​នូវ​ការ “រចនាគំរូ“, ដំណោះ​ស្រាយ​សម្រាប់ដោះស្រាយ​រាល់​បញ្ហា​រួម ហើយ​ដែលយើង​តែង​ជួប​ប្រទះ​ក្នុង​ការសរសេរ​បង្កើត​កម្ម​វិធី។ ជាក់​ស្ដែងគឺមិន​ខុសអីពី​នៅ​ពេល​ដែល​អ្នកជួប​បញ្ហា​នោះ​អ្នក​នឹង​ព្យាយាមរក​ដំណោះស្រាយ តែប្រហែលជា​ដំណោះស្រាយ​របស់​អ្នក​នៅ​មិន​ទាន់ជា​ដំណោះស្រាយ​ដ៏ប្រសើរ​បំផុត​មួយ និង​ទូទៅ​មួយ​នៅ​ឡើយ ។

       Design Pattern គឺជួយ​អ្នក​ក្នុង​ការ​ដោះ​ស្រាយ​បញ្ហាតាម​របៀប​មួយ​ដ៏​ប្រសើរ​បំផុត, ផ្តល់អោយ​អ្នក​នូវ​រាល់​វិធីសាស្ត្រដោះ​ស្រាយ​ក្នុង​ការ​បង្កើត​កម្មវិធីជា​លក្ខណៈ OOP.

ក្នុង Design Pattern ចែកជា 3 ក្រុម​​រួម​មាន​:

Design-Patterns-Categories

– Creational Pattern (ក្រុម បង្កើត) រួមមាន: Abstract Factory, Factory Method, Singleton, Builder, Prototype. វា​នឹង​ជួយ​អ្នក​ក្នុង​ការ​បង្កើតថ្មីនូវ object។

ដូច​អ្នក​ធ្លាប់​ដឹងរួច​មក​ហើយថា ​ដើម្បី​បង្កើត​បាន​នូវ​ Object ថ្មីមួយ​គឺយើងប្រើ keyword new, សម្រាប់ក្រុម Creational Pattern នេះនឹង​ត្រូវ​បាន​ប្រើប្រាស់សម្រាប់ជាការ​បង្កើតឡើង​នូវ Object ដែល​យើងមើល​មិន​ឃើញ​នូវពាក្យគន្លះ (new) ក្នុងការ​បង្កើត Object នេះឡើយ។

– Structural Pattern (ប្រភេទជា រចនា​សម្ព័ន្ធ) រួម​មាន​: Adapter, Bridge, Composite, Decorator, Facade, Proxy និង Flyweight.. វាប្រើ​សម្រាប់ បង្កើត, កំណត់ទំនាក់ទំនង​រវាង Object នឹង​គ្នា។

– Behavioral Pattern រួម​មាន​: Interpreter, Template Method, Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy និង Visitor. ក្រុម​នេះ​ប្រើ​សម្រាប់ក្នុង​ការ​អនុវត្តរាល់សកម្ម​ភាព​របស់​ Object

Design Pattern ជួយ​អោយ​អ្នក​ងាយ​ហៅ​កូដ​មក​ប្រើ​ឡើង​វិញ និឹង​ ធ្វើ​ការ មន្ថែម​មុខងារ​ផ្សេង​បាន​យ៉ាង​ទូលំទូលាយ​នឹង​ងាយ​ស្រួល

ដើម្បី​ត្រៀមស្វែង​យល់​ពី Design Pattern អ្នក​គម្បីក្ដាប់​អោយ​បាន​ច្បាស់​នូវ​សញ្ញាណមួយ​ចំនួន​ខាង​ក្រោម​

– លក្ខណពិសេស​ទាំង៤​របស់ OOP: inheritance (ជាការទទួល​មរតក), Polymophism (ជាពហុទំរង់), Abstract(ជាអរូបី), Packaging (ជាកញ្ចាប់).

– ចំពោះ interface និង abstract. ទាំង​ពីរ​យ៉ាង​នេះ គឺ​សំខាន់ខ្លាំង​ណាស់ , ដើម្បី​យល់​បាន​និង​អាច​អនុវត្ត​បាន​លើសញ្ញាណទាំង២​យ៉ាងនេះ ប្រហែល​អាច​ចំណាយ​ពេល​វេលាខ្លះក្នុង​ការ​ស្វែង​លំអិត​និង​ស៊ីជំរៅ, តែ​ដល់តែ​ពេល​ដែល​យើង​បាន​យល់ច្បាស់​នោះ​អ្នក​នឹង​មើញ​តំលៃ និង​ភាព​ចំាបាច់របស់វា.

– ចូរបោះ​បង​គំនិត អំពី Structured programming, ដោយ​ផ្ដោត​សំខាន់​លើ​ OOP ទាំង​ស្រុងតែម្ដង។

​         បើសិន​មាន​ផលវិបាក​ក្នុង​ការ​ត្រៀម​ខ្លួនខាង​លើ នោះ អ្នក​អាច​ទំនាក់ទំនង​មក​ខ្ញុំ ។ ខ្ញុំ​នឹង​ព្យាយាម ចែក​រំលែក​ចំណេះដឹង​ដែល​មាន​លើ​ផ្នែក​ OOP។
ក្រោយ​ពេល​អ្នក​ច្បាស់​លើវា​ហើយ, អ្នក​ចាប់​ផ្ដើម​រៀន Design Pattern កាន់​តែ​ឆាប់​កាន់តែ​ល្អ​។ ហើយ​ក្រោយ​ពេល​អ្នក​ចេះ​ Design Pattern អ្នក​មាន​កាន់​តែ​មាន​ឧត្ដម​ភាព​លើ​ជំនាញ​របស​អ្នក​។

លំហាត់ទី២

*** លំហាត់ទី 2 : បង្កើតClass ចតុកោណ. រួចគណនា : បរិមាណ និងក្រឡាផ្ទៃ
============================

ឧទាហរណ៏ចំលើយ​គំរូ

បញ្ចូលជ្រុង a: 4
បញ្ចូលជ្រុង b: 2
បរិមាណ: 12.0
ក្រឡាផ្ទៃ: 8.0

import java.io.*;

public class Chatukoan {
	static double a, b, pariman, krolaptey;

	public static void dakChol() throws IOException {
		BufferedReader d = new BufferedReader(new InputStreamReader(System.in));
		System.out.print("ជ្រុង a: ");
		String s = d.readLine();
		a = Double.parseDouble(s);
		System.out.print("ជ្រុង b: ");
		s = d.readLine();
		b = Double.parseDouble(s);
	}

	public static double pariman() {
		return (a + b) * 2;
	}

	public static double krolaptey() {
		double S;
		S = a * b;
		return S;
	}
}

File Run.java សម្រាប់​ដំណើរ​ការ

import java.io.*;
public class Run {
	public static void main(String[] args) throws IOException {
		Chatukoan ctk = new Chatukoan();
		ctk.dakChol();
		System.out.println("បរិមាណ: " + ctk.pariman());
		System.out.println("ក្រឡាផ្ទៃ: " + ctk.krolaptey());
	}
}

លំហាត់ទី១

*** លំហាត់ 1 : បង្កើតClass ត្រីកោណ. រួចធ្វើការ​គណនា: បរិមាណ និង ក្រឡាផ្ទៃ
ឧទាហរណ៏ ចំលើយរំពឹង​ទុក
បញ្ចូលជ្រុង a: 2
បញ្ចូលជ្រុង b: 4
បញ្ចូលជ្រុង c: 3
បរិមាណ: 9.0  ក្រឡាផ្ទៃ: 2.9047375096555625
===================================
ចំលើយ

import java.io.*;

public class Treykoan {
static double a, b, c, pariman, krolaptey;

public static void dakChol() throws IOException {
BufferedReader d = new BufferedReader(new InputStreamReader(System.in));
System.out.print("ជ្រុង a: ");
String s = d.readLine();
a = Double.parseDouble(s);
System.out.print("ជ្រុង b: ");
s = d.readLine();
b = Double.parseDouble(s);
System.out.print("ជ្រុង c: ");
s = d.readLine();
c = Double.parseDouble(s);
}

public static double pariman() {
return a + b + c;
}

public static double krolaptey() {
double P, S;
P = pariman() / 2;
S = Math.sqrt(P * (P - a) * (P - b) * (P - c));
return S;
}
}

class RunTreykoan សម្រាប់​ដំណើរ​ការ

import java.io.*;

public class RunTreykoan {
	public static void main(String[] args) throws IOException {
		Treykoan tk = new Treykoan();
		tk.dakChol();
		System.out.println("បរិមាណ: " + tk.pariman());
		System.out.println("ក្រឡាផ្ទៃ: " + tk.krolaptey());
	}
}

ស្វែង​យល់ពី android

ការនែនាំពីមូលដ្ឋាននៃការបង្កើតកម្មវិធី ជាមូយ Android។

នេះជាគោលសំខាន់ៗក្នុងការរៀនកូដ Android ។ខ្ញុំក៏ជាអ្នករៀនថ្មីដែរ នឹងចាប់ផ្ដើមស្រាវជ្រាវលើផ្នែកនេះ រាល់ចុងសប្ដាហ៍ ខ្ញុំនឹងសរសេរមេរៀនឬអ្វីដែលខ្ញុំរៀនបាន

ចែករំលែកតាមនៅទីនេះជាមួយអ្នកទាំងអស់គ្នា ហើយនេះជា បញ្ជីដែលខ្ញុំបានរៀប

ទាំងនេះជាគ្រឹះសំខាន់ក្នុងការឈានជើងចូលពិភព Android ឬការបង្កើតកម្មវិធីទូរស័ព្ទចល័ត។

មេរៀន0 – យល់ពី ការតំឡើង នឹងការប្រើប្រាស់Android ជាមួយ Eclipse

មេរៀន 1 – យល់ឲ្យច្បាស់ពី មូលដ្ឋាន Android

មេរៀន2 – រៀនបង្កើត GUI (ផ្ទៃប្រសព្វអ្នកប្រើ)ដ៏សមញ្ញមួយAndroid

មេរៀន3 – យល់ពី ViewGroup នឹង Custom Adapter

មេរៀន4 – យល់ពី Intent នឹង Broadcast Receiver

មេរៀន5 – យល់ពី Service

មេរៀន6 – យល់ពី SQLite

មេរៀន7 – យល់ពី Content Provider

មេរៀន:8 យល់ពី Thread & Handler (Coming soon)

Javabodia បន្ថែម ការសិក្សាលើផ្នែក Android

អ្នកទាំងអស់គ្នាប្រាកដជាដឹង ថា សហគមន៏នេះ បង្កើតឡើងក្នុងគោលបំណងអ្វី ? ប្រាកដណាស់ គឺ ចែករំលែក ចំណោះដឹង នឹងបទពិសោធន៏ ,ធ្វើការស្រាវជ្រាវ,  ការបង្កើតថ្មី លើបច្ចេកវិទ្យា Android របស់ខ្មែរ។

Android ជាប្រព័ន្ធដំណើរការ ថ្មីសំរាប់ទូស័ព្ទចល័ត ដែលបានបង្កើតឡើងដោយ

Google ដែលគេហៅថា (Go​ogle Android)។ ជាឪកាសថ្មី ដល់អ្នកដែលចង់បង្កើតបំរើបំរាស់សំរាប់ដំណើរការលើប្រព័ន្ធ Android សំរាប់ទូរស័ព្ទចល័តផ្សេងៗ ។

ការបង្កើតឡើងនូវ javabodia នឹងបង្កឲ្យមានការងាយស្រួល ដល់បងប្អូនខ្មែរ ដែលចូលចិត្ត សរសេរកម្មវិធីសំរាប់ទូរស័ព្ទចល័តផ្សេងៗ ក្នុងការសាកសួរ, ពិភាក្សា, ចែករំលែក ឬ ផ្លាស់ប្ដូរយោបល់ ដោយប្រើភាសារជាតិរបស់ខ្លួន ឬអង់គ្លេសតាមការគួរ។

ជាការពិតណាស់គ្មានការរីកចំរើនណាមួយរបស់ប្រទេសយើង លើឆាកអន្តរជាតិ ដោយខ្វះ ការចូលរួមពីជនរូមជាតិឡើយ ។គេស្គាល់យើងលុះត្រាយើង ស្គាល់ខ្លួនឯងសិន។

ដូចេ្នះយើងទាំងអស់ត្រូវតែចូលរួមដើម្បីអោយប្រទេសស្ថិតក្នុងលំដាប់ថ្នាក់របស់ពិភពនៃបច្ចេកវិទ្យាថ្មីៗ តួយ៉ាងដូច Android ។