การเขียนโปรแกรมเชิงวัตุเบื้องต้น 1 บทที่ 12 การสร้างคลาส เนื้อหาสาระ (Content) เน้ือหาในหน่วยน้ีใหน้กัศึกษาไดเ้รียนรู้ถึงการสร้างคลาส ออกแบบคลาสให้เหมาะสมกับการใช้งานซึ่ง เป็นพ้ืนฐานในการเขียนโปรแกรมเชิงวตัถุ การเขียนโปรแกรมเชิงวัตถุเบือ้งต้น (Object Oriented Programming) OOP (Object Oriented Programming) หมายถึง การเขียนโปรแกรมแบบวัตถุ ค าว่าออบเจ็กต์(Object) ไม่ไดห้มายถึงวตัถุประสงค์หรือสิ่งที่สามารถจบัตอ้งได้OOP ไม่ใช่ภาษา ไม่ใช่ซอฟต์แวร์ แต่ OOP เป็ น เพียง Paradigm (อ่านว่า พาราดิม แปลว่าแบบ หรือ ตวัอย่าง) ดงัน้นั OOP จึงเป็ นรูปแบบ เป็ นแนวความคิด หรือ เป็ นวิธีการในการเขียนโปรแกรม หากโปรแกรมเมอร์เขียนโปรแกรมในแบบ Non-OOP ถึงแม้ว่าจะใช้ ซอฟต์แวร์ หรือ ภาษาโปรแกรมในแบบ OOP เช่น ภาษา C# โปรแกรมที่ได้ก็ไม่มีทางเป็ น OOP ไปได้ OOP เป็นเรื่องของออบเจ็กต์ดงัน้นัสิ่งแรกที่ตอ้งรู้คือความหมายของออบเจ็กต์นิยามของออบเจ็กต์คือ หน่วยหนึ่ งของโปรแกรมซึ่งมีหน้าที่การท างานเฉพาะตัว และสามารถท างานร่วมกับหน่วยอื่น ๆ ของ โปรแกรมได้ ซึ่งออบเจ็กต์ใด ๆ จะถูกสร้างจากคลาส (Class) รูปที่12.1 object oriented programming concepts (ที่มา : https://www.pinterest.com/pin/432767845441546745/?p=true)
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 2 12.1 คลาสและออบเจ็กต์ คลาสและออบเจ็กต์ (Class and Object) เป็นแนวคิดพ้ืนฐานของการเขียนโปรแกรมเชิงวตัถุซ่ึงคลาส เป็นพิมพเ์ขียว หรือตน้แบบที่ผูใ้ชก้า หนดซ่ึงวตัถุถูกสร้างข้ึน โดยพ้ืนฐานแลว้คลาสจะรวมฟิลด์และเมธอด (ฟังก์ชนัสมาชิกซ่ึงกา หนดการกระทา ) ไวใ้นหน่วยเดียว คลาสและออบเจ็กตเ์ป็นสิ่งที่เกี่ยวขอ้งกนั โดยตรง คลาสคือ โค้ด (Code) โปรแกรมที่เราเขียนข้ึนเพื่อทา หนา้ที่เป็นพิมพเ์ขียวของออบเจ็กต์การสร้างออบเจ็กต์ จากคลาสเราจะเรียกว่า การอินสแตนต์ (Instantiation) เราจะเรียกออบเจ็กต์หนึ่งออบเจ็กต์ว่าหนึ่งอินสแตนต์ เราสามารถสร้างออบเจ็กต์ได้หลายอินสแตนต์จากคลาสเพียงคลาสเดียว รูปที่12.2 คลาสและออบเจ็กต์ (ที่มา : https://medium.com/@singhamritpal49/object-oriented-programming-9beb509d4fcf) โดยทวั่ ไปการประกาศคลาสมีเพียงคลาสคา หลกัตามดว้ยตวัระบุ(ชื่อ)ของคลาส แต่มีบางคุณลกัษณะที่ เป็นตวัเลือกซ่ึงสามารถใช้กบัการประกาศคลาสตามขอ้กา หนดของแอปพลิเคชนั โดยทวั่ ไปการประกาศ คลาสสามารถรวมคอมโพเนนตเ์หล่าน้ีตามลา ดบั 1. Modifiers :คลาสสามารถเป็ นพับบลิกหรือไปรเวท ดีฟอลต์ของคลาส คือ พับบลิก 2. Keyword class :ค าหลักที่ใช้ในการประกาศ
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 3 3. Class Identifier : ตัวระบุ หรือ ชื่อของคลาสตวัอกัษรเริ่มตน้ซ่ึงควรเป็นตวัพิมพใ์หญ่ 4. Base class or Super class : ชื่อของพาเรนต์ของคลาส (ซูเปอร์คลาส) ถ้ามีน าหน้าด้วย : โคลอน) 5. Interfaces : รายการของอินเทอร์เฟซที่คนั่ดว้ยเครื่องหมายจุลภาคที่นา ไปใช้โดยคลาสหากมีนา หน้า ด้วย (โคลอน) คลาสสามารถใช้อินเทอร์เฟซได้มากกว่าหนึ่งอินเทอร์เฟซ 6. Body :ร่างกายของคลาสน้นัลอ้มรอบดว้ย () เครื่องหมายปีกกา) ตัวอย่าง // declaring public class public class ABC // field variable public int a, b; // member function or method public void display() { Console.WriteLine("Class & Objects in C#"); } } Identity Name of dog Behaviors Bark , Sleep Eat State/Attributes Breed , Age Color State/Attributes Breed , Age Color Behaviors Bark , Sleep Eat Class Dog Dog 2 Dog 1 Dog 3 Dog 4
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 4 Tuffy ตัวอย่าง Consider its Address 1000 Name breed age color tuffy papilon 5 white using System; // Class Declaration public class Dog { // Instance Variables String name; String breed; int age; String color; // Constructor Declaration of Class public Dog(String name, String breed, int age, String color) { this.name = name; this.breed = breed; this.age = age; this.color = color; } // method 1 public String getName()
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 5 ผลลัพธ์ : Hi my name is tuffy. My breed, age and color are papillon, 5, white { return name; } // method 2 public String getBreed() { return breed; } // method 3 public int getAge() { return age; } // method 4 public String getColor() { return color; } public String toString() { return ("Hi my name is " + this.getName() + "\nMy breed, age and color are " + this.getBreed() +", " + this.getAge() + ", " + this.getColor()); } // Main Method public static void Main(String[] args) { // Creating object Dog tuffy = new Dog("tuffy", "papillon", 5, "white"); Console.WriteLine(tuffy.toString()); } }
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 6 12.2 ออบเจ็กต์และไทป์ ในภาษาโปรแกรมที่ไม่ใช่ภาษาแบบ OOP เช่น ภาษา C จะมีไทป์ (Type) ต่าง ๆ ให้ใช้งาน เช่น int,float, double, char เป็ นต้น ไทป์ ก็คือชนิดข้อมูล เมื่อเรานิยามตัวแปรซึ่ งมีชนิดข้อมูลใด ๆ ตามที่ต้องการตัว แปลภาษา (Compiler) จะทราบทนัทีวา่ตอ้งทา อยา่งไรกบัชนิดขอ้มูลน้นัๆ เนื่องจากวา่ ไทป์เหล่าน้นัเป็นไทน์ ที่ไดน้ ิยาม หรือกา หนดไวล้่วงหนา้แลว้เราเรียกไทป์แบบน้ีวา่ ไทป์ภายใน (Build in Type) ในภาษา C หากพบว่าไทป์ที่มีให้ไม่ตรงกบัความตอ้งการของเรา เราสามารถนิยามไทป์ข้ึนมาใชง้านเอง ได้ซ่ึงเราจะเรียกไทป์แบบน้ีว่า User Defined Data Type (UDT) โดยใช้สตรักเจอร์ (Structure) ซึ่งการสร้าง UDT ด้วยสตรักเจอร์ก็คือการน าไทป์ ชนิดต่าง ๆ มาผสมกัน คลาสก็เหมือนสตรักเจอร์เรานิยามคลาสข้ึนมาใช้งานเพราะตอ้งการสร้าง UDT ใหม่นั่นเอง เมื่อเรา นิยามไทป์ข้ึนมาใหม่ไทป์แบบ LOT ก็จะถูกคอมไพเลอร์ปฏิบตัิต่อไทป์ที่เราสร้างข้ึนแบบเดียวกบั Build in Type .NET Framework Library นับว่าเป็ นแหล่งรวบรวมไทป์ มากมายหลายพันไทป์ ให้เราสามารถน ามา สร้างเป็นไทป์ชนิดใหม่ที่มีความสามารถในการทา งานที่ซบัซอ้นข้ึนไดอ้ยา่งสะดวกและรวดเร็ว 12.3 การใช้งานออบเจ็กต์ ออบเจ็กต์เปรียบเสมือนกล่องด า (Black Box) ซึ่งเวลาเราน ามาใช้งานเราไม่จ าเป็ นต้องรู้ว่ามันมีกลไกล ในการท างานอย่างไร หรือ ไม่จา เป็นตอ้งรู้ว่าภายในออบเจ็กตน์ ้นัมีโคด้อะไรภายใน เมื่อเราตอ้งการใชง้าน เราจะสั่งงานผ่านเมธอด (Method) ออบเจ็กต์จะผนวกขบวนการ (Method) และข้อมูล (Information) ไว้ ภายในตัวของมันเอง ออบเจ็กต์จะเก็บข้อมูลภายในไว้ในฟิ ลด์ (field) หรือ ตวัแปรทอ้งถิ่นของคลาสนนเองั่ โปรแกรมที่เรียกใช้ออบเจ็กต์ไม่จ าเป็ นและสามารถเข้าถึง หรือเปลี่ยนแปลงข้อมูลในฟิ ลด์ได้โดยตรงแต่ สามารถเขา้ถึงไดโ้ดยทางออ้มผา่นส่วนเชื่อมต่อที่เรียกวา่พร็อปเพอร์ต้ี(Property) 12.4 เอน็แคปซูเลชั่น เอ็นแคปซูเลชัน (Encapsulation) หรือ คุณสมบัติการห่อหุ้ม การห่อหุ้ม คือ แนวคิดของออบเจ็กต์ที่แยก โค้ดส่วนเชื่อมต่อ (Interface) กับโค้ดส่วนประมวลผล (Process) ออกจากกัน ข้อมูลและส่วนประมวลผล ท้ังหมดจะถูกซ่อนไวเ้บ้ืองหลังอินเทอร์เฟส หากเราจัดให้มีการอินเทอร์เฟสที่ดีและรักษารูปแบบการ เชื่อมต่อไวอ้ยา่งคงที่แมว้า่เราจะปรับปรุงเปลี่ยนแปลงโคด้ในส่วนของการประมวลผลท้งัหมดไป
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 7 โปรแกรมของเราก็ยังสามารถใช้งานออบเจ็กต์ได้ตามปกติ ยกตัวอย่างเช่น คลาส ABC ซึ่งท าหน้าที่ค านวณ ผลรวมของข้อมูลเพื่อตรวจสอบความถูกต้องของข้อมูลในการรับส่งข้อมูลระหว่างเครื่องคอมพิวเตอร์ รูปที่12.3 Encapsulation เมื่อมีการนา คลาสน้ีไปใชง้านเราไม่จา เป็นตอ้งรู้ว่าภายในคลาส ABC มีการเขียนโค้ดและวิธีการ หรือ อัลกอริทึม (Algorithm) หาค่าอย่างไร เราเพียงแต่สร้างออบเจ็กต์จากคลาสน้ีและส่งชุดขอ้มูลที่ออบเจ็กต์ ต้องการมันก็จะส่งผลลัพธ์กลับมาให้ หากมีการปรับปรุ งอัลกอริ ทึมของคลาส ABC เพื่อให้มันมี ประสิทธิภาพสูงข้ึน เราก็ไม่จา เป็นตอ้งแกไ้ขโคด้หลกัของโปรแกรมแต่อยา่งใด เช่น คลาสที่ทา หนา้ที่แปลง หน่วยวดัอุณหภูมิจากองศาเซลเซียสไปเป็นองศาฟาเรนไฮต์คลาสน้ีมีคุณลกัษณะของเอ็นแคปซูเลชนัอยู่2 ประการ คือ 12.4.1รวมส่วนข้อมูลและส่วนประมวลผลไว้ด้วยกัน ส่วนของขอ้มูลคลาสเราจะเรียกส่วนน้ีว่า Data Field หรือ Variable Filed ท าหน้าที่เก็บข้อมูล ใน ส่วนของการประมวลผลซึ่งเป็ นสมการคณิตศาสตร์อย่างง่าย ๆ ที่ท าหน้าที่แปลงหน่วยวัดอุณหภูมิจากองศา เซลเซียสไปเป็ นองศาฟาเรนไฮต์การรวมข้อมูลและส่วนประมวลผลไว้ด้วยกันแบบน้ีคือลกัษณะอย่างหน่ึง ของหลกัการเอน็แคปซูเลชนั่
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 8 12.4.2 ใช้กลไลในการเชื่อมกับโค้ดภายนอกด้วยพร็อปเพอร์ตี้ หากเราสามารถกันไม่ให้โค้ดภายนอก สามารถเข้าถึงส่วนของข้อมูลภายในออบเจ็กต์ได้ คลาส น้น ๆ ที่มีคุณสมบัติของการเอ็นแคปซูเลชัน ท าให้เราสามารถส่งค่าองศาเซลเซียสไปให้ออบเจ็กต์ได้โดยไม่ ั มีการแตะต้องส่วนของ Data Filed ของคลาสเลย 12.5 การสืบทอด วิธีการอย่างง่าย ๆ ในการตรวจสอบดูว่าภาษาคอมพิวเตอร์ใดสนับสนุนแนวความคิดในแบบ OOP หรือไม่น้ัน ให้ตรวจสอบดูว่าภาษาคอมพิวเตอร์ภาษาน้ันมีคุณสมบตัิของการสืบทอด หรือ การอินเฮียริ แตนซ์(Inheritance) หรือไม่ เรียกย่อ ๆ ว่าอินเฮียริต (Inherit) หลกัการส าคญัน้ีมีไวเ้พื่อให้เราสามารถต่อยอด งานใหม่จากงานเดิมที่มีอยแู่ลว้นนั่เอง รูปที่12.4การสืบทอด ใน .NET Framework ทุกสิ่งทุกอย่างลว้นสืบทอด หรืออินเฮียริตมาจากเบสคลาส (Base Class) ที่ ชื่อว่าออบเจ็กต์หรือกล่าวอีกอย่างหน่ึงก็คือคลาสที่ชื่อว่าออบเจ็กตเ์ป็นตน้ตระกูลของการสืบทอดท้งัหมด ตัวอย่างของการอินเฮียริต เช่น สมมติมีคลาสชื่อ ListProduct ใช้ส าหรับสร้างออบเจ็กต์ ซึ่งท าหน้าที่แสดง ขอ้มูลรายการสินคา้ชิ้นหน่ึง หากต่อมาเราตอ้งการออบเจ็กต์ซ่ึงทา หน้าที่แสดงขอ้มูลรายการสินคา้สิบชิ้น แทนที่เราจะเขียนคลาสข้ึนมาใหม่ท้งัหมด เราก็นา คลาส ListProduct มาท าการแก้ไขใหม่เพื่อให้สามารถ แสดงรายการขอ้มูลสินคา้ไดส้ิบชิ้น แต่อาจจะทา อยา่งน้นั ไม่ไดเ้พราะอาจมีโปรแกรมบางส่วนใชง้านคลาสน้ี
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 9 อยู่ วิธีที่ถูกต้องสามารถท าได้โดยเขียนคลาสใหม่แล้วดึงคุณสมบัติของคลาส ListProduct มาไว้ในคลาสใหม่ น้ีและเพิ่มคุณสมบตัิใหม่เพื่อใหส้ามารถแสดงขอ้มูลรายการสินคา้เพิ่มได้ คลาส ListProduct จะท าหน้าที่เป็ นเบสคลาส หรือ ซูเปอร์คลาส (Supper Class) ส่วนคลาสใหม่ของเรา น้ันจะเป็นคลาส (Sub Class) หรือ Derived Class หรือ Child class ตัวอย่างง่าย ๆ ช่องหลักการอินเยียริตมี ดงัน้ี นี่คือคลาส A ภายในคลาสมีสมาชิกเพียงตัวเดียว คือ เมธอดที่ชื่อว่า Write() เมธอดน้ีทา หนา้ที่พิมพค์า ว่า A ออกที่หน้าจอ ต่อไปจะท าการอินเฮียริตคลาสใหม่ชื่อว่า B จากคลาส A ภายในคลาสมีสมาชิกเพียงตัวเดียว คือ เมธอดที่ชื่อว่า WriteB() เมธอดน้ีทา หน้าที่พิมพค์า ว่า 8ออกที่ หนา้จอ จากกรณีน้ีถึงแมว้ว่าเราจะนิยามสมาชิกของคลาส B เพียงสมาชิกเดียว แต่ออบเจ็กต์ที่ถูกสร้างจาก คลาส B จะมีสองเมธอด คือ WriteB() และ WriteA() ซึ่งเป็ นมรดกที่สืบทอดมาจากคลาส A ตัวอย่าง ส าหรับ ทอดสอบโค้ดโปรอยา่งง่าย ๆ มีดงัน้ี Class A } Public void WriteA() { Cosole.WriteLine("A"); } } Class B: A { Public void Write() { Cosole.WriteLine("B"); } } static void Main(string args] { B myB = new B(); myB.WriteA(); myB.WriteB(); Console.ReadLine(); } A B
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 10 12.6 โพลีมอร์ฟิ ส การแปรคุณสมบัติ ค าว่าโพลี (Poly) แปลว่าหลาย และค าว่ามอร์ฟิ ส (Morphism) แปลว่ารูปร่าง ดงัน้ัน ค าว่าโพลีมอร์ฟิ สจึงแปลว่าหลายรูปทรง หรือ เปลี่ยนสภาพได้ อะไรที่เปลี่ยนรูปร่างได้ค าตอบ คือ เมธอด (Method) ที่อินเฮียริตมาจากเบสคลาส โดยการเปลี่ยนแปลงเมธอดบางเมธอดของเบสคลาสให้ตรงกับความ ต้องการ เราเรียกว่าเมธอดโอเวอร์ไรท์ (Method Overide) หรือ สร้างเมธอดใหม่ทับเมธอดเดิมเรียกว่าเมธ อดไฮดิง (Method Hiding) ประโยชน์คือเราสามารถนา คลาสที่มีอย่แูลว้มาใชป้ระโยชน์ถึงแมว้่าคลาสน้นัจะ มีคุณสมบตัิไม่ตรงตามที่เราตอ้งการท้งัหมด รูปที่ 12.5 polmorphism เราสามารถเปลี่ยนแปลงเพิ่มเติมความสามารถภายในของ Derived Class ได้ โดยที่เราไม่ได้ไป ท าลายคลาสเดิมที่ท าหน้าที่เป็ นเบสคลาสเลย ซึ่งในหลาย ๆ กรณีการทา ในลกัษณะเช่นน้ีจะสะดวกและ รวดเร็วกวา่การเขียนคลาสข้ึนมาใหม่ ยกตัวอย่างการท าเมธอดโอเวอร์ไรท์ ตัวอย่างเช่น มีคลาสชื่อว่า CustomerData เป็ นคลาสที่ท าหน้าที่ จดัการกบัฐานขอ้มูลลูกคา้ภายในคลาสประกอบดว้ยเมธอดมากมาย อยู่มาวนัหน่ึงหมายเลขโทรศพัท์ทวั่ ประเทศเปลี่ยนเป็ น 12 หลัก ท าให้คลาส CustomerData ไม่สามารถรองรับการท างานได้ จ าเป็ นต้องแก้ไขโค้ดในส่วนของเมธอดชื่อ CustomerPhone) ซึ่งท าหน้าที่จัดการหมายเลขโทรศัพท์แต่ ปัญหาคือไม่มีซอร์สโคด้จึงไม่สามารถแกไ้ขได้เรามีวิธีแกป้ ัญหาน้ีไดโ้ดยอินเฮียริตคลาส CustomerPhone) แล้วท าเมธอดโอเวอร์ไรท์ โดยเขียนเฉพาะเมธอด CustomerPhone) ข้ึนมาใหม่โดยยงัคงรักษาส่วนเชื่อมต่อ ไว้คงเดิม ซึ่งเราไม่ต้องแก้ไข หรือ เปลี่ยนแปลงวิธีการเรียกใช้เมธอด CustomerPhone) ดงัน้นั โค้ดหลัก
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 11 ภายนอกที่เรียกใช้งานเมธอด CustomerData() ก็ไม่มีการเปลี่ยนแปลง ตัวอย่างแสดงการท าเมธอดโอเวอร์ ไรท์อย่างง่ายๆ มีดังนี้ สร้างคลาสใหม่โดยการอินเฮียริตจากคลาส CustomerData 12.7 เมธอด เมธอด (Method) เป็ นองค์ประกอบอย่างหนึ่งของคลาส ส าหรับก าหนดรูปแบบ วิธีการกระท าอย่างใด อย่างหนึ่ง เช่น การค านวณหาผลลัพธ์ เมธอดเทียบได้กับฟังก์ชัน หรือ โพรซีเยอร์ในภาษาโปรแกรมอื่น ๆ 12.7.1การสร้างเมธอด จากตัวอย่างที่ผ่านมามีเมธอดที่เราได้รู้จัก คือ Main() Class CustomerData { protected virtual void CustomerPhone() { Cosole.WriteLine("02 123 456"); } protected virtual void ClearAll( { Cosole.WriteLine("deleat all data"); } } Class CustomerData2: CustomerData { protected virtual void CustomerPhone() { Base. CustomerPhone() Cosple WriteLine("02 123 456 7”); } protected new virtual void ClearAll() { Cosole.WriteLine("deleat all data"); }
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 12 โดยทวั่ ไปแลว้คลาสมกัประกอบไปดว้ยเมธอดมากกว่า1 เมธอด ส าหรับก าหนดการท างานเฉพาะอย่าง น้นัคือเราสามารถเพิ่มเมธอดให้กบัคลาสได้จะกี่เมธอดก็ไดต้ามความจา เป็น หากเราเพิ่มเมธอดลงไปใน คลาสจะมีลกัษณะดงัน้ี จากเมธอดที่ได้เพิ่มเติมลงไป สามารถอธิบายได้ดังนี้ 1. returnValueType ใช้ในกรณีที่เมธอดน้ันจา เป็นตอ้งส่งผลลพัธ์ที่ประมวลผลภายในเมธอดน้นั กลับไปยังส่วนที่เรียกใช้ เราจ าเป็ นต้องระบุชนิดข้อมูลเสมอ using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //… } } } using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication 1 } class Program { static void Main(string[] args) { //.. } static (returnValueType, void) MethodName(parameter (s)) { //… } } }
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 13 2. ส่งผลลัพธ์ return using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication 1 { class Program { static void Main(string[] args) } //… } static double CalCircleArea(int r) { //.. } } } using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) {
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 14 3. การรับพารามิเตอร์ถ้าเมธอดต้องการใช้ข้อมูลจากภายนอกเมธอดน้ัน จะต้องมีส่วนของ พารามิเตอร์ในการรับขอ้มูล จากตวัอยา่งเมธอดการคา นวณหาพ้ืนที่วงกลมเมธอดตอ้งการพารามิเตอร์คือค่า รัศมีพารามิเตอร์จะมีกี่ตวัก็ได้แต่ค่าที่ส่งกลบัไดค้่าเดียวกรณีที่เมธอดมีหลายพารามิเตอร์จะเป็นดงัน้ี 12.7.2การเรียกใช้เมธอด การเรียกใช้เมธอดมี 2แบบ คือ //… } static double CalCircleArea(int r) { Double area = 3.14 * r *r; Return area; } } } using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //... } static double CalXYZ(int x, double y, string z) { //.. } } }
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 15 1. การเรียกใช้ void method หรือ เมธอดไม่คืนค่า กรณีน้ีเพียงระบุชื่อเมธอดและพารามิเตอร์(ถ้า มี) เช่น 2. การเรียกใช้เมธอดแบบคืนค่า จ าเป็ นต้องมีตัวแปรมารองรับค่าที่ส่งกลับ เช่น String msg="Hello World; Say(msg); Double myArea = CalCircleArea(10); using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { double radius; string s; Console.Write("Please enter radius:"); s = Console.ReadLine(); radius= double.Parse(s); Console.WriteLine("Area = {0}, + Circumference = {1}" ,CalArea(radius),CalCircumference(radius)); Console.Read(); } static double CalArea(double r) { return 3.14*r*r; } static double CalCircumference(double r) ( return 2* 3.141 *r; } } }
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 16 Please enter radius: 100 Area 13140, + Circumference = 628.2 _ using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { int x, y, result; string s; Osnubse8.sloano) = a Console.Write("Please enter first number : "); s = Console.ReadLine(); x = int.Parse(s); Console.Write("Please enter second number : "); S= Console.ReadLine(); y = int.Parse(s); result = Max(x, y); Console.WriteLine("The max is : " + result); Console.Read(); } Satic int Max (int a,int b) { if (a >= b) reture a ; else reture b ; } } }
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 17 ฝึ กปฏิบัติการสร้าง Class และเรียกใช้งาน Class C# 1. สร้าง Class ในแบบ Windows App ดังนี้ 1.1 สร้างโปรเจ็กต์ใหม่ในแบบ Windows App รูปที่12.6การสร้างโปรเจ็คต์ใหม่ในแบบ Windows App Please enter first number: 10 Please enter second number: 2 The max is: 10 _
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 18 1.2 คลิก Add รูปที่12.7 คลกิ Add
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 19 1.3 จะได้ Class ตั้งชื่อใหม่หรือไม่ก็ได้ รูปที่12.8 Class1
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 20 2. สร้าง Class ในแบบ Console App ดังนี้ 2.1 สร้างโปรเจ็กต์ใหม่ในแบบ Window App 2.2 คลิก Add
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 21 2.3 คลิก Add 2.4 ตั้งชื่อ Class รูปที่12.11 Class สรุปสาระส าคัญ Oop (Object Oriented Programming) หมายถึง การเขียนโปรแกรมแบบวัตถุ OOP ไม่ใช่ภาษาไม่ใช่ ซอฟต์แวร์ แต่ OOP เป็ นแนวความคิด หรือ เป็ นวิธีการในการเขียนโปรแกรม คลาสและออบเจ็กต์เป็ นแนวคิดพื ้นฐานของการเขียนโปรแกรมเชิงวัตถุ ซึ่งคลาสเป็ นพิมพ์เขียว การสร้าง ออบเจ็กต์จากคลาสเราจะเรียกว่า การอินสแตนต์ (Instantiation) เราสามาถสร้างออบเจ๊กได้หลจากคลาสเพียงคลาส เดียว ในภาษาโปรแกรมที่ไม่ใช่ภาษาแบบ OOP เช่น ภาษา C จะมีไทป์ (Type) ต่าง ๆ ให้ใช้งาน เช่น int ,float, double, char เป็ นต้น ไทป์ ก็คือ ชนิดข้อมูล คลาสก็เหมือนสตรักเจอร์ เรานิยามคลาสขึ ้นมาใช้งานเพราะต้องการสร้าง UDT ใหม่นั่นเอง
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 22 ออบเจ็กต์เปรียบเสมือนกล่องด า (Black Box) ซึ่งเวลาเราน ามาใช้งานเราไม่จ าเป็ นต้องรู้ว่ามันมีกลไกลในการ ท างานอย่างไร หรือไม่จ าเป็ นต้องรู้ว่าภายในออบเจ็กต์นั ้นมีโค้ดอะไรภายใน เมื่อเราต้องการใช้งานเราจะนผ่านเมธอด (Method) ออบเจ็กต์จะผนวกขบวนการ (Method) และข้อมูล (Informationของมันเอง ออบเจ็กต์จะเก็บข้อมูลภายใน ไว้ในฟิ ลด์ (field) หรือ ตัวแปรท้องถิ่นของคลาสนั่นเอง โปรแกรมที่เรียกใช้ออบเจ็กตไม่จ าเป็ นและสามารถเข้าถึง หรือ เปลี่ยนแปลงข้อมูลในฟิ ลด์ได้โดยตรงแต่สามารถ เข้าถึงได้โดยทางอ้อมผ่านส่วนเชื่อมต่อที่เรียกว่าพร็อปเพอร์ตี ้ (Property) การห่อหุ้ม คือ แนวคิดของออบเจ็กต์ที่แยกโค้ดส่วนเชื่อมต่อ (Interface) กับโค้ดส่วนประมวลผล (Process)ออกจากกัน ข้อมูลและส่วนประมวลผลทั ้งหมดจะถูกซ่อนไว้เบื ้องหลังอินเทอร์เฟส วิธีการอย่างง่าย ๆ ในการตรวจสอบดูว่าภาษาคอมพิวเตอร์ใดสนับสนุนแนวความคิดในแบบ OOPหรือไม่นั ้น ให้ ตรวจสอบดูว่าภาษาค่อมพิวเตอร์ภาษานั ้นมีคุณสมบัติของการสืบทอด หรือ การอินเฮียริแตนซ์(Inheritance) การแปรคุณสมบัติ ค าว่าโพลี (Poly) แปลว่า หลาย และค าว่ามอร์ฟิ ส (Morphism) แปลว่า รูปร่างดังนั ้น ค าว่า โพลีมอร์ฟิ สนี ้จึงแปลว่าหลายรูปทรงหรือเปลี่ยนสภาพได้ อะไรที่เปลี่ยนรูปร่างได้ค าตอบ คือ เมธอด(Method) ที่อินเฮียริต มาจากเบสคลาส โดยการเปลี่ยนแปลงเมธอดบางเมธอดของเบสคลาสให้ตรงกับความต้องการเราเรียกว่าเมธอดโอเวอร์ ไรท์ (Method Overide) หรือสร้างเมธอดใหม่ทับเมธอดเดิมเรียกว่าเมธอดไฮดิง (Method Hiding) ประโยชน์คือเรา สามารถน าคลาสที่มีอยู่แล้วมาใช้ประโยชน์ถึงแม้ว่าคลาสนั ้นจะมีคุณสนบัติไม่ตรงตามที่เราต้องการทั ้งหมด เราสามารถเปลี่ยนแปลงเพิ่มเติมความสามารถภายในของ Derived Class ได้ โดยที่เราไม่ได้ไปท าลายคลาส เดิมที่ท าหน้าที่เป็ นเบสคลาสเลย ซึ่งในหลาย ๆ กรณีการท าในลักษณะเช่นนี ้จะสะดวกและรวดเร็วกว่าการเขียนคลาส ขึ ้นมาใหม่ เมธอด (Method) เป็ นองค์ประกอบอย่างหนึ่งของคลาส ส าหรับก าหนดรูปแบบ วิธีการกระท าอย่างใดอย่าง หนึ่ง เมธอดเทียบได้กับฟังก์ชันหรือโพรซีเยอร์ในภาษาโปรแกรมอื่น ๆ
การเขียนโปรแกรมเชิงวัตุเบื้องต้น 23