java oop
Post on 06-Jan-2016
25 Views
Preview:
DESCRIPTION
TRANSCRIPT
Java OOP
Boonrit kidngunboonrit@feu.ac.th
การเขี�ยนโปรแกรมเชิ�งวั�ตถุ� Object คื�อ สิ่��งที่�มีคื�ณสิ่มีบั�ติ�และพฤติ�กรรมีติามีที่�ก�าหนดไว้�ใน
คืลาสิ่ ออบัเจ็#กติ$(object) แบั%งได�เป็'นสิ่องป็ระเภที่ คื�อ
สิ่��งที่�เป็'นร)ป็ธรรมี (tangible) คื�อสิ่��งที่�เป็'นว้�ติถุ�และจ็�บัติ�อง ได�อาที่�เช่%น น�กศึ.กษา ป็ากกา และรถุ เป็'นติ�น
สิ่��งที่�เป็'นนามีธรรมี (intangible) คื�อสิ่��งที่�ไมี%สิ่ามีารถุจ็�บั ติ�องได�อาที่�เช่%น คืะแนนรายช่��อว้�ช่า การ ลงที่ะเบัยน การ
ฝาก-ถุอนเง�น และติารางเที่�ยว้บั�น เป็'นติ�น Object ป็ระกอบัไป็ด�ว้ย
คื�ณล�กษณะ (attribute) หร�อข้�อมี)ล (data) เมีธอด (method) หร�อพฤติ�กรรมี (behavior)
การเขี�ยนโปรแกรมเชิ�งวั�ตถุ� ที่�กสิ่��งในโป็รแกรมี ที่�เข้ยนถุ�อว้%าเป็'น
ว้�ติถุ�(Object) Object แติ%ละติ�ว้มีอ�สิ่ระติ%อก�น การ
เป็ล�ยนแป็ลงภายในObject หน.�ง จ็ะไมี%กระที่บัก�บั Object อ��น
การติ�ดติ%อสิ่��อสิ่ารระหว้%าง Object จ็ะเป็'นการสิ่%งข้�อมี)ล Message ระหว้%าง Object
Class
โคืรงสิ่ร�างข้อง object โดย class เป็'นติ�ว้ก�าหนดว้%า object น�5นจ็ะมี data หร�อคื�ณล�กษณะอะไรบั�าง และมี method อะไรบั�
เป็รยบัเสิ่มี�อนพ�มีพ$เข้ยว้ (template) ข้องออป็เจ็#คื ออป็เจ็#คืที่�ถุ)กสิ่ร�างมีาจ็ากคืลาสิ่ (class) บัางคืร�5ง
เรยกว้%าเป็'น instance ข้องคืลาสิ่ คืลาสิ่หน.�งคืลาสิ่สิ่ามีารถุสิ่ร�างออป็เจ็#คืได�หลายออป็
เจ็#คื
Object
is an instance of a Class ไมี%สิ่ามีารถุสิ่ร�างได� ถุ�าไมี%มี class
Bicycle bike1 = new Bicycle();
Object
Encapsulation
หมีายถุ.งการจ็ะเรยกใช่�คื�ณล�กษณะข้องออป็เจ็#คื จ็ะที่�าได�โดยการเรยกผ่%านเมีธอดเที่%าน�5น
หล�กการข้องการห%อห��มี คื�อการก�าหนดให�คื�ณล�กษณะข้องออป็เจ็#คืมีคื�ณสิ่มีบั�ติ�เป็'น private และก�าหนดให�เมีธอดมีคื�ณสิ่มีบั�ติ�เป็'น public
โดยมีเมีธอด get / set ไว้�เพ��อเข้�าถุ.ง data น�5นๆ จ็ะเรยกว้%า class น�5นๆเป็'น Full Encapsulation
class
Encapsulation
จ็ะใช่� Access Modifiers ในการเข้�าถุ.งข้�อมี)ล และ method Public class อ��นภายนอก สิ่ามีารถุที่�จ็ะเข้�าถุ.ง
ใด� Private class อ��นภายนอก ไมี%สิ่ามีารถุเข้�าถุ.งใด� Protected class ที่�ถุ)กสิ่�บัที่อดมีาเที่%าน�5นที่�
สิ่ามีารถุใช่�ได� ถุ�าไมี%ก�าหนด จ็ะถุ�อว้%า เป็'น Private
Encapsulation
InheritanceInheritance
การถุ%ายที่อดคื�ณสิ่มีบั�ติ�ไป็ย�งClass ล)ก Class ที่�เป็'นติ�นแบับัเรยกว้%า Superclass Class ที่�ได�ร�บัการสิ่�บัที่อดคื�ณสิ่มีบั�ติ�เรยกว้%า
Subclasses Class หน.�งจ็ะมี Superclass ได� Class เดยว้
ซึ่.�งป็ระโยช่น$ข้อง Inheritance คื�อ ที่�าให�มีโคืรงสิ่ร�างที่�เป็'นระบับั ระเบัยบั ป็ร�บัเป็ล�ยนได�ง%าย ลดเว้ลาในการพ�ฒนาระบับั ลดคื%าใช่�จ็%ายในการพ�ฒนา
InheritanceInheritance Java ใช่� extends ช่��อclass ในการสิ่�บัที่อด class x extends y {
}
Class x
Class y
InheritanceInheritance
InheritanceInheritance
final
ถุ�าระบั�อย)%หน�า class จ็ะที่�าให� class อ��นๆไมี%สิ่ามีารถุที่�จ็ะสิ่�บัที่อดคื�ณสิ่มีบั�ติ�ข้อง class ที่�ระบั� final ได�
ถุ�าระบั�อย)%หน�า method จ็ะที่�าให� class ที่�สิ่�บัที่อดไป็ไมี%สิ่ามีารถุที่�จ็ะ Override method น5ได�
Error
Polymorphism
หมีายถุ.ง การบัอกแบับัเดยว้ แติ%ได�ร�บัการสิ่นองได�หลายแบับั
Overloading Method มีช่��อซึ่�5าก�นใด�แติ%มี argument แติก
ติ%างก�น Overriding
น�า Method ข้อง Superclass มีาจ็�ดการได�เอง
Overloading MethodsOverloading Methods ในบัางกรณอาจ็มีเมีธอดใดๆ ที่�สิ่ามีารถุร�บัคื%าที่�เป็'นติ�ว้แป็รได�
หลากหลายช่น�ดได� ถุ�าก�าหนดไว้�เป็'นเมีธอดเดยว้ อาจ็ที่�าให�ผ่ลล�พธ$ที่�ได�เก�ดคืว้ามีผ่�ดพลาดได�
ด�งน�5นถุ�าช่น�ดติ�ว้แป็รเป็'นคืนละช่น�ดก�น ให�สิ่ร�างเมีธอดข้.5นมีาใหมี% โดยใช่�ช่��อเมีธอดเดยว้ก�น แติ%สิ่ร�างให�เมีธอด มีช่น�ดข้องติ�ว้แป็รใน parameter list ติ%างก�น
โดยจ็ะสิ่ร�างเมีธอดใหมี%ข้.5นมีาเป็'นจ็�านว้นเที่%าก�บัช่น�ดข้องติ�ว้แป็รที่�เป็'นไป็ได�
เมี��อมีการใช่�เมีธอด ช่��อน5โป็รแกรมีจ็ะเรยกเมีธอดที่�มีช่น�ดข้องติ�ว้แป็รติรงก�บัที่�ติ�องการโดยอ�ติโนมี�ติ�
เรยกว้�ธการน5ว้%า “Overloading” และเรยกเมีธอดที่�ใช่�ว้�ธการน5ว้%า “Overloading Methods”
Overloading
Overloading
Overriding
เป็'นการจ็�ดการ implement
method ที่�เป็'นข้อง Suber Class
Overriding
Constructors เป็'น ฟั;งก$ช่�นพ�เศึษที่�จ็ะถุ)กเรยกให�ที่�างานติอนที่�
Object ถุ)กสิ่ร�างข้.5นมีา คืลาสิ่หน.�งๆอาจ็จ็ะมี Constructor หลายๆติ�ว้ได�
แติ%ติ�องมี Argument ติ%างก�นเรยกว้%าOverloading Constructors
สิ่%ว้นใหญ่%จ็ะน�ามีาใช่�ในการก�าหนดคื%าเร��มีติ�นให�ก�บั Object
ใน Java จ็ะใช่� ช่��อ public ช่��อคืลาสิ่()
Constructors
Constructors
Constructors
abstract class And Methods
ใช่�สิ่�าหร�บั ให� class อ��นๆ สิ่�บัที่อดไป็ใช่�งาน ที่�าให�ไมี%สิ่ามีารถุ ที่�จ็ะสิ่ร�าง object จ็าก class ได�
abstact class
abstact method
abstract class And Methods
testAbstractClass t=new testAbstractClass();
Error
abstract class And Methods
จำ�าเป�นต�อง Override
Interfaces มีล�กษณะ เหมี�อน Abstract Class แติ%จ็ะไมี%มี fields จ็ะไมี%มีการ implement Code ภายใน methods
ประกาศ
เร�ยกใชิ�
Interfaces
ตารางแสดงชิน�ดขีอง Modifier (หร!อ Accessibility)
Modifier การใชิ�งานstatic ใช่�น�ยามีติ�ว้แป็รและเมีธอด ที่�ติ�องการให�มีคื%าคืงที่� สิ่ามีารถุน�า
ไป็ใช่�ได�ก�บัที่�กๆ สิ่%ว้นข้อง Class โดยคื%าน�5นจ็ะไมี%มีการเป็ล�ยนแป็ลงไมี%ว้%ากรณใดๆ
public ใช่�น�ยามีติ�ว้แป็ร, เมีธอด และคืลาสิ่ ใดๆ เพ��อให�สิ่ามีารถุน�าไป็ใช่�ก�บัคืลาสิ่หร�อโป็รแกรมีอ��นๆ ได�
private ใช่�น�ยามีติ�ว้แป็รหร�อเมีธอด เพ��อให�เรยกใช่�ได�เฉพาะภายในคืลาสิ่ ที่�สิ่ร�างติ�ว้แป็รหร�อเมีธอดน�5น ข้.5นมีาเที่%าน�5น
protected
ใช่�น�ยามีติ�ว้แป็รหร�อ เมีธอด ที่�ใช่�ได�เฉพาะคืลาสิ่ ที่�สิ่ร�างข้.5นมีาด�ว้ยว้�ธการสิ่�บัที่อด (Inheritance) เที่%าน�5น โดยป็กติ�จ็ะใช่� Protected ก�บั คืลาสิ่ ที่�เป็'น คืลาสิ่ติ�นฉบั�บั (Base Class)
void ใช่�น�ยามีเมีธอด โดยเป็'นการก�าหนดให�ไมี%มีการสิ่%งคื%าใดๆ กล�บัมีาให�ก�บั เมีธอดน5 (ด�งน�5นจ็.งไมี%ติ�องใช่�คื�าสิ่��ง return)
ถุ�าหากไม#ม�การระบุ�ค่#าไวั� จำะหมายถุ&ง ต�วัแปร
ใช่�ได�เฉพาะในเมีธอดที่�น�ยามีติ�ว้แป็รน�5นไว้� เมธอด
ใช่�ได�เฉพาะภายใน คืลาสิ่ น�5นเที่%าน�5น คืลาสิ่อ��นจ็ะเรยกใช่�ไมี%ได�
ค่ลาส ใช่�ได�เฉพาะภายในโป็รแกรมี (File) น5เที่%าน�5น โป็รแกรมีอ��น
จ็ะมีาเรยกใช่�เมีธอดหร�อติ�ว้แป็รติ%างๆ ใน คืลาสิ่ น5ไมี%ได�เลย
[Static Class Members]
คืว้ามีหมีายคืลาสิ่มีสิ่มีาช่�กที่�เป็'นติ�ว้แป็รใดๆ สิ่ามีารถุใช่�ร%ว้มีก�นได�ระหว้%าง object ที่�เป็'น instance ข้องคืลาสิ่เดยว้ก�น (ป็กติ�แยกจ็ากก�น)
ว้�ธการป็ระกาศึให�ติ�ว้แป็รใดๆ เป็'นแบับั static class members ติ�องมีคื�าสิ่งว้น static น�าหน�าช่น�ดข้�อมี)ล เช่%นprivate static int count = 0;
class X {
static int a = 0;
public static int methodA() {
a += 1;
return a;
}
}
class TestClassMember {
public static void main(String[] args) {
int num = 0;
num = num + X.methodA();
}
}
การส#งค่#าผ่#านการส#งค่#าผ่#าน ArgumentsArguments
การสิ่%งคื%าผ่%านที่าง อาร$ก�ว้เมี#นติ$ ที่�อย)%ใน parameter list มีอย)% 2 ล�กษณะคื�อ
อาร$ก�ว้เมี#นติ$แบับัสิ่�าเนาคื%าข้�อมี)ล (Pass by Value Argument)
อาร$ก�ว้เมี#นติ$แบับัผ่%านคื%าอ�างถุ.ง (Pass by Reference Argument)
อาร*ก�วัเม+นต*แบุบุส�าเนาค่#าขี�อม,ล (Pass by Value
Argument) คื�ณสิ่มีบั�ติ�ที่�เรยกว้%า Pass by Value คื�อการสิ่%งข้�อมี)ลไป็ให�เมีธอด
และเมีธอดก#อ%านคื%าได�โดยติรง และน�าไป็ใช่�งานได�ติามีคืว้ามีติ�องการ แติ%หากขี�อม,ลในอาร*ก�วัเม+นต*เก�ดการเปล�-ยนแปลงไม#วั#าจำากกรณี�ใดๆภายในเมธอด ขี�อม,ลที่�-เปล�-ยนแปลงไป จำะไม#ม�ผ่ล ก�บุขี�อม,ลหล�งจำากเมธอดที่�างานเสร+จำส�2น
การสิ่%งคื%าไป็ย�ง method แบับั - - pass by value น5คื%าที่�สิ่%งเข้�าไป็จ็ะถุ)กน�าไป็ใช่�ภายในติ�ว้ method เที่%าน�5น การเป็ล�ยนแป็ลงใด ๆ ที่�เก�ดข้.5นจ็ะไมี%มีผ่ลกระที่บัก�บัติ�ว้แป็รที่�เป็'นเจ็�าข้องคื%าน�5น ภายนอก method เลย
ร,ปแบุบุส#วันอาร*ก�วัเม+นต*แบุบุผ่#านค่#าขี�อม,ลMethod_Name (Primitive_Type Argument_Name1, Primitive_Type Argument_Name2, …)
{
… Argument_Name1 = …;
…
}
Primitive_Type คื�อช่น�ดข้�อมี)ลที่�ก�าหนดเป็'น int, double, float, boolean
Argument_Name1, Argument_Name2 คื�อช่��ออาร$ก�ว้เมี#นติ$ อาร$ก�ว้เมี#นติ$แติ%ละติ�ว้ที่�ก�าหนดไว้�ระหว้%างเคืร��องหมีาย ( และ ) หากมีมีากกว้%าหน.�งติ�ว้จ็ะถุ)กแยก ด�ว้ยเคืร��องหมีาย , (จ็�ลภาคื)
อาร*ก�วัเม+นต*แบุบุผ่#านค่#าอ�างถุ&ง (Pass by Reference
Argument) คื�ณสิ่มีบั�ติ�ที่�เรยกว้%า Pass by Reference คื�อการสิ่%งข้�อมี)ลไป็
ให�เมีธอด และเมีธอดก# อ%านคื%าจ็ากการอ�างถุ.ง และน�าไป็ใช่�งานได�ติามีคืว้ามีติ�องการ แติ%หากข้�อมี)ลใน อาร$ก�ว้เมี#นติ$ไมี%ว้%าจ็ะเป็'นการเป็ล�ยนแป็ลงแอที่ร�บั�ว้ติ$ข้องอาร$ก�ว้เมี#นติ$ หร�อการสิ่ร�าง ใหมี%ให�ก�บัอาร$ก�ว้เมี#นติ$ การเปล�-ยนแปลงด�งกล#าวัภายในเมธอดขี�อม,ลที่�-เปล�-ยนแปลงไปจำะม�ผ่ลก�บุขี�อม,ลหล�งจำากเมธอดที่�างานเสร+จำส�2น
การสิ่%งคื%าแบับัอ�างอ�งน�5น สิ่��งที่�เราสิ่%งเข้�าไป็ใน method น�5นไมี%ใช่�คื%าข้องติ�ว้แป็ร
(copy) แติ%เป็'นติ�ว้อ�างอ�งถุ.ง object น�5น ๆ โดยติรง เราอาจ็พ)ดได�ว้%าสิ่��งที่�เราสิ่%งไป็น�5นเป็'นที่�อย)% (address) ข้อง object น�5น ๆ ก#ได�
มีหล�กการที่�างานแบับัเดยว้ก�น แติ%ไมี%เหมี�อนก�นซึ่ะที่เดยว้ น��นคื�อเมีธอดที่�ได�ร�บั อาร$ก�ว้เมี#นติ$ที่�ไมี%ใช่%ข้�อมี)ลล�กษณะพลมี�ที่ฟัแล�ว้ อาร$ก�ว้เมี#นติ$น�5นจ็ะสิ่ร�างมีาจ็ากคืลาสิ่ เป็'นอาร$ก�ว้เมี#นติ$ล�กษณะออป็เจ็#คื ด�งน�5นล�กษณะการสิ่%งข้�อมี)ลอาร$ก�ว้เมี#นติ$จ็ะไมี%ใช่�การสิ่�าเนาข้�อมี)ลเพ��อน�าไป็ใช่�งานภายในเมีธอด แติ%ในเมีธอดจ็ะได�ร�บัเป็'น จ็�ดอ�างถุ.ง หร�อจ็�ดที่�เช่��อมีโยงไป็หาออป็เจ็#คื ด�งน�5นจ็.งเรยกการสิ่%งข้�อมี)ล แบับัน5ว้%าการผ่%านคื%า อ�างถุ.ง
ร,ปแบุบุส#วันอาร*ก�วัเม+นต*แบุบุผ่#านค่#าอ�างถุ&งMethod_Name (Class_Name Argument_Name1, Class_Name Argument_Name2, …) { Argument_Name1.Attribute_Name =
…; Argument_Name2.Method_Name();
… }
Class_Name คื�อช่��อคืลาสิ่ที่�เป็'นที่�มีาข้องออป็เจ็#คืที่�จ็ะสิ่%งมีาเป็'นอาร$ก�ว้เมี#นติ$
Argument_Name1, Argument_Name2เป็'นอาร$ก�ว้เมี#นติ$ที่�ถุ)กสิ่ร�างข้.5นมีาแบับั ออป็เจ็#คื (สิ่ร�างมีาจ็ากคืลาสิ่ด�ว้ยคื�าสิ่��ง new)
PackagePackage โป็รแกรมีที่�มีข้นาดใหญ่% จ็ะป็ระกอบัด�ว้ยคืลาสิ่จ็�านว้นมีาก อาจ็มีมีาก
เป็'นร�อยหร�อเป็'นพ�นเราสิ่ามีารถุจ็�ดหมีว้ดหมี)%ข้องคืลาสิ่ให�เป็'นระเบัยบัและง%ายติ%อการใช่�งานได� ด�ว้ยการแติก ซึ่อร$สิ่โคื�ดข้องโป็รแกรมีหน.�งโป็รแกรมีให�เป็'นหลายซึ่อร$สิ่โคื�ด ในกรณน5ซึ่อร$สิ่โคื�ดไมี%จ็�าเป็'นติ�องมีเมีธอด main()อย)% ยกเว้�นซึ่อร$สิ่โคื�ดที่�มีคืลาสิ่ คืลาสิ่แรกที่�เราใช่�เรยกโป็รแกรมีหล�กข้องเรา เราเรยกซึ่อร$สิ่ โคื�ด ไฟัล$อ��นๆ ที่�ป็ระกอบั ด�ว้ยคืลาสิ่ติ�5งแติ%หน.�งคืลาสิ่ข้.5นไป็แติ%ไมี%มีคืลาสิ่ที่�มีเมีธอด main()อย)%ว้%า แพค่เกจำ
เป็'นที่�รว้มีข้อง class ติ%างๆ ที่�ถุ)กเรยกใช่�ในโป็รแกรมีหร�อ method ติ%างๆ class ที่�กๆ ติ�ว้ข้อง Java ได�ถุ)กจ็�ดเก#บัอย)%ใน package ติ%างๆ เพ��อที่�าให�การเรยกใช่� class ติ%างๆ เหล%าน5ที่�าได�ง%ายข้.5น
PackagePackage
คื�อการรว้มีกล�%มีข้องคืลาสิ่ไว้�ในช่�ดเดยว้ก�น เพ��อคืว้ามีสิ่ะดว้กในการอ�างอ�งถุ.งเพ��อใช่�งาน ที่�าให�การจ็�ดเก#บั Bytecodes เป็'นไป็อย%างมี
ระบับั ใช่�หล�กเกณฑ์$การจ็�ด package เป็'นไป็ติามีการ
จ็�ด Directory ข้องระบับั ที่�าให�เก�ดร)ป็แบับัหน.�งข้องการก�าหนดระด�บัการ
เข้�าถุ.ง
PackagePackage คื�าสิ่��งในการเรยกใช่� Package คื�อ ค่�าส�-ง import ติ�ว้อย%างการใช่�งาน
import java.util.*;หมีายถุ.ง เรยกใช่� Package ช่��อ “java.util” ที่�5ง Package (ที่�ก Class) import java.util.ArrayList;
หมีายถุ.ง เรยกใช่�เฉพาะ Class ช่��อ “ArrayList” ซึ่.�งอย)%ใน Library ช่��อ “java.util”
top related