Học Lập Trình Hướng Đối Tượng Miễn Phí 100%

This entry is part 1 of 10 in the series This entry is part 1 of 10 in the series Hướng đối tượng C + +

Chào mọi người, đây là bài đầu tiên trong series Lập Trình Hướng Đối Tượng C++. Trong bài này chúng ta sẽ cùng đi tìm hiểu Lập Trình Hướng Đối Tượng là gì ? Những khái niệm và đặc điểm cơ bản của Lập Trình Hướng Đối Tượng.

Nội dung các bài trong Series

Phần 1: Lý Thuyết

Phần 2: Bài Tập

Giới thiệu khóa học “ Học C bá đạo ” trọn vẹn không lấy phí sẽ giúp ích bạn rất nhiều trong việc tiến tới học lập trình hướng đối tượng : Xem tại đây

Lập trình Hướng đối tượng là gì?

Hướng Đối Tượng là gì

Lập trình hướng đối tượng (Tiếng Anh: Object Oriented Programming, viết tắt: OOP) là một mẫu hình lập trình dựa trên khái niệm “công nghệ đối tượng”.

Một đối tượng gồm :

  • Các dữ liệu gọi là: thuộc tính (Attribute).
  • Mã nguồn được tổ chức thành các phương thức (Method).

Các phương pháp giúp cho đối tượng hoàn toàn có thể truy xuất và hiệu chỉnh những trường tài liệu của đối tượng khác, mà đối tượng hiện tại có tương tác ( đối tượng được tương hỗ những phương pháp “ this ” hoặc “ self ” ) .
Trong lập trình hướng đối tượng, chương trình máy tính được phong cách thiết kế bằng cách tách nó ra khỏi khoanh vùng phạm vi những đối tượng tương tác với nhau. Ngôn ngữ lập trình hướng đối tượng khá phong phú, phần đông là những ngôn từ lập trình theo lớp ( class ), nghĩa là những đối tượng trong những ngôn từ này được xem như thực thể của một lớp, được dùng để định nghĩa một kiểu tài liệu .

Các khái niệm cơ bản của OOP

Đối tượng (Object)

Trong lập trình hướng đối tượng, một đối tượng được hiểu giống như 1 thực thể: người, vật, …
Một đối tượng bao gồm 2 thành phần: Thuộc TínhPhương Thức

  • Thuộc Tính (Attribute): Là những đặc điểm, thông tin của đối tượng (Vd: Xét với đối tượng là một người thì sẽ có các thuộc tính là: Tên, Tuổi, Màu Da, Màu Tóc, Chiều Cao, Cân Nặng, …)
  • Phương Thức (Method): Là những hành động mà đối tượng đó có thể thưc hiện (VD: Vẫn xét với đối tượng là một người thì sẽ có hành động: đi, nói, ăn, uống, …)

Lớp (Class)

Các đối tượng có đặc tính tương như nhau sẽ được gom lại thành một lớp đối tượng.
Một lớp cũng sẽ có 2 thành phần là Thuộc TínhPhương Thức.
Ngoài ra, lớp cũng có thể được dùng để định nghĩa một kiểu dữ kiệu mới.

Các đặc điểm của lập trình hướng đối tượng

Hướng Đối Tượng

Lập trình hướng đối tượng là một chiêu thức lập trình có 4 tính chất chính sau :

Tính trừu tượng (Abstraction)

Mục tiêu chính của nó là làm giảm sự phức tạp bằng cách ẩn những cụ thể không tương quan trực tiếp tới người dùng ( người dùng ở đây không phải người dùng cuối mà là lập trình viên ). Điều đó được cho phép người dùng vẫn thực thi được những việc làm thiết yếu dựa trên một thực thể trừu tượng được cung ứng mà không cần hiểu hoặc thậm chí còn không nghĩ về toàn bộ sự phức tạp ẩn giấu bên trong .

Lấy một ví dụ đơn giản nhé:
Khi bạn ra quán cafe, gọi nhân viên “Em ơi, cho anh một cốc cafe đen đá “. Khoảng 5 phút sau là bạn có ngay một cốc cafe trên tay mà không cần biết nhân viên đã pha chế cốc cafe đó như thế nào. Việc của bạn đơn giản chỉ là thông báo cho nhân viên biết bạn cần mua cafe, sau đó trả tiền và thưởng thức.

Tính đóng gói (Encapsulation) và che giấu dữ liệu (Data Hiding)

Tính đóng gói (Encapsulation) chỉ đơn giản là việc kết hợp một bộ các dữ liệu (data) liên quan đến nhau cùng với một bộ các hàm/phương thức (functions/methods) hoạt động trên các dữ liệu đó.Sau đó “gói” tất cả vào trong một cái gọi là lớp (class).  Các thực thể của các class thì được gọi là các đối tượng (objects) trong khi class giống như một công thức được sử dụng để tạo ra các đối tượng đó.

Encapsulation OOP C++

Một ví dụ về tính đóng gói :

0123456789101112131415161718192021

classconnguoi{

private:

stringten;

inttuoi;

public:

voidinput()

{

cout<<" Nhap Ten : ";

fflush(stdin);

getline(cin,this->ten);

cout<<" Nhap Tuoi : ";

cin>>tuoi;

}

voidoutput()

{

cout<<" Ten : "<ten<

cout<<" Tuoi : "<tuoi<

}

};

Tính đóng gói biểu lộ ở đoạn code trên là phối hợp những thuộc tính ten, tuoi và phương pháp input ( ), output ( ) vào trong class connguoi .

Che giấu dữ liệu  (Data Hiding) là việc một số dữ liệu (data)hàm/phương thức (functions/methods) được lớp (class) che giấu đi (ở dạng private) để đảm bảo rằng các dữ liệu đó sẽ được truy cập và sử dụng đúng mục đích, đúng cách thông qua các hàm/phương thức (functions/methods) ở dạng public mà class cung cấp. Bạn không thể truy cập đến các private data hoặc gọi đến private methods của class từ bên ngoài class đó.

Che giấu dữ liệu chỉ là một phương pháp kỹ thuật mà bạn áp dụng để xây dựng nên class mà thôi, nó không phải là tính chất đặc trưng của lập trình hướng đối tượng, việc bạn có áp dụng phương pháp này hay không là hoàn toàn không bắt buộc. Tuy nhiên trong các hệ thống thật, để nâng cao tính bảo mật, giảm phụ thuộc giữa các class, tránh lỗi đọc ghi dữ liệu sai cách, …  thì việc áp dụng phương pháp che giấu dữ liệu gần như là đương nhiên.

Nhìn lại đoạn code bên trên có thể thấy là các dữ liệu như ten, tuoi được để ở dạng privateBạn chỉ có thể truy cập chúng thông qua các phương thức public như: input(), output(). Đó chính là Data Hiding.

Tính đa hình (Polymorphism)

Trong lập trình hướng đối tượng và đơn cử là trong ngôn từ C + + thì tính đa hình có 2 dạng :

  • Dạng 1 – Compile time Polymorphism: Một class có nhiều hàm cùng tên nhưng khác nhau về số lượng tham số hoặc kiểu dữ liệu của tham số. Khi gọi hàm cùng tên đó thì trong quá trình biên dịch, compiler sẽ quyết định hàm nào (trong số các hàm cùng tên) sẽ được gọi dựa trên số lượng tham số và kiểu dữ liệu của tham số truyển vào hàm. Việc định nghĩa các hàm cùng tên được gọi là overloading – nạp chồng hàm.
  • Dạng 2 – Runtime Polymorphism: Cùng một class có thể cho ra nhiều biến thể, không phải được định nghĩa bởi lớp đó, mà bởi các lớp con của nó. Đây là một phương pháp để định nghĩa lại hành vi của lớp cơ sở mà không phải sửa code (còn gọi là Implementation) của lớp cơ sở. Nếu gọi hàm của đối tượng của lớp dẫn xuất thông qua con trỏ của lớp cơ sở thì việc hàm nào (của lớp cơ sở hay). Runtime Polymorphism được thực hiện bằng phương pháp overriding – ghi đè phương thức.

Ví dụ :

012345678910111213

14

15161718192021222324252627282930313233

#include

usingnamespacestd;

classData

{

public:

voidprint(inti)

{

cout<<" Print int : "<

}

voidprint(floati)

{

cout<<" Print float : "<

}

voidprint(stringi)

{

cout<<" Print string : "<

}

}

intmain()

{

Dataobj;

obj.print(1);

obj.print(2.5);

obj.print(” Lap Trinh Khong Kho “);

return0;

}

Ta có lớp data có phương pháp print cùng tên nhưng tham số truyền vào thuộc những kiểu tài liệu khác nhau. Trong hàm main, ta gọi phương pháp print 3 lần nhưng mỗi lần truyền một tham số thuộc kiểu khác, khi biên dịch chương trình sẽ tự nhận ra kiểu giá trị của tham số truyền vào từ đó xác lập phương pháp nào trong 3 phương pháp cùng tên sẽ được gọi .

Tính kế thừa (Inheritance)

Đặc tính này cho phép một đối tượng có thể có sẵn các đặc tính mà đối tượng khác đã có thông qua kế thừa. Điều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại. Tuy nhiên, không phải ngôn ngữ định hướng đối tượng nào cũng có tính chất này.

Lấy 1 ví dụ:
Coi con người là một class, class này sẽ có các thuộc tính: tên, tuổi, … Một class sinh viên sẽ kế thừa class con người do sinh viên cũng có các thuộc tinhs: tên, tuổi, … Ngoài ra còn có thêm các thuộc tính: mã sinh viên, điểm thành phần, …

Bài viết tiên phong của mình xin kết thúc tại đây. Rất mong mọi người góp phần những quan điểm để bài viết của mình ngày càng hoàn thành xong hơn. Cảm ơn toàn bộ. Chào tạm biệt và hẹn gặp lại mọi ngươi trong những bài viết tiếp theo của Series Hướng Đối Tượng C + + nhé .
Một số tài liệu tìm hiểu thêm :