Object Roles the Importance of Polymorphism
-
Upload
cc-nakhon-pathom-rajabhat-university -
Category
Education
-
view
30 -
download
1
Transcript of Object Roles the Importance of Polymorphism
Object Roles and the Importance ofPolymorphism
อาจารย์สมเกียรติ ช่อเหมือน สาขาวิชาวิศวกรรมซอฟต์แวร์ คณะวิทยาศาสตร์และเทคโนโลยี
บทบาทของobject และความส าคัญของ Polymorphism
• แนวคิดของ polymorphism ที่มีต่อการออกแบบซอฟต์แวรเ์ชิงวัตถุ
– ช่วยให้เราสามารถจัดการกับ Class ที่เกี่ยวข้องกันได้
– ใช้ polymorphism ในโปรแกรม Java
– ใช้ overridden methods เพื่อให้เกิดความแตกต่างกัน
– ก าหนดอินเตอรเ์ฟซที่จะขยาย polymorphism เกินล าดับชั้นในการสืบทอด
– ขอบเขตในการขยายให้มีรูปแบบที่หลากหลาย
Object Roles and the Importance ofPolymorphism
1) Class Types2) Substitutability3) Polymorphism4) Extensibility5) Interfaces6) Extensibility Again7) Distinguishing Subclass8) Summary
Class Types
• การจัดหมวดหมู่ตามล าดับชั้นของสิ่งที่สนใจ• การระบุชนิดของสิ่งที่แตกต่างกันในแต่ละระดับ
– ระดับที่สูงกว่า=พื้นฐาน– ระดับที่ต่ ากว่า=พิเศษ
• ในแต่ละล าดับชั้นมีความสัมพันธ์กันคือ “เป็น” เช่น– คน เป็นสัตว์เลี้ยงลูกดว้ยนม
• ในการจัดกลุ่มของคลาส เพื่อสร้าง “type” ใหม่ ของแต่ละระดับของClass– เป็นการรวมกนัระหว่าง ตัวแปร และ พารามิเตอร์ เพื่อระบุสิ่งที่สนใจ
• subclass เป็นส่วนย่อยของ superclass และสามารถใช้ทดแทนด้วย 'supertype' ต่อเนื่องไปจนถึงการใช้แทนวัตถุในล าดับล่างได้
Publication p = new Book(…);Publication p = new DiscMag(…);Magazine m = new DiscMag(…);DiscMag dm = new Magazine(…);Publication p = new Publication(…);
Substitutability
• การออกแบบClass ช่วยให้เราสามารถจดัวางวตัถุของแต่ละ Subclass
• ท าให้แน่ใจว่าสามารถสรา้งวัตถุที่ทดแทน Superclass
• overriding methods เป็นการปรับแต่งให้ตอบสนองความต้องการsubclass โดยแทนที่ด้วยฟังก์ชนัการท างานที่แตกต่างกับ superclass
• ประกันว่าสืบทอดคุณสมบัติของวัตถุไปยัง subclass ได้ครบถ้วน
• subclass ไม่สามารถลบการด าเนินการรับมรดกมาจาก superclass ได้
• แต่ subclass สามารถขยายขีดความสามารถของ superclass ได้
• “Extends” ช่วยในการสืบทอด
Polymorphism
• ภาวะหลายรูปแบบ• เราสามารถจัดการวัตถุที่สร้างจาก Subclass ได้เหมือนวัตถุที่สร้างจาก
Superclass• สามารถใช้งานการท างานของ superclass ได้จาก subclass แต่ละตัวได้โดย
ไม่ต้องกังวลรายละเอียดของการท างานของ superclass• เป็นความคิดในการใชช้ื่อที่จินตนาการขึ้นร่วมกัน เพื่อให้แต่ละส่วนน าไปใช้
ก าหนดในแบบของตนเองได้ • หากobject “p”เป็น สิ่งพิมพ์มันอาจจะเป็น หนังสือ หรือ นิตยสาร • สิ่งพิมพ์มีเมธอด sellCopy() สามารถเรียกได้จากหนังสือและนิตยสาร โดยไม่
ต้องกังวลว่า p คืออะไร• เป็นวิธีที่ง่ายในการจัดการกับวัตถุที่อยู่ในล าดับชั้นที่ได้รับการสืบทอด
Extensibility
• การใช้จ่ายจ านวนมหาศาลในแต่ละปี เพื่อสร้างโปรแกรมคอมพิวเตอร์ใหม่ • แต่ค่าใช้จ่ายส่วนมากใช้ในการปรับเปลี่ยนโปรแกรมเพื่อตอบสนองความต้องการขององค์กรที่
เปลี่ยนแปลง• วิศวกรซอฟต์แวร์มีหน้าที่อ านวยความสะดวกและช่วยให้โปรแกรมง่ายต่อการรักษาและปรับปรุง• หากต้องการปรับปรุงและพัฒนาเมธอดในการขายของ subclass
– sellBook (Book pBook)– sellMagazine (Magazine pMagazine)– sellDiscMag (DiscMag pDiscMag)
• ต้องใช้ Polymorphism เพื่อปรับปรุงที่ Superclass– sellItem (Publication pPub)
• ช่วยให้ขยายการท างานของ Subclass หรือใช้เมธอดในการขายของ Superclass• เพราะทุก subclass เป็นชนิดที่สืบทอดมาจาก superclass• ดังนั้นวัตถุที่สร้างจาก Subclass จึงสามารถส่งผ่านเป็นพารามิเตอร์ของ Superclass ได้
Interfaces
• การสืบทอดมี 2 รูปแบบ• subclass สืบทอดอินเตอรเ์ฟซของ superclass (public members) นี้จะ
ท าให้มหีลายรูปแบบที่เป็นไปได้• subclass สืบทอดการด าเนินงานของ superclass (เช่นคุณสมบัติและเมธอด)
แบบนี้ช่วยให้คัดลอกรายละเอียดจาก superclass• Java
– ใช้ค าว่า “Extends” เพื่อให้ใช้งานได้อัตโนมัติ (inheritance)– ใช้ค าว่า “Implementation” เพื่อก าหนดการท างานของเมธอด (Interfaces)
• subclass is a subtype.• ‘plug and socket’
Interfaces
Extensibility Again
• polymorphism ช่วยให้วัตถสุามารถจดัการได้ โดยไม่ค านึงถึงระดับชั้นของคลาส
• ช่วยให้สามารถขยายระบบ โดยมีการห่อหุ้มตามที่ออกแบบ• เราสามารถสร้างคลาสใหม่ส าหรับผลิตภัณฑ์ต่างๆ ได้โดยใช้ Interface
Saleable()• without a single change to its code!• การก าหนดรายละเอียดของเมธอดได้ โดยไม่ส่งผลกระทบต่อ Class
อื่น• การใช้ Interface เพื่อเชื่อมต่อกับส่วนอื่นๆ ได้ตามมาตรฐาน
เช่นเดียวกับเครื่องใช้ไฟฟ้า
Distinguishing Subclasses
• การตรวจสอบวัตถุที่สร้างขึ้นจาก Class– object instanceof class
• ผลจะเป็นจริง ถ้าวัตถุเป็นของคลาสที่ระบุ (หรือ subclass)
• นอกจากนี้ยังสามารถใช้กับอินเตอร์เฟซ
• การตรวจสอบว่าอินเตอร์เฟซนั้นเป็นของ Subclass ใดpublic void saleType (SaleableItem pSelb){if (pSelb instanceof Publication){ System.out.println("This is a Publication"); }else if (pSelb instanceof Ticket){ System.out.println("This is a Ticket"); }else{ System.out.println("This is a an unknown sale type"); }}
Summary
• polymorphism ช่วยให้เราสามารถอ้างถึงวัตถุตาม superclass• polymorphism ท าให้มันง่ายต่อการขยายโปรแกรม ด้วยการ
เพิ่มเติม Class โดยไม่ต้องเปลี่ยน Class อื่น ๆ• สามารถจัดการ object โดยเรียกเมธอดที่ก าหนดไว้ส าหรับ
superclass โดยไม่ต้องกังวลกับ subclass• Java ท าให้แน่ใจว่าเป็นวิธีการที่เหมาะสมส าหรับ object ที่
เกิดขึ้นจาก class ในขณะท างาน• การใช้งานอินเตอรเ์ฟซร่วมกันของclass ต่างๆ และก าหนดการ
ด าเนินงานทั้งหมดเองได้