บทความนี้ไม่มีจาก |
ในการเขียนโปรแกรมเชิงวัตถุ คลาส (อังกฤษ: class) คือต้นแบบที่กำหนดคุณสมบัติและพฤติกรรมการทำงานของทึ่ถูกสร้างมาจากคลาสนั้นๆ
องค์ประกอบของคลาสมีสองส่วนหลักได้แก่
- ข้อมูล (data) หรือ คุณสมบัติ (property) สำหรับเก็บข้อมูลในการทำงานหรือบอกสถานะปัจจุบันของอ็อบเจกต์ ตัวอย่างเช่น คลาสชนิดบัญชีธนาคารสามารถมีข้อมูลคือ เลขที่บัญชี, ชื่อเจ้าของบัญชี, และยอดเงินปัจจุบัน
- พฤติกรรมการทำงาน (method หรือ function) เป็นส่วนรับคำสั่งและทำงานตามคำสั่งนั้น เช่นคลาสบัญชีธนาคารจากตัวอย่างข้างบนอาจจะมีฟังก์ชันสำหรับฝากและถอนเงินจากบัญชี เป็นต้น
นอกจากนี้ คลาสยังสามารถมีฟังก์ชันพิเศษเรียกว่า constructor ซึ่งจะถูกเรียกใช้ในเวลาที่กำลังสร้างอ็อบเจกต์จากคลาสเพื่อตั้งค่าเริ่นต้นให้กับข้อมูลและคุณสมบัติของอ็อบเจกต์นั้น
การจำกัดการเข้าถึง
เราสามารถจำกัดความสามารถในการเห็นและใช้งานของแต่ละสมาชิกของคลาสหรือแม้แต่ตัวคลาสเองจากโลกภายนอกได้ ผลที่ได้คือข้อมูลและการทำงานส่วนตัวของคลาสจะถูกซ่อนไว้ โลกภายนอกสามารถขอให้อ็อบเจกต์ทำงานผ่านฟังก์ชันสาธารณะเท่านั้นโดยที่ไม่มีความจำเป็นจะต้องรู้รายละเอียดการทำงานภายในของคลาสนั้น ซึ่งก็เข้าหลักการที่เรียกว่า นั่นเอง
สมาชิกส่วนตัว (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; } }
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
bthkhwamniimmikarxangxingcakaehlngthimaidkrunachwyprbprungbthkhwamni odyephimkarxangxingaehlngthimathinaechuxthux enuxkhwamthiimmiaehlngthimaxacthukkhdkhanhruxlbxxk eriynruwacanasaraemaebbnixxkidxyangiraelaemuxir inkarekhiynopraekrmechingwtthu khlas xngkvs class khuxtnaebbthikahndkhunsmbtiaelaphvtikrrmkarthangankhxngthuthuksrangmacakkhlasnn xngkhprakxbkhxngkhlasmisxngswnhlkidaek khxmul data hrux khunsmbti property sahrbekbkhxmulinkarthanganhruxbxksthanapccubnkhxngxxbeckt twxyangechn khlaschnidbychithnakharsamarthmikhxmulkhux elkhthibychi chuxecakhxngbychi aelayxdenginpccubn phvtikrrmkarthangan method hrux function epnswnrbkhasngaelathangantamkhasngnn echnkhlasbychithnakharcaktwxyangkhangbnxaccamifngkchnsahrbfakaelathxnengincakbychi epntn nxkcakni khlasyngsamarthmifngkchnphiesseriykwa constructor sungcathukeriykichinewlathikalngsrangxxbecktcakkhlasephuxtngkhaerintnihkbkhxmulaelakhunsmbtikhxngxxbecktnn okhrngsrangkhxngkhlas inaebb UMLkarcakdkarekhathungerasamarthcakdkhwamsamarthinkarehnaelaichngankhxngaetlasmachikkhxngkhlashruxaemaettwkhlasexngcakolkphaynxkid phlthiidkhuxkhxmulaelakarthanganswntwkhxngkhlascathuksxniw olkphaynxksamarthkhxihxxbecktthanganphanfngkchnsatharnaethannodythiimmikhwamcaepncatxngruraylaexiydkarthanganphayinkhxngkhlasnn sungkekhahlkkarthieriykwa nnexng smachikswntw private members miephiyngxxbecktkhxngkhlasnnethannthisamarthehnaelaichngansmachikehlaniid olkphaynxkcaimmithangruelywakhlasmismachikehlanixyu smachiksatharna public members olkphaynxksamartheriykichsmachikehlaniidodyimmikhxcakd smachikkhumkhrxng protected members xyurahwangaebbswntwkbsatharna samartheriykichidodykhlasnnexngaelakhlasyxythisrangmacakkhlasnn ethannkhwamsmphnthrahwangkhlaskhlasmikhlasxunepnswnprakxb has a echnkhlasbychirthyntmikhlasekhruxngyntepnswnprakxbxyuphayin khlashlkkbkhlasyxy is a echnkhlasrthyntepnkhlashlksamarthwingid mirthaekhngaelarthbrrthukepnkhlasyxy thngrthaekhngaelarthbrrthukepnrthyntchnidhnungcungsamarthwingidechnkn ekhahlkkar Inheritance aetrthaekhngsamarthwingiderw rthbrrthuksamarthkhnkhxngidmak epnkhunsmbtiephimetim khwamsmphnthaebbkhlashlkkbkhlasyxynithaihekidhlksakhyxikxyangkhux Polymorphism khuxthngrthaekhngaelarthbrrthuksamartheliywidodykarbngkhbphwngmaly aetrththngsxngchnidcamikartxbsnxngthitangkn khuxrthaekhngcaeliywidiwkwainkhnathirthbrrthukeliywxyangrwderwimidephraacathaihphlikkhwakhlasaebbphiesskhlasaebb Abstract khuxkhlashlkthicatxngthuksbkhlas imsamarthsrangxxbecktodytrngcakkhlasniid micudmunghmayephuxprakassmachikrwmbangswnkhxngkhlasyxyaetyngimniyamraylaexiydkarthangan plxyihepnhnathikhxngkhlasyxythicaniyamwithikarthanganaetktangkniptamkhwammunghmayphiesskhxngaetlakhlasyxy Interface khuxkhxtklngwakhlasthimixinetxrefschnidnn samarththangantamkhxtklngthiniyamiwinxinetxrefsidlksnakhxngkhlasthidisxnkhxmulaelakhunsmbtiswntwkhxngkhlasodytngkhaihepn private olkphaynxksamarthekhathungkhxmulehlaniphanthangfngkchnphiessthicamikartrwcsxbkhwamthuktxngkhxngkhxmul tngkhaerimtnkhxngkhxmulaelakhunsmbtikhxngkhlasesmx xxbecktcaxyuinsthanathiphrxmthukichnganthnthi aetkkhlasthimipharamak responsibilities xxkepnswnyxy aelaaebngkhwamrbphidchxbthiechphaaecaacngihkbkhlaselk ehlann khlasthiihyekinipaelathanganhlayxyangcayaktxkarbarungrksaaelaaekikh tngchuxsmachikihsmphnthkbhnathikhxngmnephuxbngbxkcudmunghmaythiaenchd cathaihngaytxkaraekikhopraekrmtxiptwxyangphasasicharp public class Example static void Main System Console WriteLine Hello world phasacawa 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