á¹Ç¤Ô´ object-oriented programmingthep/docs/cplusplus/02-oop...object-oriented programming...

23
Object-Oriented Programming OOP 1 / 23

Upload: others

Post on 19-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

แนวคิด Object-Oriented Programming

เทพพิทักษ์ การุญบุญญานันท์

เทพพิทักษ์ แนวคิด OOP 1 / 23

Page 2: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Programming Paradigms

Non-structured Programmingมีแต่ branching และ goto อย่างง่ายอนุญาตให้กระโดดไปที่บรรทัดใดก็ได้ในโค้ดข้อมูลมีแต่ชนิดพื้นฐานเท่านั้น

“Spaghetti Code!”

เทพพิทักษ์ แนวคิด OOP 2 / 23

Page 3: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Programming Paradigms

Structured ProgrammingEdgster W. Dijkstra: “Go To Statement Considered Harmful”(CACM)โค้ดที่ทำงานจากบนลงล่าง, เข้าทางเดียวออกทางเดียวเลี่ยงการใช้ goto

sequence if-then-else while-do

เทพพิทักษ์ แนวคิด OOP 3 / 23

Page 4: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Programming Paradigms

Procedural Programmingพัฒนาจาก Structured Programmingแบ่งกระบวนการงานเป็นส่วน ๆ สำหรับเรียกใช้เรียกว่า procedureส่วนหลักมองภาพรวมก่อน แล้วไปลงรายละเอียดใน proceduretop-down design หรือ stepwise refinement

Proc 1

Proc 2

Proc 3

เทพพิทักษ์ แนวคิด OOP 4 / 23

Page 5: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Programming Paradigms

Modular Programmingแบ่งโปรแกรมออกเป็นหน่วยย่อย ๆ ทำงานเป็นหมวด ๆ เรียกว่า moduleหรือ packagemodule = กลุ่มของ procedure ที่ร่วมกันทำงานหมวดหนึ่ง ๆmodule แยกอิสระจากกัน ทำงานร่วมกันผ่านอินเทอร์เฟซที่กำหนด

User Interface

Search

Report

Database

เทพพิทักษ์ แนวคิด OOP 5 / 23

Page 6: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Programming Paradigms

Object-Oriented Programmingแบ่งโปรแกรมออกเป็นวัตถุ (object) ต่าง ๆวัตถุแต่ละชิ้นมีทั้งข้อมูลและ method (procedure) ให้เรียกใช้→ ทำกิจกรรมต่าง ๆ ได้ครบในตัวเอง→ คล้ายวัตถุในชีวิตจริง

Atrributes:- สี- รุน- ความเร็วสูงสุด

Methods:- ไปขางหน า- ถอยหลัง- เลีย้วซาย- เลีย้วขวา- เรงความเร็ว- ลดความเร็ว

messages

เทพพิทักษ์ แนวคิด OOP 6 / 23

Page 7: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Programming Paradigms

RemoteControlstart()

CarcolormodelmaxSpeedforward()backward()turnLeft()turnRight()speedUp()speedDown()

เทพพิทักษ์ แนวคิด OOP 7 / 23

Page 8: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Procedural vs. Object-Oriented Programming

Procedural Programming

กำหนดกระบวนการทำงานที่ต้องการออกแบบโครงสร้างข้อมูลและอัลกอริทึมที่ดีที่สุดเพื่อทำงานให้สำเร็จ

Object-Oriented Programming

กำหนดวัตถุที่ต้องการกำหนด operation ต่าง ๆ ของวัตถุแต่ละชิ้นเชื่อมต่อวัตถุต่าง ๆ เข้าด้วยกัน

เทพพิทักษ์ แนวคิด OOP 8 / 23

Page 9: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Procedural vs. Object-Oriented Programming

โครงสร้างโปรแกรมProcedural:

data structure และ procedure แยกจากกันทุก procedure สามารถเข้าถึง data ได้ทุกชิ้นที่อยู่ใน scope

Object-Oriented:data และ procedure ผูกมัดรวมกันเป็นก้อน ๆdata ถูกกั้นไว้ไม่ให้เข้าถึงได้โดยตรงจากนอกก้อน

เมื่อมีการเปลี่ยนแปลง data structureProcedural:

ตามแก้ทุก procedure ที่เข้าใช้ data structure นี้Object-Oriented:

แก้เฉพาะภายในก้อนที่เปลี่ยน โค้ดส่วนอื่นไม่กระทบ

เทพพิทักษ์ แนวคิด OOP 9 / 23

Page 10: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

ความซับซ้อนของซอฟต์แวร์

ความซับซ้อนของตัวปัญหา (problem domain) เอง(requirements, usability, performance, cost, reliability)

ความซับซ้อนของการจัดการงานพัฒนา(ขนาดของซอฟต์แวร์, การสื่อสารในทีม, การรักษา design)

ความซับซ้อนจากความยืดหยุ่นของโลกเสมือนจริง(ซอฟต์แวร์สามารถสร้าง agent หรือ object ต่าง ๆ ได้ไม่จำกัดรูปแบบ)

ความซับซ้อนของการดีบั๊ก(กรณีไม่คาดคิด, human error, การแก้บั๊กทำให้เกิดบั๊กใหม่)

เทพพิทักษ์ แนวคิด OOP 10 / 23

Page 11: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

ข้อจำกัดของมนุษย์

จิตวิทยา: มนุษย์สามารถทำความเข้าใจข้อมูลพร้อม ๆ กันได้ไม่เกิน 7(±2) อย่างสมองมนุษย์ใช้เวลาประมาณ 5 วินาทีในการรับข้อมูลชิ้นใหม่

→ เราต้องการเครื่องมือบริหารความซับซ้อน!

เทพพิทักษ์ แนวคิด OOP 11 / 23

Page 12: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Object-Oriented Programming Terminology

ออบเจกต์ (Object)

นามธรรมแทนบางสิ่งใน problem domain หรือใน implementationซึ่งระบบสามารถเก็บข้อมูลของสิ่งนั้น ๆ และสามารถโต้ตอบกับสิ่งนั้น ๆ ได้

คลาส (Class)

คำบรรยายลักษณะของออบเจกต์ เป็นพิมพ์เขียวสำหรับสร้างออบเจกต์

Object = Class Instance

เทพพิทักษ์ แนวคิด OOP 12 / 23

Page 13: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Object-Oriented Programming Concepts

AbstractionEncapsulationInheritancePolymorphism

เทพพิทักษ์ แนวคิด OOP 13 / 23

Page 14: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Abstraction

Abstraction

การละเลยรายละเอียดที่ไม่เกี่ยวข้องกับเป้าหมายปัจจุบันเพื่อมุ่งเน้นเฉพาะส่วนที่เกี่ยวข้องให้เต็มที่

1 2 3

4 5 6

7 8 9

0

ตัวอย่าง:ผู้ใช้โทรศัพท์มือถือรู้วิธีโทรออก/รับสาย โดยไม่จำเป็นต้องรู้กลไกภายใน

ผู้ขับรถยนต์รู้วิธีเปลี่ยนเกียร์ โดยไม่จำเป็นต้องรู้กลไกภายในรีโมทคอนโทรล

เทพพิทักษ์ แนวคิด OOP 14 / 23

Page 15: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Abstraction

Abstraction เป็นแนวคิดทั่วไป:Procedural: ละเลยรายละเอียดของ procedure ขณะเรียกObject-Oriented: เน้น data abstraction

Data Abstraction

การกำหนดชนิดของข้อมูลด้วยการกำหนด operation ต่าง ๆ ที่ทำกับข้อมูลชนิดนั้น ๆ โดยมีเงื่อนไขว่าค่าของข้อมูลดังกล่าวสามารถอ่านและเปลี่ยนแปลงได้ผ่าน operation เหล่านี้เท่านั้น

เทพพิทักษ์ แนวคิด OOP 15 / 23

Page 16: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Abstraction

Data Type = Attributes + Operations

CarcolormodelmaxSpeedforward()backward()turnLeft()turnRight()speedUp()speedDown()

เทพพิทักษ์ แนวคิด OOP 16 / 23

Page 17: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Encapsulation

Encapsulation (Information hiding)

การออกแบบโปรแกรมโดยรวมสิ่งที่เกี่ยวข้องกันไว้ด้วยกันซ่อนรายละเอียดของแต่ละองค์ประกอบไว้ภายในและเปิดให้เรียกใช้ผ่าน interface ที่กำหนดเท่านั้น

ตัวอย่าง:IC เก็บวงจรไว้ในกล่อง เปิดจุดเชื่อมต่อที่ขาต่าง ๆ ตามคู่มือเท่านั้น

สเตริโอ เปิดช่องเสียบและปุ่มปรับต่าง ๆ เท่านั้น

เครื่องเล่น MP3 เปิดช่อง USB สำหรับถ่ายโอนข้อมูล และปุ่มกดเท่านั้นเทพพิทักษ์ แนวคิด OOP 17 / 23

Page 18: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Encapsulation

private data

private method

private method

public method

public method

public method

public method

ผล:จำกัดขอบเขตของงานหากมีการเปลี่ยนแปลง requirementลดการจราจรระหว่างส่วนต่าง ๆแยกผู้เรียก-ผู้ให้บริการออกจากกัน

เทพพิทักษ์ แนวคิด OOP 18 / 23

Page 19: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Inheritance

Inheritance

กลไกการจัดแจงส่วนที่คล้ายกันระหว่างคลาสต่าง ๆโดยจัดลำดับชั้นของคลาสเป็นคลาสทั่วไปและคลาสเฉพาะ

implement ส่วนที่ใช้ร่วมกันเพียงครั้งเดียว — ใน base classต่อเติมเป็นกรณีเฉพาะเพิ่มได้ตามต้องการ — ใน derived classเป็นลำดับชั้นของความสัมพันธ์แบบ “is-a” คล้ายอนุกรมวิธาน(taxonomy)

เทพพิทักษ์ แนวคิด OOP 19 / 23

Page 20: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Inheritance

ตัวอย่าง inheritance

Box

Button ScrolledBox

TextEntry ListBox

ผล:ลดการเขียนโค้ดซ้ำซ้อนในสิ่งที่ต้องใช้ร่วมกันต่อเติมเพิ่มคลาสใหม่ได้สะดวกเป็นเครื่องมือสำหรับ polymorphism (ดังจะกล่าวต่อไป)

เทพพิทักษ์ แนวคิด OOP 20 / 23

Page 21: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Polymorphism

Polymorphism

การกำหนด operation ที่มีพฤติกรรมได้หลากหลายตามกรณีเฉพาะต่าง ๆ

เอา รองซิ!

เมีย้ว!กาบ!

โฮง!

เทพพิทักษ์ แนวคิด OOP 21 / 23

Page 22: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Polymorphism

รากศัพท์กรีก polys (many, much) + morphe (form, shape)กำหนด operation รูปทั่วไปใน base classกำหนดพฤติกรรมรูปแบบเฉพาะใน derived class

ผู้เรียก เรียก operation ทั่วไปนั้นผ่าน base class→ พฤติกรรมเป็นไปตาม derived class ของออบเจกต์นั้น ๆ

เทพพิทักษ์ แนวคิด OOP 22 / 23

Page 23: á¹Ç¤Ô´ Object-Oriented Programmingthep/docs/cplusplus/02-oop...Object-Oriented Programming ¡Ó¸„·˙ѵ Ø•Õ‰µØ˝ ¡Òˆ ¡Ó¸„· operation µŁÒ æ ¢˝ ˙ѵ

Polymorphism

ตัวอย่าง polymorphism

Shapedraw()

Circledraw()

Rectangledraw()

Stardraw()

ผล:abstract การกระทำในระดับบน ลงรายละเอียดในระดับล่างเพิ่มพฤติกรรมใหม่ ๆ ได้อย่างยืดหยุ่น โดยไม่ต้องแก้ไขโค้ดระดับบน

เปิดแนวทางการออกแบบมอดูลในลักษณะ framework ซึ่งเป็นโค้ดระดับบน (แทนที่จะเป็นโค้ดระดับล่างให้เรียกใช้เหมือน library)

เทพพิทักษ์ แนวคิด OOP 23 / 23