แสดงบทความที่มีป้ายกำกับ Android Java Programming แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Android Java Programming แสดงบทความทั้งหมด

วันอังคารที่ 31 มกราคม พ.ศ. 2555

Object Oriented Java Programming Part2

Object Oriented Java Programming Part2







การเขียนโปรแกรมภาษาจาวาเชิงออปเจ็ค Object Oriented Java Programming
                วัตถุประสงค์
Ø อธิบายเมธอด และการเรียกใช้เมธอด
Ø อธิบายคีย์เวิร์ดที่ใช้เป็น modifier ของเมธอด
Ø แนะนำการเขียนโปรแกรมภาษาจาวาเชิงออปเจ็ค
Ø อธิบายคุณลักษณะเด่นของโปรแกรมเชิงออปเจ็ค
Ø อธิบายความหมายของ Constructor

การเขียนโปรแกรมภาษาจาวาเชิงออปเจ็ค
Ø ตัวอย่างโปรแกรมในบทที่ผ่านาจะเขียนทุกคำสั่งอยู่ภายในเมธอดที่ชื่อ main ( ) ซึ่งไม่ได้ใช้หลักการเชิงออปเจ็คและไม่เหมาะที่จะนำไปใช้ในทางปฏิบัติเมื่อโปรแกรมมีขนาดใหญ่ขึ้น
Ø การเขียนโปรแกรมเชิงออปเจ็คที่ดีต้องมีการกำหนดเมธอดต่างๆให้กับคลาส

รูปแบบการเรียกใช้เมธอด
Ø รูปแบบของคำสั่งที่มีการเรียกใช้เมธอดเป็นดังนี้
Obj.methodName ([arguments])  ;
Ø arguments อาจจะเป็นข้อมูลค่าคงที่หรือตัวแปร
Ø ชนิดข้อมูลของ arguments ที่ใช้ในการเรียกเมธอด จะต้องสอดคล้องกันกับชนิดข้อมูลของ arguments ของเมธอด

การเรียกใช้เมธอด
Ø เมธอดที่กำหนดขึ้นในคลาสใดๆสามารถเรียกใช้งานได้สองรูปแบบคือ
·       การเรียกใช้งานจากคลาสที่ต่างกัน
·       การเรียกใช้งานภายในคลาสเดียวกัน
Ø การเรียกใช้เมธอดจากคลาสที่ต่างกัน จะต้องมีการสร้างออปเจ็คของคลาส ที่มีคลาสที่มีเมธอดที่จะถูกเรียกใช้งานก่อน จึงจะสามารถเรียกใช้เมธอดได้
Ø การเรียกใช้เมธอดในคลาสเดียวกัน สามารถทำได้โดยไม่จำเป็นต้องสร้างออปเจ็คของคลาสขึ้นมาก่อน และสามารถเรียกใช้เมธอดได้ทุกเมธอด

การส่งผ่าน argument
Ø กรณีที่เมธอดมี argument ที่จะรับค่าเพื่อนำไปใช้ในเมธอด อาทิเช่น
Public void setGPA(double GPA)                   {
                .  .   .
}
Ø คำสั่งที่เรียกใช้เมธอดนี้ จะต้องส่ง argument ที่มีชนิดข้อมูลเป็น double ไปพร้อมกับชื่อเมธอด เช่น setGPA(3.0)  ;

Argument ของเมธอด
Ø Argument  ของเมธอดจะมีชนิดข้อมูลเป็นสองแบบตามชนิดข้อมูลของตัวแปรดังนี้
·       argument  ที่มีชนิดข้อมูลแบบพื้นฐาน
·       argument  ที่มีชนิดข้อมูลแบบอ้างอิง
Ø ในกรณีของ argument ที่มีชนิดข้อมูลแบบพื้นฐาน เราสามารถที่จะส่งค่าคงที่ข้อมูล ตัวแปร หรือนิพจน์ให้กับ argument ได้ ตัวอย่างเช่น
·       ค่าคงที่ข้อมูล เช่น
s1.setGPA (3.0)  ;
·       ตัวแปร เช่น
double x = 3.0  ;
·       นิพจน์ เช่น
s1.setGPA (3.0 + 0.05)   ;
               

                argument ที่มีชนิดข้อมูลแบบอ้างอิง
Ø เราจะต้องส่งออปเจ็คที่มีชนิดข้อมูลที่สอดคล้องไปเท่านั้น
Ø ยกเว้นกรณีที่ argument นั้นมีชนิดข้อมูลเป็น String ซึ่งในกรณีนี้จะสามารถส่งข้อมูลค่าคงที่ได้

ชนิดข้อมูลและจำนวนของ argument
Ø ชนิดข้อมูลของ argument ที่จะส่งผ่านไปยังเมธอดไม่จำเป็นที่จะต้องเป็นชนิดข้อมูลเดียวกัน แต่ต้องเป็นชนิดข้อมูลที่สามารถแปลงข้อมูลให้กว้างขึ้นได้โดยอัตโนมัติ
Ø เมธอดใดๆอาจมี argument สำหรับค่ามากกว่าหนึ่งตัว แต่การเรียกใช้เมธอดเหล่านี้จะต้องส่ง argument ที่มีชนิดข้อมูลที่สอดคล้องกันและมีจำนวนเท่ากัน

การเปลี่ยนแปลงค่าของ argument
Ø การส่ง argument ที่มีชนิดข้อมูลเป็นแบบพื้นฐาน หากมีการเปลี่ยนแปลงค่าของ argument ภายในเมธอดที่ถูกเรียกใช้งาน จะไม่มีผลทำให้ค่าของ argument ที่ส่งไปเปลี่ยนค่าไปด้วย
Ø การส่ง argument ที่มีชนิดข้อมูลเป็นแบบอ้างอิง จะเป็นการส่งตำแหน่งอ้างอิงของออปเจ็คไปให้เมธอดที่ถูกเรียกใช้งาน ดังนั้นการเปลี่ยนแปลงค่าของคุณลักษณะของออปเจ็คจะมีผลทำให้ค่าของคุณลักษณะของออปเจ็คที่ส่งไปเปลี่ยนไปด้วย

การรับค่าที่ส่งกลับมาจากเมธอด
Ø เมธอดใดๆของคลาสสามารถที่จะส่งค่าที่ส่งกลับมาได้ ซึ่งชนิดข้อมูลของค่าที่จะส่งกลับอาจเป็นชนิดข้อมูลแบบพื้นฐาน หรือเป็นชนิดข้อมูลแบบอ้างอิง
Ø เมธอดที่มีค่าจะส่งกลับมาจะต้องมีคำสั่ง return ซึ่งจะระบุค่าที่ส่งกลับโดยมีรูปแบบดังนี้
return value ;
Ø คำสั่งที่เรียกใช้เมธอด อาจจะรับค่าที่ส่งกลับมาเก็บไว้ในตัวแปรหรือเป็นตัวถูดำเนินการในนิพจน์ ตัวอย่างเช่น
double  d  =  getGPA ()  ;
System.out.println (“GPA: ” +getGPA () )  ;
               
modifier  ของเมธอด
Ø Modifier ของเมธอดประกอบด้วย
·       access modifier
·       static
·       abstract
·       synchronized
·       final
Ø access modifier ใช้เพื่อระบุระดับการเข้าถึง โดยมีคีย์เวิร์ดต่างๆดังนี้
·       public
·       protected
·       private
·       default (ไม่ระบุคีย์เวิร์ดใดๆ)
เมธอดแบบ static
Ø เมธอดโดยทั่วไปจะมี modifier เป็นแบบ  non-static
Ø เมธอดที่มี modifier เป็นแบบ static จะสามารถถูกเรียกใช้งานโดยใช้ชื่อคลาสได้เลยไม่จำเป็นต้องสร้างออปเจ็คชองคลาสนั้นขึ้นมาก่อน ซึ่งมีรูปแบบดังนี้
className.methodName ()  ;
Ø ตัวอย่างเช่น เมธอดทุกเมธอดในคลาส Match เป็นแบบ static ดังนั้นการเรียกใช้งานทุกเมธอดในคลาสสามารถทำได้ เช่น
Match.sqrt (4)  ;
Ø เมธอดแบบ static จะไม่สามารถเรียกใช้เมธอดหรือตัวแปรของออปเจ็คได้โดยตรง

คุณลักษณะแบบ static
Ø ตัวแปรคลาสที่มี modifier เป็นแบบ static จะเป็นตัวแปรของคลาสที่ใช้ร่วมกันสำหรับทุกออปเจ็ค
Ø ตัวแปรที่มี modifier เป็นแบบ static จะสามารถถูกเรียกใช้งานโดยใช้ชื่อคลาสได้เลย ไม่จำเป็นต้องสร้างออปเจ็คของคลาสขึ้นมาก่อน เช่นเดียวกันกับเมธอดที่มี modifier เป็นแบบ static
เมธอดแบบ Overloaded
Ø ภาษาจาวาอนุญาตให้คลาสใดๆมีเมธอดที่มีชื่อเดียวกันมากกว่าหนึ่งเมธอดได้ แต่เมธอดเหล่านั้นจะต้องมีจำนวนหรือชนิดข้อมูลของ argument ที่ต่างกัน
Ø ตัวอย่างต่อไปนี้เป็นการเขียนเมธอดแบบ Overloaded
Public void setDetails (String ID , String  n)  {
}
Public void setDetails (String ID , double GPA)  {
}
Public void setDetails (double GPA , String  n)  {
}
Ø ตัวอย่างต่อไปนี้เป็นการเขียนเมธอดแบบ Overloaded ที่ไม่ถูกต้อง

Public void setDetails (string ID , double  GPA)  {
}
Public void setDetails (String n , double  GPA)  {
}
                คีย์เวิร์ด this
Ø คีย์เวิร์ด this หมายถึงออปเจ็คของตัวเอง
Ø เราสามารถที่จะเรียกใช้เมธอดหรือคุณลักษณะภายในคลาสได้โดยใช้คีย์เวิร์ด this ซึ่งมีรูปแบบดังนี้
this.methodName () ;
this.attributeName
Ø โดยทั่วไปเราจะไม่ใช้คีย์เวิร์ด this ในคำสั่ง ยกเว้นในกรณีที่จำเป็น

การเขียนโปรแกรมโดยใช้หลักการของการห่อหุ้ม
Ø คุณลักษณะเด่นของโปรแกรมเชิงออปเจ็คมีอยู่สามอย่างคือ การห่อหุ้ม การสืบทอด และการมีได้หลายรูปแบบ
Ø ข้อดีของการห่อหุ้มประการหนึ่งคือการซ่อนเร้นข้อมูล
Ø หลักการห่อหุ้มของออปเจ็คทำได้ดังนี้
·       กำหนดคุณลักษณะของออปเจ็คให้มี mofifier เป็น private เพื่อซ่อนไม่ให้ออปเจ็คอื่นๆเรียกใช้ได้
·       กำหนดเมธอดของออปเจ็คที่ต้องการให้ออปเจ็คอื่นๆเรียกใช้ให้มี modifile เป็น public

เมธอดแบบ setter
Ø เมธอดแบบ accessor แบ่งออกเป็นสองประเภทคือ
·       เมธอดแบบ setter
·       เมธอดแบบ getter
Ø เมธอดแบบ setter จะใช้ในการกำหนดค่าของคุณลักษณะ
Ø โดยทั่วไปชื่อขอเมธอดแบบ setter จะขึ้นต้นด้วยคำว่า set แล้วตามด้วยชื่อของคุณลักษณะ ซึ่งมีรูปแบบดังนี้
public  void  setAttributeName (dataType  arg)   {
                attributeName  = arg  ;
}

                เมธอดแบบ getter
Ø เมธอดแบบ getter จะให้เรียกค่าของคุณลักษณะ
Ø โดยทั่วไปชื่อของเมธอดแบบ getter จะขึ้นต้นด้วยคำว่า get แล้วตามด้วยชื่อของคุณลักษณะ ซึ่งมีรูปแบบดังนี้
Public  dataType  getAttributeName ()   {
                Return  attributeName  ;
}


                การเขียนโปรแกรมด้วยใช้หลักการของการสืบทอด
Ø ข้อดีของการสืบทอดคือ การนำคลาสที่มีแล้วมาใช้ใหม่โดยการเพิ่มเติมคุณลักษณะหรือเมธอดในคลาสใหม่
Ø การพัฒนาคลาสขึ้นใหม่ที่ชื่อ GradStudent สามารถที่จะเลือกวิธีการได้สองแบบคือ
·       สร้างคลาสขึ้นมาใหม่โดยไม่อ้างอิงกับคลาสเดิมที่ชื่อ student
·       สร้างคลาสที่สืบทอดมาจากคลาสเดิมที่ชื่อ Student

รูปแบบหลักการของการสืบทอด
Student
-Id : String
-name : String
-gpa : double
-minGPA : double = 2.00


               
                                               
S1 : Student
-theisTitle : String
-supervisor : String






                คีย์เวิร์ด protected
Ø คุณลักษณะหรือเมธอดของ superclass ที่มี modifier เป็นแบบ private จะทำให้ subclass ไม่สามารถที่จะเรียกใช้ได้
Ø ภาษาจาวากำหนดให้มี access modifier ที่ชื่อ protected ซึ่งจะทำให้ subclass สามารถเรียกใช้เมธอดหรือคุณลักษณะของ superclass ได้
Ø ตัวอย่างเช่น
Protected  String  name  ;

                คลาสที่ชื่อว่า Object
Ø ภาษาจาวาได้กำหนดให้คลาสใดๆสามารถจะสืบทอดคลาสอื่นได้เพียงคลาสเดียวเท่านั้น
Ø คลาสทุกคลาสในภาษาจาวาถ้าไม่ได้สืบทอดจากคลาสใดเลยจะถือว่าคลาสนั้นสืบทอดจากคลาสที่ชื่อ Object
Ø ตัวอย่างเช่น
public  class  Student  extends  Object  {
                .  .  .
}
Ø คลาสที่ชื่อ Object จะมีเมธอดที่สำคัญคือ
public  String  toString ()
                และ        public  boolean  equals (Object  o)
               
                ตัวอย่างการสืบทอดที่ไม่ถูกต้อง
Ø เราสามารถที่ตรวจสอบหลักการของการสืบทอดด้วยคำว่า is a
public  class  Shirt  {
char  size  ;
float  price  ;
                                 }
public  class  Skirt  extends  Shirt  {
                boolean  long  ;
}
                ตัวอย่างการสืบทอดที่ถูกต้อง
public  class  Chothing  {
char  size  ;
float  price  ;
                                 }
public  class  Shirt  extends  Chothing    {
}
public  class  Skirt  extends  Chothing    {
                boolean  long  ;
}
                การเขียนโปรแกรมโดยใช้หลักการของการมีได้หลายรูปแบบ
Ø การมีได้หลายรูปแบบหมายถึง คุณลักษณะของออปเจ็คของคลาสที่ต่างกัน สามารถตอบสนองต่อเมธอดเดียวกันในวิธีการที่ต่างกันได้ ซึ่งหมายถึงการเขียนเมธอดแบบ overridden และการใช้ Dynamic Binding
Ø การเขียนเมธอดแบบ overridden มีข้อกำหนดดังนี้
·       จำนวนและชนิดข้อมูลของ argument จะต้องเหมือนเดิม
·       ชนิดข้อมูลของค่าที่ส่งกลับจะต้องเหมือนเดิม
·       Access modifier จะต้องไม่มีระดับต่ำกว่าเดิมอาทิเช่น ถ้าเมธอดเดิมเป็น public จะไม่สามารถเปลี่ยนเป็น private ได้

คีย์เวิร์ด super
Ø super เป็นคีย์เวิร์ดที่ใช้ในทางการอ้างอิง superclass เพื่อที่จะเรียกใช้เมะอดหรือ constructor  ของ superclass  โดยมีรูปแบบคำสั่งดังนี้
                 super.methodName ([arguments])
Ø ตัวอย่างเช่น คลาส Gradstudent อาจมีเมธอดที่ชื่อ showDetails () โดยมีคำสั่งที่เรียกใช้เมธอด showDetails () ของคลาส Gradsyudent
                 public  void  showDetails ()   {
                                super.showDetails ()  ;
                                showThesis ()  ;
                 }

                Dynamic Binding
Ø ข้อดีของการมีได้หลายรูปแบบอีกประการหนึ่ง คือการที่สามารถกำหนดออปเจ็คได้หลายรูปแบบ ตัวอย่างเช่น จากรูปแบบ
                 SuperClass  obj  ;
Ø เราสามารถที่จะสร้างออปเจ็คที่ชื่อ obj ซึ่งอาจเป็นออปเจ็คของคลาสที่เป็น superclass หรือที่เป็นsubclass ได้ โดยใช้คำสั่งที่มีรูปแบบดังนี้
obj  =  new  SuperClass ()  ;
                หรือ         obj  =  new Subclass  ()  ;
Ø ตัวอย่างเช่น
                 Student  s  ;
                 s  =  new  GradStudent () ;

Constructor
Ø construtor เป็นเมธอดที่ชื่อเดียวกับชื่อคลาส ซึ่งมีรูปแบบดังนี้
                 [modifile]    ClassName ([argument])  {
                                [Statements]
                 }
Ø construtor เป็นเมธอดที่ไม่มีค่าที่จะส่งกลับแต่ไม่ต้องระบุคีย์เวิร์ด void
Ø โดยทั่วไปคลาสทุกคลาสจะมี default constructor ซึ่งมีรูปแบบดังนี้
                 Public  ClassName ()  {
                 }
Ø เราสามารถที่จะเขียน constructor ในคลาสตใดๆขึ้นมาก็ได้
Ø Default constructor จะหายไปเมื่อมีการเขียน constructor ขึ้นใหม่

คำสั่ง new ()
Ø มีขั้นตอนการทำงานดังนี้
·       กำหนดเนื้อหาที่ในหน่วยความจำให้กับออปเจ็ค
·       กำหนดค่าเริ่มต้นให้กับคุณลักษณะของออปเจ็ค
·       กำหนดค่าของคุณลักษณะของออปเจ็คตามคำสั่งกำหนดค่าที่ประกาศไว้
·       เรียกใช้ constructor
Ø ตัวอย่างเช่น
                 Public  class MyDate  {
                                private  int  day  = 1 ;
                                private  int  month  = 1 ;
                                private  int  year  = 1 ;
                                publice  MyDate  (int  m , int y)  {
                                                day  =  d  ;
                                                month  =  m  ;
                                                year  =  y  ;
                                }
                                 }

         รูปแสดงตัวอย่างการทำงานขั้นตอนคำสั่ง new
Ø คำสั่ง     
MyDate d1  =  new  MyDate (16,8,1972)  ;

ยังไม่ได้ใส่รูป

Constructor  และ Overloaded

Ø เราสามารถที่จะสร้าง constructor แบบ Overloaded ของคลาสได้
Ø constructor แบบ Overloaded จะมีจำนวนหรือชนิดข้อมูลที่แตกต่างกันของ arguments
Ø คำสั่ง new ที่ใช้ในการสร้างออปเจ็คจะเรียกใช้ constructor คือทำให้เราสามารถที่สร้างออปเจ็คเริ่มต้นได้หลายรูปแบบ
Ø ข้อดีของการสร้าง constructor แบบ Overloaded คือทำให้เราสามารถที่สร้างออปเจ็คเริ่มต้นได้หลายรูปแบบ
Ø เมธอดที่ชื่อ this () เป็นการเรียกใช้ constructor ของคลาสตัวเอง โดยจะต้องเป็นคำสั่งแรกสุดที่อยู่ใน constructor แบบ Overloaded


คลาสแบบอื่นๆที่สำคัญ
Ø คลาสแบบ final
·       คลาสที่มี modifile จะหมายความว่าคลาสนั้นไม่สามารถสืบทอดได้
·       ตัวอย่างเช่น
Public  final class  String  {
                .   .   .
}
Ø คลาสแบบ abstract
·       คลาสที่มี modifile เป็น abstract จะหมายความว่าคลาสนั้นยังเป็นคลาสที่ไม่สมบูรณ์ โดยมีเมธอดแบบ abstract อยู่อย่างน้อยหนึ่งเมธอดซึ่งรูปแบบการประกาศดังนี้
[modifile]  abstract  return_type  mrthodName ([arguments] )  ;
·       เราไม่สามารถที่จะสร้างออปเจ็คของคลาสแบบ abstract ได้
               
                อินเตอร์เฟส
Ø อินเตอร์เฟส (interface) ลักษณะคล้ายกับคลาสแบบ abstract แต่จะประกอบด้วยเมธอดที่ยังไม่สมบูรณ์เท่านั้น โดยมีรูปแบบดังนี้
                 [modifile]  interface  InterfaceName   {
                                [methods  () ; ]
                 }
Ø อินเตอร์เฟสกำหนดขึ้นมาเพื่อให้คลาสอื่นนำไปใช้งานโดยใช้คีย์เวิร์ด implements
Ø อินเตอร์เฟสจะเหมือนกับคลาสแบบ abstract ตรงที่เราจะไม่สามรถสร้างออปเจ็คของอินเตอร์เฟสได้
ภาษาจาวากำหนดให้คลาสใดๆสามารถ implements อินเตอร์เฟสได้หลายอินเตอร์เฟส


รับเขียนโปรแกรม Android Application และสอนการเขียนโปรแกรม สอน online ได้

อดุลย์ 081-6452400  e-mail fongwe_a@hotmail.com  

more info about Android Development
http://androiddevelopersthai.blogspot.com/