Cách viết C theo tinh thần hướng đối tượng

Lập trình hướng đối tượng

Nếu như võ công chỉ có vài môn phái chiếm đa số như kiếm tông, khí tông thì lập trình cũng vậy, chỉ có vài paradigm chiếm thế thượng phong như lập trình thủ tục, lập trình hướng đối tượng.

Học là học cái tinh thần, thỉnh thoảng đâu đó ta nghe nói dùng PHP4 cũng có thể lập trình hướng đối tượng như PHP5, ngôn ngữ Ruby hướng đối tượng viết bằng ngôn ngữ C không hướng đối tượng là vì vậy.

Tinh thần của hướng đối tượng có 4 điểm chính yếu, trong đó nhìn từ quan điểm của C thì quan trọng nhất là đóng gói, bởi:

Chương trình (program) = Cấu trúc dữ liệu (data) + Giải thuật (code)

Bạn nào sắp đi xin việc nên nhớ câu hỏi “Chương trình là gì?” này, vì hay bị hỏi.

C có con trỏ dữ liệu, con trỏ hàm, ép kiểu v.v. cực mạnh nên đóng gói rất dễ thực hiện, 3 điểm còn lại cố một tí cũng thực hiện được:

typedef struct {
    int r, c;
    int *elements;
} Matrix;

int matrix_get_r(Matrix *this) {
    return this->r;
}

int matrix_get_c(Matrix *this) {
    return this->c;
}

void matrix_set_element(Matrix *this, int r, int c, int v) {
    this->elements[r*(this->c) + c] = v;
}

int matrix_get_element(Matrix *this, int r, int c) {
    return this->elements[r*(this->c) + c];
}

Matrix *matrix_new(int r, int c) {
    Matrix *ret;

    ret = (Matrix *) malloc(sizeof(Matrix));
    ret->r = r;
    ret->c = c;
    ret->elements = (int *) malloc(r*c*sizeof(int));

    return ret;
}

void matrix_delete(Matrix *this) {
    free(this->elements);
    this->elements = NULL;
    free(this);
}

Trên đây là trích đoạn chương trình nhân ma trận dùng thư viện OpenMPI.

Ta thấy:

Bạn thấy đấy, nếu nắm được tinh thần của hướng đối tượng, thì dùng ngôn ngữ không hướng đối tượng C vẫn có thể tận dụng cái hay của nó.

Từ Kipalog