โดย Stuart McGarrity และ Adam Sifounakis, MathWorks
เมื่อสร้างแอปพลิเคชันซอฟต์แวร์ สิ่งสำคัญคือต้องจัดระเบียบบล็อกส่วนประกอบต่างๆ ของซอฟต์แวร์ของคุณให้เป็นกลุ่มที่เกี่ยวข้องกัน ตัวอย่างเช่น ตัวแก้ตัวเลขแบบกำหนดเองอาจต้องการพารามิเตอร์การกำหนดค่าและรูทีนหลายตัวเพื่อทำการคำนวณทั้งชุด การเขียนโปรแกรมเชิงวัตถุ (OOP) ช่วยให้คุณสามารถจัดกลุ่มพารามิเตอร์คอนฟิกูเรชัน (คุณสมบัติ) ของตัวแก้ปัญหาพร้อมฟังก์ชัน (เมธอด) ให้เป็นคำจำกัดความเดียว หรือระดับ. ทุกสิ่งที่ผู้ใช้จำเป็นต้องใช้เพื่อดำเนินการแก้ปัญหานี้จะถูกกำหนดไว้ในคลาสนี้
วัตถุคือตัวอย่างของการเรียน. เมื่อโปรแกรมดำเนินการ วัตถุจะถูกสร้างขึ้นตามคำจำกัดความของคลาสและทำงานในลักษณะที่กำหนดโดยคลาส คุณสมบัติของวัตถุแสดงถึงสถานะและวิธีการเป็นตัวแทนของการกระทำทั้งหมดที่ผู้ใช้อาจดำเนินการ ด้วยวิธีนี้ ผู้เขียนโค้ดสามารถจัดกลุ่มข้อมูลและฟังก์ชันที่เกี่ยวข้องทั้งหมดสำหรับระบบซอฟต์แวร์ได้อย่างง่ายดาย และผู้ใช้สามารถค้นหาและใช้ความสามารถทั้งหมดที่ผู้เขียนโค้ดได้พัฒนาขึ้นได้อย่างง่ายดาย
ตัวอย่างต่อไปนี้ใช้การเขียนโปรแกรมเชิงวัตถุเพื่อสร้างแอปพลิเคชันที่จะวิเคราะห์ข้อมูลเซ็นเซอร์จากอาร์เรย์ของเซ็นเซอร์
ตัวอย่างการใช้งาน: การวิเคราะห์ข้อมูลอาร์เรย์เซนเซอร์
อาร์เรย์เซนเซอร์ (รูปที่ 1) คือชุดของเซนเซอร์ ซึ่งมักจัดเรียงเป็นเส้น ซึ่งใช้ในการสุ่มตัวอย่างสื่อ เช่น อากาศ น้ำ หรือพื้นดินสำหรับเรดาร์ โซนาร์ หรือการสื่อสารผ่านเซลลูล่าร์ ด้วยการรวบรวมตัวอย่างเวลาจากหลายจุดในอวกาศ คุณสามารถดึงข้อมูลเพิ่มเติมจากสื่อที่กำลังสุ่มตัวอย่างได้
รูปที่ 1 อาร์เรย์เซ็นเซอร์ตรวจจับแหล่งกำเนิดแม่เหล็กไฟฟ้าที่อยู่ห่างไกลสองแหล่งในมุมที่ไม่รู้จัก
แอปพลิเคชันของเราใช้อาร์เรย์เซ็นเซอร์เพื่อระบุทิศทางการมาถึง (DOA) ของแหล่งกำเนิดแม่เหล็กไฟฟ้าที่อยู่ห่างไกลหลายแห่ง เช่น สัญญาณวิทยุและเครื่องส่งสัญญาณเรดาร์ ในสถานการณ์สมมตินี้ เราจะพยายามประมาณค่ามุม θ1 และ θ2 ของแหล่งที่มาทั้งสองที่สัมพันธ์กับทิศทางที่อาร์เรย์เซนเซอร์ชี้ไป
การตรวจสอบรายการข้อมูลและการดำเนินการ
สำหรับแอปพลิเคชันนี้ เราจะต้องจัดเก็บและแสดงข้อมูลต่อไปนี้:
- จำนวนเซ็นเซอร์และตัวอย่าง
- ข้อมูลเซ็นเซอร์ตัวอย่าง
- อัตราตัวอย่างเซ็นเซอร์
- ระยะห่างของเซ็นเซอร์
- ความยาวคลื่นของแหล่งกำเนิดที่ห่างไกล
- ความเร็วของคลื่น
- ชื่อชุดข้อมูลเซนเซอร์หรือคำอธิบาย
เราจะใช้เทคนิคการแปลงฟูริเยร์แบบเร็วอย่างง่าย (FFT) เพื่อประมาณค่า DOA ของแหล่งที่มา เทคนิคนี้สามารถแบ่งออกเป็นส่วน ๆ และนำไปใช้เป็นชุดของการดำเนินการ จะมีการดำเนินงานด้านสาธารณูปโภคจำนวนเล็กน้อยเพื่อช่วยให้งานพัฒนาง่ายขึ้น ตัวอย่างเช่น เราต้อง:
- สร้างชุดข้อมูลจากข้อมูลสังเคราะห์หรือข้อมูลสดที่ได้มา
- ตรวจสอบและแก้ไขค่าชุดข้อมูลและพารามิเตอร์
- ลงจุดข้อมูลตัวอย่างเพื่อช่วยในการตีความและตรวจสอบความถูกต้อง
- คำนวณและลงจุดสเปกตรัมกำลังของชุดข้อมูล (โดยใช้ขนาดกำลังสองอย่างง่ายของวิธี FFT)
- ค้นหาจุดสูงสุดของสเปกตรัมพลังงานเพื่อประเมิน DOA ของแหล่งที่มา
เมื่อระบุข้อมูลที่เราต้องการแสดงและกิจกรรมที่เราต้องดำเนินการแล้ว เราสามารถแสดงข้อมูลด้วยคุณสมบัติคลาสและกิจกรรมด้วยเมธอดคลาส
การแสดงข้อมูลด้วยคุณสมบัติของคลาส
เราเริ่มต้นด้วยการกำหนดคลาสเพื่ออธิบายอาร์เรย์เซ็นเซอร์ การแสดงเริ่มต้นนี้มีเฉพาะรายการข้อมูลและแสดงเป็นคุณสมบัติของคลาส
คุณกำหนดคลาสใน MATLAB ด้วยไฟล์นิยามคลาส ซึ่งขึ้นต้นด้วยคลาสเดฟ
คำหลักและถูกยกเลิกโดยจบ
คำสำคัญ. ภายในบล็อกคำนิยามคลาส บล็อกคำหลักเพิ่มเติมจะอธิบายลักษณะต่างๆ ของคลาส เช่น คุณสมบัติของคลาสและเมธอดของคลาส ไฟล์คำจำกัดความที่แสดงในรูปที่ 2 อธิบายถึงคลาสเศร้า
(ชุดข้อมูลอาร์เรย์เซ็นเซอร์) พร้อมรายการข้อมูลทั้งหมดที่เราต้องการแสดงอยู่ในบล็อกคุณสมบัติ
รูปที่ 2 ไฟล์นิยามคลาสเศร้า.m
ด้วยคุณสมบัติ
การสร้างวัตถุและการเข้าถึงคุณสมบัติ
ในการสร้างวัตถุหรืออินสแตนซ์ของคลาสที่เรากำหนดไว้ เราใช้คำสั่ง
>> s = เศร้า;
ในการตั้งค่าของคุณสมบัติ เราระบุชื่อเหมือนกับฟิลด์ของโครงสร้างด้วย
>> s.NumSensors = 16;
เราสามารถแสดงอ็อบเจกต์โดยดูคุณสมบัติที่มีอยู่ทั้งหมดและค่าปัจจุบันโดยพิมพ์ชื่ออ็อบเจกต์
>> ss = sads ที่มีคุณสมบัติ: ความยาวคลื่น: [] c: 300000000 NumSensors: 16 NumSamples: [] Data: [] Spacing: [] SampleRate: [] Name: []
คุณสมบัติทั้งหมดยกเว้นNumSensors
และค
ยังคงว่างเปล่า ขณะนี้ชุดข้อมูลสามารถระบุเป็นเศร้า
วัตถุโดยใช้ระดับ
การทำงาน,คือ
ฟังก์ชัน และใคร
คำสั่ง สิ่งที่เป็นไปไม่ได้กับโครงสร้าง
>> class(s)ans = 'เศร้า'
ความสามารถในการระบุคลาสของตัวแปรมีความสำคัญต่อผู้ใช้ที่สร้างรหัสเพื่อดำเนินการกับชุดข้อมูล เนื่องจากจะช่วยให้พวกเขากำหนดรายการข้อมูลที่มีอยู่ที่จะเข้าถึงและการดำเนินการที่สามารถดำเนินการได้ตามกฎหมาย
การตรวจสอบข้อผิดพลาด
หากคุณใช้โครงสร้างเพื่อแสดงข้อมูลของคุณ คุณสามารถเพิ่มชื่อฟิลด์ใหม่ได้ทุกเมื่อ เพียงแค่ระบุชื่อฟิลด์ใหม่และกำหนดค่าให้กับฟิลด์นั้น ความสามารถนี้สะดวกอย่างยิ่งเมื่อคุณทำการทดลองและสร้างอัลกอริทึมต้นแบบ อย่างไรก็ตาม หากคุณสะกดชื่อฟิลด์ผิด ฟิลด์ใหม่จะถูกเพิ่มโดยไม่แจ้งให้ทราบ ซึ่งอาจทำให้เกิดข้อผิดพลาดในภายหลังซึ่งยากต่อการวินิจฉัย
ไม่เหมือนกับโครงสร้าง คุณไม่สามารถเพิ่มคุณสมบัติใหม่ให้กับออบเจกต์ได้โดยการระบุชื่อคุณสมบัติใหม่และกำหนดค่าให้กับออบเจกต์ หากคุณสะกดชื่อคุณสมบัติของวัตถุผิด MATLAB จะแสดงข้อผิดพลาดทันที การตรวจสอบข้อผิดพลาดในระดับเพิ่มเติมนี้มีประโยชน์เมื่อวัตถุถูกเข้าถึงโดยผู้ใช้ที่ไม่คุ้นเคยมากกว่าผู้เขียน ซึ่งเป็นเรื่องปกติในระหว่างการพัฒนาแอปพลิเคชันขนาดใหญ่
การควบคุมการเข้าถึงข้อมูล
ชั้นเรียนช่วยให้คุณควบคุมการเข้าถึงทรัพย์สินได้อย่างยอดเยี่ยม ตัวอย่างเช่น อนุญาตให้คุณห้ามการแก้ไขคุณสมบัติ ซ่อนคุณสมบัติ หรือทำให้คำนวณแบบไดนามิก คุณควบคุมการเข้าถึงคุณสมบัติโดยการระบุคุณสมบัติคุณสมบัติในไฟล์นิยามคลาส เราขยายไฟล์นิยามคลาสในรูปที่ 2 โดยแบ่งรายการคุณสมบัติปัจจุบันออกเป็นหลายบล็อกคุณสมบัติ โดยแต่ละรายการมีแอตทริบิวต์คุณสมบัติเฉพาะ:ได้รับการเข้าถึง
,คงที่
, และขึ้นอยู่กับ
(รูปที่ 3)
รูปที่ 3 ไฟล์นิยามคลาสเศร้า.m
ด้วยคุณสมบัติของคุณสมบัติ
คุณห้ามการปรับเปลี่ยนคุณสมบัติโดยการตั้งค่าคงที่
คุณลักษณะ. ในตัวอย่างของเรา เราจะตั้งค่าคุณสมบัติความเร็วของแสงค
ให้คงที่ เนื่องจากคุณสมบัติคงที่ไม่เปลี่ยนแปลง จึงสามารถเข้าถึงได้ง่ายๆ โดยอ้างอิงชื่อคลาส
>> sads.cans = 300000000
คุณทำให้คุณสมบัติเป็นแบบอ่านอย่างเดียวโดยการตั้งค่าตั้งค่าการเข้าถึง
แอตทริบิวต์เป็นส่วนตัว คุณสามารถทำให้พร็อพเพอร์ตี้มองเห็นได้เฉพาะกับเมธอดที่ดำเนินการเท่านั้นโดยการตั้งค่าได้รับการเข้าถึง
แอตทริบิวต์เป็นส่วนตัวตามที่เราจะทำกับความยาวคลื่น
คุณสมบัติ.
คุณสามารถเปลี่ยนชื่อหรือคุณลักษณะของคุณสมบัติส่วนตัวได้อย่างอิสระโดยไม่กระทบต่อผู้ใช้ของวัตถุ แนวทาง "กล่องดำ" นี้เพื่อกำหนดชิ้นส่วนของซอฟต์แวร์ ซึ่งเรียกว่าการห่อหุ้ม ป้องกันไม่ให้ผู้ใช้อ็อบเจกต์ต้องพึ่งพารายละเอียดการใช้งานหรือลักษณะเฉพาะที่อาจเปลี่ยนแปลงและทำลายโค้ดได้
คุณระบุว่าคุณสมบัติจะถูกคำนวณเฉพาะเมื่อถูกร้องขอโดยการตั้งค่าเท่านั้นขึ้นอยู่กับ
คุณลักษณะ.
จากนั้น คุณระบุเมธอด get ที่จะเรียกโดยอัตโนมัติเมื่อเข้าถึงพร็อพเพอร์ตี้ ดู"การเข้าถึงคุณสมบัติด้วยวิธี Get and Set"ของบทความนี้เพื่อดูรายละเอียดเกี่ยวกับการระบุเมธอดคลาส ในแอปพลิเคชันของเรา เราตั้งค่าNumSensors
และจำนวนตัวอย่าง
คุณสมบัติที่ต้องพึ่งพิง
การนำการดำเนินการไปใช้ด้วยวิธีการแบบคลาส
เมธอดหรือการดำเนินการที่สามารถดำเนินการกับออบเจกต์ได้ระบุไว้เป็นรายการของฟังก์ชันในบล็อกเมธอด คลาสสามารถมีเมธอดได้หลายประเภท แต่ละเมธอดมีจุดประสงค์ต่างกัน แต่ละเมธอดระบุต่างกัน ส่วนต่อไปนี้จะอธิบายถึงประเภทของวิธีการเหล่านี้
เราจะเพิ่มบล็อกเมธอดให้กับเศร้า
และเพิ่มเมธอดใหม่แต่ละเมธอดภายในบล็อกนี้ (รูปที่ 4)
รูปที่ 4 ไฟล์นิยามคลาสเศร้า.m
ด้วยวิธีการแสดงในโปรแกรมแก้ไข MATLAB เพื่อความสะดวกในการดู คุณลักษณะการพับโค้ดจะใช้เพื่อซ่อนโค้ดส่วนใหญ่
การระบุวิธีการสร้าง
ในตัวอย่างของเรา เราจะระบุเมธอดคอนสตรัคเตอร์ที่ให้ผู้ใช้ระบุพารามิเตอร์ที่จะใช้ในการสร้างอ็อบเจกต์ เมธอดตัวสร้างมักจะดำเนินการเริ่มต้นและตรวจสอบข้อมูล ขณะนี้วัตถุถูกสร้างขึ้นด้วย
>> s = sads (ข้อมูล, ความยาวคลื่น, อัตราตัวอย่าง, ระยะห่าง, ชื่อ);
การใช้วิธีการเฉพาะของแอปพลิเคชัน
เราจะเพิ่มวิธีการหลายวิธีในการดำเนินการเฉพาะแอปพลิเคชันเพื่อดำเนินการกับชุดข้อมูล วิธีการส่วนใหญ่ใช้วัตถุเป็นอาร์กิวเมนต์อินพุต (ตัวอย่างเช่นออบ
) และเข้าถึงคุณสมบัติของวัตถุโดยอ้างอิงตัวแปรนี้ (ตัวอย่างเช่นobj.NumSamples
) เช่นเดียวกับวิธีนี้:
ฟังก์ชัน mag = magfft(obj, zpt)mag = ศูนย์(obj.NumSamples, zpt); ...จบ
แม้ว่าจะต้องใช้ไวยากรณ์เพิ่มเติม แต่การอ้างอิงคุณสมบัติผ่านตัวแปรออบเจกต์สามารถช่วยแยกความแตกต่างจากตัวแปรฟังก์ชันโลคัล เช่นแม็ก
ข้างบน.
วิธีการโทร
เมธอดถูกเรียกเหมือนกับฟังก์ชัน โดยที่ออบเจกต์ถูกส่งผ่านเป็นหนึ่งในอาร์กิวเมนต์ เราสามารถประมาณมุม DOA ของแหล่งที่มาได้โดยการเรียกโดอา
วิธีการของชั้นเรียนของเรา
>> มุม = doa(s) มุม = -10.1642 18.9953
มุม DOA จะประมาณตำแหน่งที่แท้จริงของแหล่งที่มาที่แสดงในรูปที่ 1 ซึ่งอยู่ที่ -10° และ 20°
การเข้าถึงคุณสมบัติด้วยวิธีรับและตั้งค่า
คุณสามารถตรวจสอบคุณสมบัติหรือใช้คุณสมบัติที่ขึ้นต่อกันได้โดยการระบุเมธอด set และ get ที่เกี่ยวข้อง นี่คือวิธีการรับสำหรับNumSensors
คุณสมบัติ.
การทำงานNumSensors = get.NumSensors(obj)NumSensors = ขนาด(obj.Data, 2);จบ
เมธอด Get และ set จะถูกเรียกใช้โดยอัตโนมัติเมื่อมีการเข้าถึงคุณสมบัติ เช่น ด้วย
>> N = s.NumSensors;
การระบุเมธอดสำหรับฟังก์ชัน MATLAB ที่มีอยู่ด้วยการโอเวอร์โหลด
การโอเวอร์โหลดทำให้คุณสามารถกำหนดฟังก์ชัน MATLAB ที่มีอยู่ใหม่ให้ทำงานบนออบเจกต์ของคุณได้โดยระบุฟังก์ชันที่มีชื่อนั้นในรายการเมธอดของคุณ ในแอปพลิเคชันของเรา เราจะรวมโอเวอร์โหลดพล็อต
method จัดให้มีฟังก์ชันแสดงภาพชุดข้อมูลที่ผู้ใช้ MATLAB หลายคนคุ้นเคย (รูปที่ 5)
>> โครงเรื่อง
รูปที่ 5 วิธีการพล็อตโอเวอร์โหลดเฉพาะสำหรับชุดข้อมูลอาร์เรย์เซนเซอร์
วิธีการลงจุดแบบกำหนดเองนี้แสดงข้อมูลด้วยวิธีที่เหมาะสมที่สุดสำหรับชุดข้อมูลนี้ โดยใส่คำอธิบายประกอบด้วยข้อมูลที่มีอยู่ทั้งหมด มันถูกดำเนินการบนวัตถุที่ได้รับการกำหนดไว้เท่านั้น ซึ่งเป็นวิธีการที่มีประสิทธิภาพมากกว่าการจัดการกับลำดับของไดเร็กทอรีในเส้นทาง
หากคุณต้องการพฤติกรรมเฉพาะสำหรับชั้นเรียนของคุณ คุณยังสามารถโอเวอร์โหลดตัวดำเนินการพื้นฐานและแม้กระทั่งการจัดทำดัชนีโดยใช้เมธอดที่มีชื่อพิเศษ
การพัฒนาแอปพลิเคชันต่อไป
คลาสที่เราสร้างขึ้นในตัวอย่างนี้แสดงถึงชุดข้อมูลอาร์เรย์เซนเซอร์ของเรา และช่วยให้เราดำเนินการวิเคราะห์เฉพาะทางที่ซับซ้อนบนข้อมูลของเราได้อย่างง่ายดาย รวมถึงการดำเนินการค้นหาทิศทางหลัก เราสามารถใช้คลาสนี้เพื่อประเมินประสิทธิภาพของเทคนิคที่ใช้ FFT อย่างรวดเร็วในสถานการณ์ต่างๆ
เราสามารถขยายแอปพลิเคชันโดยใช้เทคนิค OO เพิ่มเติม ตัวอย่างเช่น เราสามารถทำสิ่งต่อไปนี้:
- กำหนดคลาสย่อยของคลาสที่มีอยู่ (ใช้คำจำกัดความของหมวดหมู่ที่กว้างขึ้นเพื่อกำหนดหมวดหมู่ย่อยที่เฉพาะเจาะจงมากขึ้น) ด้วยการสืบทอด
- ระบุเมธอดแบบสแตติก ให้เรากำหนดการดำเนินการสำหรับคลาสโดยรวม
- ใช้คลาสแฮนเดิลที่มีพฤติกรรมอ้างอิง ทำให้เราสามารถสร้างโครงสร้างข้อมูล เช่น รายการที่เชื่อมโยง หรือทำงานกับชุดข้อมูลขนาดใหญ่โดยไม่ต้องคัดลอก
- กำหนดเหตุการณ์และผู้ฟัง ให้เราตรวจสอบคุณสมบัติหรือการกระทำของวัตถุ
เทคนิคเหล่านี้ช่วยเพิ่มความสามารถของเราในการจัดการความซับซ้อนโดยช่วยให้เราสามารถกำหนดความสัมพันธ์และลักษณะการทำงานในแอปพลิเคชันเพิ่มเติมได้
เนื่องจากสร้างขึ้นโดยใช้เทคนิค OO แอปพลิเคชันจึงมีความแข็งแกร่งเพียงพอให้ผู้อื่นใช้และบำรุงรักษา และสามารถรวมเข้ากับแอปพลิเคชันอื่นทั่วทั้งองค์กรได้
เผยแพร่ 2020
ผลิตภัณฑ์ที่ใช้
- แมทแล็บ
- กล่องเครื่องมือสถิติและการเรียนรู้ของเครื่อง
เรียนรู้เพิ่มเติม
- ทรัพยากรการเขียนโปรแกรมเชิงวัตถุ
- เรียนรู้ MATLAB ฟรี
- เรียนรู้การเขียนโค้ดด้วย MATLAB
ดูบทความสำหรับความสามารถที่เกี่ยวข้อง
- คอมพิวเตอร์ทางเทคนิค
ดูบทความสำหรับอุตสาหกรรมที่เกี่ยวข้อง
- โครงสร้างพื้นฐานการสื่อสาร