Tại sao nói lập trình hướng thủ tục là top-down và hướng đối tượng là bottom-up

Trong link kia ghi là: C tiếp cận theo top-down còn C++ tiếp cận theo bottom-up là thế nào nhể :smiley:

2 Likes

Dạ theo em có đọc thì

  • Lập trình hướng thủ tục (POP) thì chương trình thiết kế theo hướng từ trên xuống (top-down).
  • Còn lập trình hướng đối tượng (OOP) thì theo hướng dưới lên (bottom-up).

Lập trình hướng đối tượng (Object Oriented Programming - gọi tắt là OOP) hay chi tiết hơn là Lập trình định hướng đối tượng, chính là phương pháp lập trình lấy đối tượng làm nền tảng để xây dựng thuật giải, xây dựng chương trình. Thực chất đây không phải là một phương pháp mới mà là một cách nhìn mới trong việc lập trình. Để phân biệt, với phương pháp lập trình theo kiểu cấu trúc mà chúng ta quen thuộc trước đây, hay còn gọi là phương pháp lập trình hướng thủ tục (Procedure-Oriented Programming), người lập trình phân tích một nhiệm vụ lớn thành nhiều công việc nhỏ hơn, sau đó dần dần chi tiết, cụ thể hoá để được các vấn đề đơn giản, để tìm ra cách giải quyết vấn đề dưới dạng những thuật giải cụ thể rõ ràng qua đó dễ dàng minh hoạ bằng ngôn ngữ giải thuật (hay còn gọi các thuật giải này là các chương trình con). Cách thức phân tích và thiết kế như vậy chúng ta gọi là nguyên lý lập trình từ trên xuống (top-down), để thể hiện quá trình suy diễn từ cái chung cho đến cái cụ thể.

Các chương trình con là những chức năng độc lập, sự ghép nối chúng lại với nhau cho chúng ta một hệ thống chương trình để giải quyết vấn đề đặt ra. Chính vì vậy, cách thức phân tích một hệ thống lấy chương trình con làm nền tảng, chương trình con đóng vai trò trung tâm của việc lập trình, được hiểu như phương pháp lập trình hướg về thủ tục. Tuy nhiên, khi phân tích để thiết kế một hệ thống không nhất thiết phải luôn luôn suy nghĩ theo hướng “làm thế nào để giải quyết công việc”, chúng ta có thể định hướng tư duy theo phong cách “với một số đối tượng đã có, phải làm gì để giải quyết được công việc đặt ra” hoặc phong phú hơn, “làm cái gì với một số đối tượng đã có đó”, từ đó cũng có thể giải quyết được những công việc cụ thể. Với phương pháp phân tích trong đó đối tượng đóng vai trò trùng tâm của việc lập trình như vậy, người ta gọi là nguyên lý lập trình từ dưới lên (Bottom-up).

nguồn: https://beta.wikiversity.org/wiki/Giới_thiệu_về_lập_trình_hướng_đối_tượng

4 Likes

Nghe củ chuối nhể :blush: anh nghĩ là với phương pháp lập trình nào thì cũng đều hướng đến việc giải quyết vấn đề, mà muốn giải quyết vấn đề thì phải bắt đầu từ chính vấn đề đó chứ sao lại bắt đầu từ đối tượng được.

Tự nhiên tạo ra đống object xong nghĩ "giờ mình làm gì với chúng nhỉ? " :smile:, nếu như vậy thì thủ tục cũng làm được, cũng ngồi tạo ra đống thủ tục rồi tự hỏi “làm gì tiếp bây giờ?” :smile:

3 Likes

Theo mình thì hướng thủ tục là top-down, tức mình làm gì đó, từ hành động đó mổ xẻ ra các vấn đề liên quan
Hướng đối tượng là bottom-up, tức là ta quan sát cấu tạo hay đúng hơn là “hành động đó bao gồm những hành động con nào”, rồi xây dựng các mẫu nhỏ, và ghép lại.

2 Likes
  • Với phương pháp lập trình thủ tục, người lập trình phải có cái nhìn tổng quan về toàn bộ hệ thống mà họ sẽ thiết kế ra. Sau đó dùng phương pháp chia để trị, nhằm đơn giản hóa các module khác nhau để phục vụ cho từng mục đích nhỏ. Nhưng những công việc nhỏ này đã nằm trong sự tính toán ban đầu rồi. Nó đi từ tổng quan đến chi tiết nên gọi là top - down. Lập trình hướng cấu trúc tập trung nhiều hơn vào chức năng. Chức năng (functional) thì nó có đầu vào và đầu ra, việc thay đổi dữ liệu làm ảnh hưởng đến đầu vào và đầu ra của hệ thống, việc chỉnh sửa, bảo trì sẽ tốn nhiều thời gian.

  • Còn phương pháp hướng đối tượng cho người lập trình xây dựng hệ thống với những thực thể (đối tượng) chưa hoàn thiện. Về sau nếu cần thêm chức năng cho hệ thống, cần thêm phương thức cho đối tượng thì có thể kế thừa hoặc chỉnh sửa bên trong các class đó. Hệ thống xây dựng từ đơn giản đến phức tạp nên gọi là bottom - up. Lập trình hướng đối tượng tập trung nhiều hơn vào dữ liệu.

Mình chỉ hiểu như thế thôi, chẳng biết có đúng không.

3 Likes

A post was split to a new topic: Làm thế nào để xác định lớp(class) từ bài toán đặt ra? Làm thế nào để xác định phương thức của lớp?

A post was merged into an existing topic: Làm thế nào để xác định lớp(class) từ bài toán đặt ra? Làm thế nào để xác định phương thức của lớp?

Search một lúc thì thấy em người ta bảo là dùng cả 2 :joy: oop cũng có lúc cần cả top-down :smile:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?