การวิเคราะห์และออกแบบระบบเชิงวัตถุ

Core Object-Orientation Concepts

Programming (การเขียนโปรแกรม)

  • การเขียนโปรแกรมแตกต่างไปจากเดิมอย่างสิ้นเชิงเมื่อสองสามทศวรรษที่แล้ว

  • ปัจจุบันการเขียโปรแกรมเป็นเรื่องง่าย มีเครื่องมือมากมาย ยกตัวอย่างเช่น

    • ตั้งโปรแกรมโดรนและหุ่นยนต์

    • สร้างเกม 3 มิติ หรือ AR

History of Programming

  • Sequentially ordered instructions

    • โปรแกรมคอมพิวเตอร์เป็นกลุ่มโค้ดขนาดใหญ่ที่ต่อเนื่องกัน

    • เป็นการเขียนโปรแกรมแบบไม่มีโครงสร้าง

    • ชุดคำสั่งเรียงตามลำดับจาก บน-ล่าง แต่ละคำสั่งจะไปในบรรทัดใหม่

    • แต่ละบรรทัดของซอร์สโค้ดมีหมายเลขหรือระบุกำกับ เพื่อง่ายต่อการอ่าน

1950

Non-structured
programming

ตัวอ่างโปรแกรมคำนวณอุณหภูมิจาก F -> C

ในภาษา Sinclair Basic

PRINT "Farenheit", "Celcius"
PRINT
PRINT "Enter Degree F", F
PRINT F, (F-32) * 5/9
PRINT GO TO 3
  • ยกตัวอย่างเช่น ผู้ใช้งานกรอกค่า 86 องศาฟาเรนไฮต์

  • โปรแกรมจะคำนวณค่าองศาในหน่วยเซลเซียสเท่ากับ 30

  • โปรแกรมขนาดใหญ่ ???

  • โค้ดขนาดใหญ่ มีความซับซ้อน ยากต่อการแก้ไข

การเขียนโปรแกรมที่เริ่มมีโครงสร้างชัดเจน

  • Structured Programming

  • เข้าสู่ขั้นตอนเชิงตรรกะ (logical steps)

    • มีรูทีนย่อยที่มีชุดคำสั่งที่ต้องดำเนินการ

    • นี่คือตัวอย่างโปรแกรมที่เขียนด้วยภาษา C

1960

Structured
programming

/*
 * C++ Program to Perform Fahrenheit to Celsius Conversion
 */
 #include <iostream>
 
 double fahrenheitToCelsius(double fahrenheit)
 {
     double celsius;
 
     celsius = (fahrenheit - 32.0) * 5.0 / 9.0;
     return celsius;
 }
 
 int main()
 {
     double fahrenheit;
 
     std::cout << "Enter temperature in fahrenheit (in degrees) ";
     std::cin  >> fahrenheit;
     std::cout << "Temperature in Celsius (in degrees) = "
               << fahrenheitToCelsius(fahrenheit) << std::endl;
 }

รูทีนย่อยทำงานกับตัวแปรและโครงสร้างข้อมูล

Variables (ตัวแปร)

  • Value with a type identified using a name

  • สร้างวัตถุในระบบขึ้นมาเพื่อเก็บข้อมูล อักขระ ตัวเลข ฯลฯ โดยมีป้ายชื่อกำกับวัตถุดังกล่าว เรียกว่า ตัวแปร

int x = 10; // x has a value of 10
x = 62; // x is now 20
x = x + 1; // x is now 63
int x,y; // ตัวแปรชื่อ x และ y เก็บเลขจำนวนเต็ม
float salary; // ตัวแปร salary เก็บเลขมีทศนิยม
  • สามารถระบุประเภทตัวแปรตามวัตถุประสงค์ใช้งานได้

Data Structure

  • A way of organizaing data in a computer program

  • ยกตัวอย่างเช่น หากต้องการ เก็บ/ประมวลผลข้อมูล พนักงาน ประกอบด้วย ชื่อ และเงินเดือน สามารถเขียนโปรแกรมได้ดังต่อไปนี้

structure employee {
	int identifier;
    char name[30];
    float salary;
};
  • ฟังก์ชั่น employee ช่วยให้การอ่านโค้ดง่ายมากขึ้น

Structured Programming

  • Logical steps
    (ชุดคำสั่งเป็นลำดับขั้น มีเหตุมีผล ตรรกศาสตร์)

  • Relies on subroutines
    (ชุดคำสั่งสามารถแบ่งเป็นโซนการทำงานได้ชัดเจน)

  • Improve code readability
    (โค้ดง่ายต่อการ อ่าน-ศึกษา ทำความเข้าใจ)

  • Reduced development time
    (ย่น-ลด ระยะเวลาการพัฒนาให้เร็วขึ้น)

'Pascal

program Shop;

uses
  Crt;

var
  choice: integer;
  total: real;
  
procedure DisplayMenu;
begin
  ClrScr;
  writeln('Welcome to the Shop!');
  writeln('1. Apple - $1.00');
  writeln('2. Banana - $0.75');
  writeln('3. Orange - $1.25');
  writeln('4. Checkout');
  writeln('5. Exit');
  write('Enter your choice (1-5): ');
end;

procedure AddToCart(price: real);
begin
  total := total + price;
  writeln('Item added to cart. Current total: $', total:0:2);
  readln;
end;

begin
  total := 0;
  
  repeat
    DisplayMenu;
    readln(choice);
    
    case choice of
      1: AddToCart(1.00);
      2: AddToCart(0.75);
      3: AddToCart(1.25);
      4: begin
           writeln('Your total is: $', total:0:2);
           writeln('Thank you for shopping with us!');
           readln;
           halt;
         end;
      5: writeln('Thank you for visiting. Goodbye!');
    else
      writeln('Invalid choice. Please try again.');
      readln;
    end;
  until choice = 5;
end.

ระบบ / โปรแกรม ขนาดใหญ่ ?

การเขียนโปรแกรมเชิงวัตถุ (OOP)

  • Objected-Oriented Programming

  • Split apart program into self-contained objects.

  • ยุค 1980 เริ่มมีการนำคอนเซปต์การเขียนแกมเชิงวัตถุ โดยแนวคิดคือการพัฒนาโปรแกรมทีละส่วน และนำมาทำงานร่วมกันอย่างเกิดประสิทธิผล

1960

Structured
programming

1950

Non-structured
programming

1980

Object-oriented programming

Objected-Oriented Programming

  • Act as a  program
    การทำงานแบ่งเป็นวัตถุที่อิสระต่อกัน

  • Operate on its own data
    แต่ละวัตถุ มีการใช้งานข้อมูลของตนเองและเป็นอิสระ

  • Interacts with other objects
    แต่ละวัตถุสามารถสามารถสื่อสาร แลกเปลี่ยนข้อมูลกันได้

1980

Object-oriented programming

Objects (อ็อบเจค -- วัตถุ)

  • วัตถุแสดงถึงสิ่งของ เช่นเดียวกับในชีวิตจริง

  • ยกตัวอย่างเช่น ลูกกอล์ฟ หรือรถยนต์

Objects (อ็อบเจค -- วัตถุ)

  • Object มี Property (คุณสมบัติ)

  • Property ได้แก่ คุณลักษณะของวัตถุ เช่นลูกกอล์ฟ:

position

speed

acceleration

color

weight

price

Objects (อ็อบเจค -- วัตถุ)

  • Objects มี Identity ของตน บอกกล่าวถึงสถานะ (State) ของตนเอง

  • การเปลี่ยนแปลง State ของ Object หนึ่งจะไม่ส่งผลต่อ State ของ Objects อื่น ๆ

  • ยกตัวอย่างเช่น การตีลูกกอล์ฟ 1 ลูก ทำให้สถานะของลูกกอล์ฟดังกล่าวเปลี่ยนไป ในขณะที่ลูกกอล์ฟอื่นยังอยู่คงที่

Objects (อ็อบเจค -- วัตถุ)

  • Objects มี Behaviors (พฤติกรรม) ของตน 

  • Behavior หมายถึง พฤติกรรมหรือกิจกรรมที่ Object นั้นสามารถปฏิบัติได้

  • ยกตัวอย่างเช่น สุนัขกำลังเห่า; เห่าเป็น behavoir ของ Object: สุนัข

The golden dog barks

property

property

property

The golden dog barks

property

object

behavior

คำนาม

คำกิริยา

คำคุณศัพท์

Objects (อ็อบเจค -- วัตถุ)

  • เราสามารถอธิบายถึง Object ได้โดย

    • Properties

    • Identity

    • Behavior

PROGRAMMING ? (Objects in Code)

CLASS (คลาส)

Class (คลาส)

  • การพัฒนาระบบเชิงวัตถุ จำเป็นต้องมี object (วัตถุ) รวมไปถึงการกำหนดคุณสมบัติและหน้าที่ให้กับ object

  • ก่อนที่จะสร้าง object ได้ จะต้องมี Class ก่อน

  • "The class is the blueprint of an object"
    (Class เปรียบเสมือนพิมพ์เขียวของ object)

  • Class เปรียบเสมือนกับร่างของระบบที่เราวางแผนไว้ว่าจะมี object เป็นอย่างไร ? ทำหน้าที่อะไร ?

Class (คลาส)

  • ยกตัวอย่างเช่น ต้องการใช้งาน "รถยนต์" ในโปรแกรม

  • Class ที่จะเรียกใช้งาน รถยนต์ จะทำหน้าที่เป็นพิมพ์เขียวที่กำหนดว่า รถยนต์จะมีหน้าตาเป็นอย่างไร และทำอะไรได้บ้าง

  • Class ดังกล่าวจะต้องบอกได้ว่ารถยนต์มีคุณสมบัติ:

properties

  1. ยี่ห้อ

  2. สี

  3. ราคา

Class (คลาส)

  • รถยนต์ สามารถ เดินหน้า ถอยหลัง หันซ้าย และหันขวา

actions

  1. เดินหน้า

  2. ถอยหลัง

  3. หันซ้าย

  4. หันขวา

Class (คลาส)

  • เราสามารถสร้าง Class ได้โดยกำหนดชื่อให้กับ Class

  • Class ประกอบด้วย Name, Properties และ Methods

  • Methods ก็เปรียบเสมือน action หรือกิริยาที่รถยนต์สามารถกระทำได้นั่นเอง

Class

  • Name

  • Properties

  • Methods

  • Methods คือกลุ่มของชุดคำสั่งที่ใช้ในการเขียนโปรแกรม และสามารถถูกเรียกใช้งานได้

  • สามารถ รับ-ส่ง ข้อมูลได้

  • Methods คือฟังก์ชั่นที่ใช้งานภายใน Class นั่นเอง

ฺBrand: Lamborghini

Color: Red

Price: 24,000,000

ฺBrand: Toyota

Color: White

Price: 1,400,000

ฺBrand: Volkswagen

Color: Yellow

Price: 1,500,000

Class

Objects (Instaces)

Attributes

Workshop การเขียนโปรแกรมยุค 60 (1960's)

  1. จงสร้างระบบ (เขียนโปรแกรม) เพื่อคำนวณแปลงค่าตัวเลขในหน่วย cm ให้เป็นหน่วย m (100 cm = 1 m)

    1. ให้ดัดแปลงระบบข้างต้น โดยใช้หลักการของตัวแปร

    2. เพิ่มฟีเจอร์ให้ระบบสามรถรับค่าจากผู้ใช้งานได้

    3. ให้เขียนระบบใหม่ทั้งหมดตามโจทย์ข้างบนทั้งหมด โดยใช้หลักการเขียนโปรแกรมเชิงวัตถุ (OOP)

* สามารถใช้ภาษาอะไรก็ได้ ที่รองรับการเขียนโปรแกรมเชิงวัตถุ

Abstraction

  • หมายถึง การอธิบายสิ่งที่ซับซ้อนให้เข้าใจง่ายต่อการจดจำและนำไปใช้งาน ยกตัวอย่างเช่น

  • รถยนต์ ที่เราอธิบายก่อนหน้า เมื่อพูดถึงรถยนต์ เราสามารถนึงถึงภาพรยนต์ออก โดยไม่จำเป็นต้องบอกรายละเอียดของรถยนต์ทุกอย่าง

  • Abstract เช่นเดียวกัน ในการเขียนโปรแกรมเชิงวัตถุเมื่อเราสร้าง Class เราจะสนใจเฉพาะข้อมูลที่จำเป็นเท่านั้น ข้อมูลที่ไม่ได้ใช้งาน สามารถละทิ้งได้ เช่น ขนาดเครื่องยนต์ ประเภทเชื้อเพลิง ฯลฯ

Abstraction

  • ONLY Focus on essential qualities, discard unimportant ones

properties

  1. ยี่ห้อ

  2. สี

  3. ราคา

actions

  1. เดินหน้า

  2. ถอยหลัง

  3. หันซ้าย

  4. หันขวา

ประเภทเชื้อเพลิง

ขนาดตัวถัง

ระบบเกียร์ขับเคลื่อน

ฯลฯ

Encapsulation & Data Hiding

  • จินตนาการถึงเม็ดยาในรูปแคปซูล

We can use,
but know nothing inside!

Encapsulation & Data Hiding

properties

ยี่ห้อ

สี

ราคา

actions

เดินหน้า

ถอยหลัง

หันซ้าย

หันขวา

ระบบช่วงล่าง

เครื่องยนต์

ระบบส่งกำลัง

...

ไม่จำเป็นต้องแสดงหรือโชว์ ทราบแต่ว่าภายใน class สามารถทำงานได้

Data Hiding

Avoid exposing the inner workings of our projects. (ไม่จำเป็นต้องแสดงข้อมูลหรือรายละเอียดที่อยู่ในภายใน)

ยกตัวอย่างเช่น

Class Encapsulation

  • เมื่อเราสร้าง Class ขึ้นมาใช้งาน เราสามารถกำหนดส่วนรายละเอียดไหนที่ต้องการแสดงเพื่อใช้งาน และส่วนไหนไม่ต้องแสดงเนื่องจากไม่มีความจำเป็นใช้งาน

  • ผู้พัฒนาจึงไม่ต้องมีความกังวลในส่วนข้อมูลที่ไม่ได้ใช้งาน ว่าจะมีผลกระทบจากการทำงาน

  • When designing your classes, expose only as much detail as needed
    (เมื่อออกแบบใช้งาน Class ให้จำกัดการใช้งานข้อมูลเฉพาะส่วนที่จำเป็นเท่านั้น)

Inheritance

  • คือหัวใจสำคัญของการเขียนโปรแกรมเชิงวัตถุ

  • หมายถึงการนำโค้ดกลับมาใช้ใหม่ (Code reuse)

Class

Objects (Instaces)

แต่ละ Instance
ประกอบด้วย

  • Properties

  • Methods

Inheritance

  • สมมติ ว่าเราต้องการสร้างรถยนต์ที่แตกต่างจากเดิมออกไป

รถยนต์ (เดิม)

รถยนต์ไฟฟ้า

Inheritance

  • เมื่อต้องการรถยนต์แบบใหม่ที่ชาร์จไฟฟ้า และวิ่งได้โดยไม่ใช้เชื้อเพลิงน้ำมัน

  • เราอาจสร้าง Class สำหรับรถไฟฟ้า . . .

  • รถไฟฟ้ายังคงมี Properties และ Methods ที่เหมือนกับรถเชื้อเพลิงน้ำมันทุกประการ

Inheritance

properties

ยี่ห้อ

สี

ราคา

actions

เดินหน้า

ถอยหลัง

หันซ้าย

หันขวา

actions ใหม่

ชาร์จไฟฟ้า

เก็บ-ใช้งาน ประจุ

รถยนต์ไฟฟ้า

Inheritance

รถยนต์ไฟฟ้า

Class สามารถ inherit (สืบทอด)
คุณสมบัติและ methods จาก class อื่น ๆ

เราจึงสามารถสร้างรถยนต์ไฟฟ้า
จาก class รถยนต์ ได้

Inheritance

รถยนต์ไฟฟ้า

โปรแกรมเมอร์ สามารถเพิ่มความสามารถพิเศษ

เช่น การชาร์จไฟ การเก็บประจุ และระบบขับเคลื่อนด้วยพลังงานไฟฟ้า

Inheritance

รถยนต์ไฟฟ้า

superclass

subclasses

Polymorphism

รถยนต์ไฟฟ้า

properties

ยี่ห้อ

สี

ราคา

actions

เดินหน้า

ถอยหลัง

หันซ้าย

หันขวา

actions

ชาร์ไฟฟ้า

เก็บ-ใช้งานประจุ

Method Overriding

Polymorphism

Method Overriding = Subclasses can provide a specialized implementation of a method defined in the superclass

Method Overriding = คลาสลูกที่สร้างจากคลาสแม่สามารถ สืบทอด method โดย กำหนด/สร้าง method พิเศษจากคลาสแม่ได้

Polymorphism

รถยนต์ไฟฟ้า

properties

ยี่ห้อ

สี

ราคา

actions

เดินหน้า

ถอยหลัง

หันซ้าย

หันขวา

actions

ชาร์ไฟฟ้า

เก็บ-ใช้งานประจุ

Method Overriding

+ ใช้พลังงานไฟฟ้าได้

superclass

subclasses

Polymorphism

// Base class
class Animal {
  public:
    void animalSound() {
      cout << "The animal makes a sound \n";
    }
};

// Derived class
class Pig : public Animal {
  public:
    void animalSound() {
      cout << "The pig says: wee wee \n";
    }
};

// Derived class
class Dog : public Animal {
  public:
    void animalSound() {
      cout << "The dog says: bow wow \n";
    }
};

int main() {
  Animal myAnimal;
  Pig myPig;
  Dog myDog;

  myAnimal.animalSound();
  myPig.animalSound();
  myDog.animalSound();
  return 0;
}
  • Superclass = Animal

    • Method = animalSound()

  • Subclasses = [Pig, Dog]

    • Overriding Method ได้แก่
      animalSound() ที่ถูกกำหนดภายใน subclasses ของตน

Aj. Krit Th.

https://www.kritth.com