Tôi thường nghe nói rằng các đối tượng chưa được phân phối về mặt tái sử dụng mã. Bạn có đồng ý không? Nếu bạn tin rằng họ không có, tại sao không?
Tôi thường nghe nói rằng các đối tượng chưa được phân phối về mặt tái sử dụng mã. Bạn có đồng ý không? Nếu bạn tin rằng họ không có, tại sao không?
Câu trả lời:
Không, không nhất thiết.
Các đối tượng cung cấp ngữ nghĩa tốt hơn, tổ chức mã / chức năng và, có thể, dễ sử dụng.
Các thư viện được thiết kế tốt sẽ cung cấp dựa trên lời hứa về việc tái sử dụng mã, chứ không phải các đối tượng.
Thành thật mà nói tôi không chắc chắn liệu "tái sử dụng mã" có thực sự là thứ mà bất kỳ ai cũng theo đuổi (hoặc ít nhất, nên là sau). Triết lý của tôi là "các thành phần phần mềm", có nghĩa là khả năng bảo trì tốt hơn thông qua các giao diện tốt và tránh các khớp nối không cần thiết. "Tái sử dụng mã" là một trong những điều đôi khi rơi ra khỏi điều đó - mã trùng lặp không cần thiết là một dấu hiệu cho thấy bạn đã tổ chức mọi thứ sai cách và tất nhiên đó là một nỗi đau để duy trì.
Để trả lời câu hỏi trực tiếp hơn một chút, có một bộ công cụ khá tốt để tránh lặp lại chính mình: thừa kế, đặc điểm, ủy quyền, chức năng bậc cao, v.v. Trong số đó, mọi người có xu hướng nhầm lẫn giữa thừa kế với OO nói chung - và họ cũng có xu hướng lạm dụng nó một chút, nếu bạn hỏi tôi. Có lẽ đó là nơi mà một số rung cảm "OO hút" đến từ: tìm sự kế thừa bị mắc kẹt ở nơi không có quyền tự nhiên :)
Không, "đối tượng" chưa tạo mã sử dụng lại dễ dàng hơn hoặc phổ biến hơn. Những mối quan tâm tương tự ngăn không cho mã được sử dụng lại trong một chương trình mô-đun (thiết kế, kiểm tra và ghi lại API mục đích chung đòi hỏi nhiều nỗ lực trước mắt hơn là viết một thói quen một lần và tất cả các giao dịch có thể là chủ của không - logic dự định được sử dụng lại có thể không được tối ưu hóa tốt cho các mục đích sử dụng mà nó thực sự hướng tới) áp dụng cho các chương trình OO, với mối quan tâm thêm rằng một mô hình đối tượng được thiết kế kém có thể cản trở việc tái sử dụng nếu không sử dụng lại mã.
OO là một sự trừu tượng hóa hữu ích cho nhiều vấn đề, nhưng hãy cảnh giác với sự cường điệu của thập niên 80-90: nó không giải quyết được các vấn đề cơ bản trong giao dịch của chúng tôi nhiều hơn là làm bánh quế cho bạn khi bạn ngủ.
Tôi không mong đợi TẤT CẢ các đối tượng được sử dụng lại nhưng chúng tôi có rất nhiều đối tượng mà chúng tôi sử dụng lại trên nhiều dự án khác nhau. Chúng tôi cũng có các đối tượng chỉ được sử dụng lại trên một dự án. Chúng ta thường sẽ sử dụng cùng một đối tượng kinh doanh (hoặc đối tượng truyền dữ liệu) cũng như các đối tượng logic kinh doanh từ ứng dụng máy tính để bàn Click-Again, ứng dụng web và ứng dụng điện thoại cho cùng một dự án.
Bạn đã nghe nói rằng OO không cung cấp khi tái sử dụng ở đâu? Và lý do là gì? Có lẽ thiết kế của các đối tượng của họ đã buộc họ vào tình huống đó ...
Một số lập trình viên sẽ sao chép và dán bằng bất kỳ ngôn ngữ và phong cách nào.
Các lập trình viên thực sự giỏi có thể tránh hầu hết các bản sao và dán bằng gần như bất kỳ ngôn ngữ nào.
Tôi thấy các mẫu OO có xu hướng khuyến khích tái sử dụng. Tôi đã thấy mã Java được viết theo kiểu không phải OO (trong đó dữ liệu được tách ra khỏi mã do ORM nhảm nhí) và việc sử dụng lại thực sự rất tồi tệ - nhưng trong OO, các lập trình viên tương tự đã thiết kế tốt hơn ( và tái sử dụng).
Ngoài ra, trong trường hợp chúng tôi sử dụng các mẫu không oo hoặc oo chống patters như setters / getters, switch statement, lớp bên trong ẩn danh, các hàm lớn và giống như tôi đã thấy việc sử dụng lại mã đi xuống và luồn lách đi lên ... đáng kể.
ps. Tôi biết mọi người sẽ có vấn đề với đoạn trước, vì vậy tôi sẽ giải thích một chút.
Setters và getters gây ra các vấn đề OO vì chúng cho phép bạn hoạt động trên các thành viên của một đối tượng (một đối tượng nên thao túng các thành viên OWN của nó) Điều này phân phối mã hoạt động trên lớp của bạn trong các lớp khác yêu cầu bạn sao chép chức năng xung quanh setter / getter . Điều này cũng áp dụng cho Thuộc tính - chỉ vì Thuộc tính dễ dàng hơn không làm cho chúng "Tốt" trong mọi tình huống.
Mã trong các lớp bên trong Ẩn danh hoàn toàn không thể được sử dụng lại và mọi người quên rằng nhiều thứ (như người nghe) có thể và nên là các lớp đầy đủ - điều này cũng áp dụng cho việc đóng cửa! Nếu bạn đã sử dụng một lớp bên trong ẩn danh để triển khai một cái gì đó giống như người nghe, thì nhiều khả năng bạn chỉ cần sao chép và dán bản thực hiện của mình hơn là trích xuất mã vào một phương thức hoặc thay vào đó là lớp riêng. Đóng cửa cũng có thể cải thiện khả năng sử dụng lại - chỉ phụ thuộc vào cách bạn sử dụng chúng.
Trong nhiều trường hợp, các tính năng có sẵn cho bạn định hình cách bạn cấu trúc mã của mình. OO thậm chí còn mạnh mẽ hơn khi giúp bạn hình dung tất cả mã của mình và cách nó tương tác, nhưng đó là một câu hỏi khác.
Các đối tượng không có khả năng cung cấp tái sử dụng mã nhiều hơn so với cầu thang hoặc thiết bị thể dục khác có thể giảm cân. Các nhà phát triển phải được thúc đẩy để sử dụng các công cụ đúng cách.
Khi các nhóm phần mềm đặt giá trị cao hơn cho việc sử dụng lại mã đã kiểm tra so với việc giữ tất cả các chi tiết trong đầu, bạn sẽ thấy các đối tượng và phương thức chi tiết hơn rất nhiều và do đó sử dụng lại nhiều mã hơn.
OOP cung cấp cho bạn nhiều cách hơn để sử dụng lại mã
Không có viên đạn bạc
về những gì bạn đặt vào nó, và những gì bạn mong đợi được đáp lại!
Đúng. Lập trình hướng đối tượng tốt thúc đẩy phân tách các mối quan tâm, khớp nối thấp, độ gắn kết cao và ẩn thông tin. Những điều này là rất quan trọng đối với mã tái sử dụng.
Tôi cho rằng lợi ích chính của OOP là tính mô đun và khả năng sửa đổi, thay vì sử dụng lại, nhưng đó là một câu hỏi khác.
Vâng, họ làm, khả năng mở rộng (kế thừa) từ một lớp rõ ràng siêu hạng góp phần tái sử dụng mã, tôi không chắc làm thế nào bất cứ ai có thể tranh luận khác. Bạn có thể chỉ cần mở rộng một lớp và ghi đè một phương thức, trong khi sử dụng phần còn lại từ siêu lớp, nếu điều này không hỗ trợ trong việc sử dụng lại mã thì tôi không biết đó là gì
Nếu đó là họ đã thực hiện theo lời hứa của họ về việc tái sử dụng mã cho đến nay? Có, nếu các chương trình được viết bằng OOP trong tâm trí áp dụng các mẫu thiết kế một cách khôn ngoan. Mặt khác, chủ yếu là không. Nhưng nhìn vào sự phổ biến của các chương trình không tầm thường quy mô lớn mà các hệ thống Adobe, Google và tương tự viết bằng C ++ hoặc Java hoặc các ngôn ngữ OOP khác, tôi sẽ nói rằng OOP còn một chặng đường dài trước khi nó bị loại bỏ. Thời gian đó sẽ phù hợp hơn nhiều để đặt câu hỏi này và có thể giúp cung cấp công việc mặt đất cho một mô hình mới.