Lec7-01 : OOP (Object-Oriented...

70
Lec7-01 : OOP (Object-Oriented Programming) 16-01-2563

Transcript of Lec7-01 : OOP (Object-Oriented...

  • Lec7-01 : OOP(Object-Oriented Programming)

    16-01-2563

  • Project งานกลุ่ม• กลุม่ละ 5 คน

    • พฒันาระบบ ใชห้ลกัการ OOP ดว้ยภาษา Java + NetBean + MySQL

    • Source code หรอืตวัโปรแกรม

    • รปูเลม่รายงาน

    • ค าน า

    • สารบญั

    • บทที ่1

    • หลกัการและเหตผุล /ทีม่าและความส าคญัของปญัหา

    • วตัถปุระสงค์

    • ขอบเขต

    • แผนการด าเนนิงาน Gantt Chart

    • เครือ่งมอืทีใ่ช้

    • ประโยชนท์ีค่าดวา่จะไดร้บั

    • บทที ่2 Bussiness Rule

    • บทที ่3 ผลการด าเนนิงาน

    • Class Diagram

    • หนา้จอโปรแกรม

    • บทที ่4 สรปุ

    • บรรณานกุรม

    ท ำเป็น Clip Video ลง Youtube- แนะน ำงำน (Introduction)

    - ช่ือเรือ่ง- สง่งำน อ. ดร. นฐัพงศ ์สง่เนียม- รูป- เป็นสว่นหนึ่งของรำย วิชำ ..รหสัวิชำ- แนะน ำสำขำ ..คณะ .. ม.- แนะน ำสมำชิกในกลุม่

    - อธิบำยงำน (Work)- หลกักำรและเหตผุล- อธิบำยงำนครำ่ว ๆ

    - อธิบำย- Code

    - สรุป

    1.

    2.

    3.

    สง่วนัสดุทา้ยวนัสอบปลายภาค

    CD + เลม่รายงาน + Youtube Link

    [email protected]

  • ความรู้เบ้ืองตน้ เก่ียวกบั Object Oriented Programming

    • ควำมรูเ้บือ้งตน้เก่ียวกบั Class• ควำมรูเ้บือ้งตน้เก่ียวกบั Object• ควำมรูเ้บือ้งตน้กำรสรำ้ง Class ในภำษำจำวำ• ควำมรูเ้บือ้งตน้กำรสรำ้ง Object ในภำษำจำวำ• กำรสรำ้ง เมธอด Method• กำรเรยีกใชง้ำน Method

    วิชาทีน่ศ. ควรเรียนก่อน OOAD : Object Oriented Analysis and Design

  • Object Oriented Programmingหลกัการเขยีนโปรแกรมเชงิวตัถ ุตามแนวคดิของ Alan kay ซึง่เป็นบคุคลทีน่ าเสนอหลกัการเชงิวตัถยุคุแรก ๆ ก็ไดใ้หค้วามเห็นวา่

    • โปรแกรมเชงิวตัถจุะตอ้งมองทกุสิง่ ทกุอยา่งในเป็นวตัถุ

    • ทกุสิง่ใน Program หรอื Software มองใหเ้ป็นวตัถุ

    • วตัถ ุคอื สิง่ทีเ่ราสนใจ ทีม่/ีประกอบไปดว้ยลกัษณะ (Attribute) และ พฤตกิรรม (behavior)

    • Attribute ลกัษณะทีบ่ง่บอกถงึวัตถนัุน้ ๆ

    • Behavior/Function ฟังกช์นั หรอืหนา้ที ่พฤตกิรรม ของวตัถนัุน้ ๆ

    • การสบืทอด / การรับทอดมรดก (Inheritance)

    • พอลมิอรฟิ์ซมึ (Polymorphism)

    • การซอ่นรายละเอยีด / การหอ่หุม้ (Information Hiding / Encapsulation)

  • Object Oriented Programming

    O1 O2

    O3O4

    message

    message

    message

    message

  • ประเภทของ Objectวตัถจุะแบง่ออก เป็น 2 ประเภท คอื

    • Tangible Object รปูธรรม

    • คน

    • สิง่ของ

    • สตัว์

    • วัตถทุีจั่บตอ้งได ้ รถยนต ์ เครือ่งบนิ อาหาร สนิคา้ กระดาษ โตะ๊ เกา้อี ้ อาจารย ์นักศกึษา ลกูคา้ หลอดไฟ ตูเ้ย็น รถมอเตอรไ์ซต์ ฯลฯ

    • Intangible Object นามธรรม

    • สิง่ทีม่องไมเ่ห็น ไมส่ามารถจับตอ้งได ้

    • กฎระเบยีบ

    • กฎเกณฑ์

    • ขอ้บงัคบั

    • กฎหมาย

    • เงนิ เป็นสกลุเงนิ

    • ภาษี

    • ภาพยนตร ์ ทีห่มายถงึตวัเรือ่ง

    • นวนยิาย

    • บทละคร บทบาท

    • การประมวลผล

    ตูเ้ย็นAttribute- ขนาด- สี

    - ยีห่อ้- ราคา

    Function/Behavior- เปิด- ปิด- ใสอ่าหาร- ท าความเย็น / ปรับอณุหภมูิ

    Attribute

    Function/Behavior

    กฎหมายAttribute

    - มาตรา- ชือ่กฎหมาย

    Function/Behavior- บงัคบั- แกไ้ข

  • Class & Instance

  • What is a class?

  • Attribute ของคนAttribute

    - ช่ือ- นำมสกลุ- อำยุ- สีผิว- แขน- ขำ - ล ำตวั- ฯลฯ

    อะไรท่ีบง่บอกวำ่เป็นคนได ้นั่นคือ attribute

  • Behavior ของคนBehavior

    - กินได้- นอนได้- เดิน- พดู- รอ้งเพลง- ..บอกช่ือได้- บอกอำยไุด้- ..

    สิ่งต่ำง ๆ ควำมสำมำรถตำ่งท่ีคน ท ำได ้ก็คือ Behavior ของคน

  • Attribute

    Attribute- จอ

    - ย่ีหอ้- แปน้พิมพ์- เมำส์- เคส- ...กวำ้ง- .. นน.- ... สงู- ...สี

  • CarAttribute

    - ลอ้- กระจก- ประตู- ย่ีหอ้- ปำ้ยทะเบียน- เงนิ x- กันชน- ไฟ- ตัวถัง- พวงมาลัย- สี- เคร่ืองยนต ์- เบาะ- ฯลฯ

    Problem Domain

    เรำจะพดูถึงสว่นส ำคญั หรอื ลกัษณะเดน่ของวตัถนุัน้ ๆเน่ืองจำกไม่สำมำรถสนใจทกุสิ่งอย่ำงไดเ้ก่ียวกบัวตัถนุัน้

    ดมุลอ้ กำ้นลอ้รถน๊อตหมอ้น ำ้ไมใ่ช่สิ่งท่ีสนใจ จงึไมไ่ดพ้ดูถึงเรยีกวำ่ Problem Domain

  • Behavior CarAttribute

    - ลอ้- กระจก- ประตู- ย่ีหอ้- ปำ้ยทะเบียน- เงนิ x- กันชน- ไฟ- ตัวถัง- พวงมาลัย- สี- เคร่ืองยนต ์- เบาะ- ฯลฯ

    Function/Behavior- สตำรท์- หยดุ- เลีย้ว- เปิดไฟ-เปิดเพลง- ฯลฯ

    - เปิดประตู- เปิดกระจก- เปิดทำ้ยรถ- ฯลฯ

  • Class

    • วตัถท่ีุ ลกัษณะ และฟังกช์นั เดียว จดัใหอ้ยูใ่นกลุม่เดียวกนั เรยีก กลุม่ของวตัถเุดียวกนั วำ่ คลำส (class)• คลำส คือ ประเภท ชนิด หรอื กลุม่ของวตัถุ

  • แมว ไมจ่ดัเป็น รถ เพรำะไมมี่ลอ้ ไมมี่พวงมำลยั

    บู ไมจ่ดัเป็น รถ เพรำะไมมี่ลอ้ ไมมี่พวงมำลยั

  • CAR , CAT , DOG คนละคลาส

    บู คือสนุขัตวัหนึ่ง instance ของ คลำส dog

  • Class Diagram (UML)

    ท ำไม ไมร่ะบ ุย่ีหอ้ และ รุน่ ของรถ***ท ำไม ไมพ่ดูถึงท่ีอยู ่หรอื เพศ ของนกัเรียน***Problem Domain

  • MobilePhone

    String bandname

    Button button

    Screen screen

    Antenna antenna

    Simm simNet

    call()

    receive()

    hangup()

    sendSMS()

    การสร้างคลาส

    • Data member…attributes

    • Method member..function/behavior

    MobilePhone

    - Bandname : String

    - bunton : Button

    - screen : Screen

    - antenna : Antenna

    - simNet : Simm

    + call()

    + receive()

    + hangup()

    + sendSMS()

    UML : Class diagramJava : Class diagram

  • ตั้งช่ือ Test_Mobile

  • • ใน 1 ไฟล ์สำมำรถมีคลำสไดห้ลำยคลำส

    • แตจ่ะมีคลำสหนึ่งท่ี เป็น public class• ซึง่เป็นคลำสท่ีตรงกบัช่ือไฟล์

    • Test_Mobile.java

  • Attribute (OO) → Data Member (Java)

    Accessibility- Private

    + Public# Protected

    MobilePhone

    - brandname : String

    - button : Button

    - screen : Screen

    - antenna : Antenna

    - simNet : Simm

    + call()

    + receive()

    + hangup()

    + sendSMS()

    Data Member

    Accessibility/Modifier Type attr_name;

    private String brandname;

    private String model;

    Modifier ค ำประกอบprivatepublicprotected

    default

  • Attribute

    • PDT: Primitive Data Type

    • ADT: Abstract Data Type

    IntegralFloating-PointBooleanCharacter

    รุน่ Stringย่ีหอ้ Stringรำคำ double

    จอภำพ จอปุ่ มกด ปุ่ มซิมเน็ต ซิมเสำสญัญำณ เสำ

    ดงันัน้ ตอ้งนิยำมคลำสเหลำ่นีข้ึน้มำเองจอภำพ จอปุ่ มกด ปุ่ มซิมเน็ต ซิมเสำสญัญำณ เสำ

    byte → Byteshort → Shortint → Integerlong → Long

    Type Wrapper Class

    PDT

  • นิยามคลาสเอง

    • Button

    • Screen

    • Antena

    • Simnet

  • การสร้าง Behavior(OO)→Method Member(Java)

    - Private

    + Public

    # Protected

    MobilePhone

    - brandname : String

    - button : Button

    - screen : Screen

    - antenna : Antenna

    - simNet : Simm

    + call()

    + call():boolean

    + receive()

    + hangup()

    + sendSMS()

    Accessibility void/return Method_name(parameter list) {

    }

    Method Member

    public void call(String number) {System.out.println(“calling to ..” + number);

    }

    public boolean call(String number) {System.out.println(“calling to ..” + number);return true;

    }

  • Method Member

  • Void method

    return method

  • PDT: Primitive Data Type

    ADT: Abstract Data Type

  • class

    Mobile

    Mobile-A SamsungNote9

    iPhone XR

    object

  • การสรา้งวตัถจุากคลาส ดว้ย keyword new

    รปูแบบ class_name a;

    a = new class_name();

    ตวัอยา่ง Mobile samsung;

    samsung = new Mobile();

    รปูแบบ class_name a = new class_name();

    ตวัอยา่ง Mobile samsung = new Mobile();

    1. ประกาศตวัแปรเป็นวัตถขุองคลาสนัน้กอ่น2. สรา้งอนิสแตนซด์ว้ย new

  • การสรา้งวตัถ ุจากคลาส Mobile

    new

    object

    class

    Samsung Note9 iPhone XS

  • new

    object

    class

    Samsung Note9 iPhone XS Huawei Y9huawei p20

  • Object Oriented Programming

    O3O4

    ขาย()

    message

    message

    message

    huawei p20

  • การเรยีกใชง้าน void Method

    • รปูแบบ• ชือ่วตัถ.ุเมธอด();

    • ObjectName.Method();

    • ตวัอยา่ง• samsung.call(“0990874433”);

  • การเรยีกใชง้าน Return Method

    • จะตอ้งมตีวัแปรมารองรับคา่ทีถ่กู return กลบัมา

    • หรอื แสดงคา่ที ่return ในSystem.out.println() ดงัตวัอยา่ง

    P.35

  • Call()

    sendSMS()

    sendLine(“Sticker”)

    playFacebook()

    Camera()

    กำรท ำงำนระหวำ่งวตัถุ

    นฐัพงศ ์สง่เนียม iPhone XR.call(“0990874433”)

  • MobilePhone

  • Attribute … Data Member

    class Mobile {

    //data member

    private String BrandName;

    }

    MobilePhone

    - String bandname

    Button button

    Screen screen

    Antenna antenna

    Simm simNet

    call()

    receive()

    hangup()

    sendSMS()

    accessibility

    - private+ public# protected

    default

  • MobilePhone

    - String bandname

    Button button

    Screen screen

    Antenna antenna

    Simm simNet

    call()

    receive()

    hangup()

    sendSMS()

    Button

    Aggregateวตัถ ุจะมีแอตทรบิิวทท่ี์เป็นเป็นสว่นประกอบแบบวตัถุ

    Aggregation Abstrationการประกอบกันจากวัตถุย่อยๆ เป็นวัตถุใหญ่ขึน้เช่น รถ เกิด ล้อ หลังคา เครื่องยนต ์พวงมาลัย .... ประกอบกันเป็นรถยนต์

  • MobilePhone

    Button Simm Screen

    Antenna

    Optional Component

    RequiredComponent

    Empty Class

  • ภาษาเชิงวตัถุยอมให ้นิยาม Typeข้ึนใหม่ได ้(Type ของวตัถุ กคื็อ class นัน่เอง)

  • Method ในภาษาจาวา

    •มี Return จะส่งผลกลับมายังส่วนเรียกใช้งาน•ไม่มี Return จะมี void น าหน้า

  • การเขียน Method ท่ีไม่มี Return

    Accessibility void ….. () {

    }

    Parameter list มไีดม้ากกวา่ 1หรอืไม่มกีไ็ด ้การสง่ผา่นพารามเิตอร ์ม ี2 วธีิ- pass by value /copy- pass by referece

    Modifier void ….. () {

    }

    public / private / protected

    Parameter list มไีดม้ากกวา่ 1หรอืไม่มกีไ็ด้

  • การเขียน Method ท่ีไม่มี Return ที่มี parameter

    Accessibility void ….. () {

    }

    Parameter list มไีดม้ากกว่า 1หรอืไม่มกีไ็ด้

    Calling……

  • การเขียน Method ท่ีมีการ Return

    accessibiliy Return-Type method-name ( parameter list) {

    [ statement ]

    return value

    }

    รูปแบบ

  • Encapsulation หลกัการห่อหุม้

    • Data

    • กำรจดักำรกบั DataTelevision

    - brandName: String- volume : Integer- picture : Picture- chanel : Integer

    + TurnON()+ TurnOff()+ Volumn(int vol)+ Chanel(int ch)+ Setting()

    เปิด()

    เปิด()

    Information Hidingการซ่อนรายละเอยีด

    ปรบัเสียง()

    +1- 1

  • MobilePhone

    - bandname : String

    - button : Button

    - Screen : Screen

    - antenna : Antenna

    - simNet : Simm

    - price : double

    call()

    receive()

    hangup()

    sendSMS()

    getBrandname():String

    OOVisibility

    JavaAccessibilityModifier

    + public- Private# protecteddefault

    PDT

    ADT

    return

  • Getter / Setter Method

    • Getter คือ เมธอด ท่ีใชใ้นกำรเรยีกด ู/ คืนคำ่ของ Attribute นัน้ๆ

    • Setter คือ เมธอด ท่ีใชใ้นกำรก ำหนดค่ำ ให ้กบั Attribute นัน้

    MobilePhone

    - bandname : String

    - button : Button

    - Screen : Screen

    - antenna : Antenna

    - simNet : Simm

    - price : double

    call()

    receive()

    hangup()

    sendSMS()

    getBrandname():String

    setBrandname(String bd)

  • Setter/Getter

    • การก าหนดยีห่อ้โทรศพัทม์อืถอื• setBrandName()

    • การเรยีกดยูีห่อ้• getBrandName()

  • ผลลพัธ์

  • Attributes พืน้ฐานมักจะถกูก าหนดใหม้ ีmethod ส าหรับ set และ getทกุตวัตามหลักการเชงิวตัถุ

    • เราใหท้ างานกบัขอ้มลูผา่น เมธอด

    ถา้โทรทศัน ์อยูใ่นระบบรา้นขายอปุกรณ์ไฟฟ้าสิง่ทีเ่ราจะสนใจ คอื ราคา price ดงันัน้โทรทศันจ์ะตอ้งสามารถก าหนดราคาสนิคา้ และเรยีกดรูาคาสนิคา้ได ้ก็จ าเป็นตอ้งจะสรา้งเมธอด getPrice() ,setPrice()

  • Setter เรยีกอกีอยา่งวา่เป็นMutator Method

    Getter เรยีกอกีอย่างวา่เป็น

    Accessor Method

  • โปรแกรมเชงิวัตถ ุ: ระบบการเรยีนการสอน

    สอน , ตดัเกรด

    เรยีน , ลงทะเบยีนเรยีน , รักษาสภาพ

    อาจารย์

    อาจารย ์ดร. นัฐพงศ ์สง่เนียม

    นักเรยีน

    สมชาย สมหญงิ สมศร ีสมนกึ

    ชือ่ต าแหน่งเงนิเดอืน

    สอน()ตดัเกรด()

    ชือ่เพศรหสัผลการเรยีน

    เรยีน()ลงทะเบยีน()สอบ()รักษาสภาพ()

    ระบบการเรยีนการสอน

    อาจารย ์ดร. นัฐพงศ ์สง่เนยีมอาจารย ์รณกร รัตนธรรมมาอาจารย ์สมชายอาจารย ์สมหญงิ

  • โปรแกรมเชงิวัตถ ุ: ระบบการจองหอ้งพักโรงแรม

    จอง เขา้พัก ยกเลกิ

    ออกใบจอง บนัทกึการจอง ยกเลกิ

    ลกูคา้

    นายนัฐพงศ ์สง่เนียม

    พนักงาน

    ชือ่ทีอ่ยู่เบอรโ์ทร

    จอง()ยกเลกิ()เขา้พัก()

    ...

    ...

    ...

    ...

    ...()

    ...()

    ...()

    ...()

    ...()

    ระบบการจองหอ้งพักโรงแรม

    นาย นัฐพงศ ์สง่เนยีมนาย สมชายนางสาว สมหญงิ

    หอ้งพัก

    ...

    ...

    ...

    ...

    ...()

    ...()

    ...()

    ...()

    ...()

    เชค็หอ้งพักบอกสถานะ

  • Use case การจองหอ้งพกัโรงแรม

    จอง

    ลกูคา้

    ลกูคา้ทั่วไป สมาชกิ

    ยกเลกิจอง

    เขา้ระบบ

    เขา้พัก

    เชค็เอาท์

    ตรวจสถานะของหอ้งพัก

    พนักงาน

  • การสร้างอินสแตนซ์ instance

    •ภำษำจำวำ จะใช ้Keyword new•รูปแบบ

    Type / Class var-name;Var-name = new Class()/Type

    Type / Class var-name = new Class()/Type

    1.

    2.

  • การสร้างวตัถุจากคลาส MobilePhone ในรูปแบบต่างๆ

  • หลกัการเชิงวตัถุ จะไม่ยอมใหก้ระท ากบัตวัแปร/ขอ้มูล โดยตรง• ตัวแปร price เป็นแบบ private ไม่

    สามารถเข้าถึงจากข้างนอกคลาส MobilePhone ได้

    • ถ้าจะเข้าถึงต้อง ผ่านเมธอดที่มีเท่านั้น ถ้าไม่มีก็เข้าไม่ได้

    • setPrice()

    • getPrice()

  • แบบฝึกหดั

    • จงเขียนโปรแกรมเพ่ือสรำ้งคลำสและวตัถ ุตำมรูปนี ้

    Student

    - Name : String- Tel : String- Address : String- Email : String- BOD : String- GPA : double

    + setName(String n)+ getName() : String+ setAddress(String addr)+ getAddress() : String+ setEmail(String e)+ getEmail():String+ setGPA(double gpa)+ getGPA() : double

    Somchai:Student Somying:Student Somboon:Student

    Is member ofobjects

    class

  • แบบฝึกหดั

    • จงเขียนโปรแกรมเพ่ือสรำ้งคลำสและวตัถ ุตำมรูปนี ้

    Student

    - Name : String- Tel : String- Address : String- Email : String- BOD : String- GPA : double

    + setName(String n)+ getName() : String+ setAddress(String addr)+ getAddress() : String+ setEmail(String e)+ getEmail():String+ setGPA(double gpa)+ getGPA() : double

    Somchai:Student Somying:Student Somboon:Student

    Is member ofobjects

    class

    Test_Student

  • แบบฝึกหดั

    • จงเขียนโปรแกรมเพ่ือสรำ้งคลำสและวตัถ ุตำมรูปนี ้

    Student

    - Name : String- Tel : String- Address : String- Email : String- BOD : String- GPA : double

    + setName(String n)+ getName() : String+ setAddress(String addr)+ getAddress() : String+ setEmail(String e)+ getEmail():String+ setGPA(double gpa)+ getGPA() : double

    Somchai:Student Somying:Student Somboon:Student

    Is member ofobjects

    class

    SUBJECTAssociation

    enroll