"การเขียนโปรแกรมเชิงวัตถุ"


ภาษาจาวา (อังกฤษ: Java programming language) เป็นภาษาโปรแกรมเชิงวัตถุ (อังกฤษ: Object Oriented Programming) พัฒนาโดย เจมส์ กอสลิง และวิศวกรคนอื่นๆ ที่ ซัน ไมโครซิสเต็มส์ ภาษาจาวาถูกพัฒนาขึ้นในปี พ.ศ. 2534 (ค.ศ. 1991) โดยเป็นส่วนหนึ่งของ โครงการกรีน (the Green Project) และสำเร็จออกสู่สาธารณะในปี พ.ศ. 2538 (ค.ศ. 1995) ซึ่งภาษานี้มีจุดประสงค์เพื่อใช้แทนภาษาซีพลัสพลัส (C++) โดยรูปแบบที่เพิ่มเติมขึ้นคล้ายกับภาษาอ็อบเจกต์ทีฟซี (Objective-C) แต่เดิมภาษานี้เรียกว่า ภาษาโอ๊ก (Oak) ซึ่งตั้งชื่อตามต้นโอ๊กใกล้ที่ทำงานของ เจมส์ กอสลิง แต่ว่ามีปัญหาทางลิขสิทธิ์ จึงเปลี่ยนไปใช้ชื่อ "จาวา" ซึ่งเป็นชื่อกาแฟแทน
และแม้ว่าจะมีชื่อคล้ายกัน แต่ภาษาจาวาไม่มีความเกี่ยวข้องใด ๆ กับภาษาจาวาสคริปต์ (JavaScript) ปัจจุบันมาตรฐานของภาษาจาวาดูแลโดย Java Community Process ซึ่งเป็นกระบวนการอย่างเป็นทางการ ที่อนุญาตให้ผู้ที่สนใจเข้าร่วมกำหนดความสามารถในจาวาแพลตฟอร์มได้




Abstraction

 
Abstraction คือ กระบวนการการให้ความคิดรวบยอดกับวัตถุใด ๆ เพื่อสร้าง class ซึ่งแบ่งได้เป็น 4 กระบวนการ ดังต่อไปนี้
1. Classification Abstraction เป็น กระบวนการที่ใช้แยกประเภทวัตถุต่าง ๆ ที่อยู่ในกรอบความคิด เพื่อให้ความคิดรวบยอดแก่วัตถุเหล่านั้น จนกระทั่งได้ Class พื้นฐานตามต้องการ
2. Aggregation Abstraction คือ กระบวนการที่นำเอา class พื้นฐาน มารวมกัน หรือ ประกอบกัน เพื่อให้เกิด class ที่ใหญ่ขึ้น (แต่ยังไม่หมด)
3. Generalization Abstraction คือ กระบวนการในการนำ class ที่มีลักษณะเหมือนกันหรือคล้ายกันหรือมีสมบัติอย่างใดอย่างหนึ่งร่วมกัน มาจัดหมวดหมู่ เป็น class เดียวกัน ในทำนองกลับกัน ถ้ามี class 1 class แล้วจำแนกออก เป็น class ย่อย ๆ เราเรียกวิธีการนี้ว่า Specialization
4.Association Abstraction คือ กระบวนการในการสร้างความสัมพันธ์ ระหว่าง class ต่าง ๆ ใน Problem domain ที่เราสนใจ โดยเป็นการอธิบายความสัมพันธ์ ของ class ในเชิงกิจกรรม

Encapsulation


โดยทั่วไป encapsulation คือการรวมของสิ่งหนึ่งภายในอีกสิ่ง ดังนั้นสิ่งที่รวมไม่ปรากฎ decapsulation คือขจัดหรือทำให้สิ่งของปรากฎเหมือนก่อนการทำ encapsulation
            1) ใน object-oriented programming, encapsulation คือการรวมภายในอ๊อบเจคโปรแกรมของทรัพยากรทั้งหมดที่จำเป็นสำหรับอ๊อบเจคให้ทำงาน โดยพื้นฐานคือ เมธอด และข้อมูล อ๊อบเจคได้รับการกล่าวถึง “ตีพิมพ์อินเตอร์เฟซของตัวเอง” อ๊อบเจคอื่นยึดติดกับอินเตอร์เฟซเหล่านี้เพื่อใช้อ๊อบเจคนี้โดยปราศจากความกังวลการทำงานกับอ๊อบเจค ความคิดคือ “ไม่บอกว่าจะเรื่องนี้อย่างไร ให้ทำ” อ๊อบเจคสามารถคิดถึงการบรรจุอะตอม อินเตอร์เฟซของอ๊อบเจคประกอบด้วยเมธอดสาธารณะและข้อมูลประกอบ
            2) ในด้านโทรคมนาคม encapsulation เป็นการรวมของโครงสร้างข้อมูลหนึ่งภายในอีกโครงสร้าง ดังนั้นโครงสร้างข้อมูลแรกได้รับการซ่อนตามเวลา ตัวอย่าง แพ็คเก็ตข้อมูลฟอร์แม็ต TCP/IP สามารถห่อหุ้มภายในเฟรม ATM (อีกชนิดของการส่งผ่านข้อมูล) ภายในบริบทของการส่งผ่านและรับเฟรม ATM แพ็คเก็ตที่ห่อหุ้มเป็นกระแสของบิตระหว่างข้อมูล ATM ที่อธิบายการส่งผ่าน

Modularity





Modularity เป็นการแยกสลายสิ่งที่สลับซับซ้อนให้เป็นส่วนประกอบที่สามารถจัดการได้
Modularity ช่วยให้คนสามารถทำความเข้าใจระบบที่สลับซับซ้อนได้

Hierarchy


ลำดับชั้นของการกำหนดกรอบให้แก่วัตถุ ยิ่งเรามองวัตถุมากรายละเอียดก็จะมากขึ้นตามไปด้วย

class


             class คือ ต้นแบบข้อมูลที่มีไว้เพื่อสร้าง Object , Attribute และ Operatioต่างๆ ซึ่งเป็นตัวอธิบายรายละเอียด และหน้าที่ต่างๆด้วย 




Object

vก่อนที่เราจะเข้ามาดู ความหมายของ Object ให้เราลองมองดู สิ่งต่างๆที่อยู่ รอบๆ ตัวเรา อย่างเช่นสุนัข , คอมพิวเตอร์ , แม่ จะสังเกตุเห็นว่าทุกๆสิ่งจะประกอบไปด้วย 2 ส่วนคือ


  1. ส่วนของข้อมูล เช่น สุนัข จะมีข้อมูลของ ชื่อสุนัข (ไข่ตุ๋น) , เพศสุนัข (ผู้) หรือ พันธ์สุนัข (โกลเด็น) อีกตัวอย่างนึง เคลื่องคอมพิวเตอร์ จะมีข้อมูลของ ชนิดของเครื่อง (โน้ตบุค) , ยี่ห้อ (lenovo) , รุ่น (ThinkPad T400) ลองพิจารณาซิครับว่าของทุกๆชิ้น จะต้องมีข้อมูล
  2. ส่วนพฤติกรรม เช่น สุนัข จะมีพฤติกรรม เห่าได้ , กินข้าวได้ , วิ่งได้ หรือแม้นแต่เครื่องคอมพิวเตอร์ ของเรา จะมีพฤติกรรม สามารถ เล่นเกมร์ได้ , วาดรูปได้ , เขียนโปรแกรมได้ ของทุกชิ้นต้องมี พฤติกรรม

แล้ว Object คือ อะไร ???

ในการที่เราจะทำความเข้าใจ เกี่ยวกับ Object ให้เรามองทุกๆ อย่างรอบตัวเราเป็น Object ทั้งหมด สุนัข , เครื่องคอมพิวเตอร์ , โต้ะ , เพื่อนร่วมงาน

Object จะประกอบไปด้วย ?

  1. Attribute หรือ ที่บางคนชอบเรียกว่า Object Data กลับมาดู ถ้าเรามอง สุนัขเป็น Object สิ่งที่เป็น attribute ของ Object สุนัข ก็คือ ชื่อของสุนัข , เพศของสุนัข และ พันธ์ของสุนัข นั้นเอง หรือ ถ้าเรามอง เครื่องคอมพิวเตอร์ ของเราเป็น Object ส่วนที่เป็น attribute ของ Object เครื่องคอมพิวเตอร์ ก็จะเป็น ชนิดของคอมพิวเตอร์ , ยี่ห้อ หรือ รุ่น ของเครื่องคอมพิวเตอร์ นั้นเอง
  2. Method หรือ Object Behavior แปลเป็นไทยก็ ส่วนของพฤติกรรม ของ Object อย่างเช่น Object สุนัข จะมี method เป็น เห่า , วิ่ง หรือ กินข้าว และ เครื่องคอมพิวเตอร์ จะมี method เป็น การคำนวน , เล่นเกมร์ , วาดรูป
เห็นไหมถ้าเราจะเขียน โปรแกรมที่เป็นแบบ Object Oriented เราต้องมองส่วนประกอบต่างๆ ให้เป็น Object ทั้งหมด และ ต้องแยกให้ออกว่า อะไรเป็น attribute อะไร เป็น method 

การประกาศ class


objective-c


               ภาษา Objective-C นั้นเป็นภาษาที่ถูกออกแบบมาสำหรับการเขียนโปแกรมเชิงวัตถุ (OOP – Object Oriented Programming) โดยเฉพาะ แต่ตอนนี้ขี้เกียจเล่าประวัติให้ยืดยาว เอาเป็นว่ามาเริ่มกันเลยดีกว่าครับ ในภาษา Objective-C นั้นมีไฟล์อยู่่ 3 แบบ คือ
  • .h – เป็น header file เป็นที่สำหรับประกาศ คลาส, ตัวแปร, ฟังก์ชั่น ต่างๆ
  • .m – เป็น source file ซึ่งสามารถเขียนได้ทั้งภาษา Objective-C เอง และ ภาษา C
  • .mm – เป็น source file เช่นกัน แต่สามารถเขียนภาษา C++ ได้ด้วย

การประกาศ class

       สำหรับคนที่ยังไม่เคยเขียนโปรแกรมแบบ OOP อาจจะต้องศึกษาเพิ่มเติม  ขั้นแรก เรามาดูรูปแบบการประกาศ class กันก่อน
class_declaration
การประกาศ class (รูปจาก iOS Developer Library)
ในรูปนี้เป็นเพียงการประกาศ ตัวแปร(Member variable) และเมธอด (Method) ของคลาสเท่านั้น ยังมีการประกาศ Property ที่เป็นการกำหนดคุณสมบัติให้กับตัวแปรอีก 
ใน Objective-C นั้นเราสามารถประกาศตัวแปรได้ทั้ง 2 แบบ คือแบบ Strong type และแบบ Weak type สำหรับการประกาศแบบ Strong type ก็ประกาศแบบปกติครับ โดยขึ้นต้นด้วยชื่อ class และตามด้วย * (หมายถึงการเป็น pointer) และตามด้วยชื่อของ object ที่เราจะตั้ง แต่การประกาศแบบ Weak type นั้นจะใช้คำว่า id นำหน้าโดย “ไม่ต้องมี *” เพราะการประกาศ id นั้นจะเป็นการประกาศตัวแปรที่เป็น pointer ไปโดยอัตโนมัติ ซึ่งจะใช้บ่อยอยู่พอสมควรในกรณีที่เราไม่รู้ว่า object นั้นเป็น type อะไร ดังนี้


MyClass *myObject1; // Strong typing
id myObject2; // Weak typing

การประกาศ attributes




[modifier]  dataType  attributeName;


modifier   คือ   keyword ของภาษาจาวาที่ใช้เป็น access modifier เช่น public หรืออธิบายคุณสมบัติอื่นๆ  ของคลาส เช่น abstract   และ final
dataType  คือ  ชนิดข้อมูลซึ่งอาจเป็นชนิดข้อมูลแบบพื้นฐานหรือชนิดข้อมูลแบบอ้างอิง
attributeName   คือ  ชื่อของคุณลักษณะที่เป็นชื่อ identifier ใดๆ ซึ่งสอดคล้องกับกฎการตั้งชื่อ

ตัวอย่าง
    public class Student{
 public String id;
  public String name;
  public double gpa;
  }

การประกาศ object


[modifier]  className  objectName;



modifier คือ keyword ของภาษาจาวาที่ใช้เป็น access modifier เช่น public หรืออธิบายคุณสมบัติอื่นๆ     ของคลาส เช่น abstract และ final
className คือชื่อของ class
objectName คือชื่อของ object ที่เป็นชื่อ identifier ใดๆ ที่สอดคล้องกับกฎการตั้งชื่อ

                    ตัวอย่าง
                                                          Student  s1;

การประกาศ methods

การประกาศ method และการส่ง message
       การติดต่อสื่อการในระหว่าง object นั้นเราจะเรียกว่าการส่ง message  ความจริงมันก็เป็นเรื่องปกติของทุกอย่างบนโลกอยู่แล้วว่าถ้าวัตถุสองอย่างจะติดต่อสื่อสารกันได้ก็ด้วยการส่งข้อความไปมาระหว่างกัน ซึ่งการส่ง message ในการเขียนโปรแกรมแบบ OOP นั้นก็คือการสั่งให้ object ทำงานตาม method ที่ตัวเองสามารถตอบสนองและรู้ว่าจะต้องทำงานอะไรบ้าง โดย Method ในภาษา Objective-C นั้นมี 2 แบบ คือแบบที่มี เครื่องหมาย ” + ” (บวก) และ เครื่องหมาย ” – ” (ลบ) นำหน้า สองอันนี้ต่างกันตรงที่
         method ที่มีเครื่องหมาย ” – ” นำหน้า : เป็น method ทั่วไปที่เอาไว้กำหนดการทำงานต่างๆ
  ของ class ซึ่งจะเรียกใช้ method แบบนี้ได้ แน่นอนเราต้องมีการสร้าง object ของ class นั้นๆ 
  ขึ้นมาก่อน
         method ที่มีเครื่องหมาย ” + ” นำหน้า : เป็น method ที่ไม่จำเป็นต้องมีการสร้าง object 
  ขึ้นมาก่อนแต่จะสร้าง object ขึ้นมาหลังจากที่ method นี้ถูกเรียกใช้
สำหรับรูปแบบการประกาศ method ในภาษานี้นั้นอาจจะดูแปลกๆ  เพราะ parameter แต่ละตัวจะมี keyword กำกับเป็นของตัวเอง โดยคั่นด้วย ” : ” และการกำหนด type ของ parameter แต่ละตัวก็จะต้องวงเล็บไว้หน้า parameter นั้นๆ 

การประกาศ method (รูปจาก iOS Developer Library)

การเรียกใช้ method กันบ้างวิธีการเรียกใช้ก็ไม่อยาก โดยจะเขียนไว้ภายใต้วงเล็บก้ามปู  [ และ ] ดังนี้
[myArray insertObject:anObject atIndex:0];
โดยคำแรกนั้นหมายถึง object ที่เราจะส่ง message ไปหา และในส่วนต่อมาจากคำแรกก็คือ ชื่อ method พร้อมทั้ง parameter ที่เราจะสั่งให้ object นั้นทำงาน

การเรียกใช้ methods


objectName .methodName[(arguments)];


objectName คือชื่อของ object
methodName คือชื่อ method ของ object นั้น
arguments  คือค่าที่ต้องการส่งผ่านไปให้กับ method ของ object นั้น  โดยที่จะต้องมีชนิดข้อมูลและจำนวน argument ให้สอดคล้องกับที่ประกาศใน method ของ object นั้น
    
                     ตัวอย่าง
                                                 s1.setName(“Thana”);

การเรียกใช้ attributes


objectName .attributeName;


objectName คือชื่อของ object
attributeName คือชื่อของคุณลักษณะที่เป็นชื่อ identifier ใดๆ ซึ่งสอดคล้องกับกฎการตั้งชื่อ