- vừa được xem lúc

4 nguyên lý cơ bản trong OOP và ví dụ dễ hiểu bằng Python

0 0 50

Người đăng: Tony Pham

Theo Viblo Asia

OOP sinh ra nhằm tổ chức mã nguồn tốt hơn, và làm cho việc lập trình giống như việc tổ chức quản lý các đối tượng trong thế giới thực. Trong OOP, người ta có đề 4 nguyên lý cơ bản: trừu tượng, đóng gói, kế thừađa hình.

Hôm nay mình sẽ giải thích chi tiết theo ý hiểu của mình về 4 nguyên lý này cùng với code Python minh họa.

1. Abstraction – tính trừu tượng

Thiết lập mức độ phức tạp mà 1 người tương tác với hệ thống, giấu đi các chi tiết phức tạp hơn.

Ở đây có ông nào dùng máy pha cà phê rồi thì biết, đứng ấn vài nút là có cốc cà phê ngon, nhưng bên trong nó làm rất nhiều công đoạn mà chúng ta không cần quan tâm nó như nào. Đấy là 1 ví dụ trừu tượng thực tế. Và khi có 1 update gì bên trong phần mềm của máy cũng hiếm khi ảnh hưởng tới cách sử dụng máy phía bên ngoài.

image.png

Việc pha cà phê cũng giống như việc sử dụng object coffee_machine để tạo 1 cốc cà phê - a_cup_of_coffee. Tất cả chỉ cần gọi hàm make_coffee, việc bên trong hàm hoạt động như thế nào người gọi không cần quan tâm. Và khi có thay đổi hoạt động bên trong hàm make_coffee thì cũng không ảnh hưởng tới việc bên khác gọi hàm này.

2. Encapsulation – tính đóng gói

Nôm na là việc đóng gói data lại và kiểm soát việc truy cập và thay đổi data từ bên ngoài. Ví dụ trong Java có setter, getter để kiểm soát việc truy cập vào một biến. Một biến đã là private thì không thể truy cập hay chỉnh sửa trực tiếp từ phía ngoài class hay object.

Nếu không để ý thì dễ hay bị mơ hồ giữa 2 khái niệm đóng gói và trừu tượng. Đều là ẩn đấy nhưng đóng gói thì là information hiding, còn trừu tượng thì là implementation hiding.

Python không có keyword kiểu private hay protected như bên Java mà quy ước theo cách đặt tên biến: 1 dấu gạch dưới để set 1 biến thành internal use (vẫn có thể public access nhưng bị cảnh báo), và 2 dấu gạch dưới để set thành private (không thể public access)

image.png

3. Inheritance – tính kế thừa

Việc thừa hưởng lại những gì người khác để lại =))

Trong lập trình, kế thừa là cách 1 lớp có thể thừa hưởng lại những thuộc tính, method từ 1 lớp khác, sử dụng hoặc override chúng.

In other words, I can say that =))) kế thừa dùng để biểu diễn mối quan hệ đặc biệt hóa – tổng quát hóa giữa các lớp.

VD: có nhiều loại ô tô, nhưng đều có 1 số đặc điểm chung: 4 bánh, các phương thức khởi động, run, phanh, tăng tốc, … nên sẽ kế thừa chung 1 class cha là Car chứa các thuộc tính và phương thức chung thay vì phải viết đi viết lại ở nhiều class. Và khi cần sửa thì cũng đi từng class để sửa, rất mất công và thời gian, lại còn dễ lỗi.

=> Gia tăng việc tái sử dụng code, giúp ta dễ nâng cấp và bảo trì

Trong code trên, các class con khi kế thừa class Person sẽ không phải implement lại các method chung nữa mà có thể dùng ngay.

4. Polymorphism – tính đa hình

Hai hay nhiều lớp sẽ có chung phương thức nhưng lại được implement theo các cách khác nhau – thực hiện 1 hành động theo nhiều cách khác nhau. VD: cùng 1 method được kế thừa ở lớp cha, mỗi lớp con có thể override theo cách riêng, hoạt động khác nhau. Cùng là con vật có thể kêu nhưng chó, mèo, chuột sẽ kêu theo các cách khác nhau.

image.png

Đa hình còn giúp cho việc sử dụng 1 class con và cha là như nhau. Nó giúp cho chương trình chúng ta viết trở nên linh hoạt hơn.

image.png

Method bên trên chỉ cần quan tâm kiểu object nó nhận vào là Animal, nên khi chúng ta truyền vào Cat object hay Dog object thì nó đều chạy bình thường.

Trên đây là sơ qua về 4 nguyên lý cơ bản của OOP. Hẹn các ae trong các bài viết sau nha!!

Tôi đi ngủ đây chứ 1h rồi ??? Nhớ up vote nếu thấy hữu ích nha ???

Bình luận

Bài viết tương tự

- vừa được xem lúc

4 đặc tính của lập trình hướng đối tượng (Object oriented program)

Lập trình hướng đối tượng quá quen thuộc rồi bạn nào học lập trình đều phải học, đi phỏng vấn cũng vậy hỏi suốt(chắc cái này tùy vào vị trí tuyển dụng chủ yếu junior chắc chắn sẽ hỏi).nó là nền tảng cho hầu hết các design pattern hiện nay.

0 0 46

- vừa được xem lúc

Khác nhau giữa abstract class và interface khi nào dùng chúng

Nhắc đến Interface và abstract class hãy nhớ 2 từ này khá clear rồi, Khi sử dụng Interface là bạn Implement còn sử dụng abstract class là bạn extend. . Interface:. .

0 0 41

- vừa được xem lúc

So sánh Interface và Abstract trong lập trình hướng đối tượng.

Tổng quan. Interface và Abstract class là 2 khái niệm cơ bản trong lập trình OOP.

0 0 63

- vừa được xem lúc

Áp Dụng Nguyên Tắc SOLID Trong Lập Trình

Giới Thiệu. 1. SOLID là gì. SOLID là viết tắt của 5 chữ cái đầu trong 5 nguyên tắc:.

0 0 36

- vừa được xem lúc

Kỹ thuật giải quyết bài toàn về policy và công thức tính toán động cho sản phẩm phần mềm

Dạo này tôi có một mối duyên rất tình cờ với việc làm các phần mềm thuộc lĩnh vực tài chính và ngân hàng. Một số bài toán trong lĩnh vực này làm tôi nhớ đến những ngày đầu làm việc với phần mềm Trinet

0 0 34

- vừa được xem lúc

Object Relational Mapping

Trong cách phát triển ứng dụng web hiện nay chắc hẳn các bạn đã quen với với từ khóa ORM(Object Relational Mapping). Khi mà thời đại của các framework ứng với các ngôn ngữ đang lên ngôi một cách mạnh

0 0 39