387
11/01/61 Page 1 Lec07 :: Object-Oriented Programming โดย อ. นัฐพงศ งเนียม http://www.siam 2dev.com [email protected] Last Update 12-01-2561 Class , Enum , Package , Interface , Inheritance , Generics , Inner Class

Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 1

Lec07 :: Object-Oriented Programming

โดย อ. นฐพงศ สงเนยมhttp://[email protected]

Last Update 12-01-2561

Class , Enum , Package , Interface , Inheritance , Generics , Inner Class

Page 2: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Agenda

• Object Oriented Programming Topic– PART I : Java Syntax [ Lec01 – Lec05,

Lec06]– PART II : Java OOP [ Lec07 …]

11/01/61Page 2

Page 3: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Agenda (cont.)• Unified Process• Class diagram• Class

– Attributes– Method

• Empty Class• Constructor• Overloading Constructor Method• Modifier

– Public– Private– Protected– Default

11/01/61Page 3

Page 4: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

• SDLC : Software Development Life Cycle– วฏจกรในการพฒนาระบบแบบดงเดม

• 7 ขนตอน– 1. วเคราะหปญหา– 2. ออกแบบปญหา– 3. พฒนาโปรแกรม– 4. ทดสอบ– 5. ตดตงใชงาน– 6. บารงรกษา– 7. ทาเอกสารประกอบ

• Unified Process– กรรมวธทใชสาหรบการพฒนาระบบเชงวตถ

11/01/61Page 4

Page 5: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Unified Process โครงสรางกรรมวธ - Lifecycle Phases

เตรยมงาน (Inception) – นยามขอบเขตของโครงการ , ขอบเขตของระบบทจะพฒนา

OOAD : Object-Oriented Analysis and Design5

Inception Elaboration Construction Transition

time

Unified process แบงการพฒนาออกเปน 4 เฟส (phases)

ทารายละเอยด (Elaboration) – วางแผนโครงการ จดทารายละเอยดความตองการ จดสรางสถาปตยกรรมระบบ

จดสราง (Construction) – สรางและทดสอบโปรแกรม

ถายโอน (Transition) – ตดตงถายโอนระบบใหกบผใช

5

OOP

OOAD

Presenter
Presentation Notes
ในชวง Inception จะเปนการกำหนดขอบเขตของโครงการ ระบวาสงใดทอยในโครงการ สงใดไมอยในโครงการ การกำหนดขอบเขตทำไดโดยการระบถง actors ซงกคอผใชระบบ ระบถงสงทระบบตองกระทำ ทเรยกวา use cases ตามทผใชแตละกลมคาดหวง , we define the scope of the project, what is included, and what is not. We do this by identifying all the actors and use cases, and by drafting the most essential use cases (usually approximately 20 percent of the complete model). A business plan is developed to determine whether resources should be committed to the project. During Elaboration, we focus on two things: getting a good grasp of the requirements (80 percent complete), and establishing an architectural baseline. If we have a good grasp of the requirements and the architecture, we can eliminate a lot of the risks, and we will have a good idea what amount of work remains to be done. We can make detailed cost/resource estimations at the end of Elaboration. During Construction, we build the product in several iterations up to a beta release. During Transition, we transition the product to the end user and focus on end user training, installation, and support. The amount of time spent in each phase varies. For a very complex project with a lot of technical unknowns and unclear requirements, Elaboration may include three to five iterations. For a very simple project, where requirements are known and the architecture is simple, Elaboration may include only a single iteration.
Page 6: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

UP

• สมมตไดรบงาน Project มา 1 Project UP คอจะแบง Project ออกเปนชวงเวลา 4 ชวงเวลา– Inception เตรยมงาน– Collaboration การลงรายละเอยด– Construction– Transition

11/01/61Page 6

12 เดอน

1-2 เดอน

1-2 เดอน

3-6 เดอน

1-2 เดอน

Page 7: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Abstractions

7

Classification

Generalization/Specialization

Association

Aggregation

Is member of

Is member of

Is member of

Is part of Is part of

Is part of

Is kind of Is kind of Is relate to Is relate to

Reviews OOAD concept

เราจะทาอยางไร จงจะไดคลาส ขน กอาศย กระบวนการเหลาน

หาคลาส และ หาวตถ และวตถ นนอยในคลาสใด

Page 8: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

• เปนการทาความรจกคลาส และ ออบเจกต

• แลวออกมาเปนคลาส เปนออบเจกต

• จะไดคลาสพนฐานfundamental classes

11/01/61Page 8

Classification

Is member of

Is member of

Is member of

Page 9: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

จงพฒนาระบบคลกนกรกษาโรคทวไป

• มคลาสอะไรบาง• ออบเจกตอะไรบาง

11/01/61Page 9

Class / Object คออะไร

ยา

เภสช

คนไข / ลกคา

ยาพารา

ยาแกอกเสบ

ยาดม

ยาหมอง

Page 10: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

คลาส

Objects• Attribute คณสมบต/คณลกษณะทบงบอกถง

ความเปนวตถนน• Function คอ ความสามารถ พฤตกรรม สงวตถ

นนทาได หรอ หนาทของวตถ

11/01/61Page 10

Page 11: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

นก

• Attribute– ปก– ปาก– ตา– ขา– ขน

• Function – บน– กน– เดน– รอง

11/01/61Page 11

• Attribute– ผม– ปาก– จมก– ตา– ...

• Function – นอน– กน– เดน– รอง

คนProblem Domain

Page 12: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

• คลาส คอ กลมของวตถ

11/01/61Page 12

Page 13: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Abstractions

• จะไดคลาสและออบเจกตทงหมดทความสมพนธกน แลวสรางออกมาเปนแผนภาพออกมา เรยกวา classdiagram

• เมอไดแผนภาพคลาสมา กนามาสรางเปนซอฟตแวรตามแผนภาพคลาส

11/01/61Page 13

Page 14: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Class Diagram

• เปนโมเดลหนง ใน UML : Unified Modeling Language

• แผนภาพคลาส มาจากกระบวนการวเคราะหและออกแบบระบบเชงวตถ

• การปรบเปลยนจากเฟสออกแบบมาเปนเฟสการลงมอทาหรอพฒนาโปรแกรม (Transform from Designing phase to Implementation phase) จาเปนอาศยแผนภาพคลาสในการพฒนาโปรแกรม

11/01/61Page 14

Page 15: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 15

OOP

• Class• Enum• Package• Interface• Inheritance• Generics• Inner Class

Class คออะไร

Objects คออะไร Class NameAttributeMethod

Page 16: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 16

Class

•คลาส•สวนประกอบของคลาส•การสรางคลาส

Page 17: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 17

คลาสในภาษาจาวา

• คลาสหรอแบบแปลนของวตถ จะถกเขยนอยในไฟลทมนามสกล java– เชน คลาสสเหลยมอาจจะถกเขยนอยในไฟลชอ

Rectangle.java

class ชอคลาส {

}

Page 18: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 18

Page 19: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 19

สวนประกอบของคลาส Class name

attributes

method

Page 20: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

UML Class Diagram

11/01/61Page 20

Class name

+ attribute : Type

+ function() : Boolean- A() : Boolean# B() : boolean

Visibility- private+ public# protected

Page 21: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Class diagram

11/01/61Page 21

Class name

attributes

function

Class name

Data member

Method Member

OO java

Page 22: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 22

สวนประกอบของคลาส

• เมธอด เปนสงทใชอธบายการทางานของวตถในคลาส – ชอเมธอดควรเปนคากรยา

• แอตทรบวท เปนสงทใชบอกถงลกษณะตางๆของวตถในคลาส

Page 23: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 23

ตวอยางเมธอด

คลาส เมธอด/ฟงกชน/ความสามารถ/พฤตกรรม

นก กน(), บน(), สงเสยง()

โทรทศน เปด(), ปด(), เปลยนชอง(), ปรบเสยง()

สเหลยม คานวณพนท(),วาดได()

Page 24: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 24

ตวอยาง Attributes

คลาส ลกษณะ/ Attributes

นก ปก , ตา , ขา , ปาก , ส

โทรทศน จอ , ขนาด , ส , ป ม

สเหลยม กวาง , ยาว , พนท

Real World

Page 25: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

นกใน คอมพวเตอร

11/01/61Page 25

Page 26: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 26

ตวอยางแอททรบวท

คลาส แอททรบวท

นก ส, เพศ, นาหนก

โทรทศน ยหอ, รน, หมายเลข, ขนาดจอภาพ

สเหลยม ความกวาง, ความสง

PDT : Primitive Data TypeADT : Object

Computer World

Page 27: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 27

ตวอยางแอททรบวท

คลาส แอททรบวท

พดลม ยหอ ส ความใหญ ขนาด

โทรทศน ยหอ, รน, หมายเลข, ขนาดจอภาพ

สเหลยม ความกวาง, ความสง

PDT : Primitive Data TypeADT : Object

Computer World

Page 28: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Attribute และ Function

11/01/61Page 28

• Real World• Computer World

ปาก ขา ปก

ชอนก ส นาหนก ประเภทนก/ชนด

Page 29: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Attribute และ Function ของคน

11/01/61Page 29

• Real World• Computer World

หว แขน ขา มหวใจ มสมอง

ถาเปนในระบบราน เซเวน

หมายถง พนกงา / เจาหนา / ผจดการ

-ชอ นามสกล ทอย เบอรโทร

-อนๆ

Page 30: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 30

Page 31: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 31

Page 32: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 32

คลาส, วตถ, และเรฟเฟอรเรนซ

• คลาส : วตถ• แบบแปลน : บาน

• หนงคลาสสรางไดหลายวตถ• ใชงานวตถผานทางเรฟเฟอรเรนซ

– รโมทคอนโทรล

Page 33: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 33

Student

- Name- gender- GPA

สมชาย : Student

- Name = “สมชาย”- gender = “ผชาย”- GPA = “3.15”

Class

Object

Page 34: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

การสราง คลาส

class ชอคลาส {แอตทรบวตเมธอด()

}

11/01/61Page 34

class rectangle{private int w;private int h;public void calArea() {…}

}

Page 35: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

• class cls_name { ...........} empty class

11/01/61Page 35

Class-name

คน

ธรกมล

Page 36: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

การสรางแอตทรบวต

• Modifier type name_attr;

• ตวอยาง• private int Age;

• private doulbe Age;

11/01/61Page 36

PDTADT

Visibility = Modifier

Page 37: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 37

การสรางวตถ

• รปแบบ– คลาส เรฟเฟอรเรนซ = new คลาส();

• ตวอยางสเหลยม ก = new สเหลยม();สเหลยม ข = new สเหลยม();

Reference คอชอทตงขนเพอใชอางถง

Page 38: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

การสรางวตถ ทาได 2 แบบ

นกเรยน อานาจ;อานาจ = new นกเรยน();

11/01/61Page 38

นกเรยน อานาจ = new นกเรยน();

1

2

Page 39: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

class student {

}

student s1 = new student();

11/01/61Page 39

Page 40: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Empty Class

class Rectangle {

}

11/01/61Page 40

Page 41: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

attributes

class Rectangle {int width;int height;

}

11/01/61Page 41

width

height

Page 42: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

attributes

class Rectangle {int width;int height;

}

11/01/61Page 42

width

height

Rectangle

Width : integralHeight : integral

Page 43: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

สรางโปรเจกตใหม ชอ Test_Rectangle

11/01/61Page 43

Page 44: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Main program

11/01/61Page 44

Page 45: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

• Test• Rectangle

11/01/61Page 45

Page 46: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

• Data Member กคอ attributes หรอ ตวแปรของคลาสนนเอง

11/01/61Page 46

Page 47: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

สวนประกอบในไฟล Test_rectangle

11/01/61Page 47

Main

rectangle

คลาส rectangle อยในไฟล

เดยวกน กบ

Test_rectangle

Page 48: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

สราง เมธอด สาหรบคานวณ พ.ท.

11/01/61Page 48

คลาสถกสราง แตยงใชงานไมได หากตองการ

ใชงาน

ตองสราง อนสแตนซ หรอ ออบเจกต

Page 49: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

การสรางเมธอด void

• modifier void method {}• void method {} private• public void• private void• protected void

11/01/61Page 49

TestRectangleMain() Rectangle

- W : integral

+ calArea()

Page 50: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 50

Rectangle

R: Rectangle

Rectangle R = new Rectangle();

A: Rectangle

Rectangle A = new Rectangle();

Page 51: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 51

Page 52: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 52

Page 53: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 53

Is member of/ instance of

สเหลยม

ก : สเหลยม

ข : สเหลยม

Page 54: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

สราง เมธอด สาหรบรบคา width

11/01/61Page 54

สเหลยม

+ กาหนดความกวาง(int w1)

สเหลยม

+ setWidth(int w1)

Getter / setter method

Page 55: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

สราง เมธอด สาหรบกาหนดความสง

11/01/61Page 55

สเหลยม

+ กาหนดความกวาง(int w1)+ กาหนดความสง(int h1)

สเหลยม

+ setWidth(int w1)+ setHeight(int h1)

Page 56: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

แบบฝกหด

• จงสรางคลาสสามเหลยม และ ออบเจกต สามเหลยม 2 ตว โดยกาหนดความ ฐานและสงของแตละตวดงน– T1 Base = 10.2 Height = 15.6– T2 Base = 8.7 Height = 14.9

– จงวาดแผนภาพคลาส และเขยนโปรแกรม ดวยภาษาจาวา

11/01/61Page 56

Page 57: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 57

Triangle

T1: Triangle T2: Triangle

- Base : floating-point- Height : floating-point

+ setB(b1 : floating-point) + setH(h1 : floating-point) + getB() : floating-point+ getH() : floating-point+ calArea () : floating-point

- B = 10.2- H = 5.6

- B = 8.7- H =14.3

Page 58: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 58

Page 59: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 59

20

5a

20b

10

Page 60: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 60

Rectangle

a : rectangle b : rectangle

Page 61: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

รบความกวาง/สง จากแปนพมพ• คลาส Scanner

11/01/61Page 61

1.

2.

3.

Page 62: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 62

Page 63: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 63

สเหลยม

+ กาหนดความกวาง(int w1)+ กาหนดความสง(int h1)

สเหลยม

+ setWidth(int w1)+ setHeight(int h1)+ calArea() : int

A B C ..

Classification abstractions

Page 64: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 64

Page 65: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

• กาหนดความกวาง/ยาว ให สเหลยม ก.

11/01/61Page 65

Page 66: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

RUN

11/01/61Page 66

Page 67: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Rectangle

11/01/61Page 67

Page 68: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

integer

• byte• short• int• long

11/01/61Page 68

• Byte• Short• Int• Long

Type Wrapper class

long age;byte ageInt age;

int age = 50.3;

Page 69: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Floating-point

• float• double

11/01/61Page 69

• Float• Double

Type Wrapper class

5.8 cm

2.5 cm

Page 70: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Class variables

11/01/61Page 70

rectangle

-Width : int- height : int

Page 71: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Method

11/01/61Page 71

rectangle

-Width : int- height : int

+ setWidth()

rectangle

-Width : int- height : int

+ setWidth(w :integer)

Page 72: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

encapsulation

• การนาเอา attribute และ ความสามารถในการจดการกบ attribute รวมเขาดวยกน/ หรอเรยกวา หอหมเขาดวย ทาใหไดคลาสขน

• การหอหมจงมลกษณะคลายเปลอกทมาหอหม • ซงแบงออกเปน 3 แบบ โดยจะเกยวของกบการ

เขาถงขอมล– Public – Private– Protected

11/01/61Page 72

Page 73: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 73

rectangle

-Width : int- height : int

+ setWidth()

Page 74: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

class …… {……attributes // data member……. Methods // method member

}

11/01/61Page 74

Circle

X : intY : intR : int

+ calArea()

Page 75: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

คน

class Man {private Arm aArm;private String name;private int age;private Heart aHeart;

}

11/01/61Page 75

Man

-aArm : Arm-aHead : Head-aHeart : Heart-aLeg : aLeg- naame : string- age : int

+ walk()+ eat()+ Speak()

ADT

PDT

Heart

-Siza : int

+ สบฉดเลอด

()

Hair

-no : int

+ ดแล()

คน (computer)

Page 76: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 76

คน (computer world)Man

-Name : String-Gender : String-BOD : date-Address : String-Tel : String

+ getName()+ setName()+ getBOD()+ setBOD()+ getTel()+ setTel()

Page 77: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 77

Page 78: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Test_Student :: Tester class

11/01/61Page 78

Page 79: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

package

11/01/61Page 79

Page 80: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Student

11/01/61Page 80

Page 81: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Class studentclass student {

private String name;private String Address;private int AGE;private float GPA;private ...... Email;

//--- method member

public void setName(String n) {

name = n;}

}11/01/61Page 81

Page 82: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 82

Page 83: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

ในคลาสทดสอบ tester

• สรางวตถนกเรยน/นกศกษา

11/01/61Page 83

Page 84: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

การเรยกใชงาน void method

11/01/61Page 84

Page 85: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 85

Page 86: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

สรางโปรเจกตใหม

11/01/61Page 86

Page 87: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Test_Man

11/01/61Page 87

Page 88: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

สราง java class

11/01/61Page 88

Page 89: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Class Man

11/01/61Page 89

Page 90: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 90

Page 91: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 91

Page 92: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

เพม Method : getName() , setName()

11/01/61Page 92

Page 93: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Overloading Constructor Method

• ชอซากนได • แตตองตางกนท ลาดบ จานวน อากวเมนท ชนดของอากว

เมนท

11/01/61Page 93

Page 94: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Overloading Constructor Method

11/01/61Page 94

Page 95: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 95

Page 96: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

การบญช

Customer c1 = new Customer(5000.0);Customer c1 = new Customer(5000.0);

11/01/61Page 96

constructor

ในกรณ ของเกม สมมต สราง คน จะไอเทม

Page 97: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Method

• Overloading Method• Overriding Method

11/01/61Page 97

Page 98: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Overloading

class Rectangle{

public void calArea() {}public void calArea(int w,int h) {}public void calArea(double w,double h) {}

}

11/01/61Page 98

Page 99: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 99

Customer

+ deposit(int bal)

+ deposit(double bal)

Page 100: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

• คน แบงออกเปน (generalization / specialization abstraction)– นกเรยน– อาจารย

11/01/61Page 100

Man

Student Teacher

Inheritance Inherite

Super Class

Child Class

Reusable

Page 101: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Protected

• คน แบงออกเปน (generalization / specialization abstraction)– นกเรยน– อาจารย

11/01/61Page 101

Man

Student Teacher

Inherit Inherit

Super Class

Child Class

Reusable

-Name : String# surname : String

Page 102: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Protected

• คน แบงออกเปน (generalization / specialization abstraction)– นกเรยน– อาจารย

11/01/61Page 102

Man

Student Teacher

Inherit Inherit

Super Class

Child Class

Reusable

Name : Stringsurname : String

Page 103: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Inheritance in java

• class A extends B {

• }

11/01/61Page 103

B

A

Page 104: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 104

Man

Student

Page 105: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 105

Page 106: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 106

student

Man

student

Man

Man

Student

Man

Student

Page 107: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 107

Page 108: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 108

Man

Man

Page 109: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Test_Man

11/01/61Page 109

ตอนทคนเกดมา จะถกตงชอ

ตอมาเมอเตบโตขนกจะ

สามารถเปลยนชอได

Page 110: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 110

Page 111: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 111

rectangle

-Width : int- height : int

+ setWidth()+ setHeight()

Page 112: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

แนวขอสอบระหวางภาค 1/2558

• 1. แสดงเมน– 1. คานวณสเหลยม– 2. คานวณสามเหลยม– 3......

– ถาเลอก สามเหลยม รบ – 2.1 .....– 2.2 .... แลวคานวณ

11/01/61Page 112

คลาส

วตถ

Scanner

Page 113: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

สราง เมธอดทมการคนคา

11/01/61Page 113

Page 114: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

สรางวตถ คอ instance

11/01/61Page 114

Page 115: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 115

Page 116: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 116

Page 117: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

ประกาศ R1 เปน Rectangle

11/01/61Page 117

Page 118: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

การเรยกใชงานเมธอด ผานออบเจกต

11/01/61Page 118

Page 119: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 119

X = R1.CalArea();

Page 120: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 120

Page 121: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Triangle

11/01/61Page 121

Page 122: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Package Test_rectangle

11/01/61Page 122

Test_Rectangle.java

Rectangle.java

Triangle.java

Page 123: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

• สราง data member

11/01/61Page 123

Page 124: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 124

Triangle

-Base : float-Height : float

+ setBase()+ setHeight(h : floating-poin

Page 125: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 125

Page 126: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

สรางอนสแตนซของคลาส Triangle

11/01/61Page 126

Page 127: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

การกาหนด Modifier แบบ public

11/01/61Page 127

Page 128: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Modifier/Accessibility

• Default• Private• Public• Protected

11/01/61Page 128

Information Hiding / Encapsulation

Page 129: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Default Modifier : Package

11/01/61Page 129

Page 130: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 130

ขอความและเมธอด

• สงใหวตถทางานโดยการสงขอความ (message) หรอคาสงไปหาวตถ

• เมอวตถไดรบขอความแลว วตถนนกจะทางานตามวธการหรอคาสงตางๆทเขยนไวในเมธอด (method)

Page 131: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 131

การเรยกเมธอด (การสงขอความ)

• รปแบบ– เรฟเฟอรเรนซ.เมธอด();

• ตวอยางสเหลยม ส = new สเหลยม();System.out.println( ส.คานวณพนท() );

การสอสารกนระหวางวตถ จะใชงานผานทางเมธอด

Page 132: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 132

การประกาศเมธอด

class สเหลยม {double คานวณพนท() {

// คานวณหาพนทของสเหลยม …

}}

Page 133: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 133

เมธอดทคนคาเปนชนดขอมลพนฐาน

class สเหลยม {double คานวณพนท() {

// คานวณหาพนทของสเหลยม …// สงคนคาพนทใหกบผเรยกreturn พนทของสเหลยม;

}}

Page 134: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 134

เมธอดทคนคาเปนเรฟเฟอรเรนซ

class สเหลยม {String ขอขอมล() {

…return สตรงทแสดงขอมลสเหลยม;

}}

Page 135: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 135

เมธอดทไมคนคา

class สเหลยม {void เพมขนาดสองเทา() {

…return;

}}

Page 136: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 136

แอททรบวท

• ขอมลทใชอธบายความแตกตางของวตถ – เชน วตถแมว มชอ ส พนธ นาหนก แตกตางกน

• ตวแปรวตถ (instance variable)

Page 137: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 137

แอททรบวท

class สเหลยม {double ความกวาง;double ความสง;

}

Page 138: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 138

การใชงานแอททรบวท

• รปแบบ– เรฟเฟอรเรนซ.แอททรบวท

• ตวอยางสเหลยม ส = new สเหลยม();ส.ความกวาง = 10;ส.ความสง = 5;

Page 139: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 139

คอนสตรคเตอร (constructor)

• เมธอดทมช อเหมอนกบคลาส • ใชกาหนดคาเรมตนใหกบแอททรบวต • ถกเรยกใชเมอเราสรางวตถดวยคาสง new

Page 140: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 140

การประกาศคอนสตรคเตอร

class สเหลยม {สเหลยม(double ก, double ส) {

ความกวาง = ก;ความสง = ส;

}

double ความกวาง;double ความสง;

}

Page 141: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 141

การเรยกคอนสตรคเตอร

สเหลยม ก = new สเหลยม(10, 5);สเหลยม ข = new สเหลยม(20, 4);System.out.println(ก.กวาง);System.out.println(ข.กวาง);

Page 142: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 142

การโอเวอรโหลดเมธอด (Overload)

class สเหลยม {{

สเหลยม() { ... }สเหลยม(double ก, double ส) { ... }

}

Page 143: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 143

การโอเวอรโหลดเมธอด

class สเหลยม {{

double getArea() { ... }int getArea(int n) { ... }

}

Page 144: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 144

แปลงไทยจาวาเปนจาวา

Page 145: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 145

ประกาศคลาส

class สเหลยม {

}

class Rectangle {

}

Page 146: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 146

เพมเมธอด

class สเหลยม {double คานวณพนท() {

.... }

}

class Rectangle {double getArea() {

.... }

}

Page 147: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 147

เพมแอททรบวท

class สเหลยม {double คานวณพนท() {

.... }double ความกวาง;double ความสง;

}

class Rectangle {double getArea() {

.... }double width;double height;

}

Page 148: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 148

เขยนวธการทางานของเมธอด คานวณพนท()

class สเหลยม {double คานวณพนท() {

return ความกวาง * ความสง;

}double ความกวาง;double ความสง;

}

class Rectangle {double getArea() {

return width * height;

}double width;double height;

}

Page 149: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 149

เขยนคอนสตรคเตอร

class สเหลยม {สเหลยม(double ก, double ส) {

ความกวาง = ก;ความสง = ส;

}

...}

class Rectangle {Rectangle(double w,double h) {

width = w;height = h;

}...

}

Page 150: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 150

ทดสอบคลาส Rectangle

class TestRectangle {public static void main(String[] args) {

Rectangle r = new Rectangle(2, 3);System.out.println(r.getArea());

Rectangle p = new Rectangle(5, 7);System.out.println(p.getArea());

}}

Page 151: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 151

คอมไพลและรน

Page 152: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 152

เมธอด toString()

• พมพขอมลเกยวกบวตถ

class Rectangle {public String toString() {

String result = "Width = " + width;result += " Height = " + height;return result;

}...

}

Page 153: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

toString ของ Student

11/01/61Page 153

Page 154: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

ผลการรน

11/01/61Page 154

Page 155: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 155

การเรยกเมธอด toString()

• System.out.println( rect.toString() );• System.out.println( rect );

System.out.println( R1.toString() );

Page 156: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 156

เมธอด equals()

• เปรยบเทยบแอททรบวท• ไมใชเครองหมาย == เพอเปรยบเทยบวตถ

class Rectangle {public boolean equals(Rectangle other) {

return (width == other.width) && (height == other.height);}...

}

Page 157: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

ผลการรน

11/01/61Page 157

Page 158: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 158

Page 159: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 159

คาประกอบ (modifiers)

Page 160: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 160

คาประกอบการเขาใช

• ประกอบกบการประกาศแอททรบวตหรอเมธอด • private

– วตถตางคลาสไมสามารถเขาใชได – การปกปองขอมลทาได – มกจะใหแอททรบวทมการเขาใชแบบ private

• public– อนญาตใหคลาสอนใชได – มกจะใหเมธอดมการเขาใชแบบ public

Page 161: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 161

คาประกอบการเขาใช

class Rectangle {public double getArea() {

return width * height;

}private double width;private double height;

}

Page 162: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 162

ทดลองเขาใชแอททรบวททถกปกปอง

public class TestPrivate { public static void main( String[] args) {

Rectangle rect = new Rectangle();rect.width = 10;

}}

Page 163: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 163

ทดลองเขาใชแอททรบวททถกปกปอง

Page 164: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 164

ทาไมเราควรกาหนดการปกปองแอททรบวท

• ความเปนสวนตวสามารถปองกนวตถอนๆเขามาทาลายคณสมบตบางอยาง – เลขบญชธนาคารตดลบแทนทจะเปนเลขศนยหรอเลข

บวก – ความกวางและความสงของสเหลยมนอยกวาหรอเทากบ

ศนย

• ทาใหเราสามารถเปลยนแปลงชนดของตวแปรเหลานนได โดยไมกระทบกระเทอนคลาสอนทใช คลาสของเรา

Page 165: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 165

การซอนวธการทางาน

• สามารถเปลยนแปลงวธการทางานของวตถไดโดยไมกระทบตอผใชวตถ

• เกดความยดหยน – เชน ถาเปรยบวตถเหมอนกบรถ และผใชวตถคอคนขบรถ

บรษทผผลตรถสามารถเปลยนเครองยนตรนใหม เปลยนระบบเบรค ฯลฯ โดยทคนขบยงสามารถขบรถได เหมอนเดม

Information hiding

Page 166: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 166

สเหลยมทผดปกต

• Rectangle rect = new Rectangle( -10, 10);• IllegalArgumentException

Page 167: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 167

การแจงวามความผดปกต

class Rectangle {public Rectangle(double w, double h) {

if (w <= 0 || h <= 0)throw new IllegalArgumentException();

width = w;height = h;

}...

}

Page 168: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 168

การแจงวามความผดปกต

Page 169: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 169

การเขาใชแบบอนๆ

• protected– เกยวของกบการสบทอด

• การเขาใชแบบแพคเกจ (package)– แพคเกจเปนทเกบรวมรวมคลาสทเกยวของกน – แพคเกจเปรยบไดกบโฟลเดอร– การเขาใชแบบแพคเกจไมตองใชคาประกอบใดๆ

Page 170: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 170

สแตตกเมธอด (static method)

• เมธอดของคลาส• รปแบบการประกาศ

– public static ชนดขอมลทสงกลบ เมธอด(พารามเตอร) { … }

• รปแบบการเรยกใช – คลาส.สแตตกเมธอด(พารามเตอร )

• ตวอยางการเรยกใช – int m = Math.round(12.5); – int n = String.valueOf(1234);

Page 171: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 171

ตวแปรของคลาส

• รปแบบ– private static ชนดขอมล ตวแปร;

• ตวอยาง– private static int count;

Page 172: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 172

คาคงทของคลาส

• รปแบบ– public static final ชนดขอมล ตวแปร=คา;

• ตวอยาง– public static final int TOTAL_SIDES = 4;

Page 173: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 173

Enum

Page 174: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 174

อนม

• ชนดขอมลทสรางขนใหม• มคา (value) ทเปนไปไดอยไมกคา

– คลาสสรางวตถไดมากมาย

• อนมมวตถนอย– อนม เกรด มไดเพยง 5 คา คอ A, B, C, D, F– อนม เพศ มไดเพยง 2 คา คอ ชาย, หญง – อนม สสญญาณไฟ มไดเพยง 3 คา คอ แดง, เหลอง,

เขยว

Page 175: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 175

การประกาศอนม

• รปแบบ– enum อนม { คา1, คา2, ...}

• ตวอยาง– enum Grade { A, B, C, D, F }

Page 176: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 176

การพมพคาทกคาในอนม

public class TestGrade1 {public static void main(String[] args) {

for (Grade grade : Grade.values()) {System.out.println(grade);

}}

}

Page 177: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 177

ตวแปรชนดอนม

public class Enum {enum Grade { A, B, C, D, F }

public static void main(String[] args) {Grade myGrade = Grade.A;

System.out.println(myGrade);}

}

Page 178: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 178

การกาหนดคาอนๆใหกบตวแปรอนม

public class Enum {enum Grade { A, B, C, D, F }

public static void main(String[] args) {Grade myGrade = Grade.A;

myGrade = 'Z'; //myGrade = Grade.Z; //

System.out.println(myGrade);}

}

Page 179: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 179

เมธอด

• อนมสามารถมเมธอดไดเหมอนกบคลาส• การเรยกใชเมธอดทาโดยผานตวแปรอนม

Page 180: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 180

อนมสญญาณไฟจราจร

public enum TrafficLight {

RED, GREEN, YELLOW;

public TrafficLight next() {

switch(this) {

case RED: return GREEN;

case GREEN: return YELLOW;

default: return RED;

}

}

}

Page 181: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 181

ทดสอบไฟจราจรpublic class Test {

public static void main(String[] args) {TrafficLight t = TrafficLight.RED;System.out.println(t);t = t.next();System.out.println(t);t = t.next();System.out.println(t);

TrafficLight u = TrafficLight.YELLOW;System.out.println(u.next());

}}

Page 182: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

Test_traffficLight

11/01/61Page 182

Page 183: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 183

Package

Page 184: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 184

แพคเกจ

• เปรยบไดกบโฟลเดอร • ประโยชน

– จดระเบยบคลาส– แกปญหาคลาสชอซากน

Page 185: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 185

การนาคลาสไปใสในแพคเกจ

• รปแบบ– package แพคเกจ;

• ตวอยางpackage somchai;

public class Rectangle {...

}

Page 186: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 186

การนาคลาสไปใสในแพคเกจยอย

• รปแบบ– package แพคเกจ.แพคเกจยอย ;

• ตวอยางpackage somchai.shape;

public class Triangle {...

}

Page 187: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 187

การตงชอแพคเกจ

• นยมตงเปนโดเมนเนมยอนหลง– com.mycompany– th.in.somchai

• ตอดวยชอแพคเกจยอย– th.in.somchai.shape

Page 188: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 188

การอางถงคลาสทอยในแพคเกจ

• สาหรบคลาสในแพคเกจเดยวกน– ใชชอคลาส

• สาหรบคลาสทอยตางแพคเกจ– รปแบบ

• แพคเกจ.คลาส;

– ตวอยางsomchai.Rectangle r;r = new somchai.Rectangle()

Page 189: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 189

ตวอยาง: คลาสสเหลยมในแพคเกจสมชาย

package somchai;

public class Rectangle {public void say() {

System.out.println("I'm a rectangle");}

}

Page 190: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 190

การอางถงคลาสทอยในแพคเกจ

package somchai;

public class TestRectangle {public static void main(String[] a){

Rectangle r;r = new Rectangle();r.say();

}}

package somying;

public class TestRectangle {public static void main(String[] a){

somchai.Rectangle r;r = new somchai.Rectangle();r.say();

}}

Page 191: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 191

การอมพอรตคลาสจากแพคเกจอน

• ขอดคอไมตองเขยนชอเตม

Page 192: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 192

การอมพอรตคลาส

• รปแบบ– import แพคเกจ.คลาส;– import แพคเกจ.*;

• ตวอยางimport somchai.Rectangle;import somchai.*;

Page 193: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 193

ตวอยางการอมพอรตคลาสสเหลยม

package somying;

public class TestRectangle {public static void main(String[] a){

somchai.Rectangle r;r = new somchai.Rectangle();r.say();

}}

package somying;import somchai.*;

public class TestRectangle {public static void main(String[] a){

Rectangle r;r = new Rectangle();r.say();

}}

Page 194: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 194

โฟลเดอรทใชเกบคลาส

• คลาส Rectangle อยในแพคเกจ somchai ดงนนไฟล Rectangle.java ควรอยในโฟลเดอร somchai

• คลาส TestRectangle อยในแพคเกจ somyingดงนนไฟล TestRectangle.java ควรอยในโฟลเดอร somying

Page 195: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 195

การคอมไพลและรน

Page 196: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 196

ผลการคอมไพล

• การคอมไพลไฟลซอรสโคดดวยคาสงในหนาทแลว ทาใหเกดไฟลไบตโคดในโฟลเดอรเดยวกน

Page 197: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 197

แยกไฟล .java กบ .class

• สรางโฟลเดอรชอ src เพอเกบซอรสโคด • สรางโฟลเดอรชอ classes เพอเกบไบตโคด• ใชคาสงตอไปนในโฟลเดอร src

Page 198: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 198

ออปชนการคอมไพลและรน

• การคอมไพลดวยออปชน -d หมายถงใหสรางไบตโคดในโฟลเดอรทกาหนด ในทนคอ ..\classes

• การรนดวยออปชน -cp หมายถงใหเครองจกรเสมอนจาวาหาคลาส (ไบตโคด) ในโฟลเดอรทกาหนด ในทนคอ ..\classes

Page 199: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 199

ทดลองตดออกทละคาและศกษาความหมาย

package somchai;public class Rectangle {

public void say() {System.out.println("I'm a rectangle");

}}

Page 200: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 200

แพคเกจไรชอ (default package)

package somchai;public class Rectangle {

public void say() {System.out.println("I'm a rectangle");

}}

• ไมสามารถอมพอรตคลาสจากแพคเกจไรชอได

Page 201: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 201

แพคเกจไรชอ

public class TestRectangle {public static void main(String[] a){

Rectangle r;r = new Rectangle();r.say();

}}

package somying;

public class TestRectangle {public static void main(String[] a){

Rectangle r;r = new Rectangle();r.say();

}}

Page 202: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 202

คลาสทใชไดภายในแพคเกจ

package somchai;public class Rectangle {

public void say() {System.out.println("I'm a rectangle");

}}

• คลาสในแพคเกจเดยวกนเทานนทสามารถเรยกใชได

Page 203: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 203

คลาสทใชไดภายในแพคเกจ

package somchai;

public class TestRectangle {public static void main(String[] a){

Rectangle r;r = new Rectangle();r.say();

}}

package somying;import somchai.*;

public class TestRectangle {public static void main(String[] a){

Rectangle r;r = new Rectangle();r.say();

}}

Page 204: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 204

การเขาใชแบบแพคเกจ

package somchai;public class Rectangle {

public void say() {System.out.println("I'm a rectangle");

}}

• คลาสในแพคเกจเดยวกนเทานนทสามารถเรยกใชได

Page 205: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 205

ตวอยางการอมพอรตคลาสสเหลยม

package somchai;

public class TestRectangle {public static void main(String[] a){

Rectangle r;r = new Rectangle();r.say();

}}

package somying;import somchai.*;

public class TestRectangle {public static void main(String[] a){

Rectangle r;r = new Rectangle();r.say();

}}

Page 206: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 206

แพคเกจทจาวาจดให

• จาวารน 5.0 มคลาสและอนเตอรเฟซรวมกนถง 3,279 อน

• จดหมวดหมไวเปนแพคเกจจานวน 166 แพคเกจ

Page 207: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 207

แพคเกจทจาวาจดให

Page 208: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 208

แพคเกจทเปนพนฐานของภาษาจาวา

• java.lang มคลาสทเราใชกนประจาไดแก String, StringBuffer และ Math – คลาสตางๆ ในแพคเกจนสามารถเรยกใชไดโดยไมตองอมพอรต

• java.util มคอลเลคชนคลาสซงใชในการเกบวตถอนๆ คลาสทจดการเกยวกบวนเวลา และคลาสอรรถประโยชนอนๆ

• java.awt และ javax.swing มคลาสสาหรบสรางสวนตดตอกบผใชแบบกราฟก

• java.applet มคลาสสาหรบใชสรางจาวาแอพเพลต

Page 209: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 209

การอมพอรตสแตตกแอททรบวทและเมธอด

Page 210: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 210

อมพอรตสแตตก

• อมพอรตแอททรบวทหรอเมธอดของคลาส (staticattributes and methods)

• รปแบบ– import static แพคเกจ.คลาส.คาคงทของคลาส;– import static แพคเกจ.คลาส.เมธอดของคลาส;

Page 211: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 211

อมพอรตสแตตก

• ตวอยางimport static java.lang.Math.PI;import static java.lang.Math.cos;

public class TestImportStatic {public static void main(String[] args) {

System.out.println(cos(PI));}

}

Page 212: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 212

Interface

Page 213: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 213

อนเทอรเฟซ

• วตถตางคลาสกน อาจจะมความสามารถบางอยางทเหมอนกน

• เชน นกและเครองบนเปนวตถทตางประเภทกน แตทงคกสามารถบนไดเหมอนกน

• จดใหคลาสนกและเครองบนอยในกลมเดยวกน• เรยกกลมของคลาสทมความสามารถเหมอนกนวาม

อนเทอรเฟซ แบบเดยวกน

Page 214: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 214

อนเทอรเฟซ บนได

interface บนได {บน();

}

Page 215: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 215

อมพลเมนต

class นก implements บนได {บน( ) {

// วธการบนของนก}

}class เครองบน implements บนได {

บน( ) {// วธการบนของเครองบน

}}

Page 216: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 216

การใชงานอนเทอรเฟซ

• ประกาศเรฟเฟอรเรนซ– บนได บ;

• สรางและอางถงวตถ– บ = new นก();

• เรยกใชเมธอดทประกาศในอนเทอรเฟซ– บ.บน();

Page 217: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 217

เรฟเฟอรเรนซทอางถงวตถตางคลาส

บนได บ;

บ = new นก();บ = new เครองบน();

บ.บน();

Page 218: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 218

พอลมอรฟซม (polymorphism)

บนได บ;บ = new นก();บ.บน();บ = new เครองบน();บ.บน();

• คาสงแบบเดยว แตไปทางานทเมธอดทแตกตางกน

Page 219: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 219

เรฟเฟอรเรนซไมสามารถเรยกใชไดทกเมธอด

บนได บ = new นก();บ.จก();

บนได ค = new เครองบน( );ค.จก( );

Page 220: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 220

อนเทอรเฟซทมมากกวาหนงเมธอด

interface บนได {บน();รอนลง();

}

class นก implements บนได {บน( ) {

// วธการบนของนก}รอนลง( ) {

// วธการรอนลงของนก}

}

Page 221: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 221

อมพลเมนตมากกวาหนงอนเทอรเฟซ

interface รองเพลงได {รองเพลง( );

}

class นก implements บนได , รองเพลงได {บน( ) { ไทยจาวา

// วธการบนของนก}รอนลง( ) {

// วธการรอนลงของนก}รองเพลง( ){

// วธการรองเพลงของนก}

}

Page 222: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 222

Page 223: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 223

คาคงท

Page 224: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 224

คาคงท

interface บนได {int เพดานบน = 1000;void บน( );void รอนลง( );

}

Page 225: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 225

คาคงท

interface บนได {public static final int เพดานบน = 1000;void บน( );void รอนลง( );

}

Page 226: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 226

การอานคาคงท

• คลาสทอมพลเมนตอนเทอรเฟซ บนได เขยนแค เพดานบน

• คลาสอนทไมเกยวของกบอนเทอรเฟซนตองเขยนชอเตมคอ บนได.เพดานบน

Page 227: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 227

สรางอนเทอรเฟซดวยภาษาจาวา

Page 228: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 228

อนเทอรเฟซ 'ตราคาได' (Priceable)

• กลมของคลาสทเปนสนคาในราน • เมธอด getPrice( )

Page 229: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 229

อนเทอรเฟซ 'ตราคาได' (Priceable)

public interface Priceable {int getPrice();

}

Page 230: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 230

คลาสไมจมฟน

• ชนละ 100 บาท

Page 231: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 231

คลาสไมจมฟน

public class Toothpick implements Priceable {public int getPrice() {

return 100;}

}

Page 232: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 232

ทดสอบคลาสไมจมฟน

public class TestPriceable1 {public static void main(String[] args) {

Priceable item = new Toothpick();System.out.println(item.getPrice());

}}

Page 233: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 233

คลาสเรอรบ

• วธคดราคาทซบซอนขน• เรอรบลาใหมจะมราคาหนงลานบาท • เรอรบทใชแลวราคาจะลดลงไปปละแสนบาท แต

ราคาจะไมตากวา 10,000 บาท

Page 234: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 234

คลาสเรอรบ

public class BattleShip implements Priceable {public int getPrice() {

int deprecation = age * 100000;return Math.max(originalPrice - deprecation, 10000);

}public void setAge(int year) {

age = year;}int originalPrice = 1000000;int age = 0;

}

Page 235: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 235

ทดสอบคลาสเรอรบ

public class TestPriceable2 {

public static void main(String[] args) {BattleShip ship = new BattleShip();ship.setAge(3);

Priceable item = ship;System.out.println(item.getPrice());

}}

Page 236: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 236

คลาสรถเขน

• คานวณราคาสนคา (Priceable) ทงหมดทอยในรถเขน

• เกบสนคาได 2 ชน

Page 237: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 237

คลาสรถเขน

public class Cart {Priceable[] items = new Priceable[2];

public int sumPrice() {int sum;sum = items[0].getPrice() + items[1].getPrice();return sum;

}}

Page 238: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 238

ทดสอบคลาสรถเขน

public class TestPriceable3 {public static void main(String[] args) {

Toothpick toothpick = new Toothpick();BattleShip ship = new BattleShip();ship.setAge(3);

Cart cart = new Cart();cart.items[0] = toothpick ;cart.items[1] = ship;System.out.println(cart.sumPrice());

}}

Page 239: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 239

อนเทอรเฟซกบการนากลบมาใชใหม

• ในอนาคต ทางรานตองการขายลง • เขากจะนาลงมาอยในกลมของสงทตราคาได • สามารถนาลงมาใสในรถเขนและคดราคาไดโดยไม

ตองไปแกไขคลาสรถเขน

Cart cart = new Cart();cart.items[0] = monkey;cart.items[1] = toothpick;

System.out.println(cart.sumPrice());

Page 240: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 240

interface Comparable<T>

• int compareTo(T o)– a negative integer : this < o– zero : this = o– a positive integer : this > o

Page 241: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 241

ตวอยาง Person

• เปรยบเทยบเงนเดอน

Page 242: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 242

Inheritance

Page 243: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 243

การสบทอด (inheritance)

• เลยนแบบการสบทอดลกษณะของลกจากพอและแม

• ขยายความสามารถของคลาสแม• เปลยนแปลงการทางานของคลาสแม

Page 244: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 244

การสบทอด

• รปแบบ– class คลาสลก extends คลาสแม

• ตวอยางclass แมว extends สตว { }class ปลา extends สตว { }class ลง extends สตว {}

มคลาสแมไดแคคลาสเดยว

Page 245: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 245

วตถในคลาสลกสามารถทางานตามเมธอดของคลาสแมได

ลง ล = new ลง();ล.กน();

Page 246: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 246

เพมเมธอดในคลาสลก

class ลง extends สตว {// เมธอดทเพมเขามาเกบลกมะพราว() { … }

}ลง ล = new ลง();ล.เกบลกมะพราว();สตว ส = new สตว();ส.เกบลกมะพราว();

Page 247: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 247

เพมแอททรบวทในคลาสลก

class ปลา extends สตว {// แอตทรบวตทเพมเขามา ชอ;

}

Page 248: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 248

พอลมอรฟซม (Polymorphism)

Page 249: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 249

การโอเวอรไรดเมธอด (override)

class ปลา extends สตว {// แอตทรบวตชอ;

// เมธอดนอน() {

// วธการนอนของปลา…

}}

Page 250: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 250

พอลมอรฟซม

Page 251: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 251

ความหมาย

• poly แปลวาหลายหรอมาก • morphism นนมาจากคาวา morph ซงแปลวา

รปราง• รวมกนแลวหมายถงความสามารถทส งหนงจะมได

หลายรปราง ซงเมอใชคานกบการโปรแกรมเชงวตถ กจะหมายถงการทคาสงแบบเดยวกนสามารถถกแปลไดหลายแบบ

Page 252: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 252

พอลมอรฟซมกบการนากลบมาใชใหม

• พอลมอรฟซมสนบสนน การนากลบมาใชใหม(reuse)

• ถาเราไดเขยนโปรแกรมทใชงานไดกบสตว โปรแกรมของเรายอมใชไดกบแมว ปลา และลงนอกจากนนถามคนสรางคลาสอกวนาขนมาใหม โปรแกรมทเราเขยนกสามารถใชไดกบคลาสอกวนาเชนกน

Page 253: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 253

การสบทอดในภาษาจาวา

Page 254: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 254

คลาสรปรางและคลาสทสบทอด

Page 255: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 255

คลาสรปราง

• รปรางเปนรปทอยในระนาบสองมต • มพนท

– เมธอด getArea() ใชคานวณหาพนทของรปราง

• มส– public enum Color { Red, Green, Blue } – เมธอด getColor()

Page 256: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 256

คลาสรปราง

public class Shape {public Shape() { color = Color.Red; }

public double getArea() { return 0; }

public void setColor(Color c) { color = c; } public Color getColor() { return color; }

private Color color;}

Page 257: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 257

ทดสอบคลาสรปราง

public class TestShape {public static void main(String[] args) {

Shape s1 = new Shape();System.out.println(s1.getColor());System.out.println(s1.getArea());

Shape s2 = new Shape();s2.setColor(Color.Blue);System.out.println(s2.getColor());System.out.println(s2.getArea());

}}

Page 258: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 258

คอมไพลและรน

Page 259: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 259

คลาสสเหลยมผนผา

class Rectangle extends Shape {...public double getArea() {

return width * height;}

}

Page 260: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 260

คลาส Object

Page 261: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 261

เมธอด toString()

public class Rectangle extends Shape {...

@Overridepublic String toString() {

String str = "Rectangle";str += " color=" + getColor();str += " width=" + width;str += " height=" + height;str += " area=" + getArea();return str;

}}

Page 262: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 262

เมธอด toString()

• เปนเมธอดทถกโอเวอรไรดจากคลาส Object

Page 263: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 263

คลาส Object

• แมของทกคลาส• เมธอดทนาสนใจ

– toString()– equals()– clone() – hashCode()

Page 264: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 264

เมธอด equals()

@Override public boolean equals(Object otherObject) {

if (otherObject instanceof Rectangle) { Rectangle otherRect = (Rectangle) otherObject;

boolean equalWidth = width == otherRect.width;boolean equalHeight = height == otherRect.height;

return equalWidth && equalHeight;}return false;

}

Page 265: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 265

เมธอด hashCode()

• จะสงจานวนเตมทเปนรหสแฮช เพอการคนหาขอมลทรวดเรว

@Overridepublic int hashCode() {

return (int) (width + height * 17);}

Page 266: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 266

เมธอด clone()

สรางวตถทเหมอนกบวตถทไดรบขอความ

@Overridepublic Object clone() {

Rectangle clone = new Rectangle(width, height);return clone;

}

Page 267: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 267

ทดสอบเมธอดทโอเวอรไรดจากคลาส Object

public class TestRectangle3 {public static void main(String[] args) {

Rectangle r1 = new Rectangle(2, 5);System.out.println(r1);System.out.println(r1.hashCode());

Rectangle r2 = new Rectangle(5, 2);System.out.println(r1.equals(r2));

Rectangle r3 = (Rectangle) r1.clone();System.out.println(r1.equals(r3));

}}

Page 268: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 268

สรปเมธอดในคลาสสเหลยมผนผา

Page 269: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 269

การหามโอเวอรไรด

Page 270: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 270

คลาสสเหลยมจตรส

public class Square extends Rectangle {public Square( double w) {

super(w,w);}...

}

Page 271: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 271

ไฟนอลคลาส

• ไมสามารถถกสบทอดได

public final class Square

Page 272: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 272

ไฟนอลเมธอด

• ไมสามารถถกโอเวอรไรดได

public class Shape {public final Color getColor() {

return color;}...

}

Page 273: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 273

การเขาใชแบบ protected

Page 274: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 274

การเขาใชแบบ protected

• คลาสลกสามารถใชเมธอดและแอททรบวททมการเขาใชแบบ protected ได

• คลาสทอยในแพคเกจเดยวกนกสามารถใชเมธอดและแอททรบวททมการเขาใชแบบ protected ได

• การเขาใชแบบนมความเขมงวดนอยกวาแบบprivate ซงหามคลาสอนใดเขาใช แตกอสระนอยกวาแบบ public ทใครๆกสามารถเขาใชได

Page 275: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 275

การเขาใชแบบ protected

Page 276: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 276

คลาสวงกลม

public class Circle extends Shape {protected double radius;

public Circle(double r) {radius = r;

}

public double getRadius() {return radius;

}...

}

Page 277: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 277

คานวณพนทของวงแหวน

public class Ring1 extends Circle {public double getArea() {

double outerArea = Math.PI * radius * radius; double innerArea = Math.PI * innerRadius * innerRadius; return outerArea - innerArea;

}...

}

Page 278: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 278

คานวณพนทของวงแหวน

public class Ring2 extends Circle {public double getArea() {

double outerArea = super.getArea();double innerArea = Math.PI * innerRadius * innerRadius; return outerArea - innerArea;

}...

}

Page 279: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 279

แอบสแตรกทคลาส (abstract class)

Page 280: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 280

คลาสทประกาศขนมาลอยๆ (Abstract Class)

• เมธอด getArea() ในคลาส Shape ไมควรสงคาศนยหรอคาใดๆกลบมา ทงนเพราะวาเราไมทราบวธคานวณหาพนทของวตถ Shape

public abstract double getArea();

• เมธอดทถกประกาศขนมาลอยๆ (abstract) นตองอยในคลาสทเปน abstract ดวยเชนกน คลาส Shape เขยนใหมไดดงน

public abstract class Shape {public abstract double getArea();...

}

Page 281: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 281

การใชงาน abstract class

• ไมสามารถสรางวตถในคลาสนได Shape s = new Shape();

• แตอางถงวตถในคลาสลกได Shape s;s = new Rectangle(3,2);s = new Square(5);

Page 282: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 282

พอลมอรฟซม

public class TestPolymorphism {public static void main(String[] args) {

Shape shape;

shape = new Rectangle(10, 20);System.out.println(shape.getArea());

shape = new Circle(10);System.out.println(shape.getArea());

}}

Page 283: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 283

การนามาใชอก

public class ShapeArray {public static double sumArea(Shape[] shapes) {

double sum = 0;for( Shape s : shapes) {

sum += s.getArea();} return sum;

}}

Page 284: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 284

การนามาใชอก

Shape[] s = new Shape[3];s[0] = new Triangle(10);s[1] = new Rectangle(10,20);s[2] = new Pentagon(20);

double d = ShapeArray.sumArea(s);

Page 285: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 285

ขอดขอเสยของการสบทอด

Page 286: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 286

ขอดของการสบทอด

• การนากลบมาใชใหม – ถาเราตองการสรางคลาสทมความสามารถคลายๆกบคลาสทมอย

แลว – เราอาจจะใชการสบทอดแทนทจะเขยนขนมาใหมหมด

• ความเปนมาตรฐานเดยวกน – คลาสพนฐานเปนการกาหนดโครงแบบในการระบความสามารถของ

วตถในคลาสลก

• เขาใจสาระสาคญไดงาย

Page 287: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 287

ขอเสยของการสบทอด

• โปรแกรมทางานชาลง – มคาใชจาย (overhead) ในคนหาและเรยกใชเมธอดของคลาสทสบ

ทอด – แตคาใชจายดงกลาวถอวานอยมากเมอเทยบกบประโยชนทไดรบ

จากการสบทอด

• โปรแกรมมขนาดใหญขน – แตหนวยความจาราคาไมแพง

• ความซบซอนเพมขน – ผใชตองหาตามคลาสตางๆ ทอยในผงการสบทอดจนกวาจะพบ

คลาสทอมพลเมนตเมธอดนน ปญหาทกลาวถงนมช อวาปญหาลกดง (Yo-yo problem)

Page 288: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 288

Composition

• ม Counter• สราง CounterUpDown

– class CounterUpDown extends Counterหรอ

– class CounterUpDown {Counter c;....

}

Page 289: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 289

Generics

Page 290: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 290

หวขอ

• นยามและประโยชน• ตวอยาง

– คลาส Pair– คลาส Stack

• Generic array creation• Generic Method• Bounded Type• Wildcard

Page 291: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 291

นยามและประโยชน

Page 292: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 292

Generics

• Generics is essentially the ability to have type parameters on your type.

• They are also called parameterized types or parametric polymorphism

Page 293: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 293

ประโยชน

• เขยนคลาสเพยงเวอรชนเดยว– List<E> vs ListOfInteger, ListOfString, etc

• type safety– คอมไพเลอรสามารถตรวจสอบประเภทขอมลได

List<Integer> list = new ArrayList<Integer>();list.add(10);String s = list.get(0); // compile fails

• โคดอานงาย– ไมตอง cast

Page 294: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 294

ใชระบประเภทของวตถทcollection ใชเกบ

List<String> list = new ArrayList();String s1 = "hello";StringBuffer sb = new StringBuffer("hello");list.add("hello");list.add(sb); // won't compile

Page 295: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 295

ตวอยาง

Page 296: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 296

คลาส Pair

public final class Pair<X, Y> {private X first;private Y second;public Pair(X first, Y second) {

this.first = first;this.second = second;

}public X getFirst() {

return first;} public Y getSecond() {

return second;}

}

Page 297: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 297

ทดสอบคลาส Pair

public class TestPair {public static void main(String[] args) {

Pair<Integer, String> pair;pair = new Pair(10, "somchai");System.out.println(pair.getFirst());System.out.println(pair.getSecond());

Pair<String, String> name;name = new Pair("somchai", "brown");System.out.println(name.getFirst());System.out.println(name.getSecond());

}}

Page 298: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 298

Stack

public class Stack<E> {

E items[];

int count;

void push(E e) {

items[count++] = e;

}E pop() {

return items[--count];

}...

}

Page 299: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 299

Stack

public class Stack<E> {

static final int MAX_ITEM = 32;

Stack() {

Object[] objects = new Object[MAX_ITEM];

items = (E[]) objects;

count = 0;}

...

}

Page 300: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 300

การใชงาน

Page 301: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 301

Generic Array Creation

import java.util.*;

public class ArrayOfList {public static void main(String[] args) {

List<String> [] lists;lists = new List<String>[10]; // compile fails

}}

Page 302: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 302

เหตผลทหามสรางอารเรยของ genericpackage genericarray;

import java.util.*;

public class GenericArray {public static void main(String[] args) {

List<String>[] arrayOfListOfString = null;// arrayOfListOfString = new ArrayList<String>[3]; // not allowed

List<Integer> listOfInteger = new ArrayList<Integer>();listOfInteger.add(10);listOfInteger.add(20);listOfInteger.add(30);

Object[] arrayOfObject = (Object[]) arrayOfListOfString ;arrayOfObject[0] = listOfInteger;// run-time error: ClassCastExceptionString s = arrayOfListOfString[0].get(2);

}}

Page 303: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 303

Upper Bounded

public final class PairWithBound<X, Y extends Comparable> {private X first;private Y second;public PairWithBound(X first, Y second) {

this.first = first;this.second = second;

}public X getFirst() { return first; }

public int compares(PairWithBound<X, Y> other) {return this.second.compareTo(other.second);

}}

Page 304: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 304

Wildcard (1)

import java.util.*;

public class ProcessList {public void print(List<Object> list) {

for (Object o : list)System.out.println(o);

}}

Page 305: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 305

Wildcard (2)

import java.util.*;

public class Test {public static void main(String[] args) {

List<Integer> list = new ArrayList<Integer>();list.add(10);list.add(20);list.add(30);ProcessList.print(list); // compile fails

}}

Page 306: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 306

Wildcard (3)

import java.util.*;

public class ProcessList {public static void print(List<?> list) {

for (Object o : list)System.out.println(o);

}}

Page 307: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 307

Lower Bound

Page 308: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 308

Generic Method

public class Max {static public <T extends Comparable> T max(T t1, T t2) {

if (t1.compareTo(t2) > 0) {return t1;

return t2;}

}

Page 309: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 309

Generic Method

public class TestMax {

public static void main(String[] args) {String s = Max.max("somying", "somchai");Integer i = Max.max(10, 20);System.out.println(s);System.out.println(i);

}}

Page 310: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 310

Wildcard

Page 311: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 311

Wildcard

• Wildcard– void printElements(List<?> myList) { ... }

• List<?> is the supertype of all kind of List

• Bounded wildcard– void printElements(List<? extends E> myList) { ... } – void printElements(List<? super E> myList) { ... }

Page 312: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 312

List of Unknown Type

import java.util.*;

public class TestUnknown {public static void main(String[] args) {

List<String> listOfString;List<?> listOfUnknown;listOfString = new ArrayList<String>();listOfString.add("hi");listOfUnknown = listOfString;listOfUnknown.add(new Object()); // compile failsObject obj = listOfUnknown.get(0);System.out.println(obj);

}}

Page 313: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 313

Bounded Wildcard

public void draw(List<Shape> shape) {for(Shape s: shape) { s.draw(this);

} }

public void draw(List<? extends Shape> shape) { // rest of the code is the same

}

ไมสามารถวาดList<Rectangle> ได

Page 314: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 314

อนเนอรคลาส (inner class)

อ. นฐพงศ สงเนยมhttp://[email protected]

Page 315: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 315

หวขอ

• อนเนอรคลาส• ตวอยางการใชงานอนเนอรคลาสเพอจดการกบ

เหตการณ• ประโยชนของ inner class• ประเภทของ inner class

Page 316: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 316

อนเนอรคลาส

Page 317: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 317

อนเนอรคลาส

• คลาสทอยภายในคลาสอน• The class that encloses it is called the outer

or top-level class.• มกใชเพอจดการกบเหตการณ (event)

Page 318: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 318

ตวอยางการใชงานอนเนอรคลาสเพอจดการกบเหตการณ

Page 319: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 319

เฟรมเปลา

import javax.swing.*;

public class NoButton extends JFrame {public static void main(String[] args) {

JFrame frame = new NoButton();frame.setSize(150, 70);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setVisible(true);

} }

Page 320: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 320

เฟรมเปลา

Page 321: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 321

เพมป มในเฟรม

import javax.swing.*;import java.awt.*;

public class OneButtonNoHandler extends JFrame {public OneButtonNoHandler() {

button = new JButton("One");add(button);getContentPane().setLayout(new FlowLayout());

}

JButton button;...

}

Page 322: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 322

เพมป มในเฟรม

Page 323: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 323

รบรการกดป ม

import javax.swing.*;import java.awt.*;import java.awt.event.*;

public class OneButton extends JFrame implements ActionListener {public OneButton() {

...button.addActionListener(this);

}

public void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(this, "You clicked One.");

}}

Page 324: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 324

รบรการกดป ม

Page 325: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 325

มสองป มในเฟรม

public class TwoButtons extends JFrame implements ActionListener {public TwoButtons() {

button1 = new JButton("One");button1.addActionListener(this);

button2 = new JButton("Two");button2.addActionListener(this);

add(button1);add(button2);getContentPane().setLayout(new FlowLayout());

}...

Page 326: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 326

มสองป มในเฟรม

public class TwoButtons extends JFrame implements ActionListener {public void actionPerformed(ActionEvent e) {

if (e.getSource() == button1) {JOptionPane.showMessageDialog(this, "You clicked One.");

}if (e.getSource() == button2) {

JOptionPane.showMessageDialog(this, "You clicked Two.");}

}...

}

Page 327: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 327

มสองป มในเฟรม

Page 328: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 328

ใช inner class

public class TwoButtonsWithMemberClass extends JFrame {class Button1Handler implements ActionListener {

public void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(null, "You clicked One.");

}}class Button2Handler implements ActionListener {

public void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(null, "You clicked Two.");

}}...

Page 329: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 329

ใช inner class

public class TwoButtonsWithMemberClass extends JFrame {public TwoButtonsWithMemberClass () {

JButton button1 = new JButton("One");button1.addActionListener(new Button1Handler());

JButton button2 = new JButton("Two");button2.addActionListener(new Button2Handler());

add(button1);add(button2);

getContentPane().setLayout(new FlowLayout());}...

Page 330: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 330

ใช inner class

Page 331: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 331

ขอดของ inner class

• Organization– Allows us to further organize package structure through

the use of namespaces• เขาใจงาย

– Sometimes a class is only needed by one other class– Sometimes a class needs access to many variables and

methods of another class– Sometimes a class is only needed once, for one object, in

one specific place• ประโยชน

– Handle GUI event– Thread– Timer

Page 332: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 332

ประเภทของอนเนอรคลาส

Page 333: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 333

ประเภทของอนเนอรคลาส

• Member classes (ตวอยางทผานมา)• Local classes • Anonymous classes • Static member classes (not a real inner class)

Page 334: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 334

Member class

class EnclosingClass { class MemberClass {

... } ...

}

Page 335: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 335

Member class

• defined as a member of a class. • instance specific and has access to any and

all methods and members

Page 336: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 336

ตวอยาง Member class

public class Stack { private Object[] items; //code for Stack's methods and constructors not shownpublic Iterator iterator() {return new StackIterator(); } class StackIterator implements Iterator {

int currentItem; public boolean hasNext() { ... } public Object next() { ... } public void remove() { ... }

} }

Page 337: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 337

Local class

class EnclosingClass { public void foo() {

class LocalClass {...

}...

} }

Page 338: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 338

Local class

• declared within a block of code and are visible only within that block, just as any other method variable.

• The object in this class cannot access local variable– Can access final variable

Page 339: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 339

Local inner class

public class TwoButtonsWithInnerClass extends JFrame {public TwoButtonsWithLocalClass() {

class Button1Handler implements ActionListener {public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(null, "You clicked One.");}

}class Button2Handler implements ActionListener {

public void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(null, "You clicked Two.");

}}JButton button1 = new JButton("One");button1.addActionListener(new Button1Handler());

Page 340: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 340

Anonymous inner class

class EnclosingClass { public void foo() {

someMethod(new SomeInterfaceOrClass() {public void implementedMethod() {

... }

});...

} }

Page 341: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 341

Anonymous Inner Class

• a local class that has no name • must always extend a super class or implement an

interface but it cannot have an explicit extends or implements clause

• must implement all the abstract methods in the super class or the interface.

• always uses the default constructor from the super class to create an instance

Page 342: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 342

ตวอยาง Anonymous inner class

public class TwoButtonsWithInnerClass extends JFrame {public TwoButtonsWithInnerClass() {

JButton button1 = new JButton("One");button1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(null, "You clicked One.");

}});JButton button2 = new JButton("Two");button2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(null, "You clicked Two.");

}});

Page 343: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 343

Static inner class

class EnclosingClass { static class StaticNestedClass {

... } ...

}

Page 344: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 344

Static inner class

• has access to all static methods of the parent, or top-level, class.

• cannot access instance variables of its enclosing class.

Page 345: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 345

Unit Test

Page 346: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 346

Unit Test

• Test เพอแสดงวามบกในโปรแกรม• Debug เพอแกบก• Unit Test

– ทดสอบความถกตองของคลาส– ชวยใหเรามนใจในคณภาพของซอฟทแวรและลดเวลาใน

การพฒนาซอฟทแวรลงไป – ชวยตรวจสอบเมอมการเปลยนแปลง (refactor)– JUnit

Page 347: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 347

XP (eXtreme Programming)

• Code the unit test first • ทาใหโปรแกรมเมอร

– ทราบวาตองเขยนอะไรบาง– รวาทางานเสรจเมอไร – พบปญหาเรวขน– บงคบใหตองออกแบบคลาสเพอใหตรวจสอบไดงาย– เขยนโคดใหพอทจะผานการทดสอบ– คนอนทราบวาคลาสของเราใชงานอยางไร (ดจาก Test

Code)

Page 348: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 348

คณสมบตของการทดสอบ

• การทดสอบควรทาโดยอตโนมต– ไมใชพมพอนพตทางคยบอรด กดป ม และดผลเอง

• ตวทดสอบตองทราบผลการทางานทถกตอง

Page 349: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 349

ความเชอ

• ทดสอบเพอแสดงใหเหนวาโปรแกรมทเราเขยนขนนนถกตอง– I get into the meanest, nastiest frame of mind that I can

manage, and I write the nastiest [testing] code I can think of; then I turn around and embed that in even nastier constructions that are almost obscene. - Knuth

• คลาสทผานการทดสอบแลวไมมขอผดพลาด– Testing can only prove the presence of bugs, not their

absence. -Dijkstra

• การทดสอบทาใหรจดทผดพลาดของโปรแกรม– Testing is not debugging

Page 350: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 350

JUnit

• A simple framework to write repeatable tests • Features

– Assertions for testing expected results – Test fixtures for sharing common test data – Test suites for easily organizing and running tests – Graphical and textual test runners

• http://www.junit.org/

Page 351: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 351

คลาสทจะทดสอบpublic class Rank {

public int a, b, c;public Rank(int a, int b, int c) {

this.a = a;this.b = b; this.c = c;

}public int go() {

if (a > b && a > c) return 1;

if (b > a && b > c) return 2;

return 3;}

}

เมธอด go() คนคาเปนตวเลข•ถา a มากทสด คนคา 1•ถา b มากทสด คนคา 2•ถา c มากทสด คนคา 3•ถามตวทเทากน คนคาเปนหมายเลขของตวแปรตวแรกทมากสด

Page 352: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 352

NetBeans: ทดสอบคลาส Rank

• ไปท Projects– คลกขวาทซอรสไฟล>Tools>Create JUnit Test– หรอ กด Ctrl+Shift+U

• ทเมธอด testGo()– ลบ fail() ทง– เขยน test case

Page 353: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 353

assertEquals(expectedResult, actualResult)

public void testGo() {System.out.println("go");

Rank instance = new Rank(1,2,3);

int expResult = 3;int result = instance.go();assertEquals(expResult, result);

}

• Test cases– ((1,2,3),3)– ((1,3,2),2)– ((3,1,2),1)

Page 354: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 354

ทดสอบทกครงหลงเปลยนแปลง

• เปลยนชอตวแปร a เปน aaaaaaaaaa• ทดสอบใหม

Page 355: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 355

setUp()public class RankTest extends TestCase {

Rank rank;

protected void setUp() throws Exception {rank = new Rank(0,0,0);

}

public void testGo1() {rank.b = 2;assertEquals(2,rank.go());

}public void testGo2() {

rank.c = 1;assertEquals(3,rank.go());

}...

}

Page 356: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 356

Test a Method that Returns Nothing

• เมธอดทเปน void ไมคนคา• เรยกเมธอดอนเพอตรวจสอบผลขางเคยงของการ

เรยกเมธอดทไมคนคา

Page 357: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 357

ทดสอบเมธอด setCharAt() ของคลาส StringBuilder

import junit.framework.*;

public class StringBuilderTest extends TestCase{public void testSetCharAt(){

StringBuilder sb = new StringBuilder("Tsubasa");char c = 'Z';sb.setCharAt(0,c);assertTrue(sb.charAt(0) == c);

}}

Page 358: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 358

Failure

Page 359: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 359

Failure

public void testEquals3() {System.out.println("testEquals3");AddOne b = new AddOne(20);assertEquals(21,b);

}

Page 360: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 360

ผลการทดสอบ

Testsuite: AddOneTestTests run: 4, Failures: 1, Errors: 0, Time elapsed: 0.01 sec

------------- Standard Output ---------------testInctestEquals1testEquals2testEquals3------------- ---------------- ---------------

Page 361: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 361

ผลการทดสอบ

Testcase: testEquals3(AddOneTest): FAILEDexpected:<21> but was:<20>junit.framework.AssertionFailedError: expected:<21> but was:<20>

at AddOneTest.testEquals3(AddOneTest.java:43)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

Page 362: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 362

Error

Page 363: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 363

Error

• หมายถงTestsuite: AddOneTestTests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.01 sec

• เกดขนในกรณทเกด exception แตไมถก catch• ไมไดเปนการบอกวาเราเขยนโปรแกรมผดพลาด• คนละความหมายกบการ throw Error ทวไป

– ปรกต JVM จะ throw Error ในกรณทเกดปญหาในระดบลางซงไมสามารถแกไขได เชน โหลดคลาสไมได

Page 364: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 364

ทดสอบการ throw Exception

import junit.framework.*;

public class ThrowerTest extends TestCase {public void testThrow() throws Exception {

System.out.println("testThrow");try{

Thrower.throw();fail("exception should be thrown");

} catch(IllegalArgumentException e) {}}

}

Page 365: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 365

ทดลอง throw Exception ตามทตวทดสอบคาดไว

public class Thrower {public static void throw() {

throw new IllegalArgumentException();}

}

Page 366: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 366

ผลการทดลอง throw Exceptionตามทตวทดสอบคาดไว

Testsuite: ThrowerTestTests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.01 sec

------------- Standard Output ---------------testThrow------------- ---------------- ---------------

Page 367: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 367

ทดลอง throw ผดประเภท

public class Thrower {

public static void throw() {throw new NullPointerException();

}}

Page 368: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 368

ผลการทดลอง throw ผดประเภท

Testsuite: ThrowerTestTests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.01 sec

------------- Standard Output ---------------testThrow------------- ---------------- ---------------Testcase: testThrow(ThrowerTest): Caused an ERRORnulljava.lang.NullPointerException

at Thrower.throw(Thrower.java:4)at ThrowerTest.testThrow(ThrowerTest.java:7)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

Page 369: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 369

ทดลองไม throw

public class Thrower {public static void throw() {}

}

Page 370: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 370

ผลการทดลองไม throw

Testsuite: ThrowerTestTests run: 1, Failures: 1, Errors: 0, Time elapsed: 0.01 sec

------------- Standard Output ---------------testThrow------------- ---------------- ---------------Testcase: testThrow(ThrowerTest): FAILEDexception should be thrownjunit.framework.AssertionFailedError: exception should be thrown

at ThrowerTest.testThrow(ThrowerTest.java:8)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

Page 371: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 371

โจทยคลาส

Page 372: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 372

1. คลาส Counter

• เมธอด– void up()

• นบขน

– int getNumber()• คนคาทนบได

• ทดสอบดวย JUnit

• แสดงตวอยาง GUI

Page 373: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 373

2. class TrafficLight

• เมธอด– String getColor()

• คนคาสของไฟจราจรขณะนน

– void next()

• GUI

Page 374: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 374

3. class Person

• แอตทรบวต– String name– double salary

• คอนสตรกเตอร– Person(String n, double salary)

• เมธอด– void setSalary(double s)– boolean hasHigherSalary(Person other)– void increaseSalary(int percent)

Page 375: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 375

ตวอยาง GUI

Page 376: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 376

4. class BankAccount• เมธอด

– void deposit(double amount)– void withdraw(double amount)– void transfer(BankAccount, double

amount)– double getBalance()

• ทดสอบการทางาน

Page 377: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 377

ฝากถอนดวย BankAccount

Page 378: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 378

โอนเงนดวย BankAccount

Page 379: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 379

5. class BankAccount with Exception

• แกไขคลาส BankAccount – void deposit(double amount)

• ให throw new IllegalArgumentException() เมอamount นอยกวาหรอเทากบ 0

– void withdraw(double amount)• ให throw new Exception() เมอ amount นอยกวา

หรอเทากบ 0– void transfer(BankAccount, double

amount)– double getBalance()

Presenter
Presentation Notes
unit test error
Page 380: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 380

โจทย enum

Page 381: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 381

Position

• PROFESSOR, ASSOCIATE_PROFESSOR, ASSISTANT_PROFESSOR, LECTURER

• boolean higher(enum Position)

Page 382: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 382

ทดสอบอนม Position

public class TestPosition {public static void main(String[] args) {

Position p = Position.PROFESSOR;Position q = Position.ASSISTANT_PROFESSOR;Position r = Position.LECTURER;System.out.println(p.isHigher(q));System.out.println(q.isHigher(p));System.out.println(q.isHigher(r));

}}

Page 383: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 383

โจทย interface

Page 384: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 384

class Person implements Comparator

• เปรยบเทยบตาแหนงกอน ถาตาแหนงเทากน ให เทยบเงนเดอน

• ตาแหนง– enum Position

Page 385: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 385

โจทยแพคเกจ

Page 386: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 386

HelloWorld

• ใช NetBeans สรางคลาส HelloWorld ในแพคเกจhello

• ไปท command prompt และลองรน

Page 387: Lec07 :: Object-Oriented Programmingsiam2dev.net/E_Learning/OOP/Lec07_Java_OOP_Class... · Agenda • Object Oriented Programming Topic – PART I : Java Syntax [ Lec01 – Lec05,

11/01/61Page 387

Counter

• เขยนคลาส Counter ในแพคเกจ somchai• เขยนคลาสเฟรมในแพคเกจ somying

– คลาสเฟรมใช Counter