GIẢI THÍCH CÁC KHÁI NIỆM TRONG OOP – TÍNH ĐA HÌNH – phần 2

Trước khi đọc bài này, xin hãy ngẩng đầu lên trời đọc câu sau 3 lần: “Khi tôi học gì thì phải hiểu đến tận gốc rễ!

Hãy đọc qua phần 1 nếu bạn chưa biết đa hình là gì.

Trong phần 2, ta sẽ tìm hiểu virtual❗️, là chìa khóa cho sức mạnh của đa hình, chúng ta cũng sẽ phải đọc một chút ngôn ngữ Assembly. Đây là cách học hại não🏴‍☠️, nhưng nó đáng giá từng phút bạn học, và đảm bảo nếu chịu khó bạn sẽ hiểu thêm được rất nhiều, vậy nên hãy cố lên nhé.

Đọc để biết thêm về Ngôn ngữ Assembly: https://daohainam.com/2023/03/07/the-nao-la-ngon-ngu-lap-trinh-bac-thap-bac-cao/

Trước tiên xin giới thiệu với bạn một công cụ cho phép ta dịch các chương trình sang assembly (hợp ngữ), ta sẽ dùng công cụ này để khảo sát những gì trình biên dịch tạo ra từ chương trình animal.

Bạn truy cập Godbolt tại https://godbolt.org/z/KiMvdD.

Trở lại với chương trình animal, với 2 lớp Dog và Fish. Ta sẽ dịch nó sang mã assembly và xem những gì thực sự xảy ra.

Continue reading “GIẢI THÍCH CÁC KHÁI NIỆM TRONG OOP – TÍNH ĐA HÌNH – phần 2”

VIRTUAL ABSTRACT CLASS VÀ INTERFACE

Một trong những câu hỏi thường gặp nhất khi học OOP là: (Virtual) abstract class và Interface khác nhau chỗ nào? Và khi nào sử dụng cái nào?

ℹ️ Câu trả lời đơn giản nhất là: Nếu ngôn ngữ của bạn có hỗ trợ interface thì hãy dùng nó, đừng nghĩ gì về abstract class nữa.Để hiểu hơn về 2 thứ này, ta cần hiểu một chút về trừu tượng trong (abstraction) OOP.

Continue reading “VIRTUAL ABSTRACT CLASS VÀ INTERFACE”

TÍNH TRỪU TƯỢNG

Tính trừu tượng – mới nghe đã thấy mệt mỏi rồi 🥴.

Như trong những bài viết trước, ta đã thấy trừu tượng là khái niệm mà chúng ta luôn cố gắng hiện thực khi xây dựng phần mềm.

Nói một cách đơn giản, trừu tượng cho phép ta làm việc với các thành phần khác mà không cần quan tâm chúng được xây dựng như thế nào, không cần biết bên trong một lớp người ta viết gì và chúng ta không cần phải quan tâm đằng sau chúng có những thành phần nào để chạy.

Trong OOP, với bài toán quản lý sinh viên, ta tạo ra một lớp cha StudentStore, trong đó có 2 phương thức Find and Save, dùng để tìm và lưu trữ thông tin về các sinh viên.Trong phiên bản đầu tiên, Find và Save sẽ đọc và lưu lại thông tin vào các file trên đĩa. Nhưng đến khi bạn học sang phần Sql Server, bạn muốn lưu trữ vào cơ sở dữ liệu thay cho file, vì tất nhiên làm việc với dữ liệu trên file sẽ cực nhọc và kém hiệu quả hơn nhiều. Lúc đó bạn sẽ làm gì?

Continue reading “TÍNH TRỪU TƯỢNG”

GIẢI THÍCH CÁC KHÁI NIỆM TRONG OOP – TÍNH ĐA HÌNH (Polymorphism)

Đa hình là tính chất quan trọng nhưng khó hiểu nhất của OOP – nắm bắt được tính chất này, bạn sẽ dễ dàng hiểu được tất cả những gì còn lại, kể cả tính trừu tượng sau này. Trong bài này tôi sẽ giải thích nó theo cách đơn giản nhất, sau đó trong phần 2 ta sẽ đào sâu vào, xem những gì thực sự xảy ra ở bên dưới.

👉 Giải thích đơn giản thì đa hình cho phép tự động gọi một phương thức dựa trên các tham số truyền vào (1) hoặc kiểu thực sự của đối tượng bạn đang có (2). (1) Nếu bạn có 2 phương thức:

function Add(x, y : Integer) : Integer;
begin
    Add := x + y
end;
function Add(s, t : String) : String;
begin
    Add := Concat(s, t)
end;
Continue reading “GIẢI THÍCH CÁC KHÁI NIỆM TRONG OOP – TÍNH ĐA HÌNH (Polymorphism)”

GIẢI THÍCH CÁC KHÁI NIỆM TRONG OOP (phần 2)

Thừa kế cho phép ta tạo một lớp mới mở rộng từ một lớp khác, lớp mới được gọi là lớp con, lớp thừa kế hay lớp dẫn xuất (derived class), mình hay gọi là lớp con cho nhanh.

Lớp cha còn gọi là lớp cơ sở.Ưu điểm dễ thấy nhất là ta có thể tạo ra một lớp con mới tận dụng các tính năng có sẵn được cung cấp từ lớp cha, hay còn gọi là khả năng sử dụng lại.

Ấy nhưng đó lại chẳng phải là nguyên nhân người ta cho ra đời tính chất này, bởi nếu bạn đã có sẵn những tính năng đó thì dù có hay không khả năng thừa kế, bạn vẫn có thể tạo ra những lớp mới gọi lại các tính năng đó.Ưu điểm chính của thừa kế là nhờ có nó ta mới có được đa hình (polymorphism), và nhờ đa hình mà ta có trừu tượng (abstract).

❗️Trừu tượng là thứ mà tất cả những nhà thiết kế phần mềm đều muốn sử dụng càng nhiều càng tốt: các driver cho phép phần mềm giao tiếp với các thiết bị khác nhau khi dùng chung một phương thức, các file system driver giúp tương tác với các file trên đĩa mà không cần quan tâm chúng được định dạng với NTFS, HTFS, FAT hay Ext3, ngôn ngữ SQL cho phép làm việc với các cơ sở dữ liệu mà không cần biết chúng được lưu trữ thế nào, HTTP cho phép xem các trang web mà không cần quan tâm máy chủ của nó hoạt động ra sao… Có vô số các ví dụ như vậy. Vì thực sự thừa kế rất dễ hiểu nên tôi sẽ chỉ giải thích một số khái niệm liên quan:

Continue reading “GIẢI THÍCH CÁC KHÁI NIỆM TRONG OOP (phần 2)”

GIẢI THÍCH CÁC KHÁI NIỆM TRONG OOP (phần 1)

Tiếp theo các bài viết về tầm quan trọng của OOP trong lập trình, tôi sẽ tiếp tục giải thích kỹ hơn về các khái niệm có trong OOP. Tôi sẽ chỉ nói về ý tưởng, và cách thiết kế một cách hợp lý, tức là vì sao có nó và nên sử dụng nó như thế nào. Việc giới thiệu và cách viết trong từng ngôn ngữ cụ thể bạn có thể đọc được từ rất nhiều tài liệu khác có trong trường học và Internet.

OOP sẽ rất dễ hiểu nếu bạn nhìn từ góc độ cuộc sống, bạn đọc một khái niệm, tìm một ví dụ trong đời thực mô tả khái niệm đó, khi đã tìm được ví dụ bạn sẽ dễ dàng hiểu được nó.

Nhớ là các khái niệm trong OOP có sự liên hệ lẫn nhau, nên sẽ rất khó nếu bạn cố gắng học và hiểu toàn bộ từng-cái-một, cách tốt nhất là đọc toàn bộ, phần nào chưa hiểu hết cứ bỏ qua, rồi lại đọc lại toàn bộ một lần nữa, lần này bạn chỉ đọc những chỗ đã bỏ qua ở lần trước. Cứ lặp đi lặp lại như vậy, lúc nào đó bạn sẽ nghiệm ra và hiểu tất cả.

Continue reading “GIẢI THÍCH CÁC KHÁI NIỆM TRONG OOP (phần 1)”

OOP – chủ đề huyền thoại trong các cuộc phỏng vấn tuyển dụng

Có lẽ các bạn đã từng tham gia phỏng vấn không lạ gì câu hỏi: “Bạn có thể trình bày về lập trình hướng đối tượng được không?”, tại sao nó lại trở thành một chủ đề được quan tâm như vậy? Hãy cùng xem qua những lý do sau nhé.

1. OOP là một cách tư duy: bạn có nhớ lần đầu tiên học về OOP không? Bạn sẽ ngạc nhiên vì sao người ta có thể nghĩ ra những ý tưởng hay đến như vậy, hay đến mức mình làm hoài vẫn không đúng, thậm chí có thể vài năm sau mới nhận ra trước giờ mình toàn làm sai. Cách suy nghĩ của nó khác hoàn toàn với phương pháp lập trình tuyến tính trước đó, và nhờ vậy giúp xây dựng các ứng dụng lớn dễ dàng hơn rất nhiều. Chẳng phải tự nhiên mà hầu hết các nền tảng và ngôn ngữ lập trình hiện tại đều dựa trên, hoặc chí ít là hỗ trợ OOP.

Continue reading “OOP – chủ đề huyền thoại trong các cuộc phỏng vấn tuyển dụng”