1
Sự khác nhau giữa đối tượng và lớp trong lập trình hướng đối tượng là gì?
0
trungkfc02570 đã đăng:

Cho mình hỏi sự khác nhau giữa đối tượnglớp khi sử dụng phương pháp lập trình hướng đối tượng là gì?

thêm bình luận...
3
Xuân Quanq30 đã đăng:

Trước tiên bạn phải hiểu được cụm từ hướng đối tượng là như thế nào?

Đối tượng trong thế giới thực là một thực thể hay vật mà chúng ta có thể thấy hoặc sờ được.

Ví dụ: cái bàn, con người, cái máy quạt, ...v.v.

Do đó đối tượng sẽ có hai tính chất đó là thuộc tínhhành động.

Ví dụ: Con người có thuộc tính như chiều cao, cân nặng, độ tuổi, ... và có hành động như đi, chạy, nhảy, nói, ...v.v.

Vậy cụm từ hướng đối tượng ý muốn nói rằng lấy một đối tượng cụ thể làm trung tâm, khi đó các thuộc tính và hành động sẽ xoay quanh nó.

Nói đến đối tượng là nói đến từng trường hợp cụ thể riêng biệt, xét hai bạn A và B đều cùng là con người nhưng bạn A là một người, còn bạn B là một người khác.

Ví dụ:

Bạn Nguyễn Văn A có:

  • Chiều cao: 1m65
  • Cân nặng: 60 kg
  • Màu da: da trắng

Bạn Nguyễn Văn B có:

  • Chiều cao: 1m70
  • Cân nặng: 68 kg
  • Màu da: da vàng

Trong ngôn ngữ lập trình, để biểu diễn thông tin của hai bạn A và B, người ta đưa ra một khái niệm gọi là lớp (class). Vậy lớp là gì?

Xét lại ví dụ trên, mặc dù bạn A và bạn B đều có chiều cao khác nhau, cân nặng khác nhau, màu da khác nhau nhưng nếu bạn để ý thì có thể thấy hai người đều có chung những thuộc tính của lớp con người như:

  • Chiều cao
  • Cân nặng
  • Màu da

Từ đó, có thể hiểu lớp là tập hợp các đối tượng có cùng thuộc tính và hành động (trong lập trình gọi là phương thức).

Bạn có thể dùng lớp con người để biểu diễn thông tin bất cứ người nào bạn muốn, ví dụ như bạn Nga, bạn Hoa, bạn Tiến, ... nhưng bạn sẽ không thể dùng lớp con người để biểu diễn thông tin một chiếc xe máy được đúng không nào.

Đoạn mã nguồn sau sẽ mô tả ví dụ mình vừa đưa ra, hy vọng bạn sẽ hiểu:

#include <iostream>
using namespace std;

class ConNguoi {
    // Thuộc tính
private:
    string hoTen; // họ và tên
    int chieuCao; // chiều cao
    int canNang; // cân nặng
    string mauDa; // màu da

// Hành động (phương thức)
public:
    // Khởi tạo
    ConNguoi(string hoten, int chieucao, int cannang, string mauda) {
        hoTen = hoten;
        chieuCao = chieucao;
        canNang = cannang;
        mauDa = mauda;
    }

    // Hàm hủy
    ~ConNguoi() {};
};



int main() {
    // Khởi tạo đối tượng Nguyễn Văn A
    ConNguoi NguyenVanA = ConNguoi("Nguyen Van A", 165, 60, "da trang");

    // Khởi tạo đối tượng Nguyễn Văn B
    ConNguoi NguyenVanB = ConNguoi("Nguyen Van B", 170, 68, "da vang");

    return 0;
}

Đọc đoạn code trên bạn có thể thấy mặc dù Nguyễn Văn A và Nguyễn Văn B là hai đối tượng khác nhau nhưng đều là một thể hiện của lớp con người.

đã bổ sung 6.2 năm trước bởi
Avatar: Xuân Quanq Xuân Quanq30

Rất chi tiết và dễ hiểu, cảm ơn bạn đã giúp đỡ.

trungkfc02 04.01.2018

Ở phần ví dụ, chỗ phương thức bạn mới chỉ thêm 2 phương thức khởi tạo và hủy ConNguoi thôi, bạn chưa thêm bất kỳ phương thức nào để mô tả cho lớp ConNguoi nữa, như thế sẽ không rõ ràng, ví dụ như bạn đã trình bày rằng lớp ConNguoi có phương thức noi (nói) và di (đi), vậy thì ví dụ sẽ là:

#include <iostream>
#include <string>
using namespace std;


class ConNguoi {
    // Thuộc tính
private:
    string hoTen; // họ và tên
    int chieuCao; // chiều cao
    int canNang; // cân nặng
    string mauDa; // màu da

// Hành động (phương thức)
public:
    // Khởi tạo
    ConNguoi(string hoten, int chieucao, int cannang, string mauda) {
        hoTen = hoten;
        chieuCao = chieucao;
        canNang = cannang;
        mauDa = mauda;
    }

    // Hành động (phương thức) nói
    void noi() {
        cout << this->hoTen << "dang noi." << endl;
    }

    // Hành động (phương thức) đi
    void di() {
        cout << this->hoTen << "dang di." << endl;
    }

    // Hàm hủy
    ~ConNguoi() {};
};



int main() {
    // Khởi tạo đối tượng Nguyễn Văn A
    ConNguoi NguyenVanA = ConNguoi("Nguyen Van A", 165, 60, "da trang");
    NguyenVanA.noi();
    NguyenVanA.di();

    // Khởi tạo đối tượng Nguyễn Văn B
    ConNguoi NguyenVanB = ConNguoi("Nguyen Van B", 170, 68, "da vang");
    NguyenVanB.noi();
    NguyenVanB.di();

    return 0;
}
Cộng đồng 23.06.2019
thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)