17 tháng 4, 2020

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

Chúng ta đã cùng trải qua 29 bài về lập trình C# căn bản, các bạn đã nắm vững những kiến thức đó chưa, đã nhuần nhuyễn các bài tập thực hành chưa. Nếu đã nắm tương đối vững kiến thức cơ bản rồi thì chúng ta sẽ cùng tiến vào seri bài viết về lập trình hướng đối tượng nhé.

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

Qua 29 bài lập trình C# căn bản, chắc các bạn đã nhuần nhuyễn khi giải quyết một bài toán cơ bản nào đó rồi đúng không. Nhưng những ví dụ trong 29 bài trước đều là những bài toán nhỏ lẻ, đơn giản hóa. Nếu chúng ta phải lập trình nguyên vẹn một phần mềm, quản lý hệ thống lớn, cơ sở dữ liệu phức tạp thì phải làm việc một cách khoa học, có phương pháp. Trong bài viết này chúng ta sẽ cùng tìm hiều về các phương pháp lập trình nhé.


1. Lập trình tuyến tính

Tuyến tính tức nghĩa là đi theo một đường thẳng, đây là phương pháp lập trình không có cấu trúc. Các câu lệnh sẽ được viết tuần tự, giải quyết từng vấn đề một cho đến khi hết yêu cầu. Ngôn ngữ sử dụng phương pháp này là Assembly (hợp ngữ).

Tuy nhiên trong thực tế, nhiều bài toán không hề đơn giản như vậy. Phương pháp lập trình này kém hiệu quả và người lập trình không thể kiểm soát được khi các phần mềm có nhiều xử lý và phức tạp.

Nhược điểm:
- Chỉ sử dụng biến toàn cục dẫn đến rất tốn bộ nhớ
- Vì có những đoạn chương trình cần sử dụng lại nhiều lần nên phải lạm dụng lệnh goto
- Khó hiểu, khó bảo trì, không thể tái sử dụng
- Khó phát triển các dự án lớn


2. Lập trình hướng cấu trúc

Lập trình hướng cấu trúc lần đầu tiên được đề xuất bởi Corrado BohmGuiseppe Jacopini. Hai nhà toán học này cho rằng bất kỳ chương trình máy tính nào cũng có thể được viết chỉ với ba cấu trúc: tuần tự, điều kiện và vòng lặp.

Sau 1 thời gian tồn tại người ta dần nhận ra những nhược điểm của phương pháp tuyến tính và đưa ra giải pháp đó là chia chương trình lớn ra thành các chức năng, mỗi chức năng được đưa vào 1 hàm. Mỗi hàm này có thể chia thành các hàm nhỏ hơn. Khi cần dùng đến chức năng nào thì ta sẽ gọi hàm tương ứng.

Dữ liệu được chuyển đổi qua lại thông qua các tham số gọi hàm. Trong đó, những dữ liệu có tính chất dùng chung cho toàn hệ thống sẽ được khai báo toàn cục (global) để nhiều hàm có thể truy cập, đọc và thay đổi giá trị chung khi cần. Mỗi hàm cũng có các biến dữ liệu riêng gọi là dữ liệu cục bộ (local).

Lập trình hướng cấu trúc rất thông dụng trong những năm 80 và đầu những năm 90 nhưng lại chỉ chú trọng đến xử lý chức năng, thuật toán mà ít quan tâm đến dữ liệu. 

Ưu điểm:
- Chương trình được module hoá, dễ hiểu, dễ bảo trì
- Dễ dàng tạo ra các thư viện phần mềm

Nhược điểm:
- Dữ liệu và xử lý tách rời
- Khi cấu trúc dữ liệu thay đổi sẽ dẫn đến thuật toán bị thay đổi
- Không tự động khởi tạo, giải phóng dữ liệu động
- Không mô tả được đầy đủ hệ thống trong thực tế

Trong nhiều trường hợp cần xử lý dữ liệu một cách linh hoạt thì lập trình hướng cấu trúc bộc lộ nhiều hạn chế. Do đó, dần dần lập trình hướng cấu trúc đã bị thay thế bằng phương pháp lập trình hướng đối tượng.


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

Lập trình hướng đối tượng (Object Oriented Programming - OOP) là phương pháp lập trình lấy đối tượng làm nền tảng để xây dựng chương trình.

3.1: Đối tượng

Đối tượng được hiểu như là 1 thực thể (người, ô tô, xe máy, con chó, con mèo, hoa hồng ......)
Một đối tượng bao gồm 2 trường thông tin là: thuộc tính và phương thức.
- Thuộc tính: Là những thông tin, đặc điểm về đối tượng. Như chiều cao, cân nặng, ngày sinh, tóc, màu da ..........
- Phương thức: Là những thao tác, hành động mà đối tượng có thể thực hiện. Nhưng nghe, nói, đọc, viết, đi lại, chạy nhảy, ăn uống ..........

Ví dụ đối tượng là ô tô thì có:
- Thuộc tính: Nhãn hiệu, loại xe, tên xe, màu xe, biển kiểm soát, năm sản xuất .........
- Phương thức: Có thể di chuyển, bấm còi, .........


3.2: Lớp

Các đối tượng có các đặc tính tương tự nhau được gom lại thành 1 lớp đối tượng. 
Lớp cũng có thể được hiểu như một kiểu dữ liệu đặc biệt bao gồm các thuộc tính và phương thức. 
Lớp được dùng để định nghĩa ra một kiểu dữ liệu mới.

Ví dụMình có 2 chiếc ô tô là
1. Ô tô hãng Ford, màu bạc, biển kiểm soát là 29A - 12345, ......
2. Ô tô hãng Kia, loại K3, màu đỏ, biển kiểm soát là 29K - 45678, ......

Vậy mỗi chiếc ô tô trên là một đối tượng còn xe ô tô nói chung là một lớp đối tượng.

Lớpđối tượng là đặc trưng của phương pháp lập trình hướng đối tượng. Nó đã giải quyết được các nhược điểm của phương pháp lập trình hướng cấu trúc và giúp biểu diễn thế giới thực tốt hơn trên máy tính.


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

Tính đóng gói (Encapsulation)
- Các dữ liệu có liên quan với nhau được đóng gói thành các lớp để tiện cho việc quản lý và sử dụng.
- Tính đóng gói cho phép giấu thông tin của đối tượng và các chi tiết cài đặt nội bộ.


Tính trừu tượng (Abstraction)
- Từ những đối tượng có đặc trưng giống nhau có thể trừu tượng hóa thành interface.
- Loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình.

Tính kế thừa (Inheritance)
- Cho phép xây dựng một lớp mới dựa trên các định nghĩa của một lớp đã có. (lớp cha - lớp con)
- Lớp con được kế thừa các dữ liệu và phương thức từ lớp cha, không cần phải định nghĩa lại. Giúp chương trình ngắn gọn hơn. 

Tính đa hình (Polymorphism)
- Cùng một dữ liệu, một hành động nhưng các đối tượng lại hiểu khác nhau, thực hiện theo các cách khác nhau.
Ví dụ: Cùng là tiếng sủa "gâu gâu" nhưng mỗi con chó lại có kiểu sủa khác nhau, âm lượng khác nhau, cao độ khác nhau .........

SHARE THIS

Blogger Nguyễn Dương

Có một câu nói mà mình rất thích đó là "Thật sai lầm khi nghĩ rằng một khi rời khỏi trường học, bạn không cần học thêm điều mới nữa". Chính vì thế mà hãy luôn luôn học hỏi, con người chỉ ngừng phát triển khi ngừng học hỏi. Nếu như bạn chưa hiểu nội dung bài viết hoặc đang khúc mắc khi thao tác thì hãy bình luận phía dưới bài viết để mọi người cùng thảo luận nhé!