Lập trình hướng đối tượng, lập trình hướng cấu trúc là 2 phương pháp lập trình rất quan trọng khi học lập trình. Nếu việc học ngôn ngữ lập trình như việc bạn học bảng chữ cái, thì việc học các phương pháp lập trình giống như bạn học viết văn hay làm thơ vậy.
Vận dụng tốt các phương pháp lập trình sẽ tạo nên một lập trình viên Pro.
Trước khi đi vào 2 loại đó, chúng ta cùng tìm hiểu phương pháp đầu tiên, thô sơ nhất trong việc lập trình đó là lập trình tuyến tính Linear Programing
Lập trình tuyến tính Linear Programing là gì?
Lập trình tuyến tính là phương pháp lập trình đơn giản, đơn luồng. Các câu lệnh được thực hiện tuần tự từ đầu đến cuối, lệnh này kế tiếp lệnh kia cho đến khi kết thúc chương trình.
Đặc trưng của lập trình tuyến tính:
- Đơn giản: Chương trình được thực hiện theo lối tuần tự.
- Đơn luồng: Chỉ có duy nhất một luồng công việc và các công việc được thực hiện tuần tự trong luồng đó.
Tuy là một dạng lập trình hiện giờ ít gặp, hiện tại chỉ thấy khi sử dụng ngôn ngữ ASM (Asembly) thế nhưng chung quy mọi thứ đều quy về phương pháp này, mọi câu lệnh đều được MCU hoặc CPU xử lý một cách tuần tự, hết lệnh này mới đến lệnh khác.
Lập trình hướng cấu trúc (POP) là gì?
Lập trình hướng cấu trúc hay còn gọi là lập trình hướng thủ tục (Procedure Oriented Programming – POP): là một kỹ thuật lập trình truyền thống, trong đó chương trình được chia thành các hàm (chương trình con). Các chương trình con lại sử dụng các hàm hoặc chương trình con khác nhỏ hơn để thực thi.
Nói một cách đơn giản, lập trình hướng cấu trúc sẽ chia nhỏ một vẫn đề lớn thành vấn đề nhỏ, một vấn đề nhỏ thành một vấn đề siêu nhỏ. Cứ như vậy đến khi vấn đề được giải quyết một cách đơn giản.
Lấy một ví dụ:
Bạn muốn xây 1 căn nhà, đầu tiên bạn phải chia nhỏ xây căn nhà gồm những công đoạn nào:
- Xây Nền móng: lại được chia nhỏ thành các phần như: đào móng, tạo khung sắt thép, đổ bê tông, …
- Xây tường: lại chia thành các thành phần như xây tường gạch, chát, sơn …
- Xây mái: lại chia thành tạo khung, lát mái …
Các thứ bên trong sẽ được chia nhỏ thêm nữa, để khi mỗi người công nhân thực thi, họ chỉ cần thực thi đúng nhiệm vụ của mình từ đó xây nên một ngôi nhà. Mọi việc vẫn sẽ được thực hiện tuần tự nhưng sẽ được những cú pháp rẽ nhanh như if/else, vòng lặp for, while điều hướng việc thực thi.
Đặc điểm
- Tập trung vào công việc cần thực hiện (thuật toán)
- Chương trình lớn được chia thành các chương trình con, mỗi chương trình con có thể gọi tới một hoặc nhiều lần theo thứ tự bất kỳ.
- Phần lớn các hàm sử dụng dữ liệu chung
- Dữ liệu trong hệ thống được chuyển động từ hàm này sang hàm khác.
- Sử dụng cách tiếp cận top-down trong thiết kế chương trình
Ưu điểm:
- Tư duy giải thuật rõ ràng.
- Đơn giản, dễ hiểu.
- Cung cấp khả năng tái sử dụng cùng một mã tại nhiều nơi khác nhau.
- Tạo điều kiện trong việc theo dõi dòng chương trình.
Nhược điểm:
- Trong lập trình hướng cấu trúc ta thường quan tâm đến việc phát triển các hàm mà ít quan tâm tới dữ liệu – thứ mà chúng dùng để xử lý công việc.
- Không hỗ trợ sử dụng lại mã nguồn: mỗi cấu trúc dữ liệu chỉ phù hợp với một số giải thuật, khi thay đổi cấu trúc dữ liệu thì giải thuật phải thay đổi theo.
Các ngôn ngữ hiện nay sử dụng
C, Pascal
Lập trình hướng đối tượng OOP là gì
Định nghĩa về lập trình hướng đối tượng
Lập trình hướng đối tượng (Object Oriented Programming – OOP): là một kỹ thuật lập trình, trong đó chương trình sẽ được chia ra thành các phần nhỏ được gọi là đối tượng (Object). Đối tượng trong lập trình hướng đối tượng sẽ tương ứng với các thực thể trong bài toán, nó sẽ có các thuộc tính (attribute), các hành động (method). Các đối tượng có thể tương tác với nhau trao đổi dữ liệu qua lại với nhau.
Nói một cách đơn giản lập trình hướng đối tượng sẽ từ từ tạo nên 1 đối tượng lớn từ những đối tượng nhỏ hơn. Nếu coi hướng cấu trúc là phân rã chức năng, thì hướng đối tượng lại là tập hợp chức năng.
Các chức năng sẽ khiến cho chương trình càng ngày càng lớn dần lên, vậy nên OOP sẽ phải tuân thủ rất nhiều quy định nghiêm ngặt trong việc phát triển nếu không muốn cả hệ thống của bạn trở thành 1 đống tơ vò.
Lấy một ví dụ:
Khi bạn muốn tạo ra một con người thì phải cấu thành từ các bộ phận như tay, chân. mắt, mũi, miệng. Các bộ phận đó gọi là Object các đối tượng luôn có thuộc tính (attribute) và (menthod) giống hoặc khác nhau.
Tay có hành động là cầm, nắm, sờ … thuộc tính như hình dang, màu sắc khác các đối tượng còn lại.
Mắt có hành động là nhìn, thuộc tính như hình dạng là tròn, màu sắc ….
Tất cả các đối tượng đó ghép lại tạo nên 1 con người.
Hành động thiết kế con người không theo các tiêu chuẩn cũng giống như bạn cho thêm 1 số đối tượng như cánh, đuôi cho con người. Vậy thì chúng ko thể thành con người nữa mà trở thành wái vật… Tất nhiên bạn không muốn chút nào đúng không
Đặc điểm của lập trình hướng đối tượng
- Dễ dàng quản lý code khi có sự thay đổi chương trình.
- Dễ mở rộng dự án.
- Tiết kiệm được tài nguyên đáng kể cho hệ thống.
- Có tính bảo mật cao.
- Có tính tái sử dụng cao.
- Nó có khả năng lập biểu đồ cho các đối tượng.
- Cho phép phân loại các đối tượng thành các lớp khác nhau.
Ngôn ngữ sử dụng: C#, Python, Java, JS …. nói chung rất nhiều.
Các tính chất của lập trình hướng đối tượng
- Tính đóng gói (encapsulation)
- Tính kế thừa (inheritance)
- Tính đa hình (polymorphism)
- Tính trừu tượng (abstraction)
Nói về các tính chất này thì dài lắm, bạn có thể đọc trong phần link sau nhé
So sánh giữa lập trình hướng cấu trúc và lập trình hướng đối tượng
Chúng ta không thể so sánh cái này hơn cái kia mà bỏ không dùng nó được, mọi thứ tồn tại đều có ý nghĩa của nó
Dù biết mọi so sánh đều là khập khiễng nhưng nếu không so sánh chúng ta không thể biết rõ chúng được dùng trong hoàn cảnh nào, qua đó sự tư duy sẽ khó mà phát triển
Giống nhau
- Chúng đều là phương pháp để tạo ra một hành động hoặc chuỗi hành động cho máy tính, vi điều khiển hành động. Sử dụng các ngôn ngữ lập trình để tạo nên các chuỗi hành động đó và phản xạ theo môi trường hoặc con người tác động lên.
- Chúng khó hiểu vãi nồi ( chia sẻ thực =)) )
- Chúng bị ràng buộc với nhau, các bạn đừng nghĩ lập trình OOP không liên quan gì tới POP, thực tế các lớp sâu phía dưới giao tiếp với CPU chúng ta vẫn phải sử dụng POP, chỉ khác là chúng được trừu tượng hóa đi mà thôi
Khác nhau giữa lập trình hướng cấu trúc và lập trình hướng đối tượng
Mục tiêu lập trình hướng tới
POP hướng tới việc lập trình các thao tác, công việc, chia nhỏ công việc lớn thành nhỏ. Việc lập trình hướng tới việc giải quyết một vấn đề nhất định, không thay đổi
OOP hướng tới lập trình các đối tượng ( các đối tượng đó cũng có thể là các thao tác, công việc), chức năng của đối tượng cũng sẽ được phát triển hơn, có thể thay đổi dễ dàng
Hướng của lập trình
Mình cũng chẳng rõ nên đặt tên vấn đề này như thế nào nữa.
POP hướng tới việc thực thi, gắn chặt với kiến trúc của vi xử lý, chúng là một kiểu chuyển đổi cho con người có thể hiểu được ngôn ngữ của máy tính. Thế nhưng trong chúng vẫn luôn tồn tại tính Tuyến tính của việc thực thi. POP cũng chỉ sử dụng trong các ngôn ngữ bậc thấp, có thể can thiệp trực tiếp tới bộ vi xử lý, vi điều khiển
OOP hướng tới việc phát triển ứng dụng, chúng tại gắn liền với các nhu cầu của con người. Chúng bỏ qua lớp giao tiếp với máy mà giúp con người phát triển ứng dụng một cách nhanh chóng nhất mà không cần phải biết Vi xử lý nó làm cái quần què gì. Vậy nên OOP có thể khá thân thiện với con người và dễ dàng học tập hơn
Điều khiển dữ liệu
Với OOP thì dữ liệu và hàm của một đối tượng giống như một thành phần riêng biệt và bị hạn chế truy cập bởi các đối tượng khác. Với POP, dữ liệu có thể truy cập một cách tự do giữa các hàm. Vì vậy bảo mật của OOP sẽ cao hơn POP
Quản lý dữ liệu
Lập trình hướng đối tượng sẽ làm cho việc viết chương trình trở nên trực quan và đơn giản, giống như việc ta đang tương tác với những thứ xung quanh mình vậy. Do nó đơn giản hơn nên sẽ mất ít công sức hơn, làm được nhiều hơn, dễ bảo trì và phát triển hơn. Trong OOP dữ liệu có thể thêm mới một cách dễ dàng từ các đối tượng trong khi với POP thì rất khó.
Kết
Phương pháp lập trình nào cũng có ý nghĩa của nó. Nếu bạn muốn theo nghành lập trình nhúng, bạn nên nắm chắc phương pháp lập trình hướng cấu trúc. Nếu bạn muốn theo lập trình App, software, web, thì bạn nên hiểu rõ lập trình hướng đối tượng.
Hoặc bạn có thể học cả 2, vì tri thức luôn luôn là sức mạnh mà
Quá hay ạ