java oop

41
Java OOP Boonrit kidngun [email protected]

Upload: isaiah

Post on 06-Jan-2016

25 views

Category:

Documents


2 download

DESCRIPTION

Java OOP. Boonrit kidngun [email protected]. การเขียนโปรแกรมเชิงวัตถุ. Object คือ สิ่งที่มีคุณสมบัติและพฤติกรรมตามที่กําหนดไว้ในคลาส ออ บ เจ็ กต์ (object) แบ่งได้เป็นสองประเภท คือ สิ่งที่เป็นรูปธรรม (tangible) คือสิ่งที่เป็นวัตถุและจับต้องได้อาทิเช่น นักศึกษา ปากกา และรถ เป็นต้น - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Java OOP

Java OOP

Boonrit [email protected]

Page 2: Java OOP

การเขี�ยนโปรแกรมเชิ�งวั�ตถุ� Object คื�อ สิ่��งที่�มีคื�ณสิ่มีบั�ติ�และพฤติ�กรรมีติามีที่�ก�าหนดไว้�ใน

คืลาสิ่ ออบัเจ็#กติ$(object) แบั%งได�เป็'นสิ่องป็ระเภที่ คื�อ

สิ่��งที่�เป็'นร)ป็ธรรมี (tangible) คื�อสิ่��งที่�เป็'นว้�ติถุ�และจ็�บัติ�อง ได�อาที่�เช่%น น�กศึ.กษา ป็ากกา และรถุ เป็'นติ�น

สิ่��งที่�เป็'นนามีธรรมี (intangible) คื�อสิ่��งที่�ไมี%สิ่ามีารถุจ็�บั ติ�องได�อาที่�เช่%น คืะแนนรายช่��อว้�ช่า การ ลงที่ะเบัยน การ

ฝาก-ถุอนเง�น และติารางเที่�ยว้บั�น เป็'นติ�น Object ป็ระกอบัไป็ด�ว้ย

คื�ณล�กษณะ (attribute) หร�อข้�อมี)ล (data) เมีธอด (method) หร�อพฤติ�กรรมี (behavior)

Page 3: Java OOP

การเขี�ยนโปรแกรมเชิ�งวั�ตถุ� ที่�กสิ่��งในโป็รแกรมี ที่�เข้ยนถุ�อว้%าเป็'น

ว้�ติถุ�(Object) Object แติ%ละติ�ว้มีอ�สิ่ระติ%อก�น การ

เป็ล�ยนแป็ลงภายในObject หน.�ง จ็ะไมี%กระที่บัก�บั Object อ��น

การติ�ดติ%อสิ่��อสิ่ารระหว้%าง Object จ็ะเป็'นการสิ่%งข้�อมี)ล Message ระหว้%าง Object

Page 4: Java OOP

Class

โคืรงสิ่ร�างข้อง object โดย class เป็'นติ�ว้ก�าหนดว้%า object น�5นจ็ะมี data หร�อคื�ณล�กษณะอะไรบั�าง และมี method อะไรบั�

เป็รยบัเสิ่มี�อนพ�มีพ$เข้ยว้ (template) ข้องออป็เจ็#คื ออป็เจ็#คืที่�ถุ)กสิ่ร�างมีาจ็ากคืลาสิ่ (class) บัางคืร�5ง

เรยกว้%าเป็'น instance ข้องคืลาสิ่ คืลาสิ่หน.�งคืลาสิ่สิ่ามีารถุสิ่ร�างออป็เจ็#คืได�หลายออป็

เจ็#คื

Page 5: Java OOP

Object

is an instance of a Class ไมี%สิ่ามีารถุสิ่ร�างได� ถุ�าไมี%มี class

Bicycle bike1 = new Bicycle();

Object

Page 6: Java OOP

Encapsulation

หมีายถุ.งการจ็ะเรยกใช่�คื�ณล�กษณะข้องออป็เจ็#คื จ็ะที่�าได�โดยการเรยกผ่%านเมีธอดเที่%าน�5น

หล�กการข้องการห%อห��มี คื�อการก�าหนดให�คื�ณล�กษณะข้องออป็เจ็#คืมีคื�ณสิ่มีบั�ติ�เป็'น private และก�าหนดให�เมีธอดมีคื�ณสิ่มีบั�ติ�เป็'น public

โดยมีเมีธอด get / set ไว้�เพ��อเข้�าถุ.ง data น�5นๆ จ็ะเรยกว้%า class น�5นๆเป็'น Full Encapsulation

class

Page 7: Java OOP

Encapsulation

จ็ะใช่� Access Modifiers ในการเข้�าถุ.งข้�อมี)ล และ method Public class อ��นภายนอก สิ่ามีารถุที่�จ็ะเข้�าถุ.ง

ใด� Private class อ��นภายนอก ไมี%สิ่ามีารถุเข้�าถุ.งใด� Protected class ที่�ถุ)กสิ่�บัที่อดมีาเที่%าน�5นที่�

สิ่ามีารถุใช่�ได� ถุ�าไมี%ก�าหนด จ็ะถุ�อว้%า เป็'น Private

Page 8: Java OOP

Encapsulation

Page 9: Java OOP

InheritanceInheritance

การถุ%ายที่อดคื�ณสิ่มีบั�ติ�ไป็ย�งClass ล)ก Class ที่�เป็'นติ�นแบับัเรยกว้%า Superclass Class ที่�ได�ร�บัการสิ่�บัที่อดคื�ณสิ่มีบั�ติ�เรยกว้%า

Subclasses Class หน.�งจ็ะมี Superclass ได� Class เดยว้

ซึ่.�งป็ระโยช่น$ข้อง Inheritance คื�อ ที่�าให�มีโคืรงสิ่ร�างที่�เป็'นระบับั ระเบัยบั ป็ร�บัเป็ล�ยนได�ง%าย ลดเว้ลาในการพ�ฒนาระบับั ลดคื%าใช่�จ็%ายในการพ�ฒนา

Page 10: Java OOP

InheritanceInheritance Java ใช่� extends ช่��อclass ในการสิ่�บัที่อด class x extends y {

}

Class x

Class y

Page 11: Java OOP

InheritanceInheritance

Page 12: Java OOP

InheritanceInheritance

Page 13: Java OOP

final

ถุ�าระบั�อย)%หน�า class จ็ะที่�าให� class อ��นๆไมี%สิ่ามีารถุที่�จ็ะสิ่�บัที่อดคื�ณสิ่มีบั�ติ�ข้อง class ที่�ระบั� final ได�

ถุ�าระบั�อย)%หน�า method จ็ะที่�าให� class ที่�สิ่�บัที่อดไป็ไมี%สิ่ามีารถุที่�จ็ะ Override method น5ได�

Error

Page 14: Java OOP

Polymorphism

หมีายถุ.ง การบัอกแบับัเดยว้ แติ%ได�ร�บัการสิ่นองได�หลายแบับั

Overloading Method มีช่��อซึ่�5าก�นใด�แติ%มี argument แติก

ติ%างก�น Overriding

น�า Method ข้อง Superclass มีาจ็�ดการได�เอง

Page 15: Java OOP

Overloading MethodsOverloading Methods ในบัางกรณอาจ็มีเมีธอดใดๆ ที่�สิ่ามีารถุร�บัคื%าที่�เป็'นติ�ว้แป็รได�

หลากหลายช่น�ดได� ถุ�าก�าหนดไว้�เป็'นเมีธอดเดยว้ อาจ็ที่�าให�ผ่ลล�พธ$ที่�ได�เก�ดคืว้ามีผ่�ดพลาดได�

ด�งน�5นถุ�าช่น�ดติ�ว้แป็รเป็'นคืนละช่น�ดก�น ให�สิ่ร�างเมีธอดข้.5นมีาใหมี% โดยใช่�ช่��อเมีธอดเดยว้ก�น แติ%สิ่ร�างให�เมีธอด มีช่น�ดข้องติ�ว้แป็รใน parameter list ติ%างก�น

โดยจ็ะสิ่ร�างเมีธอดใหมี%ข้.5นมีาเป็'นจ็�านว้นเที่%าก�บัช่น�ดข้องติ�ว้แป็รที่�เป็'นไป็ได�

เมี��อมีการใช่�เมีธอด ช่��อน5โป็รแกรมีจ็ะเรยกเมีธอดที่�มีช่น�ดข้องติ�ว้แป็รติรงก�บัที่�ติ�องการโดยอ�ติโนมี�ติ�

เรยกว้�ธการน5ว้%า “Overloading” และเรยกเมีธอดที่�ใช่�ว้�ธการน5ว้%า “Overloading Methods”

Page 16: Java OOP

Overloading

Page 17: Java OOP

Overloading

Page 18: Java OOP

Overriding

เป็'นการจ็�ดการ implement

method ที่�เป็'นข้อง Suber Class

Page 19: Java OOP

Overriding

Page 20: Java OOP

Constructors เป็'น ฟั;งก$ช่�นพ�เศึษที่�จ็ะถุ)กเรยกให�ที่�างานติอนที่�

Object ถุ)กสิ่ร�างข้.5นมีา คืลาสิ่หน.�งๆอาจ็จ็ะมี Constructor หลายๆติ�ว้ได�

แติ%ติ�องมี Argument ติ%างก�นเรยกว้%าOverloading Constructors

สิ่%ว้นใหญ่%จ็ะน�ามีาใช่�ในการก�าหนดคื%าเร��มีติ�นให�ก�บั Object

ใน Java จ็ะใช่� ช่��อ public ช่��อคืลาสิ่()

Constructors

Page 21: Java OOP

Constructors

Page 22: Java OOP

Constructors

Page 23: Java OOP

abstract class And Methods

ใช่�สิ่�าหร�บั ให� class อ��นๆ สิ่�บัที่อดไป็ใช่�งาน ที่�าให�ไมี%สิ่ามีารถุ ที่�จ็ะสิ่ร�าง object จ็าก class ได�

abstact class

abstact method

Page 24: Java OOP

abstract class And Methods

testAbstractClass t=new testAbstractClass();

Error

Page 25: Java OOP

abstract class And Methods

จำ�าเป�นต�อง Override

Page 26: Java OOP
Page 27: Java OOP

Interfaces มีล�กษณะ เหมี�อน Abstract Class แติ%จ็ะไมี%มี fields จ็ะไมี%มีการ implement Code ภายใน methods

ประกาศ

เร�ยกใชิ�

Page 28: Java OOP

Interfaces

Page 29: Java OOP

ตารางแสดงชิน�ดขีอง Modifier (หร!อ Accessibility)

Modifier การใชิ�งานstatic ใช่�น�ยามีติ�ว้แป็รและเมีธอด ที่�ติ�องการให�มีคื%าคืงที่� สิ่ามีารถุน�า

ไป็ใช่�ได�ก�บัที่�กๆ สิ่%ว้นข้อง Class โดยคื%าน�5นจ็ะไมี%มีการเป็ล�ยนแป็ลงไมี%ว้%ากรณใดๆ

public ใช่�น�ยามีติ�ว้แป็ร, เมีธอด และคืลาสิ่ ใดๆ เพ��อให�สิ่ามีารถุน�าไป็ใช่�ก�บัคืลาสิ่หร�อโป็รแกรมีอ��นๆ ได�

private ใช่�น�ยามีติ�ว้แป็รหร�อเมีธอด เพ��อให�เรยกใช่�ได�เฉพาะภายในคืลาสิ่ ที่�สิ่ร�างติ�ว้แป็รหร�อเมีธอดน�5น ข้.5นมีาเที่%าน�5น

protected

ใช่�น�ยามีติ�ว้แป็รหร�อ เมีธอด ที่�ใช่�ได�เฉพาะคืลาสิ่ ที่�สิ่ร�างข้.5นมีาด�ว้ยว้�ธการสิ่�บัที่อด (Inheritance) เที่%าน�5น โดยป็กติ�จ็ะใช่� Protected ก�บั คืลาสิ่ ที่�เป็'น คืลาสิ่ติ�นฉบั�บั (Base Class)

void ใช่�น�ยามีเมีธอด โดยเป็'นการก�าหนดให�ไมี%มีการสิ่%งคื%าใดๆ กล�บัมีาให�ก�บั เมีธอดน5 (ด�งน�5นจ็.งไมี%ติ�องใช่�คื�าสิ่��ง return)

Page 30: Java OOP

ถุ�าหากไม#ม�การระบุ�ค่#าไวั� จำะหมายถุ&ง ต�วัแปร

ใช่�ได�เฉพาะในเมีธอดที่�น�ยามีติ�ว้แป็รน�5นไว้� เมธอด

ใช่�ได�เฉพาะภายใน คืลาสิ่ น�5นเที่%าน�5น คืลาสิ่อ��นจ็ะเรยกใช่�ไมี%ได�

ค่ลาส ใช่�ได�เฉพาะภายในโป็รแกรมี (File) น5เที่%าน�5น โป็รแกรมีอ��น

จ็ะมีาเรยกใช่�เมีธอดหร�อติ�ว้แป็รติ%างๆ ใน คืลาสิ่ น5ไมี%ได�เลย

Page 31: Java OOP

[Static Class Members]

คืว้ามีหมีายคืลาสิ่มีสิ่มีาช่�กที่�เป็'นติ�ว้แป็รใดๆ สิ่ามีารถุใช่�ร%ว้มีก�นได�ระหว้%าง object ที่�เป็'น instance ข้องคืลาสิ่เดยว้ก�น (ป็กติ�แยกจ็ากก�น)

ว้�ธการป็ระกาศึให�ติ�ว้แป็รใดๆ เป็'นแบับั static class members ติ�องมีคื�าสิ่งว้น static น�าหน�าช่น�ดข้�อมี)ล เช่%นprivate static int count = 0;

Page 32: Java OOP

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();

}

}

Page 33: Java OOP

การส#งค่#าผ่#านการส#งค่#าผ่#าน ArgumentsArguments

การสิ่%งคื%าผ่%านที่าง อาร$ก�ว้เมี#นติ$ ที่�อย)%ใน parameter list มีอย)% 2 ล�กษณะคื�อ

อาร$ก�ว้เมี#นติ$แบับัสิ่�าเนาคื%าข้�อมี)ล (Pass by Value Argument)

อาร$ก�ว้เมี#นติ$แบับัผ่%านคื%าอ�างถุ.ง (Pass by Reference Argument)

Page 34: Java OOP

อาร*ก�วัเม+นต*แบุบุส�าเนาค่#าขี�อม,ล (Pass by Value

Argument) คื�ณสิ่มีบั�ติ�ที่�เรยกว้%า Pass by Value คื�อการสิ่%งข้�อมี)ลไป็ให�เมีธอด

และเมีธอดก#อ%านคื%าได�โดยติรง และน�าไป็ใช่�งานได�ติามีคืว้ามีติ�องการ แติ%หากขี�อม,ลในอาร*ก�วัเม+นต*เก�ดการเปล�-ยนแปลงไม#วั#าจำากกรณี�ใดๆภายในเมธอด ขี�อม,ลที่�-เปล�-ยนแปลงไป จำะไม#ม�ผ่ล ก�บุขี�อม,ลหล�งจำากเมธอดที่�างานเสร+จำส�2น

การสิ่%งคื%าไป็ย�ง method แบับั - - pass by value น5คื%าที่�สิ่%งเข้�าไป็จ็ะถุ)กน�าไป็ใช่�ภายในติ�ว้ method เที่%าน�5น การเป็ล�ยนแป็ลงใด ๆ ที่�เก�ดข้.5นจ็ะไมี%มีผ่ลกระที่บัก�บัติ�ว้แป็รที่�เป็'นเจ็�าข้องคื%าน�5น ภายนอก method เลย

Page 35: Java OOP

ร,ปแบุบุส#วันอาร*ก�วัเม+นต*แบุบุผ่#านค่#าขี�อม,ลMethod_Name (Primitive_Type Argument_Name1, Primitive_Type Argument_Name2, …)

{

… Argument_Name1 = …;

}

Primitive_Type คื�อช่น�ดข้�อมี)ลที่�ก�าหนดเป็'น int, double, float, boolean

Argument_Name1, Argument_Name2 คื�อช่��ออาร$ก�ว้เมี#นติ$ อาร$ก�ว้เมี#นติ$แติ%ละติ�ว้ที่�ก�าหนดไว้�ระหว้%างเคืร��องหมีาย ( และ ) หากมีมีากกว้%าหน.�งติ�ว้จ็ะถุ)กแยก ด�ว้ยเคืร��องหมีาย , (จ็�ลภาคื)

Page 36: Java OOP

อาร*ก�วัเม+นต*แบุบุผ่#านค่#าอ�างถุ&ง (Pass by Reference

Argument) คื�ณสิ่มีบั�ติ�ที่�เรยกว้%า Pass by Reference คื�อการสิ่%งข้�อมี)ลไป็

ให�เมีธอด และเมีธอดก# อ%านคื%าจ็ากการอ�างถุ.ง และน�าไป็ใช่�งานได�ติามีคืว้ามีติ�องการ แติ%หากข้�อมี)ลใน อาร$ก�ว้เมี#นติ$ไมี%ว้%าจ็ะเป็'นการเป็ล�ยนแป็ลงแอที่ร�บั�ว้ติ$ข้องอาร$ก�ว้เมี#นติ$ หร�อการสิ่ร�าง ใหมี%ให�ก�บัอาร$ก�ว้เมี#นติ$ การเปล�-ยนแปลงด�งกล#าวัภายในเมธอดขี�อม,ลที่�-เปล�-ยนแปลงไปจำะม�ผ่ลก�บุขี�อม,ลหล�งจำากเมธอดที่�างานเสร+จำส�2น

การสิ่%งคื%าแบับัอ�างอ�งน�5น สิ่��งที่�เราสิ่%งเข้�าไป็ใน method น�5นไมี%ใช่�คื%าข้องติ�ว้แป็ร

(copy) แติ%เป็'นติ�ว้อ�างอ�งถุ.ง object น�5น ๆ โดยติรง เราอาจ็พ)ดได�ว้%าสิ่��งที่�เราสิ่%งไป็น�5นเป็'นที่�อย)% (address) ข้อง object น�5น ๆ ก#ได�

Page 37: Java OOP

มีหล�กการที่�างานแบับัเดยว้ก�น แติ%ไมี%เหมี�อนก�นซึ่ะที่เดยว้ น��นคื�อเมีธอดที่�ได�ร�บั อาร$ก�ว้เมี#นติ$ที่�ไมี%ใช่%ข้�อมี)ลล�กษณะพลมี�ที่ฟัแล�ว้ อาร$ก�ว้เมี#นติ$น�5นจ็ะสิ่ร�างมีาจ็ากคืลาสิ่ เป็'นอาร$ก�ว้เมี#นติ$ล�กษณะออป็เจ็#คื ด�งน�5นล�กษณะการสิ่%งข้�อมี)ลอาร$ก�ว้เมี#นติ$จ็ะไมี%ใช่�การสิ่�าเนาข้�อมี)ลเพ��อน�าไป็ใช่�งานภายในเมีธอด แติ%ในเมีธอดจ็ะได�ร�บัเป็'น จ็�ดอ�างถุ.ง หร�อจ็�ดที่�เช่��อมีโยงไป็หาออป็เจ็#คื ด�งน�5นจ็.งเรยกการสิ่%งข้�อมี)ล แบับัน5ว้%าการผ่%านคื%า อ�างถุ.ง

Page 38: Java OOP

ร,ปแบุบุส#วันอาร*ก�วัเม+นต*แบุบุผ่#านค่#าอ�างถุ&ง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)

Page 39: Java OOP

PackagePackage โป็รแกรมีที่�มีข้นาดใหญ่% จ็ะป็ระกอบัด�ว้ยคืลาสิ่จ็�านว้นมีาก อาจ็มีมีาก

เป็'นร�อยหร�อเป็'นพ�นเราสิ่ามีารถุจ็�ดหมีว้ดหมี)%ข้องคืลาสิ่ให�เป็'นระเบัยบัและง%ายติ%อการใช่�งานได� ด�ว้ยการแติก ซึ่อร$สิ่โคื�ดข้องโป็รแกรมีหน.�งโป็รแกรมีให�เป็'นหลายซึ่อร$สิ่โคื�ด ในกรณน5ซึ่อร$สิ่โคื�ดไมี%จ็�าเป็'นติ�องมีเมีธอด main()อย)% ยกเว้�นซึ่อร$สิ่โคื�ดที่�มีคืลาสิ่ คืลาสิ่แรกที่�เราใช่�เรยกโป็รแกรมีหล�กข้องเรา เราเรยกซึ่อร$สิ่ โคื�ด ไฟัล$อ��นๆ ที่�ป็ระกอบั ด�ว้ยคืลาสิ่ติ�5งแติ%หน.�งคืลาสิ่ข้.5นไป็แติ%ไมี%มีคืลาสิ่ที่�มีเมีธอด main()อย)%ว้%า แพค่เกจำ

เป็'นที่�รว้มีข้อง class ติ%างๆ ที่�ถุ)กเรยกใช่�ในโป็รแกรมีหร�อ method ติ%างๆ class ที่�กๆ ติ�ว้ข้อง Java ได�ถุ)กจ็�ดเก#บัอย)%ใน package ติ%างๆ เพ��อที่�าให�การเรยกใช่� class ติ%างๆ เหล%าน5ที่�าได�ง%ายข้.5น

Page 40: Java OOP

PackagePackage

คื�อการรว้มีกล�%มีข้องคืลาสิ่ไว้�ในช่�ดเดยว้ก�น เพ��อคืว้ามีสิ่ะดว้กในการอ�างอ�งถุ.งเพ��อใช่�งาน ที่�าให�การจ็�ดเก#บั Bytecodes เป็'นไป็อย%างมี

ระบับั ใช่�หล�กเกณฑ์$การจ็�ด package เป็'นไป็ติามีการ

จ็�ด Directory ข้องระบับั ที่�าให�เก�ดร)ป็แบับัหน.�งข้องการก�าหนดระด�บัการ

เข้�าถุ.ง

Page 41: Java OOP

PackagePackage คื�าสิ่��งในการเรยกใช่� Package คื�อ ค่�าส�-ง import ติ�ว้อย%างการใช่�งาน

import java.util.*;หมีายถุ.ง เรยกใช่� Package ช่��อ “java.util” ที่�5ง Package (ที่�ก Class) import java.util.ArrayList;

หมีายถุ.ง เรยกใช่�เฉพาะ Class ช่��อ “ArrayList” ซึ่.�งอย)%ใน Library ช่��อ “java.util”