ผลต่างระหว่างรุ่นของ "คลาส (คอมพิวเตอร์)"
Teetaweepo (คุย | ส่วนร่วม) ล คลาส ถูกเปลี่ยนชื่อเป็น คลาส (คอมพิวเตอร์): จะสร้างหน้าแก้กำกวม |
ล สังคายนาวิกิพีเดียไทยรอบ 2 +เก็บกวาดด้วยสจห. |
||
บรรทัด 1: | บรรทัด 1: | ||
{{ต้องการอ้างอิง}} |
|||
{{รอการตรวจสอบ}} |
|||
ในการเขียน[[โปรแกรมเชิงวัตถุ]] '''คลาส''' (class) คือต้นแบบที่กำหนดคุณสมบัติและพฤติกรรมการทำงานของ[[อ็อบเจกต์]]ทึ่ถูกสร้างมาจากคลาสนั้นๆ |
ในการเขียน[[โปรแกรมเชิงวัตถุ]] '''คลาส''' ({{lang-en|class}}) คือต้นแบบที่กำหนดคุณสมบัติและพฤติกรรมการทำงานของ[[อ็อบเจกต์]]ทึ่ถูกสร้างมาจากคลาสนั้นๆ |
||
องค์ประกอบของคลาสมีสองส่วนหลักได้แก่ |
องค์ประกอบของคลาสมีสองส่วนหลักได้แก่ |
||
บรรทัด 8: | บรรทัด 8: | ||
นอกจากนี้ คลาสยังสามารถมีฟังก์ชันพิเศษเรียกว่า constructor ซึ่งจะถูกเรียกใช้ในเวลาที่กำลังสร้างอ็อบเจกต์จากคลาสเพื่อตั้งค่าเริ่นต้นให้กับข้อมูลและคุณสมบัติของอ็อบเจกต์นั้น |
นอกจากนี้ คลาสยังสามารถมีฟังก์ชันพิเศษเรียกว่า constructor ซึ่งจะถูกเรียกใช้ในเวลาที่กำลังสร้างอ็อบเจกต์จากคลาสเพื่อตั้งค่าเริ่นต้นให้กับข้อมูลและคุณสมบัติของอ็อบเจกต์นั้น |
||
[[ |
[[ไฟล์:AccountClassDiagram.jpeg|frame|โครงสร้างของคลาส ในแบบ [[UML]]]] |
||
== การจำกัดการเข้าถึง == |
== การจำกัดการเข้าถึง == |
||
บรรทัด 39: | บรรทัด 39: | ||
== ตัวอย่าง == |
== ตัวอย่าง == |
||
=== ภาษาซีชาร์ป === |
=== [[ภาษาซีชาร์ป]] === |
||
<source lang="csharp"> |
<source lang="csharp"> |
||
public class Example { |
public class Example { |
||
static void Main() { |
static void Main () { |
||
System.Console.WriteLine("Hello, world!"); |
System.Console.WriteLine ("Hello, world!") ; |
||
} |
} |
||
} |
} |
||
</source> |
</source> |
||
=== ภาษาจาวา === |
=== [[ภาษาจาวา]] === |
||
<source lang="java"> |
<source lang="java"> |
||
public class Account { |
public class Account { |
||
บรรทัด 55: | บรรทัด 55: | ||
private double balance; |
private double balance; |
||
public void deposit(double amount) { |
public void deposit (double amount) { |
||
balance = balance + amount; |
balance = balance + amount; |
||
} |
} |
||
public void withdraw(double amount) { |
public void withdraw (double amount) { |
||
balance = balance - amount; |
balance = balance - amount; |
||
} |
} |
||
public String getAccountName() { |
public String getAccountName () { |
||
return accountName; |
return accountName; |
||
} |
} |
||
public void setAccountName(String name) { |
public void setAccountName (String name) { |
||
accountName = name; |
accountName = name; |
||
} |
} |
||
public String getAccountNumber() { |
public String getAccountNumber () { |
||
return accountNumber; |
return accountNumber; |
||
} |
} |
||
public void setAccountNumber(String number) { |
public void setAccountNumber (String number) { |
||
accountNumber = number; |
accountNumber = number; |
||
} |
} |
||
public double getBalance() { |
public double getBalance () { |
||
return balance; |
return balance; |
||
} |
} |
||
public void setBalance(double amount) { |
public void setBalance (double amount) { |
||
balance = amount; |
balance = amount; |
||
} |
} |
รุ่นแก้ไขเมื่อ 13:01, 1 มีนาคม 2552
บทความนี้ไม่มีการอ้างอิงจากแหล่งที่มาใด |
ในการเขียนโปรแกรมเชิงวัตถุ คลาส (อังกฤษ: class) คือต้นแบบที่กำหนดคุณสมบัติและพฤติกรรมการทำงานของอ็อบเจกต์ทึ่ถูกสร้างมาจากคลาสนั้นๆ
องค์ประกอบของคลาสมีสองส่วนหลักได้แก่
- ข้อมูล (data) หรือ คุณสมบัติ (property) สำหรับเก็บข้อมูลในการทำงานหรือบอกสถานะปัจจุบันของอ็อบเจกต์ ตัวอย่างเช่น คลาสชนิดบัญชีธนาคารสามารถมีข้อมูลคือ เลขที่บัญชี, ชื่อเจ้าของบัญชี, และยอดเงินปัจจุบัน
- พฤติกรรมการทำงาน (method หรือ function) เป็นส่วนรับคำสั่งและทำงานตามคำสั่งนั้น เช่นคลาสบัญชีธนาคารจากตัวอย่างข้างบนอาจจะมีฟังก์ชันสำหรับฝากและถอนเงินจากบัญชี เป็นต้น
นอกจากนี้ คลาสยังสามารถมีฟังก์ชันพิเศษเรียกว่า constructor ซึ่งจะถูกเรียกใช้ในเวลาที่กำลังสร้างอ็อบเจกต์จากคลาสเพื่อตั้งค่าเริ่นต้นให้กับข้อมูลและคุณสมบัติของอ็อบเจกต์นั้น
การจำกัดการเข้าถึง
เราสามารถจำกัดความสามารถในการเห็นและใช้งานของแต่ละสมาชิกของคลาสหรือแม้แต่ตัวคลาสเองจากโลกภายนอกได้ ผลที่ได้คือข้อมูลและการทำงานส่วนตัวของคลาสจะถูกซ่อนไว้ โลกภายนอกสามารถขอให้อ็อบเจกต์ทำงานผ่านฟังก์ชันสาธารณะเท่านั้นโดยที่ไม่มีความจำเป็นจะต้องรู้รายละเอียดการทำงานภายในของคลาสนั้น ซึ่งก็เข้าหลักการที่เรียกว่า Encapsulation นั่นเอง
สมาชิกส่วนตัว (private members) มีเพียงอ็อบเจกต์ของคลาสนั้นเท่านั้นที่สามารถเห็นและใช้งานสมาชิกเหล่านี้ได้ โลกภายนอกจะไม่มีทางรู้เลยว่าคลาสมีสมาชิกเหล่านี้อยู่
สมาชิกสาธารณะ (public members) โลกภายนอกสามารถเรียกใช้สมาชิกเหล่านี้ได้โดยไม่มีข้อจำกัด
สมาชิกคุ้มครอง (protected members) อยู่ระหว่างแบบส่วนตัวกับสาธารณะ สามารถเรียกใช้ได้โดยคลาสนั้นเองและคลาสย่อยที่สร้างมาจากคลาสนั้น เท่านั้น
ความสัมพันธ์ระหว่างคลาส
- คลาสมีคลาสอื่นเป็นส่วนประกอบ (has-a) เช่นคลาสบัญชีรถยนต์มีคลาสเครื่องยนต์เป็นส่วนประกอบอยู่ภายใน
- คลาสหลักกับคลาสย่อย (is-a) เช่นคลาสรถยนต์เป็นคลาสหลักสามารถวิ่งได้ มีรถแข่งและรถบรรทุกเป็นคลาสย่อย ทั้งรถแข่งและรถบรรทุกเป็นรถยนต์ชนิดหนึ่งจึงสามารถวิ่งได้เช่นกัน เข้าหลักการ Inheritance แต่รถแข่งสามารถวิ่งได้เร็ว รถบรรทุกสามารถขนของได้มาก เป็นคุณสมบัติเพิ่มเติม
ความสัมพันธ์แบบคลาสหลักกับคลาสย่อยนี้ทำให้เกิดหลักสำคัญอีกอย่างคือ Polymorphism คือทั้งรถแข่งและรถบรรทุกสามารถเลี้ยวได้โดยการบังคับพวงมาลัย แต่รถทั้งสองชนิดจะมีการตอบสนองที่ต่างกัน คือรถแข่งจะเลี้ยวได้ไวกว่าในขณะที่รถบรรทุกเลี้ยวอย่างรวดเร็วไม่ได้เพราะจะทำให้พลิกคว่ำ
คลาสแบบพิเศษ
คลาสแบบ Abstract คือคลาสหลักที่จะต้องถูกซับคลาส ไม่สามารถสร้างอ็อบเจกต์โดยตรงจากคลาสนี้ได้ มีจุดมุ่งหมายเพื่อประกาศสมาชิกร่วมบางส่วนของคลาสย่อยแต่ยังไม่นิยามรายละเอียดการทำงาน ปล่อยให้เป็นหน้าที่ของคลาสย่อยที่จะนิยามวิธีการทำงานแตกต่างกันไปตามความมุ่งหมายพิเศษของแต่ละคลาสย่อย
Interface คือข้อตกลงว่าคลาสที่มีอินเตอร์เฟสชนิดนั้นๆ สามารถทำงานตามข้อตกลงที่นิยามไว้ในอินเตอร์เฟสได้
ลักษณะของคลาสที่ดี
- ซ่อนข้อมูลและคุณสมบัติส่วนตัวของคลาสโดยตั้งค่าให้เป็น private โลกภายนอกสามารถเข้าถึงข้อมูลเหล่านี้ผ่านทางฟังก์ชันพิเศษที่จะมีการตรวจสอบความถูกต้องของข้อมูล
- ตั้งค่าเริ่มต้นของข้อมูลและคุณสมบัติของคลาสเสมอ อ็อบเจกต์จะอยู่ในสถานะที่พร้อมถูกใช้งานทันที
- แตกคลาสที่มีภาระมาก (responsibilities) ออกเป็นส่วนย่อยๆ และแบ่งความรับผิดชอบที่เฉพาะเจาะจงให้กับคลาสเล็กๆ เหล่านั้น คลาสที่ใหญ่เกินไปและทำงานหลายอย่างจะยากต่อการบำรุงรักษาและแก้ไข
- ตั้งชื่อสมาชิกให้สัมพันธ์กับหน้าที่ของมันเพื่อบ่งบอกจุดมุ่งหมายที่แน่ชัด จะทำให้ง่ายต่อการแก้ไขโปรแกรมต่อไป
ตัวอย่าง
ภาษาซีชาร์ป
public class Example {
static void Main () {
System.Console.WriteLine ("Hello, world!") ;
}
}
ภาษาจาวา
public class Account {
private String accountName;
private String accountNumber;
private double balance;
public void deposit (double amount) {
balance = balance + amount;
}
public void withdraw (double amount) {
balance = balance - amount;
}
public String getAccountName () {
return accountName;
}
public void setAccountName (String name) {
accountName = name;
}
public String getAccountNumber () {
return accountNumber;
}
public void setAccountNumber (String number) {
accountNumber = number;
}
public double getBalance () {
return balance;
}
public void setBalance (double amount) {
balance = amount;
}
}