by : dr.nattapong songneam ...siam2dev.net/e_learning/oop/lec01_oop_concept_last... · c++ ....
TRANSCRIPT
By : Dr.Nattapong Songneamhttp://[email protected]@hotmail.com
Last update 16-11-2560
การพฒนาระบบงานทางคอมพวเตอรดวยวธการ
ของเทคโนโลยเชงวตถ การสรางชนดขอมล คลาส
คณสมบตของวตถ การรบทอด การหอหม โพลมอรฟซม
การวเคราะหและการออกแบบระบบงานเชงวตถ API
(Application Programming Interface) ของภาษาท
ใช ในการเขยนโปรแกรมเชงวตถ และการพฒนา
โครงงานเชงวตถ
สงกอนสอบ / สป. สดทายของการเรยนการสอน
พฒนาระบบงานดานเชงวตถ ดวยภาษา จาวา โดย
ใชโปรแกรม netbean IDE
ประกอบไปดวย
◦ ตวโปรแกรม / Source Code
◦ เอกสารประกอบโปรแกรม / รปเลมรายงาน
การเขยนโปรแกรมคอมพวเตอรม 2 แบบ
◦ การเขยนโปรแกรมแบบโครงสราง
◦ การเขยนโปรแกรมเชงวตถ
ภาษาเชงวตถนไดเรมมมาตงแตกอนป ค.ศ. 1960 และภาษาทเปนตนแบบในขณะนนคอ ภาษา Simula ทใชเปนหลกการของ Object ในการสรางโปรแกรม ทาใหระบบในการเขยนโปรแกรมมลกษณะทเขาใกลกบความคดมนษยในโลกความเปนจรงมากขน ตอมาภาษา Smalltalk กไดรบการพฒนาเขามาแทนท Simula
ในป 1967 ภาษา Simula67 ถกพฒนาทนอรเวย เพอชวยในการเขยนโปรแกรมสาหรบจาลอง (Simulation)
โดยทวไประบบทซบซอนจะประกอบดวยวตถจานวนมากททางานเกยวของกน โดยการสรางโปรแกรมทจาลองการทางานของแตละวตถไปทละขนจนกวาจะไดคาตอบซงแนวคดนเรยกวา การโปรแกรมเชงวตถ
1990s มภาษาเกาถกเพมเตมในสวนของการโปรแกรมเชงวตถ แตโดยพนฐานของภาษาจงทาใหกลไกไมเปนเชงวตถอยางสมบรณ
การเขยนโปรแกรมแบบโครงสราง คอ การเขยนคาสงเรยงตอกนไปเรอยๆ ทละ
บรรทด โปรแกรมจะเรมทางานจากคาสงแรกสดเรอยไปจนถงคาสงทายสด เปนอน
จบโปรแกรม อาจมการสรางเปนโปรแกรมยอยๆ ในโปรแกรมใหญบาง เพอลดคาสง
ทซ าซอน
ตวอยางเชน ภาษาเบสก ภาษาโคบอล ภาษาฟอรแทรน ภาษาปาสคาล และ ภาษาซ
การเขยนโปรแกรมเชงวตถ คอ การสรางวตถสมมตขนมากอน แลวเขยนคาสงนยาม
วตถนนจนสามารถทาใหวตถนนทางานตามทตองการได
ซอรสโคดของโปรแกรมเชงวตถแทนทจะเปนคาสงเขยนเรยงตอกนไปเรอยๆ จะเปน
นยามของวตถเขยนเรยงตอไปเรอยๆ แทนและโปรแกรมจะทางานไดเองถาวตถนน
ถกนยามขนอยางเหมาะสม
ตวอยางเชน ภาษาจาวา และภาษาซพลสพลส (ภาษาซพลสพลสเขยนไดทงแบบ
โครงสรางและวตถ)
การเขยนโปรแกรมเชงวตถตองใชเวลาในการศกษานานพอสมควร โดยเฉพาะอยางยง
นกเขยนโปรแกรมตองมความชานาญในการสรางวตถสมมตททางานตามอยางทเรา
ตองการได
โปรแกรมประยกตทใชงานจรงในปจจบนลวนแลวแตเขยนดวยโปรแกรมเชงวตถ
ทงสน
การศกษาการเขยนโปรแกรมเชงวตถจงเปนสงทนกเขยนโปรแกรมรนใหมทกคนควร
จะฝกฝนไว
ขอด : มความกะทดรด
ขอเสย : ตองใชเวลาศกษานาน โดยเฉพาะอยางยงคนทไมใชนกเขยนโปรแกรมมอ
อาชพ เพราะการเขยนโปรแกรมเชงวตถ ไมใชเรองทจะเรยนรไดในเวลาอนรวดเรว
การเนนทปญหาและองคประกอบของปญหาเพอการแกปญหานน เรยกวา Problem
space
เหมอนการจาลองความเปนจรงในชวตความเปนอยของมนษยทจะประกอบดวย คน
สตว สงของ และใชสงตางๆ เพอแกปญหา คอ แตละสง มหนาทในการแกปญหา
Problem Space
หญาในสนามรก
คนตดหญา >> ตดหญา ใชเครองตดหญา
เครองตดหญา >> ตดหญา ทาใหหญาทสงถกตด
ป�ญหา
(Problem)
กาหนดขนตอน
การแกป�ญหาSolution Space
กาหนดป�ญหาเป�น
องคประกอบProblem Space
การเขยนโปรแกรม
แบบโปรซเยอร
การเขยนโปรแกรม
เชงวตถ
ปญหาการหาพนทรปสเหลยมผนผาใดๆ
◦ สามารถหาพนทสเหลยมผนผาโดยใชสตร
พนทสเหลยม = กวาง x ยาว
◦ ดงนน ตองทราบ ความกวาง และ ความยาว ของสเหลยมเสยกอน
รบขอมล
(ความกวางและความยาว
ของสเหลยม)
แสดงพนทสเหลยม
ออกทางหนาจอ
คานวณ
พนทสเหลยม = กวาง x ยาว
ขนตอนการหาพนทรปสเหลยมผนผา
1. ในระบบนจะตองประกอบดวยวตถทจาเปนใดบาง
- หาวตถทเกยวของ เชน สเหลยม ความกวาง ความยาวและพนท
- ตดวตถทมลกษณะเหมอนกนออก
- วเคราะหลกษณะของแตละวตถ เชน สเหลยมควรมสวนประกอบ
เปนตาแหนง ความกวาง ความยาว และพนท เปนตน ดงนนเราสามารถ
รวม พนท ความกวางและความยาว เปนของสเหลยม
- วเคราะหพฤตกรรมของแตละวตถ ตอนนมวตถเดยวสเหลยม
อาจจะตอง คานวณเสนรอบรป คานวณพนท วาดตวเอง เปนตน
วตถสเหลยมผนผา
ความกวาง
ความยาว
พนท
พฤตกรรม
◦ คานวณความยาวเสนรอบรป
◦ คานวณพนท
◦ วาดตวเอง
ตอนนทราบวาจะมวตถใดอยในระบบบาง ขนตอนตอมา คอ ตองหาความสมพนธ
ของแตละวตถ แตในทนมวตถเดยวจงไมตองทา
โดยทมผคนมากมายทเชอวา Smalltalk คอภาษาเชงวตถ Programming อยางแทจรง ตอมาภาษา C++ กไดเกดขน ดวยหลกการเชงวตถเชนกน ภาษา C++ เปนภาษาทไดรบความนยมคอนขางมาก มการนาไปใชงานอยางกวางขวางในวงการตางๆ แตปจจบนภาษา java ไดเขามามบทบาทมากขนและเหมอนวาจะเขามาแทนท C++ ในไมชา ดวยความสามารถหลายๆ อยางของภาษา java ทสามารถลดขอเสยของ C++ ได
โปรแกรมภาษาเชงวตถ (Object-Oriented Programming Language : OOPL)
Object Orientation หมายถง การใช Object เปนตว
หลกเพอการพจารณาความเปนจรงตางๆ ทเกดขนในโลก
ดวยการมองทกๆ สงในโลกใหเปนวตถทงหมด และมองวา
กจกรรมทงหมดทเกดขนในโลกนเกดจากความสมพนธและ
ปฏสมพนธระหวางวตถ
การมองทกสงในโลกใหเปนวตถ เปนการทาใหปญหาทเปน
นามธรรม (Abstraction) กลายมาเปนรปธรรม เพอทาให
คอมพวเตอรสามารถแกปญหาเหลานนไดดวยการพฒนาเปน
ซอฟตแวร และการพฒนาซอฟตแวรทมการนาเทคโนโลย
Object มาใชงานกคอ การโปรแกรมเชงวตถ (Object –
Oriented Programming) นนเอง
10 8 2 7 5 4 7 1 9 24 12 45 6
10 8 7 8 5
4 7 1 9 24
12 45 6
MAX
if data[i] >= data[i+1] thenbegin
elseMAX data[i+1]
end
SWAP
Object – Oriented Programming (OOP) หรอ
การโปรแกรมเชงวตถ หมายถง การเขยนโปรแกรมท
ประกอบไปดวยกลมของ Object ซงแตละ Object จะ
ถกจดกลมอยในรปของคลาส (Class) โดยทแตละคลาส
สามารถมการถายทอดลกษณะ (Inheritance) กนลงมา
อยางเปนลาดบ (Hierarchy)
Object – Oriented Programming (OOP)
1. ความสามารถในการสบทอด (Inheritance)
2. ความสามารถในการเกบซอน (Encapsulation)
3. ความสามารถในการแปลงราง (Polymorphism)
4. ความสามารถในการจดการโครงสรางขอมลแบบเชง
นาม (Abstract)
Transform
Convert
ความงาย จาวากลาวไดวาเปนภาษาทงายตอการศกษา
ภาษาจาวากาจดสวนทมความซบซอนในภาษา C++ ออกไป เชน multiple Inheritance, automatic type conversion, point และ memory management ของ C++ ทาใหภาษาจาวาใชงานงายและมความซบซอนนอยลงกวา C++ มาก
เปนภาษาเชงวตถทสมบรณ
สวน C++ เปนภาษาผสม คอเขยนไดทงแบบ Procedural และ OOP ทสนบสนนหลกการเชงวตถ แตจาวาจะบงคบใหเขยนโปรแกรมไดดวยหลกการเชงวตถเทานน จงถอไดวาจาวาเปนภาษาทสามารถแสดงลกษณะเชงวตถไดอยางชดเจน เชนเดยวกบภาษา Smalltalk
การกนการผดพลาด (Robust)
ภาษาจาวาเปนภาษาทมความคงทน เนองจากภาษาจาวาม
ระบบปองกนและสามารถกาจดความผดพลาดเลกๆ นอยๆ ท
อาจเกดขนไดในระบบ โดยไมตองหยดการทางานของ
โปรแกรมดวยสาเหตเพยงเลกนอยเหลาน นอกจากนภาษาจาวายงไมสนบสนนการทางานโดยใช pointer เพราะ pointer
เปนสาเหตททาใหเกดความผดพลาดไดงาย
ความปลอดภยในการทจะประมวลผล (Secure)
ภาษาจาวาไดรบการพฒนาใหเปนภาษาสาหรบการ
ดาเนนงานบนระบบเนตเวรก ดงนนภาษาจาวาจงไดรบการ
สรางมาใหยดหลกความปลอดภยของขอมลบนระบบเนตเวรก
เปนสาคญ
มลตเธรด (Multithread )
เปนการอนญาตใหโปรแกรมมากกวา 1 โปรแกรมสามารถ
ทางาน ณ เวลาเดยวกนได ทาใหระบบทางานแบบ real-time
ไดมากขน ซงในภาษาโปรแกรมอนๆ การทา Multithreading
นน จะมความซบซอนมาก แตในภาษาจาวาจะสามารถจดการกบ Multithreading ไดอยางงายดาย
Architecture-neutral
จาวาสามารถทางานไดบนทกๆ ระบบ (Platform) เนองจากจาวาจะมการแปลงภาษา 2 ขนตอนคอ
การ Compile และ Interpreter โดยเมอภาษาจาวาไดรบการ Compile ออกมาเปนภาษาของ JVM แลว (Java Virtual Machine หรอ bytecode โดยทเรยกวา bytecode เพราะทกๆ คาสงของ JVM มขนาดเพยง 1 byte เทานน) จะสามารถนาโคดทไดมาไปทางานไดบนเครองใดๆ ทมชดคาสงของ JVM ตดตงอย ดงนนภาษาจาวาจงเปนภาษาทไมขนอยกบระบบใดๆ
• High Performance •
ในภาษาจาวาจะอนญาตใหเขยนโคดจาวาเพอเรยกใชงานโปรแกรมภาษาอนไดดวย เชน ภาษา C++ นอกจากน ในการประมวลผล JVM ไปเปนชดคาสงทสามารถทางานไดกบเครองคอมพวเตอรใดๆ นนจะใชเวลาในการประมวลผลนอยกวาเวลาทใชในการ Compile ภาษาอนๆ
วตถ (Object) คอ ตวแทนของบคคล สถานท หรอสงของทสนใจในเหตการณหนง ซงอาจจบตองไดหรอจบตองไมได
Attributes
Function
เกาอ
อาจารย
นกศกษา
คอมพวเตอร
แอปเปล
Tangilbe
wh h
b
r
1. จบตองได / รปธรรม (Tangible)
◦ คน สงของ ตนไม พช สตว
2. มองไมเหน จบตองไมได (intangle)
◦ กฎหมาย บทเรยน เนอหา ภาพยนตร ...
Object เปนองคประกอบสาคญของการเขยนโปรแกรมท
สามารถรบคาและแสดงสงคาได และจากนยาม Object คอ
ตวแทนของสงของทอยในโลกของความเปนจรง ซงอาจเปนสงทจบตองไดหรอไมได จะตองมคณลกษณะ (Attribute) ท
บงบอกวาเปน Object ของอะไร และมพฤตกรรม (Behavior)
ทบงบอกใหทราบวา Object นนทาอะไร ดงนน Object จะ
สามารถตอบสนองตอสงทกระทาในการรองขอสงตางๆ ได
1. identity คอ เอกลกษณเฉพาะตวททาให Object ของคลาส
หนงๆ แตกตางจาก Object ของอกหนงคลาสหนง ซงใน
ภาษาจาวา identity จะหมายถง Attribute หรอตวแปร
(Variable)
2. State คอสถานะของ Object ณ เวลาหนงๆ ซงสามารถ
เปลยนแปลงไดเมอมการกระตนจาก Object อนโดยการสง
Message ในภาษาจาวา State จะหมายถงคาของ Attribute
(Value of Attribute)
3. Behavior คอ พฤตกรรมท Object กระทาและตอบสนองทก
ครง โดยการกระตน Object อนโดยการสง Message ตอกนใน
ภาษาจาวา Behavior กคอ Method
ในทาง OOP คณสมบตของ Object (identity+behavior)
ทคลายกนจะถกจดไวในคลาสเดยวกน ดงนนการแยกแยะ Object ทสรางจากคลาสเดยวกนจงใช State ในการพจารณา
เชน ชอของ Object (คาของตวแปร “name”) เปนตน สวน
การแยกแยะ Object ทสรางจากคลาสตางกน จะใช identity
และ Behavior ในการพจารณาเพราะ identity และ behavior
ของ Object ตางกนทาใหจดอยตางคลาสกนนนเอง
แนวความคดทใชในการเขยนโปรแกรมในปจจบนจะใช 2 แนวความคดหลกๆ ไดแก แนวความคดการเขยนโปรแกรมแบบโครงสราง และแนวความคดเชงวตถ
แนวความคดนเปนการจดการคาสงตางๆ ใหมรปแบบและมาตรฐานทสามารถเขยนโปรแกรมได ง าย อกทงยงมการตรวจสอบการทางานของโปรแกรมไดโดยไมย งยาก เมอเขยนโปรแกรมกเหมอนกบการเขยนหนงสอหรอการอานหนงสอ คอมจดเ รมต นจากซ ายไปขวา และจากบนลงล างเหมอนการอ านหนงสอ
เปนการเขยนโปรแกรมเพอใหเปนไปตามหลกการเชงวตถ โดยผเขยนโปรแกรมตองพยายามมองรปแบบวตถใหออกกอน ซงตองอาศยจนตนาการพอสมควร
แนวคดการเขยนโปรแกรมแบบดงเดมมกนยมใช การเขยนโปรแกรมเชงกระบวนการ (Procedural Programming) ซงใหความสาคญกบขนตอนกระบวนการททา โดยแบงโปรแกรมออกเปนสวนๆตามลาดบขนตอนการทางาน แตแนวคดการเขยนโปรแกรมเชงวตถนนใหความสาคญกบ ขอมล(data) และ พฤตกรรม(behavior) ของวตถ และความสมพนธกนระหวางวตถกนมากกวา
เมอมการหยอดเหรยญเขาต: ตรวจสอบจานวนเหรยญและชนดของเหรยญ แสดงผลชนดของนาทสามารถเลอกซอได ตรวจสอบจานวนนากระปองทมอยในต
รบผลการเลอกชนดนา สงนาทเลอกออกมาจากชอง จดเกบเงนเขาระบบ หากมเงนทอน ใหทอนเงนทเหลอ ทชองรบเงนทอน
ตขายเครองดมอตโนมต ประกอบดวยสวนประกอบตางๆไดแก หนวยตรวจสอบและจดการเรองเงน หนวยจดการเครองดม หนวยแสดงผลและรอรบคาสง
หนวยตรวจสอบและจดการเรองเงน มขอมลเกยวกบเงนทไดรบ และเงนทมอยในระบบ สามารถรบและตรวจสอบเงนทหยอดเขามาได และทอนเงนได
หนวยจดการเครองดม มขอมลชนดของเครองดม จานวนเครองดม สามารถจดเตรยมชนดเครองดมทพอกบเงนทหยอด และสามารถจายเครองดมออกมาจากตได
หนวยแสดงผลและรอรบคาสง มหนาทรอรบคาสง และแสดงผลเงนทหยอดเขามา
ต.ย. สมมต ราคา สนคา 125.75 จายแบงคหนงพนบาท (1000) จะตอง
ทอนออกมาเปน 874.25 บาท
แบงค 500 จานวน 1 ฉบบ แบงค 100 จานวน 3 ฉบบ แบงค 50 จานวน 1 ฉบบ แบงค 20 จานวน 1 ฉบบ เหรยญ 10 จานวน 0 เหรยญ เหรยญ 5 จานวน 0 เหรยญ เหรยญ 1 จานวน 4 เหรยญ เหรยญ .50 จานวน 0 เหรยญ เหรยญ .25 จานวน 1 เหรยญ
1. ตรวจสอบจานวนเงนและชนดของเงนทรบมา
2. ตรวจสอบราคา และ จานวนสนคา
3. คานวณจานวนเงนและแสดงผลจานวนเงนทงหมด
4. แสดงจานวนเงนทอนทงหมด
5. ทอนเงนโดยเลอกจากชนดและจานวนเงนมากสดกอน
6. ทอนเงนและชนดเงนตามเศษทคานวณแลว
7. จายสนคาตามรายการทเลอก
กลม 1
1. ตองมเรมตน
2. ....
3. ....
4. ตองมสนสด
START
STOP
GIGO:Gabag In Gabag out
1. ตองมเรมตน
2. ....
3. ....
4. ตองมสนสด
START
STOP
ขนตอนแรก ตอง
รบจานวนเงนเขามา
รบ ราคาสนคา ทตองจาย
คด เงนทตอง ทอน คดยงไง .....
เงนทอน = เงนทรบเขามา - ราคาสนคา
• INPUT• PROCESS• OUTPUT
Exchange = Money - Price
874.75 ทาอยางไรถงจะหาแบงค 500
เศษทเหลอ
MOD%
/ DIV ไมสนใจเศษ
\ MOD เอาเศษทเหลอ
B500 = Exchange / 500Tmp = Exchange % 500
274.751
274.75 ทาอยางไรถงจะหาแบงค 100
เศษทเหลอ
MOD%
/ DIV ไมสนใจเศษ
\ MOD เอาเศษทเหลอ
B100 = Exchange / 100Tmp = Exchange % 100
274.751
การเขยนโปรแกรมเชงวตถ เปนวธการเขยนโปรแกรมแบบใหม ซงจะเรยกโปรแกรมยอยททาหนาทเฉพาะวา Object และยงรวม data เขาเปนสวนของ Object ดวย นอกจากนโปรแกรมเชงวตถยงมโครงสรางพเศษนอกเหนอจาก Procedure Programming หรอ Module Programming คอ
การทางานของแตละ Object จะไมสนสดลง เมอกระบวนการทางานของโปรแกรมจบการทางานบน Object นนแลว ซง Object ทอยในโปรแกรมเหลาน พรอมเสมอในการเรมทางานตอตาแหนงเดมเมอเกดการเรยกใชงาน Object อกครง ซงแตกตางจากการเขยนโปรแกรมในแบบอนๆ ทโปรแกรมยอยจะตองเรมการทางานใหมเมอถกเรยกใชอกครง ดงนนเทคนคนจงชวยลดปญหาทเกดขนจากการเขยนโปรแกรมดวยวธอนๆ ได
Object 1
data
Object 2
data
Object 3
data
Object 4
data
แตละ Object สามารถตดตอสอสารกนไดโดยการสง Message ไปท Object อน
• คลาส (Class) • วตถ (Object) • การหอหม (Encapsulation)• การรบทอดมรดก (Inheritance)• นามธรรม (Abstraction )• พอลมอรฟซม ( Polymorphism )
คลาส (Class) - ประเภทของวตถ เปนการกาหนดวา วตถ จะประกอบไปดวย ขอมล (data) หรอคณสมบต (property) และ พฤตกรรม(behavior)หรอการกระทา(method) อะไรบาง ซง คลาส (เชน มนษย) เปนโครงสรางพนฐานของการเขยนโปรแกรมเชงวตถ
วตถ (Object) - โดยมากจะเรยกวา ออบเจกต คอ ตวตน(instance) ของ คลาส(เชน นายทกษณ, นายสนธ) ซงจะเกดขนระหวาง run-time โดยแตละ ออบเจกต จะมขอมลเฉพาะของตวเอง ทาให ออบเจกต แตละ ออบเจกต ของ คลาส ซงใช source code เดยวกนมคณลกษณะและคณสมบตทแตกตางกน
Encapsulation - การปดบงขอมล เปนวธการกาหนดสทธในการเขาถงขอมล หรอการกระทากบ ออบเจกต ของ คลาสนนๆ ทาใหแนใจไดวาขอมลของออบเจกตนนจะถกเปลยนแปลงแกไขผานทาง methods หรอ properties ทอนญาตเทานน (เชน การกาหนดตาแหนงทางการเมอง เปน public method ทผอนสามารกระทาได สวนการลาออกจากตาแหนง เปน private method ทมแต ออบเจกต ของ คลาส เทานนทจะสามารถทาได แตการกดดนและการขบไลสามารถสราง data ทอาจจะสงผลเกดการลาออกไดเชนกน)
Inheritance - การสบทอดคณสมบต เปนวธการสราง คลาสยอย ทเรยกวาซบคลาส (subclass) ซงจะเปนกาหนดประเภทของวตถใหจาเพาะเจาะจงขน ซง ซบคลาส จะไดรบถายทอดคณสมบตตางๆมาจากคลาสหลกดวย (เชน คลาส มนษย สบทอดมาจาก คลาส สงมชวต)
Abstraction - นามธรรม เปนการแสดงถงคณลกษณะและพฤตกรรมของ object เทาทจาเปนตองรบรและใชงาน โดยซอนสวนทเหลอเอาไวเพอไมใหเกดความสบสน เชน ตามปกตแลว นายนฐพงศ จดเปนตวตนของ คลาสมนษย ซงจะมพฤตกรรม การกระทาทกอยางทตามทกาหนดไวตามโครงสรางของ คลาส มนษย แตในบางกรณทนาไปใชงาน เราไมตองการใหเกดการสบสนตอการใชงานหรอการจดประเภทมากเราสามารถจดการหรอใชงาน ออบเจกต นายนฐพงศ ใหอยในรปของสงมชวต กได
Polymorphism - ภาวะทมหลายรปแบบ เปนวธการกาหนดรปแบบการกระทาทเหมอนกนแตไดผลทแตกตางกน เชน การเปลงเสยง เปน method หลกของ คลาส สงมชวต ซงมคลาส มนษย และคลาสสนข เปน ซบคลาส แตผลของการเปลงเสยงของออบเจกตจากคลาสทงสองจะออกมาไมเหมอนกน
import javax.swing.*;
import java.awt.*;
public class CardView extends JLable
{
private ImageIcon icon;
public CardView(VCard card)
{
getImage(card.getImage());
setIcon(icon);
setBackground(Color.white);
setOpaque(true);
}
Object 1
data
private void getImage(String name)
{
java.net.URL url =
this.getClass().getResource(name);
icon = new ImageIcon(url);
}
}
Object 2
data
…Break..
เปนการจาลองความเปนจรงในชวตความเปนอยของมนษยทจะประกอบดวย คน สตว สงของ และใชสงตางๆ เพอแกปญหา โดยแตละสง มหนาทในการแกปญหานน ๆ
ตองการหาความบนเทงดวยดนตรกตองมสงตางๆ คอเครองดนตรและคนเลนดนตร เปนตน
แกไขปญหาดวยโปรแกรมททาตามลาดบขนตอนทไดกาหนดไว
มการเรยกใชโปรแกรมยอยทสรางขน
แกปญหาโดยมองสงตาง ๆทอยในโปรแกรมเปนวตถ
วตถแตละชน มคณสมบต และความสามารถแตกตางกนออกไป
วตถตดตอการดวยวธการสงขาวสารถงกน
#include <stdio.h>
main () {
int width , length, area ;
width = 10 ;
length = 5 ;
area = width * length ;
printf (“Area = %d\n”,area) ;
return 0
}
ทกๆ สงเปนวตถ
โปรแกรม คอ กลมของวตถทสงสารบอกกนเพอทางาน
วตถแตละวตถมหนวยความจา
วตถตองมชนด
วตถทจดอยในประเภทเดยวกนยอมไดรบขาวสารเหมอนกน
Alan key เปนผหนงทพฒนาตวแปร small Talk ซงเปนตนแบบของการเขยนโปรแกรมเชงวตถ ไดใหนยามของภาษาเชงวตถไวดงน
องคประกอบของโปรแกรมคอมพวเตอรทก ๆ สวนจะตองเปนวตถซงกฎขอนเองททาใหลามแปลภาษาสวนมากรวมทง JAVA ดวย ไมเปนภาษาเชงวตถแบบบรสทธเพราะในลามแปลภาษา JAVA ยงมบางสวนทไมเปนวตถ เชน การกาหนดตวแปร เปนตน
Object
โปรแกรมในความหมายของการเขยนโปรแกรมเชงวตถ กคอ กลมของวตถทสงขอความขาวสาร(Message) ถงกนและกนเพอบอกใหวตถทางาน
วตถในความหมายของการเขยนโปรแกรมเชงวตถ จะตองมหนวยความจาของตวเอง หรอนนคอสวนทเกบขอมลสวนของวตถนนๆ เองซงเราเรยกวา attribute
สวนของขอมลนอาจจะประกอบขนจากวตถอนๆ ได เปนทมาของการเกดคณสมบตการถายทอดและคณสมบตของ
องคประกอบคอมโพสตMobilePhone
String bandnameButton buttonScreen screenAntenna antennaSimm simNet
call()receive()hangup()sendSMS()
Attribute
ชนดของวตถดงกลาวกคอคลาส (Class) ในการเขยนโปรแกรมเชงวตถจะตองเขยนคลาสขนมากอนเสมอ แลว
จงจะสรางวตถจากคลาส ดงนนวตถจงจะตองอยในคลาสใดคลาสหนง
ดงนนคลาสเปรยบเหมอนแมพมพ สวนวตถกคอสงทเกดจากแมพมพ วตถทเกดจากคลาสเดยวกนจงมคณสมบตพนฐานเหมอนกน
MobilePhone
String bandnameButton buttonScreen screenAntenna antennaSimm simNet
call()receive()hangup()sendSMS()
:siemens
:ericsson
:nokia
วตถทอยในประเภทเดยวกนยอมไดขาวสารเหมอนกน คณสมบตขอนทาใหการเขยนโปรแกรมเชงวตถมประสทธภาพเพมขนเพราะชนดของวตถมไดกาหนดหรออยอยางโดด ๆ แตสามารถจดเปนกลม ผเขยนคาสงสามารถกาหนดชนดยอย ๆ ของวตถไดอกเชน คลาสคอ shape เราสามารถแตกออกเปนชนดทจาเพาะลงไปเปน Circle, Triangle, Rectangle เปนตน ดงนนเมอวตถในคลาสCircle สามารถไดรบขาวสารเหมอนกบ Triangle และ Rectangle
การซอนรายละเอยด (information hiding) การเชอมตอ (Interface) การนาวตถมาใชใหม (Reusable) การพองรป: หนงรปหลายพฤตกรรม (Polymorphism)
มผสงเกตเหนวาในชวตประจาวนของเรานน ไมจาเปนตองทราบหรอรทกเรองกสามารถใชงานสงของนนๆ ได เชน
โทรทศนทมอยตามบาน เรา
ไมตองทราบการทางานของ
อปกรณภายในของมน แต
เรากสามารถเปดเครองและ
ดรายการโปรดของเราได
เพยงรวธการกดปมตางๆ
โดยปรกตจะเชอมตอระหวางผใชกบคอมพวเตอร เรยกวา user interface
แตคาวาอนเตอร เฟสสาหรบวตถคอ สวนทบอกวาวตถนนใหบรการหรอสามารถทาอะไรไดบาง
ชฟมสวนทใชงานการตดตอกบอปกรณภายนอก interface
Information hidingเราจะไมรการทางานภายในของชฟเพราะถกซอนรายละเอยดไวแตยงสามารถใชงานตามปกตหากชฟชนนเสยกสามารถหาตวอนมาเสยบแทนไดเลย
จดประสงคใหญของการเขยนโปรแกรมเชงวตถกคอการนาสวนตางๆ ของวตถทสรางขนกลบมาใชใหมหรอทเรยกในภาษาองกฤษวา “reuse” เมอมวตถถกสรางขนมา กสามารถนาวตถตางๆ มาประกอบกนเปนวตถอกชนดหนงได เพอใหวตถใหมมความสามารถมากกวาเดม เชนกรณของรถยนตสามารถประกอบขนจากเครองยนต ตวถง ประต และลอ เปนตน
รากฐานของการพองรปคอคณสมบตการถายทอด คณสมบตการถายทอดยนยนไดวาคลาสลกทเกดจากคลาสแมเดยวกนยอม
มคณสมบตเหมอนกน
เปนทมาของหนงรปหลายพฤตกรรม
คลาสแมคอ Shapeคลาสลกคอ Circle, Triangle, Rectangle มคณสมบตเหมอนคลาสแมทกประการ
Shape
+draw()+erase()
Circle
+draw()+erase()
Line
+draw()+erase()
Rectangle
+draw()+erase()
คลาสเปนเหมอนสวนของแมพมพ เพอบอกลกษณะวาวตถในคลาสนมลกษณะและพฤตกรรมเปนอยางไร
วตถเปนสงทถกสรางขนมาจากคลาสเพอใชงาน กาหนดคาตางๆ สงขอความสงใหวตถทางาน
คลาสสเหลยมผนผาคณสมบต:กวาง, ยาวเมธทอด:คานวณพนท
วตถA:สเหลยมผนผากวาง 2 ยาว 3
เมธทอด:คานวณพนท
วตถในโลกความจรง มองคประกอบสาคญสองสงคอ
สถานะ (State)
พฤตกรรม (behavior)
สถานะ ชอ , ส , สายพนธ
พฤตกรรม เหา , วง , กระดกหาง
สถานะ ตาแหนงเกยรปจจบน ,
ความเรวรอบปจจบน , ความเรวรถ
พฤตกรรม เปลยนเกยร , เปลยนความเรวรอบ,
เบรค
สถานะ ปด , เปด
พฤตกรรม กดปด , กดเปด
สถานะ ปด, เปด , ระดบเสยง, สถานปจจบน
พฤตกรรม กดปด, กดเปด , ลดเสยง ,เรงเสยง ,
คนหาสญญาณ
โคมไฟ
วทย
คลายคลงกบวตถในโลกความจรง โดยจะประกอบไปดวย สถานะ และ พฤตกรรมเชนเดยวกน
เกบสถานะของวตถไวใน Field หรอ Attribute (ตวแปรในโปรแกรม) และแสดงพฤตกรรมโดยผาน Method (ฟงกชนการทางานใน
โปรแกรม)
Method ทาหนาทเปลยนแปลงสถานะ(Field)ซงอยในวตถนน ๆ และทาหนาทตดตอระหวางวตถกบวตถ
Method Change gears ทาหนาทเปลยน เกยร
Method Brake ทาหนาทหยดรถ
Method Change cadence ทาหนาทเปลยน
ความเรวรอบการป น
Modularity : โคดของโปรแกรมแบบ Object สามารถแยกสวนกนเขยนไดอยางเปนอสระ
Information-hiding : รายละเอยดและขอมลถกซอนอยภายใน Object การปรบเปลยนขอมลภายใน Object ตองทาผาน Method เทานน
Code re-use : โคดของโปรแกรมสามารถนากลบมาใชใหมไดอยางสะดวก ทาใหพฒนาโปรแกรมไดอยางรวดเรว
ดาวนโหลดชดพฒนาภาษาจาวาทเวบต
http://java.sun.com/j2se
Java virtual machine : JRE (Java Runtime Environment)Java Developer Kit : JDK
ใหนกศกษายกตวอยางวตถในโลกความจรง 1 ตวอยาง แลวแสดงใหเหนวา สถานะ (State) และ พฤตกรรม(Behavior) ของวตถนนมอะไรบาง
OOP 2/2550ดร.สขสถต มสถตย 110
1. จงบอกประโยชนของการเขยนโปรแกรมเชงวตถ
2. สถานะของออบเจกตหมายความวาอะไร?
3. จงจาแนกสงตอไปนวาสงใดเปนคลาส สงใดเปนออบเจกต ◦ สมด, บานเลขท 97/8, ขนม, นายนฐพงศ สงเนยม
4. จงหาขอมลและพฤตกรรมทเปนไปไดของออบเจกตของคลาสตอไปน◦ สนข, รถยนต, โซฟา
5. จงแยกแยะวาสงใดเปนซปเปอรคลาสและซบคลาส • ตนไม, ไมดอก
• พนกงาน, ผจดการ
• เคก, ขนม
IDE : integrate development environment
case sensitive สนใจตวพมพเลก/ใหญ
int y;
Y = 8;
c , c++ , c# , java , perl , php
none case sensitive ไมสนใจ
-------------------------------
1. หามมชองวาง
2. หามขนตนดวยตวเลข เชน 4Car , 5MB
MB5
www.siam2dev.net
หนา E-Learning
---------
1. หามตงชอขนตนดวยตวเลข
2x , 5t , 8u
2. หามมชองวาง
1.dim x y as int16
2. int x y;
3. int my name is;
4. int my_name_is;
5. int my-name-is;
6 int my*name/is;