Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

แนวคิดพื้นฐานของการเขียนโปรแกรมเชิงวัตถุด้วย C++


การเขียนโปรแกรมเชิงวัตถุ (Object oriented programming) เป็นประเภทของการเขียนโปรแกรมที่ใช้วัตถุและคลาสในการทำงาน การเขียนโปรแกรมเชิงวัตถุอิงตามเอนทิตีในโลกจริง เช่น การสืบทอด, พอลิมอร์ฟิซึม, การซ่อนข้อมูล ฯลฯ มันมุ่งมั่นที่จะผูกข้อมูลและฟังก์ชันที่ทำงานบนชุดข้อมูลเหล่านั้นเข้าด้วยกันเป็นเอนทิตีเดียวเพื่อจำกัดการใช้งาน

แนวคิดพื้นฐานบางอย่างของการเขียนโปรแกรมเชิงวัตถุคือ −

  • CLASS
  • OBJECTS
  • ENCAPSULATION
  • POLYMORPHISM
  • INHERITANCE
  • ABSTRACTION

Class − คลาสเป็นชนิดข้อมูลที่มีสมาชิกของตัวเอง คือ สมาชิกข้อมูล (data members) และฟังก์ชันสมาชิก (member functions) มันเป็นแผนผัง (blueprint) สำหรับวัตถุในภาษาการเขียนโปรแกรมเชิงวัตถุ มันเป็นบล็อกสร้างพื้นฐานของการเขียนโปรแกรมเชิงวัตถุใน C++ สมาชิกของคลาสเข้าถึงได้ในภาษาการเขียนโปรแกรมโดยการสร้างอินสแตนซ์ของคลาส

คุณสมบัติสำคัญของคลาสมีดังนี้ −

  • Class เป็นชนิดข้อมูลที่ผู้ใช้กำหนดเอง (user-defined data-type)

  • คลาสประกอบด้วยสมาชิก เช่น สมาชิกข้อมูลและฟังก์ชันสมาชิก

  • Data members คือตัวแปรของคลาส

  • Member functions คือเมธอดที่ใช้จัดการสมาชิกข้อมูล

  • สมาชิกข้อมูลนิยามคุณสมบัติของคลาส ในขณะที่ฟังก์ชันสมาชิกนิยามพฤติกรรมของคลาส

คลาสหนึ่งสามารถมีวัตถุหลายตัวที่มีคุณสมบัติและพฤติกรรมที่เหมือนกันสำหรับทั้งหมด

ไวยากรณ์

class class_name {     data_type data_name;     return_type method_name(parameters); }

Object − วัตถุเป็นอินสแตนซ์ของคลาส มันเป็นเอนทิตีที่มีลักษณะเฉพาะและพฤติกรรมที่ใช้ในการเขียนโปรแกรมเชิงวัตถุ วัตถุคือเอนทิตีที่ถูกสร้างขึ้นเพื่อจัดสรรหน่วยความจำ คลาสเมื่อถูกนิยามไม่มีชิ้นหน่วยความจำเอง ซึ่งจะถูกจัดสรรทันทีที่มีการสร้างวัตถุ

ไวยากรณ์

class_name object_name;

ตัวอย่าง

#include<iostream> using namespace std; class calculator {     int number1;     int number2;     char symbol;     public :     void add() {       cout<<"The sum is "<<number1 + number2 ;     }     void subtract() {       cout<<"The subtraction is "<<number1 - number2 ;     }     void multiply() {       cout<<"The multiplication is "<<number1 * number2 ;     }     void divide() {       cout<<"The division is "<<number1 / number2 ;     }     calculator (int a , int b , char sym) {       number1 = a;       number2 = b;       symbol = sym;       switch(symbol){           case '+' : add();             break;           case '-' : add();             break;           case '*' : add();             break;           case '/' : add();             break;           default : cout<<"Wrong operator";       }     } }; int main() {     calculator c1(12 , 34 , '+'); }

ผลลัพธ์

The sum is 46

Encapsulation ในการเขียนโปรแกรมเชิงวัตถุ การห่อหุ้ม (encapsulation) เป็นแนวคิดของการห่อหุ้มข้อมูลและข้อมูลเข้าด้วยกันเป็นหน่วยเดียว นิยามอย่างเป็นทางการของ encapsulation จะเป็น: encapsulation คือการผูกข้อมูลและฟังก์ชันที่เกี่ยวข้องซึ่งสามารถจัดการข้อมูลนั้นๆ เข้าด้วยกัน

มาทำความเข้าใจหัวข้อนี้ด้วยตัวอย่างในชีวิตจริงง่ายๆ

ในมหาวิทยาลัยของเรา เรามีแผนกสำหรับแต่ละหลักสูตร เช่น วทยาการคอมพิวเตอร์, เทคโนโลยีสารสนเทศ, อิเล็กทรอนิกส์ ฯลฯ แต่ละแผนกมีนักศึกษาและวิชาของตัวเองที่ถูกติดตามและสอน มาคิดว่าแต่ละแผนกเป็นคลาสที่ห่อหุ้มข้อมูลเกี่ยวกับนักศึกษาของแผนกนั้นและวิชาที่จะสอน นอกจากนี้ แผนกยังมีกฎและแนวทางบางอย่างที่ต้องปฏิบัติโดยนักศึกษาของหลักสูตรนั้น เช่น เวลา, วิธีการเรียนรู้ ฯลฯ นี่คือ encapsulation ในชีวิตจริง มีข้อมูลและมีวิธีจัดการข้อมูล

เนื่องจากแนวคิดของ encapsulation ในการเขียนโปรแกรมเชิงวัตถุ อีกแนวคิดที่สำคัญมากจึงเป็นไปได้ คือ data abstraction หรือ Data Hiding มันเป็นไปได้เพราะ encapsulation ซ่อนข้อมูลและแสดงเฉพาะข้อมูลที่จำเป็นต้องแสดง

Polymorphism ชื่อนิยาม polymorphism คือหลายรูปแบบ (multiple forms) หมายความว่า polymorphism คือความสามารถของการเขียนโปรแกรมเชิงวัตถุที่ทำงานบางอย่างได้โดยใช้หลายรูปแบบ พฤติกรรมของเมธอดขึ้นอยู่กับประเภทหรือสถานการณ์ที่เมธอดถูกเรียกใช้

มาดูตัวอย่างในชีวิตจริง บุคคลหนึ่งสามารถมีพฤติกรรมมากกว่าหนึ่งแบบขึ้นอยู่กับสถานการณ์ เช่น ผู้หญิงคนหนึ่งเป็นแม่, ผู้จัดการ และลูกสาว และสิ่งเหล่านี้กำหนดพฤติกรรมของเธอ นี่คือที่มาของแนวคิด polymorphism

ในภาษาการเขียนโปรแกรม C++ polymorphism ถูกบรรลุโดยใช้สองวิธี คือ operator overloading และ function overloading

Operator overloading ใน operator overloading ออเปอเรเตอร์หนึ่งสามารถมีพฤติกรรมหลายแบบในกรณีการใช้งานที่ต่างกัน

Function overloading ฟังก์ชันที่มีชื่อเดียวกันที่สามารถทำหลายประเภทได้ตามเงื่อนไขบางอย่าง

Inheritance คือความสามารถของคลาสที่จะสืบทอดหรือderive คุณสมบัติหรือลักษณะเฉพาะจากคลาสอื่น มันสำคัญมากในโปรแกรมเชิงวัตถุเพราะมันอนุญาตให้ reuse ได้ นั่นคือ ใช้เมธอดที่นิยามในคลาสอื่นโดยใช้ inheritance คลาสที่derive คุณสมบัติจากคลาสอื่นเรียกว่า child class หรือ subclass และคลาสที่คุณสมบัติถูกสืบทอดมาคือ base class หรือ parent class

ภาษา C++ รองรับประเภทการสืบทอดต่อไปนี้

  • single inheritance
  • multiple inheritance
  • multi level inheritance
  • Hierarchical inheritance
  • hybrid inheritance

Abstraction Data abstraction หรือ Data Hiding เป็นแนวคิดของการซ่อนข้อมูลและแสดงเฉพาะข้อมูลที่เกี่ยวข้องให้ผู้ใช้ปลายทาง มันก็เป็นส่วนสำคัญของการเขียนโปรแกรมเชิงวัตถุ

มาดูตัวอย่างในชีวิตจริงเพื่อเข้าใจแนวคิดให้ดีขึ้น เมื่อเราขี่มอเตอร์ไซค์ เรารู้แค่ว่ากดเบรกจะหยุดรถ และบิดแฮนด์ควบคุมจะเร่ง แต่คุณไม่รู้ว่ามันทำงานอย่างไร และมันก็ไม่ใช่สิ่งที่เราควรรู้ นั่นคือเหตุผลที่ทำจากแนวคิดเดียวกันคือ data abstraction

ในภาษา C++ มีสองวิธีที่เราสามารถบรรลุ data abstraction −

  • ใช้ class
  • ใช้ header file