30/09/2018, 17:07

Khi nào thích hợp sử dụng lập trình hướng đối tượng / Lập trình hàm?

Chào mọi người, trong diễn đàn mình chắc hẳn ai cũng biết (rõ) về một (vài) ngôn ngữ nào đó, trong đó có cách phân loại rõ ràng nhất về ngôn ngữ sử dụng thành 2 loại là ngôn ngữ hướng đối tượngngôn ngữ hướng chức năng.
Cho đến nay 2 loại ngôn ngữ này tuy khác nhau những vẫn sống tốt sống khỏe song song độc lập với nhau.
Vậy mình muốn làm rõ như tiêu đề là khi nào (hay chương trình như thế nào) thì phù hợp để lập trình hướng đối tượng, và khi nào thì phù hợp để sử dụng lập trình hướng chức năng?
Mời mọi người tham gia thảo luận để tìm ra câu trả lời, có thể dùng ví dụ để chỉ rõ cho mình thì càng tốt, xin chân thành cảm ơn

Itachi Citus viết 19:17 ngày 30/09/2018

Dịch là ngôn ngữ hướng chức năng mình thấy không ổn lắm (dịch theo kiểu word-by-word). Nó là mô hình lập trình hàm (functional programming paradigm) với ngôn ngữ điển hình là Lisp và Haskell, đối nghịch lại là lập trình thủ tục (procedure programming paradigm) với ngôn ngữ là C hay Pascal. Các thành phần xử lý trong functional programming có tính chất tương tự các hàm toán học. Có một blog rất hay nói về haskell: http://quangchien.wordpress.com/2012/04/16/ch1-learn-haskell/

Thực chất các ngôn ngữ hiện nay đều là ngôn ngữ đa mô hình (multi paradigm), điển hình như Scala là hướng đối tượng và hàm, C++ là hướng đối tượng và thủ tục, Java là hướng đối tượng và Java 8bổ sung một số chức năng của lập trình hàm! Khi nào nên sử dụng thì bạn cần tìm hiểu thêm về các mô hình lập trình để nắm vững thêm. Điềm cải thiện quan trọng nhất của lập trình hàm so với thủ tục đó là không bị dính hiệu ứng lề (side effect), blog trên đề cập rất rõ, do đó nó rất phù hợp với các hệ thống song song.

Một thống kê gần đây về tính ổn định, lỗi trong phát triển phần mềm: Ngôn ngữ static (java, c#) thường ít dính lỗi hơn ngôn ngữ dynamic (python, ruby), ngôn ngữ lập trình hàm thường ít lỗi hơn ngôn ngữ hướng thủ tục và thuần hướng đối tượng thông thường. (Link tới bài báo: http://macbeth.cs.ucdavis.edu/lang_study.pdf , nếu không truy cập được có thể xem tạm tại google cache http://webcache.googleusercontent.com/search?q=cache:0EticyDacHgJ:macbeth.cs.ucdavis.edu/lang_study.pdf+&cd=1&hl=en&ct=clnk)

Mai Anh Dũng viết 19:23 ngày 30/09/2018

Đồng ý với @Itachi_Citus, Đạt sửa lại title.

Một thống kê gần đây về tính ổn định, lỗi trong phát triển phần mềm: Ngôn ngữ static (java, c#) thường ít dính lỗi hơn ngôn ngữ dynamic (python, ruby), ngôn ngữ lập trình hàm thường ít lỗi hơn ngôn ngữ hướng thủ tục và thuần hướng đối tượng thông thường.

Bổ sung thêm cái link tới thống kê luôn @Itachi_Citus.


Cá nhân Đạt đã thử học Haskell thì thấy cú pháp cũng gọn, nhưng tư duy của ngôn ngữ dạng này nó hơi ngược so với những gì mình được học ở các ngôn ngữ static như C.

Thành Phạm viết 19:18 ngày 30/09/2018

Nó là mô hình lập trình hàm (functional programming paradigm)

Hôm trước em có đọc một bài viết về ngôn ngữ Erlang cũng bảo nó là lập trình hàm, cái này đặc biệt là không có vòng lặp , và nó bá ở lĩnh vực Game online, hoặc những phần mềm cần độ “chịu đựng cao”

Mai Anh Dũng viết 19:13 ngày 30/09/2018

Erlang hỗ trợ concurrent, đặc biệt hữu ích đối với các ứng dụng yêu cầu phục vụ nhiều người dùng một lúc. Telecom là lĩnh vực đầu tiên mà nó được áp dụng. Ở VN có công ty D.E.K viết Erlang đấy. Đạt có bạn làm Erlang, để Đạt hỏi xem họ có nhận xét gì không.

Itachi Citus viết 19:17 ngày 30/09/2018

Bổ sung thêm cái link tới thống kê luôn @Itachi_Citus.

Em đọc báo gần đây nhớ vậy, không biết có kiếm lại được bài báo đó không, để em thử
Được rồi á anh, lần sau em cẩn thận hơn :p.

Huy Le viết 19:14 ngày 30/09/2018

Cái nào cũng tốt Hiện giờ thì mình kết hợp sử dụng OOP cùng với Functional Programming cũng như Functional Reactive Programming trong 1 chương trình.

Mai Anh Dũng viết 19:12 ngày 30/09/2018

Dùng nhiều ngôn ngữ khác nhau hả @huyle?

Huy Le viết 19:18 ngày 30/09/2018

À không, mình dùng Objective-C là ngôn ngữ OOP.

  • Cấu trúc backend của App theo OOP

  • Functional thì mình xử lý ở các Array thôi, vì mình cũng chưa làm nhiều về functional, qua Swift làm tiện hơn Objective-C.

  • Còn Functional Reactive Programming (FRP) là dựa trên framework ReactiveCocoa của Github, các thành phần View, Layout thì mình xử lý bằng dạng này nó sẽ nhanh và đơn giản hơn.

viết 19:23 ngày 30/09/2018

Còn Functional Reactive Programming (FRP) là dựa trên framework ReactiveCocoa của Github, các thành phần View, Layout thì mình xử lý bằng dạng này nó sẽ nhanh và đơn giản hơn.

Cái này có hỗ trợ được IOS 7.0 ko?

Mr. July viết 19:13 ngày 30/09/2018

Thực ra mình lập topic này để tham khảo mọi người về mặt thực tế sử dụng trong từng lĩnh vực cụ thể của 2 mô hình lập trình phổ biến hiện nay là OOP và functional programming, nhưng thu được về lại được nhiều kiến thức khá tổng quát.
Cảm ơn mọi người nhiều, cũng khó mà chỉ ra được cụ thể nên dùng cái nào trong việc nào, vì thực tế mình cũng thấy kết hợp là chính.

Huy Le viết 19:21 ngày 30/09/2018

iOS7.0 bạn tham khảo ReactiveCocoa 2.x nhé https://github.com/ReactiveCocoa/ReactiveCocoa
Bản 3.x thì đang beta và sử dụng cho Swift

Ưu điểm của ReactiveCocoa là bạn sẽ remove khoảng 50% code bạn sử dụng rút ngắn thời gian, làm rất là nhanh, đặc biệt là những behavior của View càng phức tạp, càng nhiều state thì thấy càng hiệu quả.

Khuyết điểm: Khó khăn khi học lúc đầu, vì nó không phải đơn giản là 1 framework, nó sẽ thay đổi hoàn toàn mind set khi bạn lập trình. Không phải suy nghĩ theo hướng Object nữa.

Bạn có thể tham khảo ở 1 số blog:

yalantis.com

Reactive Programming on Objective-C

Languages constantly change and evolve with time due to new technology appearing, modern requirements or just a wish to bring new air into coding experience. Reactive programming comprises diverse frameworks, in particular, Reactive Cocoa. You may...


http://www.sprynthesis.com/2014/12/06/reactivecocoa-mvvm-introduction/
NSHipster – 18 Feb 13

ReactiveCocoa

Breaking from a tradition of covering Apple APIs exclusively, this edition of NSHipster will look at an open source project that exemplifies a brave new era of open source contribution to Objective-C: ReactiveCocoa.


http://www.teehanlax.com/blog/getting-started-with-reactivecocoa/

Nếu bạn cảm thấy có hứng thú học, thì cứ đọc mấy cái block trên trước rồi có thể liên hệ mình.

P/S: Hiện giờ thì nếu viết app mới thì mình không support 7.0, vì khi làm xong app, release thì 9.0 chuẩn bị ra rồi Mình chỉ support 2 version mới nhất

Mai Anh Dũng viết 19:15 ngày 30/09/2018

@huyle Đang sử dụng Swift à, làm vài cái tut về ngôn ngữ này + với Cocoa đi. Nghe rất thú vị.
@ChienCG Hiện nay OOP vẫn phổ biến nhất

Huy Le viết 19:07 ngày 30/09/2018

@ltd: Huy vẫn đang sử dụng Objective-C, vì team vẫn chưa sẵn sàng để làm 1 project bằng Swift, nếu làm dự án tiếp theo thì có lẽ sẽ chuyển dần qua Swift.

Huy không thích làm các hướng dẫn dạng Step by Step như Tut+ hay Raywenderlich.

  • Thứ nhất, các Tut, Article hay Blog về Swift + Cocoa có quá nhiều người làm rồi, cả 1 cộng đồng lớn, giờ đọc còn chưa có thời gian đọc hết
  • Thứ hai, Huy nghĩ các Tut không hẵn là có đường tốt nhất để phát triển kỹ năng lap trình.

Huy nghĩ nguồn tài liệu thì không thiếu, cái mà dev VN và sinh viên VN đang thiếu đó là động lực, hướng đikhả năng tự học.

Kollein Vĩnh viết 19:16 ngày 30/09/2018

Để tương tác nhiều bạn nên viết kiểu OOP
Còn để rộng rãi tiết kiệm hiệu năng viết kiểu FUNCTIONAl
Nhìn thấy rõ vấn đề rồi thực hiện là quan trọng
Bạn đặt cầu hỏi tại sao các ngôn ngữ đều có các Hàm sẵn???
Giả định của bài toán đặt ra yêu cầu gì mà cần phải dùng đến Class?

Dam Ponting viết 19:23 ngày 30/09/2018

I will suggest you to start from OOP (Object Oriented Programming) and then jump to functional programming, Once all your OOP concept gets cleared functional programming will not take much time to learn and implement.

Medium – 25 Aug 17

The Object-Oriented Programming vs Functional Programming debate, in a...

What Hogwarts house do you belong to? Are you team Jacob or team Edward? Mayweather or McGregor? Which house in Game of Thrones do you…

Reading time: 5 min read


https://www.codenewbie.org/blogs/object-oriented-programming-vs-functional-programming
Mobisoft Infotech – 6 Mar 12

iOS Tutorial: Custom Speedometer Control - Mobisoft Infotech

Click to access a detailed iOS tutorial on Custom Speedometer Control. You can download the source code here.


Mobisoft Infotech – 21 Dec 11

Lua Programming Tutorial - Mobisoft Infotech

This tutorial is written for programmers who have prior experience with ‘C Like’ programming languages such as C, C++, Java or Objective-C.Learn more.

Hope above links will help you to understand what i said in better ways.

Bài liên quan
0