Translate

วันอาทิตย์ที่ 13 มกราคม พ.ศ. 2556


Abstract & Interface 

รู้จักกับ Abstract Class


  • Abstract Class เป็นคลาสว่างเปล่า (ในภาษาโปรแกรมอื่นๆ อาจจะเรียกว่า Template) ไม่สามารถสร้างออบเจ็กต์ได้ แต่สามารถสืบทอดต่อไปได้ แล้วเราค่อยปรับแต่งองค์ประกอบภายใน        (ทั้งแอตทริบิวต์ และเมธอด) จนกลายเป็นคลาสใหม่ คราวนี้ก็จะสร้างออบเจ็กต์ได้ 
  • รูปแบบการสร้าง Abstract Class 
abstract class ชื่อคลาส
{ }
  • รูปแบบของเมธอดใน Abstract class
abstract ชนิดของการคืนค่า  ชื่อเมธอด (พารามิเตอร์);  
{  return ชื่อตัวแปรในการคืนค่า ;  }
  • ตัวอย่าง



  • รูปแบบการเรียกใช้งาน Abstract Class 
class ชื่อคลาส extends ชื่อAbstractClass


  • ตัวอย่างการเรียกใช้งาน


Interface คืออะไร
Interface ก็มีลักษณะคล้าย Abstract Class ที่ทำงานในลักษณะที่เป็น Template (หรือทำเป็นต้นแบบเอาไว้) แต่ไม่ได้กำหนดคำสั่งการทำงานใดๆ ให้กับเมธอดใน Interface 




  • รูปแบบ Interface มีดังนี้
public ชนิดของการคืนค่า ชื่อเมธอด(พารามิเตอร์);

  • ส่วนรูปแบบของเมธอดภายใน Interface มีดังนี้
public interface ชื่อของInterface
{                                                              }
  • รูปแบบการเรียกใช้งาน Interface
public class ชื่อคลาส Implements ชื่อInterface
{                                                                              }

  • ตัวอย่าง




ใช้ Interface สร้าง Multiple Inheritance 
  • Multiple Inheritance คือการสืบทอดคุณลักษณะจาก SuperClass หลายๆ คลาส สู่คลาส SubClass คลาสเดียว เช่นคลาส Child จะมาจากคลาส Father กับคลาส Mother ดังนั้นมันจึงมีแอตทริบิวต์ และเมธอดจากทั้งสองคลาสมารวมกัน

  • รูปแบบการเรียกใช้งานหลาย Interface
public class ชื่อคลาส implements ชื่อInterface1,ชื่อInterface2,…, ชื่อInterfaceN
{                               }

Interface Collection 

  • เรื่อง Interface Collection นี้เป็นเรื่องที่เกี่ยวกับโครงสร้างข้อมูล ไม่เกี่ยวข้องกับการสืบทอดหรือการใช้งาน Interface แบบเดิมเรากล่าวถึงในด้านบนเท่าไรนัก



Collection คืออะไร

  • Collection เป็น Interface ที่มีเมธอดช่วยเก็บโครงสร้างข้อมูล โดยสามารถจะระบุหรือไม่ระบุลำดับความสำคัญของสมาชิกก็ได้ และสามารถที่จะกำหนดให้ค่าข้อมูลของสมาชิกซ้ำกันหรือไม่ก็ได้
  • Collection มีเมธอดที่สำคัญดังนี้
  • boolean add(Object element)  
  • boolean remove(Object element)
  • int size( )
  • boolean isEmpty( )
  • boolean contains(Object element)

Set คืออะไร
  • Set เป็น Interface ที่มีเมธอดช่วยเก็บโครงสร้างข้อมูล สืบทอดมาจากอินเตอร์เฟส Collection โดยค่าข้อมูลของสมาชิกจะไม่สามารถซ้ำกันได้ และลำดับของสมาชิกไม่มีความสำคัญ คลาสสำคัญที่ implement อินเตอร์เฟส Set คือคลาส HashSet








วันเสาร์ที่ 5 มกราคม พ.ศ. 2556

Inheritance และ Encapsulation


Inheritance คืออะไร
  • Inheritance เป็นการสืบทอดคุณลักษณะ และพฤติกรรม ถ้าจะยกตัวอย่างง่ายๆ ก็เช่น แม่สุนัขสามารถเห่าได้เฝ้าบ้านได้ ลูกสุนัขก็สามารถเห่าได้และเฝ้าบ้านได้ เช่นกัน


  • ในการเขียนโปรแกรมภาษา Java นั้นเราไม่จำเป็นต้องสร้างคลาสขึ้นมาใหม่เองทั้งหมด แต่เราสามารถใช้คลาสที่มีคนสร้างไว้ หรือที่เราเคยสร้างไว้อยู่แล้วมาใช้ให้เป็นประโยชน์ได้ 


เรื่องเกี่ยวกับการ Inheritance ที่ต้องรู้
เรื่องเกี่ยวกับการ Inheritance จะมีส่วนประกอบหลายส่วนประกอบกันที่คุณต้องทำความรู้จักดังนี้
  • SuperClass เป็นคลาสที่เป็นต้นแบบให้คลาสอื่นสืบทอดคุณสมบัติ
  • SubClass เป็นคลาสที่สืบทอดคุณสมบัติจากคลาสอื่น
  • FinalClass คลาสที่ไม่ยอมให้คลาสอื่นสืบทอดคุณสมบัติ
  • Override method การปรับเปลี่ยนคุณสมบัติของเมธอดในคลาสลูกให้ต่างจากคลาสแม่
รู้จักกับ SuperClass และ SubClass
  • SuperClass เรียกง่ายๆ ว่า คลาสแม่ เป็นคลาสที่เป็นต้นแบบให้คลาสอื่นสืบทอดคุณลักษณะ เช่นคลาส Animal เป็น SuperClass ของคลาส Lion, คลาส elephant, คลาส Tiger, คลาส Dog และคลาส Cat
  • SubClass เรียกง่ายๆ ว่า คลาสลูก เป็นคลาสที่สืบทอดคุณลักษณะ (ทั้งแอตทริบิวต์ และเมธอด)


อะไรที่สืบทอดไปสู่ SubClass ได้และไม่ได้
  • สิ่งที่ SuperClass สามารถสืบทอดไปสู่ Subclass ได้ก็คือแอตทริบิวต์ และเมธอด นั้นคือ SubClass สามารถเรียกใช้งานแอตทริบิวต์ และเมธอดที่สืบทอดมาจาก SuperClass ได้นั่นเอง (เหมือนกับได้รับมรดกมาแล้วก็มีสิทธิใช้งานได้เต็มที่)
  • ในการเรียกใช้แอตทริบิวต์ และเมธอดของคลาสลูกจะใช้การสร้างออบเจ็กต์ขึ้นมา แล้วใส่เครื่องหมาย . ตามด้วยชื่อเมธอดที่ต้องการเรียกใช้ในคลาสแม่นั่นเอง
  • สิ่งที่ไม่สามารถสืบทอดจาก SuperClass ไปสู่ SubClass ก็คือ Constructor
อะไรที่สืบทอดไปสู่ SubClass ได้บ้าง
  • ตัวอย่าง


รู้จักกับ Override method
  • Override method  เป็นการแก้ไขเมธอดที่สืบทอดมาจากคลาสแม่ ซึ่งการ Override เมธอดในคลาสแม่นั้น คลาสลูกจะต้องมีชื่อของเมธอด ,ค่าส่งกลับออกจากเมธอด และค่าอาร์กิวเมนต์เหมือนคลาสแม่ แต่จะปรับปรุงการทำงานภายในที่ไม่เหมือนกับคลาสแม่  
  • ตัวอย่าง 


รู้จักกับ FinalClass

  • FinalClass คือคลาสที่ใช้คีย์เวิร์ด final กับตัวคลาส ทำให้เป็นคลาสที่ไม่สามารถืบทอดคุณสมบัติได้ 
  • แต่หากกำหนดคีย์เวิร์ด final ให้กับเพียงแค่บางเมธอดภายในคลาสที่เป็นแม่แล้ว จะทำให้คลาสลูกที่สืบทอดจากไม่สามารถแก้ไขข้อมูลต่างๆ ภายในเมธอดที่สืบทอดจากคลาสแม่ได้ (แต่คลาสแม่ยังสืบทอดต่อไปได้อยู่)


Encapsulation การซ่อนรายละเอียด
  • Encapsulation คือการป้องกันไม่ให้ออบเจ็กต์ภายนอกเข้าถึงข้อมูลได้อย่างอิสระ เนื่องมาจากออบเจ็กต์มีคุณสมบัติ Encapsulation ซึ่งทำให้ผู้สร้างคลาสสามารถจำกัดสิทธิในการใช้งานฟิลด์ (ซึ่งก็คือ แอตทริบิวต์) และเมธอดได้ ดังนั้นอาจมีฟิลด์ หรือเมธอดบางตัวที่ผู้ใช้ไม่รู้จักและไม่เคยเห็นมาก่อนเลยก็ได้ (แต่ต้องมีไว้เพื่อให้ทำงานได้สำเร็จลุล่วง)
  • เช่นในการขับรถยนต์ ผู้ขับขี่บางคนรู้วิธีการขับรถ สามารถขับรถยนต์ได้ แต่ไม่จำเป็นต้องรู้ว่าเครื่องยนต์แต่ละชิ้นส่วนภายในรถยนต์ทำงานอย่างไร สอดประสานกันอย่างไร ซึ่งเราเรียกการซ่อนส่วนที่ไม่จำเป็นต้องรู้นี้ว่า Encapsulation

Package : การมัดรวมคลาสเข้าไว้ด้วยกัน
  • Package เป็นการรวบรวมคลาส และอินเตอร์เฟสต่างๆ ที่เกี่ยวข้องกันไว้ในที่เดียวกัน เพื่อความสะดวกในการเรียกใช้งาน ซึ่งในหนึ่ง Package จะมีได้หลายคลาส เช่นคลาสที่เราเคยใช้งานเกี่ยวกับการคำนวณเชิงตัวเลขก็ถูกนำมารวมไว้ด้วยกัน เป็นต้น
  • แพ็คเกจมาตรฐานที่เก็บคลาสต่างๆ ที่ช่วยอำนวยความสะดวกไว้ให้เราใช้งาน ซึ่งตัวที่นิยมใช้งานมีดังนี้   java.applet     java.awt     java.io     java.net     java.lang     java.swt    java.util 

Package : การมัดรวมคลาสเข้าไว้ด้วยกัน
  • รูปแบบการสร้างแพ็คเกจ
package ชื่อแพ็คเกจ.ชื่อแพ็คเกจย่อย ;
public class ชื่อคลาสภายในแพ็คเกจ
{
คำสั่งภายในคลาส
}

  • การออกแบบ Package ต้องออกแบบให้แน่ใจว่าแพ็คเกจของเราจะประกอบด้วยคลาสอะไรบ้าง,  คลาสเหล่านั้นมีความสัมพันธ์ (สืบทอดต่อกันมา) อย่างไร ซึ่งวิธีที่ง่าย และ ชัดเจนที่สุดก็คือ ออกแบบโดยวาดลงไปในกระดาษก่อน
  • รูปแบบการเรียกใช้งานแพ็คเกจ
import ชื่อแพ็คเกจ.ชื่อแพ็คเกจย่อย.ชื่อคลาส ;
  • หรือ import ชื่อแพ็คเกจ.*

รู้จัก และใช้งาน Constructor

Constructor คืออะไร


  • Constructor หรือ Constructor method คือเมธอดที่มีชื่อเดียวกับคลาส ซึ่งเมื่อออบเจ็กต์ใดๆ ถูกสร้างขึ้นมาในคลาสแล้ว แล้วเมธอดนี้จะถูกเรียกใช้ทันที 

  • โดยทั่วไปทุกคลาสจะต้องมี Constructor แต่ถ้าคลาสที่เราสร้างนั้นไม่มี Constructor ไว้เลย ตัวคอมไพเลอร์เองจะทำการสร้าง Constructor ขึ้นมาให้โดยอัตโนมัติ เรียกว่า “default constructor”


ความแตกต่างระหว่าง Constructor กับเมธอดทั่วไป
  • Constructor จะต้องมีชื่อเหมือนชื่อคลาส
  • Constructor จะไม่มีการส่งค่ากลับ และไม่มี void
การสร้าง Constructors
  • เราสามารถสร้าง Constructor ขึ้นใช้งานเองได้ โดยพารามิเตอร์ที่เราสร้างขึ้นนี้สามารถกำหนดตัวแปรพารามิเตอร์ให้กับโปรแกรมได้ด้วย หรือจะเขียนคำสั่งสั่งงานโปรแกรมอย่างเดียวโดยไม่ต้องการกำหนดพารามิเตอร์ให้กับโปรแกรมก็ได้
  • แต่ถ้าคุณกำหนด Constructor ให้มีการรับพารามิเตอร์ไว้แล้ว ต้องมีค่าพารามิเตอร์ให้สอดคล้องกับ Constructor ด้วย

ตัวอย่างเพื่อศึกษาการสร้าง Constructors



Overloading Constructors
  • คอนสตรัคเตอร์สามารถทำเป็นเมธอดแบบ Overloading ได้ เมธอดแบบนี้คือเมธอดที่มีชื่อเหมือนกันหลายๆ ตัวซึ่งแต่ละตัวมีการรับพารามิเตอร์ที่แตกต่างกัน เช่น 
  • public Student(String ID, String Name, int Age)
  • public Student(String Name, String Address)
  • public Student(int Age)
  • ตัว Constructor เอง สามารถเรียกใช้งาน Constructor อื่นที่อยู่ในคลาสเดียวกันได้ด้วย this
  • ตัวอย่าง

เรียกใช้ Constructor ในคลาสบรรพบุรุษด้วย super

  • ในการเรียกใช้งาน Constructor ของคลาสบรรพบุรุษ เราสามารถเรียกใช้งานได้ด้วยคำสั่ง Super
 คลาสบรรพบุรุษ คืออะไร
  • ในการสร้างคลาส เราสามารถสร้างคลาสที่สืบต่อจากอีกคลาสหนึ่งได้ อาจเรียกงายๆว่าคลาสแม่(Super class) กับ คลาสลูก(Sub Class) ซึ่งคลาสลูกจะสืบทอดคุณสมบัติบางประการจากคลาสแม่

การใช้งานคำสั่ง Super
  • การใช้งานคำสั่ง Superหากในคลาสลูกมีคำสั่ง Super ปรากฏอยู่ โปรแกรมจะกระโดดไปทำงาน Constructor ที่อยู่ในคลาสแม่ แล้วค่อยกลับมาทำงานภายใน Constructor ที่อยู่ในคลาสของตัวเอง โดยเวลาจะเขียนคำสั่ง super ต้องเขียนไว้บรรทัดแรกสุดของ Constructor คลาสลูกเท่านั้น

ตัวอย่างการใช้งานคำสั่ง Super

การใช้งานเมธอดสำเร็จรูป

เมธอดสำเร็จรูปเกี่ยวกับสตริง 


  • รูปแบบการใช้งาน

System.out.print ( “ข้อความ”); 
System.out.println ( “ข้อความ”); 
System.out.print ( “ข้อความ”+ ตัวแปร);
System.out.print (ตัวแปร +“ข้อความ”);
System.out.print ( “ข้อความ” + ตัวแปร + “ข้อความ”);
System.out.print (ตัวแปร );


การจัดรูปแบบการแสดงผลตัวเลข
  • ก่อนจะใช้งานเราต้องเพิ่มคำสั่ง 
           import java.text.* // บนสุดของโปรแกรม
  • รูปแบบการใช้งาน
DecimalFormat ชื่อออบเจ็กต์ = new DecimalFormat( pattern);



เมธอด toUpperCase : เปลี่ยนข้อความเป็นตัวพิมพ์ใหญ่
รูปแบบการใช้งาน
ข้อความ.toUpperCase( )

เมธอด toLowerCase : เปลี่ยนข้อความเป็นตัวพิมพ์เล็ก
รูปแบบการใช้งาน
ข้อความ. toLowerCase( )

การตัดคำด้วยเมธอด substring
รูปแบบการใช้งาน
ข้อความ. Substring( ตำแหน่งเริ่มต้นของคำที่การเหลือไว้ ,จำนวนตัวอักษรที่ต้องการเหลือไว้);



การแทนที่คำด้วยเมธอด replace
รูปแบบการใช้งาน
ข้อความเดิม.replace( คำที่จะถูกแทนที่, คำใหม่ที่แทนที่);


เมธอดที่ใช้ตัดช่องว่างด้วย trim
รูปแบบการใช้งาน
ข้อความ.trim( );

เมธอด split: แยกข้อความออกเป็นส่วนๆ
รูปแบบการใช้งาน 
ข้อความ.Split(“อักษรที่ใช้ในการแบ่งข้อความ”);


เมธอด length : หาความยาวของข้อความ
รูปแบบการใช้งาน
ข้อความ.length( )

เมธอด floor : ปัดเศษทศนิยมลง
รูปแบบการใช้งาน
Math.floor(ตัวแปร หรือเลขทศนิยม);

เมธอด ceil : ปัดเศษทศนิยมขึ้น
รูปแบบการใช้งาน
Math.ceil(ตัวแปร หรือเลขทศนิยม);

เมธอด round : ปัดทศนิยมตามหลักคณิตศาสตร์
รูปแบบการใช้งาน
round (เลขทศนิยม, ตำแหน่งที่ต้องการปัดเศษทศนิยม);

เมธอด random : สุ่มตัวเลขทศนิยม 
รูปแบบการใช้งาน
Math.random( );


  • เมธอดเพื่อการคำนวณทางคณิตศาสตร์
นอกจากเมธอดทางคณิตศาสตร์ที่ได้กล่าวก่อนหน้านี้แล้ว ยังมีเมธอดคณิตศาสตร์อื่นๆ ที่ช่วยในการคำนวณทางคณิตศาสตร์ และการแปลงตัวเลขรูปแบบต่างๆ มาให้ใช้งานกันมากมาย ดังตารางต่อไปนี้
เมธอดทางการคำนวณ


  • เมธอดเกี่ยวกับวันที่ และเวลา
คลาส Calendar : แสดงวันเดือนปี และเวลา
รูปแบบการแสดงวันที่ด้วยคลาส Calendar
Calendar  ชื่อออบเจ็กต์ = Calendar.getInstance( );
System.out.format( “%รหัสแสดงผล” ,ชื่อออบเจ็กต์ );


คลาส Date: แสดงวันเดือนปี และเวลา 
ก่อนที่จะใช้งานต้องทำใช้คำสั่ง 

import java.util.Date; 
import java.text.*;  

รูปแบบการใช้งาน
Date ชื่อออบเจ็กต์ = new Date( );

คลาส Date: แสดงวันเดือนปี และเวลา 
หรือ รูปแบบการใช้งาน
Date ชื่อออบเจ็กต์ = new Date( );
SimpleDateFormat ชื่อออบเจ็กต์ = new SimpleDateFormat(รูปแบบที่ต้องการแสดง);

รหัสแสดงผล


เมธอด

เมธอดคืออะไร


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




อาร์กิวเมนต์และพารามิเตอร์














เมธอดหลักและเมธอดย่อย



เมธอดหลัก
  • สร้างขึ้นเพื่อเรียกเมธอดอื่นๆ ขึ้นมาทำงาน
  • มีการเข้าถึงเมธอดหลักแบบสาธารณะ(public) สามารถนำเมธอดหลักไปใช้ได้กับทุกๆ คลาส
  • สามารถเรียกใช้งานได้ทันทีไม่ต้องผ่านออบเจ็กต์
  • ไม่มีการคืนค่ากลับไปที่เมธอดอื่น
  • รูปแบบการสร้างเมธอดหลัก
public static void main(String[ ] args)
{
    รายละเอียดการทำงานในเมธอด
}

  • สำหรับเมธอดย่อยทั่วๆ ไปที่ไม่ใช่เมธอดหลัก อาจเป็น static method ,instant method, contructor method, Overloading method หรือ Overriding method ก็ได้ แต่ละชนิดมีโครงสร้างไม่เหมือนกับเมธอดหลัก ส่วนประกอบบางอย่างอาจมีหรือไม่มีก็ได้ตามแต่ลักษณะการทำงาน
  • รูปแบบการสร้างเมธอดย่อย
การเข้าถึงเมธอด ชนิดของข้อมูลที่จะส่งกลับออกไป ชื่อเมธอด (ลักษณะของตัวแปรส่ง ชื่อตัวแปรส่ง)
{
รายละเอียดการทำงานในเมธอด
}

Method รูปแบบต่างๆ
เมธอดมีอยู่ด้วยกัน 5 ประเภทแบ่งตามลักษณะการทำงานดังนี้

  • ประเภทที่ 1 : static method  เป็นเมธอดที่เรียกใช้ตัวแปรได้ทันที ไม่ต้องมีการสร้างออบเจ็กต์ขึ้นมาเพื่อเรียกใช้ตัวแปร เช่น การคำนวณทางคณิตศาสตร์  ซึ่ง static method จะรับค่าที่ผู้ใช้ต้องการคำนวณ และทำการคำนวณ แล้วส่งผลลัพธ์กลับไปยังผู้ใช้ 
ตัวอย่าง static method


  • ประเภทที่ 2 :instance method เป็นเมธอดทั่วๆ ไปที่สร้างขึ้นมาใช้กันบ่อยๆ เมธอดแบบนี้จะไม่มีคำว่า static อยู่ข้างหน้าตัวแปร เมื่อจะเรียกใช้ method ประเภทนี้ จะต้องมีการสร้างออบเจ็กต์ขึ้นมา
ตัวอย่าง instance method 

  • ประเภทที่ 3 : constructor method /  constructor คือเมธอดที่มีชื่อเดียวกับคลาส ซึ่งเมื่อออบเจ็กต์ใดๆ ถูกสร้างขึ้นมาจากคลาสแล้ว เมธอดนี้จะเริ่มทำงานทันทีเป็นเมธอดแรก (ปกติมักจะใช้กำหนดค่าเริ่มต้นของการทำงาน)
ตัวอย่าง constructor method

  • ประเภทที่ 4 : Overloading method  คือ เมธอดหลายเมธอดที่มีชื่อเดียวกัน แต่มีชนิดของตัวแปรต่างชนิดกัน หรือจำนวนอาร์กิวเมนต์ไม่เท่ากัน เพราะงานบางงานอาจใช้ชื่องานเดียวกัน แต่ต้องมีการแยกแยะว่า มีการส่งค่าตัวแปรชนิดใดมา เช่น ถ้าส่งค่าตัวแปรมาเป็น Integer ก็ให้ทำงานในเมธอดหนึ่ง ถ้าส่งมาเป็น String ก็ให้ทำงานในอีกเมธอดหนึ่ง 
ตัวอย่าง Overloading method

  • ประเภทที่ 5 : Overriding method   คือ เมธอดหลายเมธอดที่มีชื่อเดียวกัน ชนิดของตัวแปรเหมือนกัน แต่เขียนโปรแกรมในลักษณะที่เมธอดหนึ่งอยู่ในคลาสแม่ อีกเมธอดหนึ่งอยู่ในคลาสลูก ซึ่งเมื่อมีเมธอดชื่อซ้ำกัน รับค่าของตัวแปรเหมือนกันปรากฏในคลาสลูกโปรแกรมจะทำงานตามคำสั่งในคลาสลูกโดยอัตโนมัติ ซึ่งส่วนนี้เราจะอธิบายอย่างละเอียดในบท Inheritance 
ตัวอย่าง Overriding method



เริ่มต้นเขียนโปรแกรมเชิงวัตถุ ( OOP )

การเขียนโปรแกรมเชิงวัตถุคืออะไร


  • โปรแกรมที่จะรองรับงานของเราได้นั้นมักจะซับซ้อนเกินกว่าการเขียนโปรแกรมแบบ Structure Programming จะทำได้ผลดีพอแนวคิดของการเขียนโปรแกรมเชิงวัตถุจึงถูกคิดขึ้นมารองรับงานที่ซับซ้อน
  • เทียบการเขียนโปรแกรมแบบ OOP กับรถยนต์ อย่างแรกโปรแกรมแบบ OOP แยกเป็นชิ้นส่วนที่มีมาตรฐานเหมือนรถยนต์ ซึ่งเราเรียกชิ้นส่วนนั้นว่า วัตถุ หรือ Object
  • พอมองเป็น Object ก็ง่าย เราจะถอดเข้าถอดเปลี่ยนด้วยชิ้นส่วนใดก็ได้ ขอให้มันมีมาตรฐานเดียวกัน (เหมือนที่เรามองว่า เราถอดเปลี่ยนชิ้นส่วนรถยนต์ได้สะดวกนั่นเอง) ฉะนั้นมันก็ง่ายที่เราจะยอมให้ใครหลายๆ คนมาช่วยสร้างรถยนต์ หรือปรับแต่งรถยนต์
  • พอทุกคนที่เข้ามาช่วยกันสร้าง ช่วยกันใช้ Object ก็ทำให้ Object ต่างๆ ที่ประกอบกันนั้นทำงานได้สอดคล้องกันง่าย ซอฟต์แวร์ที่สร้างด้วย OOP จึงทำได้รวดเร็วขึ้น เพราะมีมาตรฐานที่ทุกคนทั่วโลกเข้าใจในแบบเดียวกัน



องค์ประกอบพื้นฐานของ OOP
1. Object : ออบเจ็กต์
  • ออบเจ็กต์เป็นสิ่งแรกที่ต้องทำรู้จักเมื่อจะเขียนโปรแกรมแบบ OOP เพราะสิ่งต่างๆ ใน OOP เราจะมองเป็นออบเจ็กต์ เช่น ออบเจ็กต์รถยนต์ Honda, ออบเจ็กต์รถยนต์ Toyota เป็นต้น
  • ความเป็นออบเจ็กต์จะแสดงให้เห็นชัด (หรือแยกแยะ) ด้วยสิ่งที่เรียกว่าคุณสมบัติเฉพาะ (Attribute) และความสามารถในการทำงาน (Method) ของออบเจ็กต์นั้นๆ 
2. Class : คลาส
  • ก่อนที่จะสร้างออบเจ็กต์ขึ้นมาได้เราต้องสร้างคลาสขึ้นมาก่อน คลาสก็เปรียบเสมือนแม่แบบ หรือพิมพ์เขียว ในการสร้างออบเจ็กต์ต่างๆ ขึ้นมาก
  • ออบเจ็กต์ที่สร้างมาจากคลาสเดียวกันอาจมีรายการของคุณสมบัติที่เหมือนกัน, มีความสามารถที่เหมือนกัน แต่จะแตกต่างกันด้วย ค่าของคุณสมบัติต่างๆ 
3. Method : เมธอด 
  • เมธอด (Method) คือ ความสามารถในการทำงานของออบเจ็กต์แต่ละตัว เช่น ภายในคลาสรถยนต์ มีออบเจ็กต์จะมีเมธอดต่างๆ เช่น การติดเครื่อง, การวิ่ง, การหยุดรถ เป็นต้น


การสร้างคลาส 
  • รูปแบบการสร้างคลาส
การเข้าถึงคลาส Class ชื่อคลาส 
{ การประกาศแอตทริบิวต์
การประกาศเมธอด 
{
ชุดคำสั่งของเมธอด
}
}


ตัวอย่าง


การสร้างแอตทริบิวต์




  • รูปแบบการสร้างแอตทริบิวต์


การเข้าถึงแอตทริบิว ชนิดข้อมูล ชื่อแอตทริบิวต์;



  • รูปแบบการสร้างเมธอด


การเข้าถึงเมธอด ชนิดของข้อมูลที่จะส่งกลับออกไป ชื่อเมธอด (ลักษณะของตัวแปรส่ง ชื่อตัวแปรส่ง)
{
รายละเอียดการทำงานในเมธอด
}

การสร้าง และใช้งานออบเจ็กต์
  • รูปแบบการสร้างออบเจ็กต์
  • รูปแบบที่ 1
ชื่อคลาส ชื่อตัวแปรออบเจ็กต์ ;
ชื่อตัวแปรออบเจ็กต์ = new ชื่อคลาส();

  • รูปแบบที่ 2
ชื่อคลาส ชื่อตัวแปรออบเจ็กต์ = new ชื่อคลาส();

การเข้าถึงแอตทริบิวต์ และการใช้งานเมธอด


ตัวอย่าง



คุณสมบัติพื้นฐานของ OOP
1. Inheritance : สืบทอดคลาส
  • Inheritance เป็นการแสดงความสัมพันธ์แบบสืบทอดคุณลักษณะ และพฤติกรรม ถ้าจะยกตัวอย่างง่ายๆ ก็เช่นพ่อแม่มีผิวสีดำ ลูกที่เกิดมาก็จะมีผิวดำ เช่นกัน
2. Encapsulation : ซ่อนรายละเอียดไว้ภายใน
  • ตัวอย่างการซื้อน้ำอัดลมจากเครื่องขายน้ำอัตโนมัติที่ผ่านมา ถ้าเราเป็นผู้สร้างออบเจ็กต์เครื่องขายน้ำขึ้นมาเราจะต้องสร้างฟิลด์และเมธอดขึ้นมาอีกจำนวนหนึ่งเพื่อให้เครื่องขายน้ำทำงานได้ ซึ่งฟิลด์และเมธอดเหล่านี้คนซื้อน้ำอัดลมจะไม่รู้เลยว่ามีอยู่ เช่น ฟิลด์เก็บจำนวนน้ำอัดลมแต่ละประเภทที่เหลืออยู่ เป็นต้น
3. Polymorphism : รูปแบบการใช้ที่หลากหลาย
  • เป็นคุณสมบัติหนึ่งใน OOP ที่อธิบายได้ง่ายๆ ว่า ทำให้การใช้งานเมธอดเดียวกันมีหลายรูปแบบคือ แต่ละครั้งที่เรียกใช้เมธอดนั้นอาจให้ผลลัพธ์ที่ต่างกันได้ 
  • ยกตัวอย่างเช่น ถ้าเรามีคลาส Shape ซึ่งเป็นคลาสต้นแบบของรูปทรงต่างๆ ไม่ว่าจะเป็นสามเหลี่ยม หรือสี่เหลี่ยม โดยคลาส Shape มีเมธอด Area ซึ่งใช้หาพื้นที่ของรูปทรงนั้น แล้วเราสร้างคลาสขึ้นมาอีก 2 คลาสคือ Triangle และ Rectangle ซึ่ง inherit คลาส Shape มาอีกทีหนึ่ง
ข้อดีของ OOP
  • ง่ายในการแก้ไข 
  • ง่ายต่อการพัฒนาความสามารถเพิ่ม 
  • สะดวกต่อการนำมาใช้ใหม่ 
  • ไม่ต้องระวังชื่อซ้ำ 




วันศุกร์ที่ 4 มกราคม พ.ศ. 2556

รู้จัก และใช้งานอาร์เรย์

ความหมายของอาร์เรย์


  • อาร์เรย์ (Array) เป็นการเก็บข้อมูลชนิดเดียวกันไว้ในตัวเองได้มากกว่า 1 ค่า

  • มิติของอาร์เรย์ การเก็บข้อมูลแบบเป็นชุดๆ ในอาร์เรย์ มีมุมมองของการเก็บ หรือมิติ (dimension) ได้หลายรูปแบบ จากตัวอย่างที่ผ่านมาทั้งหมด เป็นการเก็บอาร์เรย์ 1 มิติ คือเรียงต่อๆ กันไปเหมือนรถไฟ
  • เราก็สามารถมีมิติของอาร์เรย์รูปเป็น 2 มิติ (เหมือนรูปแบบของตาราง) หรือ 3 มิติ (เหมือนรูปแบบของกล่อง) 
  • มิติของอาร์เรย์


อินเด็กซ์ของอาร์เรย์
  • อินเด็กซ์ของอาร์เรย์ 1 มิติ


  •  อินเด็กซ์อาร์เรย์ 2 มิติ



  • การใช้งานอาร์เรย์หนึ่งมิติ

การประกาศอาร์เรย์หนึ่งมิติ  สามารถประกาศได้ 2 รูปแบบ คือ
รูปแบบที่ 1 : ประกาศตัวแปรก่อนแล้วสร้างอาร์เรย์

ชนิดของข้อมูล ชื่ออาร์เรย์ [ ] ;
ชื่ออาร์เรย์ = new ชนิดของข้อมูล [ขนาดของอาร์เรย์] ;

รูปแบบที่ 2 ประกาศตัวแปรพร้อมกับสร้างอาร์เรย์

ชนิดของข้อมูล ชื่ออาร์เรย์ [ ] = new ชนิดของข้อมูล [ขนาดของอาร์เรย์] ;




  • การแทนค่าข้อมูลลงในอาร์เรย์

รูปแบบที่ 1 : แทนค่าข้อมูลลงในตำแหน่งของอาร์เรย์โดยตรง 

ชื่ออาร์เรย์ [อินเด็กซ์] = ค่าของข้อมูล

รูปแบบที่ 2 : แทนค่าข้อมูลลงในอาร์เรย์แต่ละตำแหน่งด้วยคำสั่งเดียว

ชนิดของข้อมูล [] ชื่ออาร์เรย์ = {ค่าข้อมูล 1, ค่าข้อมูล 2, ค่าข้อมูล 3,....., ค่าข้อมูล n };

การเรียกใช้อาร์เรย์

ชื่ออาร์เรย์ [อินเด็กซ์];




อาร์เรย์ 2 มิติ
  • ตัวแปรอาร์เรย์ที่เก็บข้อมูลได้มากกว่าหนึ่งแถว โดยถ้าเป็นตัวแปรอาร์เรย์ที่เก็บข้อมูลได้ 2 ชั้น จะเรียกว่าตัวแปรอาร์เรย์ 2 มิติ ซึ่งสามารถเปรียบเทียบได้กับตารางที่มีทั้งแถว และคอลัมน์ โดยเริ่มนับหัวแถวและหัวคอลัมน์เริ่มจาก 0

รูปแบบการประกาศอาร์เรย์ 2 มิติ

ชนิดของข้อมูล ชื่ออาร์เรย์ [ ][ ] = new ชนิดของข้อมูล [จำนวนแถว][จำนวนคอลัมน์] ;


การแทนค่าข้อมูลลงในตำแหน่งของอาร์เรย์โดยตรง

ชื่ออาร์เรย์ [ตำแหน่งของแถว][ตำแหน่งของคอลัมน์] = ค่าของข้อมูล ;


แทนค่าข้อมูลทุกค่าลงในอาร์เรย์แต่ละตำแหน่งด้วยคำสั่งเดียว

ชนิดของข้อมูล  ชื่ออาร์เรย์ [][]= {{ค่าข้อมูล[0][0], ค่าข้อมูล [0][1], ....., ค่าข้อมูล [0][j] },
       {ค่าข้อมูล[1][0], ค่าข้อมูล [1][1], ....., ค่าข้อมูล [1][j] }, 
  …..
                         {ค่าข้อมูล[i][0], ค่าข้อมูล [i][1], ....., ค่าข้อมูล [i][j] }, };


การเรียกใช้อาร์เรย์ 2 มิติ  รูปแบบการเรียกใช้อาร์เรย์

ชื่ออาร์เรย์ [ตำแหน่งของแถว][ตำแหน่งของคอลัมน์] ;