2009-10-25 24 views
70

Trong một cuộc phỏng vấn của tôi, họ đã hỏi tôi sự khác biệt giữa Lập trình khai báoLập trình thủ tục loại.Sự khác biệt giữa Lập trình Thủ tục và Thủ tục?

Sự khác biệt giữa chúng với ví dụ là gì?

P.S: Bạn có thể cho tôi biết bên cạnh hai chương trình hướng đối tượng và hướng đối tượng này không? Bởi vì họ có thể yêu cầu sự khác biệt giữa các ngôn ngữ lập trình khác nữa. Và có những câu hỏi tương tự như thế này nhưng quá phân tán.

+2

câu hỏi tương tự: http://stackoverflow.com/questions/1784664/what-is-the-difference-between-declarative-and-imperative-programming?lq=1 – daCoda

+1

Đáng buồn thay, không có ví dụ mã trong bất kỳ câu trả lời nào. –

Trả lời

83

Declarative

Mô tả kết quả và nhận được nó thông qua một hộp đen. Đối diện của bắt buộc. Ví dụ:

  • yacc
  • treetop
  • SQL
  • Regular Expressions
  • lex
  • XSLT
  • đánh dấu, troff, CSS, VHDL

Thủ tục hoặc bắt buộc

Mô tả thuật toán và các bước quy trình, ở các mức trừu tượng khác nhau.

  • C, hầu hết các ngôn ngữ di sản
  • PHP, chủ yếu là
  • trong một nghĩa nào đó tất cả các ngôn ngữ chính

Object Oriented

  • có xu hướng được trong các loại thủ tục, thường đề cập đến các ngôn ngữ thể hiện một hệ thống phân cấp các kiểu kế thừa cả hai phương thức và sta te từ các kiểu cơ sở đến các kiểu có nguồn gốc, nhưng cũng bao gồm JavaScript dựa trên nguyên mẫu không bình thường. Một thứ nguyên riêng biệt từ các danh mục khác tại đây.

chức năng

Bạn trái này ra ngoài. Lập trình chức năng nhấn mạnh việc áp dụng các chức năng không có tác dụng phụ và không có trạng thái có thể thay đổi.Các hệ thống khai báo ở trên thể hiện các khía cạnh nhất định của lập trình hàm.

  • Scheme
  • Erlang
  • OCaml
  • Haskell
  • Lisp, tùy thuộc. (Lisp có lẽ xứng đáng loại độc đáo riêng của mình)
  • Clojure, hơi
  • Ruby, phần nào ít
  • F #
  • Scala
+1

Tôi sẽ thêm lisp vào danh sách các ngôn ngữ lập trình chức năng của bạn. – dave

+3

Bạn cũng có thể thêm các ngôn ngữ logic như Prolog. –

+0

@ToonKrijthe, Prolog có rơi vào danh sách khai báo không? – ChronoFish

51

Lập trình khai báo là nơi bạn nói những gì bạn muốn mà không cần phải nói cách thực hiện. Với lập trình thủ tục, bạn phải chỉ định các bước chính xác để có được kết quả.

Ví dụ: SQL khai báo nhiều hơn thủ tục, vì các truy vấn không chỉ định các bước để tạo kết quả.

+0

Bạn có thể vui lòng cho tôi biết các ngôn ngữ lập trình loại khác ngoài Tuyên bố, Thủ tục và OOP. Cảm ơn. – Tarik

+2

+1 cho ví dụ tốt về SQL. chúng ta có thể có thêm ví dụ không? – mauris

+5

Mauris: Có thể không phải là ngôn ngữ lập trình, nhưng HTML là khai báo, bởi vì bạn mô tả những gì bạn muốn (một đoạn với * bit này * in đậm), thay vì viết ra "chuỗi ký tự, chuỗi đo, vị trí nâng cao, v.v ..." Một ví dụ khác là Prolog, trong đó một "chương trình" là một tập hợp khai báo các sự kiện và các quan hệ/các khoản khấu trừ và một truy vấn. Động cơ Prolog tìm ra cách để đánh giá truy vấn: bạn không cần phải nói cho nó cách làm như thế. Cuối cùng, cụm từ thông dụng: bạn mô tả mẫu thay vì đánh vần các bước để kiểm tra kết quả phù hợp. – itowlson

5

Theo Thủ Tục Lập trình:

Trong lập trình thủ tục, khi chương trình bắt đầu, nó theo một tập hợp các hướng dẫn. Các hướng dẫn có thể thay đổi dựa trên một số nội dung tệp hoặc bộ nhớ, nhưng nhìn chung, nó không thay đổi rộng rãi. đầu vào cho chương trình thường không phải từ đầu vào của người dùng trong thời gian thực, mà là từ tập hợp dữ liệu được thu thập trước.

Declarative Programming:

Trong lập trình hướng sự kiện Declarative centralizes xung quanh một cơ thể của dữ liệu với những hành động bắt buộc của chương trình có thể mất trên đó. Ví dụ: mỗi "sự kiện" trong một trình xử lý văn bản là bất kỳ thay đổi chuột hoặc bàn phím (hoặc tệp) nào ảnh hưởng đến dữ liệu, (các) tài liệu. Chúng không cần phải được thực hiện theo bất kỳ thứ tự nào. Lập trình hướng sự kiện có dạng các chương trình nhỏ (trình xử lý sự kiện) mà tất cả làm việc trên một tập dữ liệu chung, sao cho mỗi chương trình nhỏ có thể sử dụng cùng một dữ liệu, tài liệu trong ví dụ này.

-2

Trong phương pháp tiếp cận thủ tục, bạn mã hóa hướng dẫn của mình để đạt được kết quả. Trong cách tiếp cận khai báo, bạn xác định những gì cần phải được giải quyết như là kiến ​​thức giải quyết vấn đề. Có một cái nhìn tại Procedural or Declarative approach ví dụ tôi thực hiện trong cả hai phương pháp tiếp cận.

Như bạn thấy trong ví dụ, trong cách tiếp cận khai báo, bạn không cần hướng dẫn CÁCH để giải quyết vấn đề.

+0

Bạn đang tham khảo các ví dụ ngoài trang web như thể chúng được viết ở đây. Đưa các ví dụ của bạn vào như một phần của câu trả lời của bạn. – ChronoFish

11

Nói một cách đơn giản, tôi có một ví dụ về thế giới thực, trong đó tôi cần một tách trà.

Theo Thủ Tục:

  1. Tới bếp
  2. Nhận đường, sữa và trà,
  3. Trộn họ và nhiệt trên lửa cho đến khi nó sôi
  4. Đặt rằng trong một cốc và mang nó cho tôi

Tuyên bố:

  1. Cho tôi một tách trà.

Trong ngôn ngữ thủ tục, bạn xác định toàn bộ quá trình và cung cấp các bước để thực hiện. Bạn chỉ cần cung cấp các đơn đặt hàng và xác định cách thức hoạt động của quy trình.

Trong ngôn ngữ khai báo, bạn chỉ cần đặt lệnh hoặc đặt hàng và để nó nằm trên hệ thống cách hoàn tất đơn đặt hàng đó. Bạn chỉ cần kết quả của bạn mà không cần đào sâu vào cách nó nên được thực hiện.

Kính trọng,

+1

Bạn trộn lẫn khai báo và thủ tục trong lời giải thích, phải không? – opncow

+1

Đã cập nhật. Cảm ơn. –