18 มิถุนายน 2552

Introduction to Component


ตาม Dictionary : Component หมายถึง หน่วยหนึ่
หรือส่วนหนึ่งของแบบจำลอง

โดย Hardware components ได้แก่ พวก การ์ดจอ
การ์ดแลน


ซึ่ง Software components พยายามพัฒนาให้เหมือนกับ hardware คือการเอา component มาประกอบกัน แล้วทำงานได้





ตัวอย่าง : การสร้างบ้าน

ไม่มีการใช้ components





นำเอา components มาใช้ โดยหน้าต่างเป็นส่วนประกอบที่นำมาประกอบกับตัวบ้านอีกที



คุณสมบัติของ Component ที่ต้องมี

1) เป็นส่วนหนึ่งของ software
2) ต้องใช้งานได้อย่างอิสระ หมายถึงว่าตัวมันเองก็สามารถทำงานได้ โดยไม่ผูกติดกับใคร แต่ก็ต้องทำงานร่วมกับคนอื่นด้วย
3) component ต้องสามารถนำไปประกอบร่วมกับ
คนอื่นได้
4) มีความสมบูรณ์ในตัวเอง ทำงานได้ด้วยตัวเอง
เมื่อ

พร้อมที่จะทำงาน เช่น มีข้อมูลครบแล้ว
5) มี interface ที่ชัดเจน สามารถนำกลับไปใช้ใหม่ได้
โดย ติดต่อผ่าน environment (ที่ที่ให้มันประกอบได้) ซึ่งมี service ต่างๆ ให้ใช้
และการสร้างโปรแกรม ไม่สนใจว่าข้างในเป็นอย่างไร สนใจแต่การติดต่อผ่าน interface เช่น .class, .dll ที่สามารถประกอบกันได้


About Component


Component ไม่ใช่ object แต่เวลาเรา run program จะเท่ากับเราสร้าง object ของ component ซึ่งต้องทำงานภายใต้อันใดอันหนึ่ง เช่น java, .net เป็นต้น

Component ไม่ใ่ช่ Service ซึ่ง Service จะปราศจากเ
รื่องของ platform แต่ Component ขึ้นกับ platform แต่เราสร้าง Service จาก Component

หลังจากพัฒนาไปเป็น binary แล้ว ผู้ใช้สามารถใช้งาน component นั้นได้ โดยผ่าน properties, methods และevents ซึ่งอาจจะไม่ต้องค
รบ

ทั้งสามส่วนก็ได้

Component จะประกอบด้วย Object ย่อยหลายๆตัวที่ทำงานให้มัน ซึ่งหมายความว่า สร้างขึ้นมาจาก Object หลายๆตัว

Component ไม่ขึ้นกับภาษา หรือเรียกว่า languag
e neutral แต่ Object ไม่ได้นิยามเรื่องการคุยข้ามภาษา


การใช้ Object จะต้องมี document ที่บอกว่ามี Object อะไรที่ใช้ได้บ้าง แต่ Component เป็น self-description ที่ tools สามารถบอกเราได้

CBSE ( Component-Based Software Engineering )

CBSE = COA (Analysis) + COD (Design) + COP (Programming) + COM (Management)


- สร้างเพื่อการ reuse
- สร้างเพื่อนำ component ที่มีอยู่มา reuse

ความแตกต่างของ CBD ( Component-Based
Development ) และ OOP ( Object-Oriented Programming )

Component มีวิธีการทุกๆอย่างเหมือน OOP แต่จะเพิ่มในเรื่องของ การจัดกลุ่ม (packaging) การติดตั้ง (deployment) และสิทธิการใช้งาน (licens

ing)

OOP จะบอกถึงการออกแบบ เขียน code และหลังจากที่ test ว่า run บนระบบได้แล้วก็จะจบ แต่ Component จะบอกถึงการติดตั้ง และสิทธิการใช้งาน


OOP จบที่เครื่องผู้พัฒนา แต่ CBD จบที่เครื่อง end-user

สิ่งที่เหมือนและแตกต่างของ SP (Structur
ed Programming) OOP และ COP





Divide and conquer : แบ่งปัญหาใหญ่ ออกเป็นปัญหาย่อยให้หมด จะทำให้แก้ปัญหาใหญ่ได้ โดย SP สน function และ OOP สน class


Unification of data and function : จับเอา data กับ function มารวมกันเป็นก้อนเดียว
Encapsulation : ไม่ให้ client เข้าถึง data ได้โดยตรง วิธีของ OOP คือ ใช้ getter, setter
Identity : สามารถอ้างถึง entity ได้โดยไม่ซ้ำ (Primary Key) คือ แต่ละ software มี id ของตัวเอง
Interface : แยก interface กับ implement ออกอย่างชัดเจน
Deployment : การกำหนด deployment โดย COP ติดตั้งอย่างอิสระ


Component Goals

1. Conquering Complexity : จัดการเรื่องความซับซ้อน เช่น ขนาด source code ถ้าพัฒนาโปรแกรมแบบเดิมจะจัดการเรื่องพวกนี้ไม่ไ่ด้
2. Managing change : การเปลี่ยนแปลงเป็นเรื่องปกติของ software engineering โดย software เปลี่ยนแปลงตลอดตาม user และต้องพยายามให้แต่ละ component ไม่ขึ้นต่อกัน
3. Reuse : Component ยิ่ง reuse ได้หลายๆครั้ง ก็ยิ่งคุ้มค่า

Component Forms (Based-on Enginee

ring Process)

1. Component specification : ข้อกำหนดของ Component ว่า Component นี้จะทำอะไร มี object อะไรบ้าง เช่น ก่อนการพัฒนา MS Word ทีมพัฒนาก็ต้องกำหนดว่า MS Word จะสามารถทำอะไรได้บ้าง
2. Component Interface : เป็นการระบุพฤติกรรมของ Component Object ซึ่งนำไป implement ได้ตาม interface
3. Component Implementation : สามารถ ins

tall และไม่ขึ้นกับการถูกแทนที่ด้วย Component อื่น ซึ่งสิ่งที่ได้จาก implementation คือ ไฟล์ หรือสิ่งที่จำเป็นทั้งหมดของ Program
4. Installed Component : การ install component ลงในเครื่อง เช่น เวลา install MS Word อาจจะมีไฟล์ .dll มากมายที่ต้องการ โดย 1 component = 1 file
5. Component Object : สร้างเมื่อมีการ installed Component หรือก็คือ เมื่อมีการ run program ก็เท่ากับว่ามีการสร้าง Component Object นั่นเอง



Principles

- Component แสดงส่วนประกอบ และนามธรรม
- reuse ได้ง่าย จะทำให้ประสบความสำเร็จในหลายๆระดับ
- CBSD ช่วยเพิ่มความอิสระ

- CBSD สามารถเพิ่มผลิตภัณฑ์ software ได้ดีขึ้น
- CBSD ทำให้เกิดมาตรฐาน


Philosophy

- โครงสร้างพื้นฐาน มองว่าเป็น component technology ก็ได้
- component technology ที่ต่างกัน จะมีโครงสร้างที่ต่างกัน และมีการกำหนด component ที่ต่างกัน เช่น ของ java หรือของ C++ ก็ต้องแปลงไป .net ก่อน ถึงจะใช้ร่วมกันได้

Component infrastructure



framework ที่ทำการสร้าง มาประกอบกัน แล้วส่งออกไปติดตั้ง

Component จะไม่มีอยู่ถ้าปราศจากโครงสร้างพื้นฐาน

Component infrastructure ประกอบด้วย


1) Component model เช่น จะเขียนยังไง ให้แสดงข้อมูลของตัวเองออกมา
2) Connection model คือ การนำ component มาต่อกัน
3) Deployment model เป็นตัวบอกว่าจะส่ง component นี้ไปติดตั้งอย่างไร

Component ประกอบด้วย 4 ส่วน คือ


1) Properties(P) เป็น set ของตัวแปร ซึ่งประกอบด้วย ชื่อตัวแปรและชนิดตัวแปร
2) Method(M) ประกอบด้วย modifier (public, private, protected) , static/non-static , return type , ชื่อ method และ พารามิเตอร์
3) Event(E) เป็นเหตุการณ์
4) Interface(I) คือ subset ของผลคูณของ powerset ของ P,M,E

ซึ่ง P,M,E เป็นตัวบอกว่า Component ทำอะไร
และ Interface เป็นตัวบอกว่า จะใช้ Componentได้อย่างไร





14 มิถุนายน 2552

A Brief Review of Object-Oriented Design


    • หลัีกการของ Object-Oriented คือ การนำวัตถุที่มีอยู่ในโลก มามองว่าวัตถุนั้นประกอบด้วยอะไรบ้าง มีคุณลักษณะยังไง
และมีความสามารถอะไรบ้างซึ่ง Class เป็นต้นแบบของ Object ที่ประกอบไปด้วย attribute และ method โดย

    • attribute คือ ส่วนประกอบของวัตถุ เช่น รถ มี attribute คือ สีรถ ยี่ห้อ รุ่น เป็นต้น
จำแนกประเภทของ attribute ออกได้ 3 ประเภท
ได้แก่

1) Naming : ใช้แยกความแตกต่างของแต่ละ object ออกจากกัน ซึ่งเทียบได้กับ PK ใน Database เช่น เลขทะเบียนรถ
2) Descriptive : มีการเปลี่ยนแปลงค่าได้ตลอดเวลา เช่ เลขไมล์
3) Referential : มีการอ้างอิง object ของอีก
class นึง เช่น object ชื่อ owner
    • method คือ วิธีการเพื่อใช้ในการจัดการกับคุณลักษณะของ object เช่น วิธีการวิ่งของรถ เป็นต้น

ตัวอย่างการแยก Class กับ Object

ถ้ามองว่ารถ Honda เป็น Class ดังนั้นรถ Honda แต่ละคันจะเป็น Object โดยใช้รุ่นเป็นตัวระบุความแตกต่าง

แต่ถ้ามองว่ารถ เป็น Class ดังนั้นรถแต่ละยี่ห้อจะเป็น Object เช่น Honda

ทั้งนี้การจะมองว่าอะไรเป็น Class อะไรเป็น Object ขึ้นอยู่กับ Domain


Key Concept

Polymorphism - เป็นการสืบทอดคุณสมบัติจากแม่สู่ลูก ซึ่งลูกสามารถนำ method ของแม่มาดัดแปลงให้เป็นแบบของตัวเอง ซึ่งเรียกว่า method override หรืออาจจะสร้าง method ใหม่ทับของเดิมไปเลย ซึ่งเรียกว่า method hiding

Abstract Class - เป็นวิธีการที่จะเรียกใช้ object ไ
ด้ โดยไม่ต้องไปรู้ว่ามันสร้างมายังไง ซึ่งเราไม่สามารถสร้างการทำงานให้กับมันได้ ต้องให้ Class ลูก มาทำการ implement ต่อจาก Class แม่
ถ้า Class แม่ มี abstract method >> Class ลูต้องทำการ override method ทุก method ให้ครบ ไม่เช่นนั้น Class ลูกก็ต้องเป็น abstract class ด้วยเช่นกัน จนกว่าจะมี Class ที่ทำการ override ครบทุกตัว ถึงจะทำการเรียกใช้ Class นั้นได้

Interfaces - มีวิธีการใช้งานเหมือน Abstract Class แต่มีข้อจำกัดมากกว่้าตรงที่
ทุก ๆ method ต้องเป็น abstract method

data ทุกตัวต้องเป็น static final และสมาชิกทุกตัต้องเป็น public เท่านั้น
ถ้าเราไม่ทำการระบุ ตัว compiler จะระบุให้เราเองอัตโนมัติ

The Unified Modeling Language




Representing a Class in UML - Class Diagram จะประกอบด้วย Class name, Attribute: type, Operations, Comments(ไม่ต้องมีก็ได้)
คำแนะนำ : ไม่จำเป็นต้องใส่ getter, setter เข้าไ
ปใน Class Diagram




Representing Inheritance in UML - จะแสดงการสืบทอดด้วยลูกศรสามเหลี่ยม ถ้าหัวลูกศรชี้ที่ Class ไหน แสดงว่า Class นั้นเป็น Class แม่ และ Class ที่ชี้ไป เป็น Class ลูก




Representing Aggregation in UML - จะแสดงความสัมพันธ์ด้วยสี่เหลี่ยมข้าวหลามตัดและลูกศร โดย Class ที่ถูกสี่เหลี่ยมข้าวหลามตัดชี้ จะเป็น Class ที่มี Class ที่ถูกลูกศรชี้ เป็นส่วนประกอบ

ซึ่งเหมือนกับ Composition เพียงแต่ว่า สี่เหลี่ยมข้าว

หลามตัดของ Composition เป็นสีดำ และ Class ที่ถูกลูกศรชี้จะไม่เกิดขึ้นเลย ถ้า Class ที่ถูกสี่เหลี่ยมข้าวหลามตัด เกิดตายไป หรือจบการทำงาน
แต่ทั้งสองอย่างนี้ เวลานำไปเขียนโปรแกรม จะได้ Code ที่เหมือนกัน



Representing Dependency - จะไม่มีส่วนประกอบ แต่จะเป็นความสัมพันธ์แบบขึ้นต่อกัน ซึ่งถ้าลูกศรชี้ไปที่ Class ไหน Class นั้นจะถูกอ้างในอีก Class
โดยเราสามารถเขียนการอ้างอิงได้สามวิธี คือ


1) ประกาศให้ Classที่ถูกอ้างอิง เป็น parameter ของ method ใน Classที่อ้างอิง เช่น void myFunction1(MyReferencedClass r){...} โดmyF

unction1 เป็น method ใน Classที่อ้างอิง และMyReferencedClass r เป็น parameter
2) เป็น return type ของ Class ที่อ้างอิง เช่น M

yReferencedClass myFunction2(...){...}
ซึ่งมีการ return object ของ Classที่ถูกอ้างอิงออกมา
3) ประกาศเป็น local variable ของClassที่อ้างอิง เช่น void myFunction3(...){ MyReferencedClass m ... }

ซึ่งประกาศ object ของClassที่ถูกอ้างอิง อยู่ภายใต้ methodของ Classที่อ้างอิง



Use Cases - เป็นการจำลอง function การทำงานของระบบ


Sequence Diagrams - แสดงลำดับการทำงานของ program



State Diagrams - แสดงสถานะการทำงาน เมื่อระบบมีการเปลี่ยนแปลงสถานะ



    • Component หลีกเลี่ยงการใช้ Inheritance และ Polymorphism เพราะปัญหาประการหนึ่งของการใช้ inheritance
และ polymorphism คือ Fragile base class problem (FBC) เนื่องจากว่าถ้าเราใช้ Inheritance แล้วมีการแก้ไข superclass ใน


ภายหลังจะทำให้กระทบถึง subclass ทันที

แบ่งได้ออกเป็น 2 แบบ คือ

1) syntactic คือ การเปลี่ยนแปลงโครงสร้างไวยากรณ์ เช่น การเพิ่ม method, attribute หรือสลับ method ขึ้นลงระหว่าง Class แม่ กับ Class ลูก เป็นต้น
วิธีแก้ของปัญหานี้คือไม่ต้องไปทำอะไร เพราะ Java มีกลไกในการจัดการให้เรา
2) semantic คือ การเปลี่ยนแปลงความหมาย โดยมีการแก้ implement ใน superclass เช่น นำเอาการเรียกใช้ method นึงออกไป แล้ว subclass ได้มีการ override method นั้น ดังนั้นเวลา run ออกมา methodของ subclass จะไม่ถูกเรียกใช้งาน เพราะ superclass ไม่มีการเรียกใช้ method นั้นแล้ว
วิธีแก้ของปัญหานี้คือการใช้ source code ดูอ้างอิง