User Tools

Site Tools


tutorial:oop

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
tutorial:oop [2018/12/25 15:33]
admin
tutorial:oop [2019/01/17 07:33] (current)
admin
Line 9: Line 9:
  
 =====OOP มีอะไรบ้าง===== =====OOP มีอะไรบ้าง=====
-โดยทั่วไป หลักการ OOP ในหลายๆภาษาจะคล้ายคลึงกัน แตกต่างกันเพียงแค่ Syntax เท่านั้น โดยหลักการดังกล่าว มกจอบได้วย่ว่าๆดัง่อไป+โดยทั่วไป หลักการ OOP ในหลายๆภาษาจะคล้ายคลึงกัน โดยหลักการดังกล่าวได้ถูกหล่อหลอมรวมกันนกลายมาเ็น Class และ Object นั่นเง อธิายได้แบบั้ๆง่าๆดังนี้ (เนื่องจาก Class และ Object คล้ายกัน เนื่องจากเกิดมาจากหลักการ OOP เหมือนกัน ดังนันจะขอนำแค่ Class มายกตัวอย่าง)
  
-====2. Encapsulation==== +====1. Encapsulation==== 
-====3. Inheritance==== +คือ การจำกัการเ้าึง ​Field, Method และ ​Property ​่างๆ ของ ​Class นัๆ พืไม่ให้เกิดการเรียกใช้งานากภาอย่างไม่เหมาะสม การจกัดการข้าึงในที่นี้คือการใส่ Access Specifier ​เหล่านี้ ​ือ ​Private, Protected, Public ​และ ​Published สำหรับยละเอยดสามารถอ่านจากวข้อถดไป  
-====4. Polymorphism==== +====2. Inheritance==== 
-====5. Overriding==== +ือ การ่าอด สืบต่อ เ่น Class B สืบต่อความสามมาจาก Class ะทำให้ ​ Class B สามารทำทุกอย่างที่ ​Class ทำได้ ​ 
-====6. Overloading==== +====3. Polymorphism==== 
- +อ การเปลี่ยนรูปร่ง เช่น ​าก Class สืบต่อความสารถมาจาก ​Class A จทำให้ ​Class B ถูกองว่าเป็น ​Class B หรือ ​Class A ็ไในขณะเียน 
-=====1. Classes and Instances===== +====4. Overriding==== 
-กเจำเป็นต้องสร้างโค๊ดเกี่ยวกับอะไรสัอย่งหนึ่ง ยกตัวอย่าง เช่น ​ถยนต์ โดยที่รถยนต์ที่ราจะสร้างข้นมานั้น มีหลายคัน คจะำบากไม่ใช่น้อยที่จะตองมาเขียโค๊ดสำหรบรถยต์หลานั้นปทีละตัวจนหด ปัญาเหล่านีจะหมดไป หากรารู้จักการเขียน Class และ Object(Instance) \\ \\ +คือ ​การปรปลยน ​่น หาก ​Class B สืบต่อความสามารถมาจาก ​Class A แลว สำหรับ ​Class B เราสามารถปรับเปลี่ยนความสามารถที่ได้มาจาก Class พื่อห้ทำงานได้เหมะสมขึ
- +
-**Classes** คือ ต้นแบบ เปรียบเสมือนการออกแบบรถยต์ว่ควรประอบไปด้วคุณสมบัติะไรบ้าง เช่น โครงสร้าง เครื่นต์ ช่วงล่าง ​ระบบสงกำลัง ตัวถัง ​ป็นต้น ทั้งหมดที่กล่านี้ เราเรียว่า Property แค่นั้นยังไม่พอ รถยนต์ควรจะมีความสามารถอะไรบ้าง นั่นคือ ขับได้ วิ่งไปมาด้วยความรวดเร็วได้ เบรคได้ เราเรียสิ่งนี้ว่า Method  +
- +
-**Objects (Instances)** คือ ผลิตภณท์ที่เกิจาต้นแบบ (Class) เช่น เรผลิตถยนต์นมใช้งานจริง 5 คัน ซงใน ​5 คันนี้ อาจมี Property ​ที่ต่างกัไป ​ แต่ทุกันมี Method ที่เหมือัน เรียกรถยนต์เหล่านี้ว่า Object หรือ ​Instance เป็นต้น แต่เนื่องจากคำว่า Object มีใช้ในภาษา Pascal เช่นกัน ​และเป็นคเฉพาะซึ่งมายถึงกาสร้างวตถุที่เป็นต้นแบขึ้นมาเหมืนกัน (คล้าย Class) ​ังนั้นต่อไปนี้จะขอใช้คำว่า Instance แทน +
- +
-**__หมายเหตุ__** - **Object** ​ำหรับภษา Pascal หายถึงการสร้างวัตุที่มีทั้งคุณสมบัติ (Property) และกระบวนการ (method) เหมืนกันกับ Class เพียงแต่ Class นั้นเพิ่งเกิดมภายหลัง โย Object ​ะคล้กับ Record ที่มี Property กบ Method นั่นเอง หรือ ​ที่เรียว่า Advance Record \\ +
-ในโปแกรม Turbo Pascal สมัยกอน Object ถูกใช้ทำหน้าที่เหมอนกันกับ Class แต่ต่อมาภายหลัง ​มือมีการเปิดตัว Delphi จึงได้มีการคิดค้น Class ขึ้นมาเพ่อใช้งานแทน Object แต่อย่างไรก็ตาม Object ก็ยังเป็นที่นิยมใช้กันมาปกติจนถึงปัจจุัน +
-สิ่งที่แตกต่างกัน ระหว่าง Class กับ Object คื +
-  *Object ใช้หน่วยความจำแบบ Stack ่วน Class ใช้หน่วยความจำแบบ Heave นั่นทำให้ทุกคั้งที่ีกรสร้าง Instance ​จาก Class ขึ้นมาใช้งาน ​จำเป็นต้องมีการกำจัด Instance เมื่อใช้งานเสร็จเสมอ เพื่อไม่ให้เกิดปัญหา Memory Leak +
-  *Object ใช้การอ้างอิงตัวแปรแบบ Value ส่วน ​Class ใช้การอ้างอิงตัวแปรแบบ Reference เพื่อให้เห็นภาพ ขอยกตัวอย่าง หากให้ A,เป็น Object เมื่อใช้คำั่ง B:=A ; จะหมยถึง มี B เกิดขึ้นาอีกหนึ่งตัวซึ่งเกิดจากการคัดลอก A ผลก็คือหากเราทำอะไรับ B ก็จะไม่ส่งผลกับ A เพราะเป็นคนละตัวกัน แต่หากเราให้ A,B เป็น Instance ขง Class เมื่อใช้คำสั่ง B:=A ; จะกลาเป็นวา B อ้างอิงไปที่ A ไม่ได้เกิดการัดลกใดๆ ทีนี้หากเราทำการเปลี่ยนลง B จะหมายถึงกาเปลียนแปลง A ด้วยเช่นกัน +
- +
-รสร้าง Class เริ่มต้น ทำได้ดังนี้ +
- +
-  Type +
-     ​TMyClass = class +
-       ​Item:​integer;​ +
-       ​Procedure DoSomething; ​     +
-     ​end;​ +
- +
-ารสร้าง ​Class ต่อจาก Class อื่น หรือเรียกว่าการสืบทอด (Inheritance) ทำได้ดังนี้ +
- +
-  Type +
-     ​TMyClass = class(TBaseClass) +
-       ​Item:​integer;​ +
-       ​Procedure DoSomething; ​     +
-     ​end;​ +
- +
-องค์ประกอบของ Class แบบละเอียด มีดังนี้ +
- +
-<sxh delphi;>​ +
-Type +
-  TMyItem = class(TPersistent);​ +
-   ​private +
-     ​FName:​string;​ +
-     ​FValue:​integer;​  +
-     ​function GetIsOK:​boolean; ​  +
-   ​protected +
-     ​procedure DoSomeThing1;​  +
-     ​procedure DoSomeThing2;​ virtual; +
-   ​public +
-     ​constructor Create; override; +
-     ​destructor Destroy; override; +
-     ​procedure Assign(Source:​ TPersistent);​ override; +
-     ​property IsOK:​boolean read GetIsOK;  +
-     ​property ValueX:​integer read GetValueX write SetValueX;​ +
-   ​published +
-     ​property Name:string read FName write FName; +
-     ​property Value:​integer read FValue write FValue default 0; +
-</​sxh>​ +
- +
-**Ancestor Class** หรือ **Super Class** คือ class ้นแบบ จากตัวอยาง คือ TPersistent  +
-\\ \\ +
-**Field Parameters** ​ือ ส่นที่ถูกประกศเป็นตัวแปรคล้ยกับการประกศ var จากตัวอย่างข้างบน คือ FName และ FValue ตัวแปรเล่านีมักถูกประกาศเพื่ใช้เก็บค่าสำหรับ Property  +
-\\ \\ +
-**Constructor and Destructor** คือ Procedure ชนิดหนึ่ง แต่มีคามสำคัญตอ class มก จึงต้องเขียนให้มีชื่อเฉพาะเป็นของตนเอง Constructor จะที่ถูกเียกเพใช้สร้าง Instance โดยทำารจัสรรหน่วยความจำห้เหมาะสม ส่วน Destructor จถูกียกเพื่อทำลาย Instance แล้วคืหน่วยความจำ\\ \\ +
-====Properties====  +
-คือคุณสมบัติของ Instance ​ประกอด้วย Getter (คำสั่งหัง read) และ Setter (คำสังหลัง write)\\ \\ +
-พือเป็การอธิบายใ้เห็นภพ จะขอยกตัวอยาง +
- +
-  property ValueX:​integer read GetValueX write SetValueX;​ +
- +
-จากตัวย่างดังกล่าว Getter ​ือ GetValueX ส่น Setter คือ SetValueX \\ +
-Getter จะถูกเรียกใช้งน เื่อีการเรียกต่าจาก ​Property ดังเช่น +
- +
-  writeln(ValueX);​ +
-   +
-Setter จะถูกเรียกใชงาน เมื่อมีการ Assign ค่าใ่ Property เช่น +
- +
-  ValueX:​=12;​ +
-   +
-ไมต้องมี Getter Setter ใ้ยุ่งยาก แทนที่จะใช้ var อย่างเดียว?​ ประโยชน์ของมันมีดังนี้ครับ +
-  *ใช้คัดกรองตัวแปร บางครั้งเรารับค่าเพื่อการคำนวณในช่วง 0-100 เท่านั้น หากผู้ใช้ใส่ค่าเกินกว่าค่าดังกล่าวมา จะสามารถคัดกรองให้เ็นค่าที่อยู่ในช่วง 0-100 แทนได้ +
-  *เพื่อให้ค่าของ Property ได้มีการ update ตลอดเวลา โดยเฉพาะหาก property ของเรา ขึ้นอยู่กับค่าอื่น เมื่อใดที่มีการเปลี่ยนค่า ก็จะมีการ update ค่า property เราด้วยเสมอ\\ \\ +
-  * +
-====Access Modifiers====  +
-คือ private, protected, public และ published โดยแต่ละตัวกำหนดความสามรถในการเข้าึง Field, Procedure, Function หรือ Property ​ที่อยู่ภายใต้ สรุปได้งนี้ +
- +
-^  Access Modifier ​ ^  Descriptions ​ ^  +
-|private| ​องเห็นได้เฉพะที่อยู่ใน Unit เดียวันกับ ​Class นี้านั้น | +
-|protect| มงเ็นไดเฉพาะ Derived-Class เนั้น | +
-|public| มองเห็นได้จากทุกที่ที่ uses Unit นี้ | +
-|published| ​เหมือนกันกับ Public แต่จะสาง Run Time Type Information (RTTI) ด้วย |+
  
  
tutorial/oop.1545726822.txt.gz · Last modified: 2018/12/25 15:33 by admin