Làm thế nào là sai khi nói về các phương pháp C ++.


19

Tôi hiểu rằng theo đặc tả C ++, không có thứ gọi là "phương thức" và một số (nhiều? Hầu hết?) Các lập trình viên C ++ coi "phương thức" là một phương thức Java. Mặt khác, ngay cả trên một diễn đàn C ++, mọi người dường như nói về các phương thức mà không co giật. Tôi đang tìm kiếm các quy ước đã biết hoặc thực tiễn phổ biến liên quan đến thuật ngữ này.

Tôi đang ghi lại một API có cả phiên bản C ++ và Java. Các nhà phát triển thực sự giữ các tên lớp và phương thức / hàm thành viên giống nhau giữa hai tên, có lẽ là để có kinh nghiệm trong việc chuyển và kiểm tra. Do đó, một số điều cần được ghi lại về các API này nằm ở phía trên "sự lựa chọn ngôn ngữ; Tôi cần có thể nói chung về Foos và Bars, với các phương thức baz () và mumble () ... của họ?

Nếu tôi nói về các phương thức, các lập trình viên Java sẽ coi nó là tự nhiên và, có vẻ như, các lập trình viên C ++ có thể sẽ hiểu nhưng một số người sẽ coi nó là không chính xác. Câu hỏi của tôi là: làm thế nào là khủng khiếp trong thực tế ? Các hàm thành viên C ++ thường được nói đến như thế nào trong bối cảnh "OOP chung", trái ngược với các chức năng cụ thể của C ++? Có cách nào tốt hơn để nói về các chức năng thành viên theo cách không đúng đối với cả hai ngôn ngữ không? ("Chức năng thành viên" là một ít dài dòng.)

Đây không phải là một cuộc khảo sát ý kiến; Tôi đang cố gắng xác định xem có những quy ước thực tế hoặc thông lệ chung để giải quyết vấn đề này không.

Tôi biết câu hỏi này , nhưng nói chung về OOP và không hỏi về các ngôn ngữ cụ thể.


Tôi đã đọc trung tâm trợ giúp và xem lại danh sách thẻ trước khi hỏi điều này. Tôi đã làm điều gì sai bằng cách hỏi điều này ở đây?
Monica Cellio

Cuộc bỏ phiếu chặt chẽ mà bạn có chủ yếu dựa trên ý kiến ​​dựa trên điều này có thể là tốt .. Không chắc chắn điều này có thể hoạt động tốt như thế nào trên bất kỳ trang web SE nào chỉ vì khó có thể nói rằng mọi người sẽ cáu kỉnh với bạn hay không và với biên độ nào được .. Một người có thể nghĩ rằng nó hoàn toàn ổn và một người khác sẽ nghĩ rằng đó là một sự vi phạm thuật ngữ khủng khiếp, giống như bạn mô tả trong Q- bởi vì điều này tương đối là một thứ chỉ có ý kiến
Jimmy Hoffa

2
Khái niệm OOP về các phương thức sẽ ánh xạ rõ ràng nhất tới hàm thành viên ảo ảo trong C ++, nhưng đó là điều tương tự. Có thuật ngữ tồi tệ hơn về phía Java, chẳng hạn như các phương thức tĩnh của Google, không phải là phương thức mà là các chức năng. Chỉ cần tiếp tục sử dụng từ ngữ độc lập với ngôn ngữ, và mọi người sẽ hiểu ý của bạn. Nếu ai đó khăng khăng rằng C ++ không có phương pháp, thì điều đó thực sự sai và việc đạp xe cực kỳ khó chịu.
amon

1
@JimmyHoffa điều này tốt hơn?
Monica Cellio

3
Chỉ cần gọi chúng là các phương thức trong tài liệu API ngôn ngữ chéo của bạn. Bạn có thể bao gồm một cụm từ trong văn bản giới thiệu như "Để cố gắng duy trì ngôn ngữ lập trình, tài liệu API này sẽ sử dụng phương thức thuật ngữ để chỉ các hàm thành viên C ++."
Brandin

Câu trả lời:


11

Tại sao bạn không bao gồm một lời giải thích (rất giống như bạn đã làm trong câu hỏi của bạn) trong phần giới thiệu của tài liệu, ví dụ như phần Công ước ? Sau đó, bạn có thể giải thích rằng thuật ngữ "phương thức", như được sử dụng trong tài liệu của bạn, có nghĩa là theo nghĩa chung của phương thức (Java), hàm thành viên (C ++), ... vì tài liệu này áp dụng cho tất cả các triển khai.


Đây là những gì tôi đã làm, và cho đến nay mọi người dường như ổn với nó. Cám ơn vì sự gợi ý.
Monica Cellio

15

Chà, bạn sẽ không bị xử tử vì nó đâu.

Khiếu nại trong thế giới C ++ không phải là một trong những điều đúng đắn về mặt phạm vi: đó là một sự mơ hồ. Có rất nhiều loại "phương pháp" khác nhau ở nơi hoang dã tùy thuộc vào lĩnh vực bạn đang nói đến, mà một nhóm chúng ta thích bám theo thuật ngữ tiêu chuẩn để tránh hiểu lầm sau này. Điều đó có nghĩa là, đại khái là "hàm tĩnh / [không tĩnh] [thuần] ảo / [không ảo] thành viên / [miễn phí]".

Nếu bạn viết "phương pháp" trong tài liệu của bạn thay vào đó, một số lập trình viên C ++ có thể phàn nàn rằng nó không thực sự rõ ràng những gì bạn đang nói về, hoặc lo lắng rằng nếu bạn không quen thuộc với này C ++ ước, những gì người khác là bạn thiếu?

Nhưng tôi chắc chắn rằng có hàng triệu lập trình viên C ++ chuyên nghiệp, những người mà bản thân họ không biết rằng đây thậm chí là một điều. Đó là một thế giới lớn.

Bạn sẽ không được thực hiện cho nó.


3

Eiffel gọi chúng là Thường trình hoặc Tính năng , C ++ gọi chúng là Hàm thành viên và (hầu như) mọi ngôn ngữ OO khác từng được tạo ra trong toàn bộ lịch sử điện toán, cả trước và sau C ++ đều gọi chúng là Phương thức , do đó, thuật ngữ sau thường được hiểu theo Các lập trình viên C ++ (và Eiffel), trừ khi họ thực sự chưa từng nghe về Simula, Smalltalk, Self, Objective-C, Drameak, Java, C #, VB.NET, PHP, Python, Ruby, ECMAScript / JavaScript, Scala, CoffeeScript,


Ngoại trừ vấn đề là chúng thường có nghĩa là những thứ khác nhau tinh tế trên các miền đó. Đó là lý do tại sao OP hỏi liệu có tốt hơn để tuân theo thuật ngữ dành riêng cho tên miền hay không và tại sao câu trả lời đúng là "có" ...
Cuộc đua nhẹ nhàng với Monica

Chỉ cần nhận ra rằng bạn đã chứng minh quan điểm của tôi bằng cách trích dẫn JavaScript, thậm chí không có các lớp (OO của nó dựa trên nguyên mẫu). Vậy làm thế nào để các phương thức JavaScript có thể giống như các phương thức ở nơi khác? Sự hiểu biết lẫn nhau mà bạn tuyên bố không thực sự tồn tại.
Cuộc đua nhẹ nhàng với Monica

Nguyên mẫu dựa trên OOP không có sự khác biệt. OOP dựa trên khái niệm rằng các đối tượng giao tiếp qua tin nhắn (như các máy chủ gửi yêu cầu cho nhau) và một phương thức đề cập đến cách (phương thức) trong đó bất kỳ đối tượng cụ thể nào trả lời một tin nhắn cụ thể. Nguyên mẫu OO chỉ tạo ra sự khác biệt liên quan đến cách các phương thức có thể được kế thừa. Điều làm nên sự khác biệt lớn hơn sẽ là OOP dựa trên vị trí (như Python) so với dựa trên thông báo (như Ruby) và cho dù bạn có ràng buộc muộn hay sớm.
saolof
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.