C ++ “yöntemleri” (“üye işlevleri” ne karşı) hakkında konuşmak ne kadar yanlış?


19

Ben anlıyorum ona göre C ++ Spec orada "yöntemi" diye bir şey olduğunu ve bazı (birçok? En?) C ++ programcıları Java-izm olmak "yöntemi" düşünün. Öte yandan, bir C ++ forumunda bile insanlar seğirmeden yöntemler hakkında konuşuyor gibi görünüyor. Bu terminoloji ile ilgili bilinen sözleşmeleri veya ortak uygulamaları arıyorum.

Hem C ++ hem de Java sürümleri olan bir API belgeliyorum. Geliştiriciler aslında sınıf ve yöntem / üye-işlev adlarını ikisi arasında aynı tutuyorlardı, muhtemelen taşıma ve testte uygunluk için. Bu nedenle, bu API'lar hakkında belgelenmesi gereken şeylerden bazıları dil seçiminin “üstünde” dur; Foos ve Barlar hakkında genel olarak baz () ve mumble () ... yöntemleri ile konuşabilmem gerekir mi?

Java programcılarının doğal olarak değerlendireceği yöntemler hakkında konuşursam, C ++ programcıları muhtemelen anlayacaktır, ancak bazıları yanlış olduğunu düşünecektir. Sorum şu: pratikte bu ne kadar iğrenç ? C ++ üyesi işlevler, C ++ 'ya özgü işlevlerin aksine "genel OOP" bağlamlarında geleneksel olarak nasıl bahsedilir? Her iki dil için de yanlış olmayan bir şekilde üye işlevleri hakkında konuşmanın daha iyi bir yolu var mı? ("Üye işlevleri" biraz ayrıntılıdır.)

Bu bir görüş anketi değildir; Bu sorunu ele almak için gerçek sözleşmeler veya ortak uygulamalar olup olmadığını belirlemeye çalışıyorum .

Bu sorunun farkındayım , ama genel olarak OOP ile ilgili ve belirli diller hakkında soru sormuyor.


Bunu sormadan önce yardım merkezini okudum ve etiketler listesini inceledim. Bunu burada sorarak yanlış bir şey mi yaptım?
Monica Cellio

Sahip olduğunuz yakın oy, öncelikle bunun iyi olabileceği görüşüne dayanmaktadır. Bunun, herhangi bir SE sitesinde ne kadar iyi çalışabileceğinden emin değilsiniz. Bir kişi bunun tamamen iyi olduğunu düşünebilir ve diğeri bunun Q'da tarif ettiğiniz gibi korkunç bir terminoloji ihlali olduğunu düşünecektir - bu nedenle bu nispeten
fikirli bir

2
OOP metotları konsepti C ++ 'da “sanal üye fonksiyonu” ile en temiz şekilde eşleşir, fakat aynı şeydir. Java tarafında yöntem değil işlev olan “statik yöntemler” gibi daha kötü terminoloji vardır. Dilden bağımsız “yöntem” kelimesini kullanmaya devam edin, herkes ne demek istediğinizi anlayacaktır. Birisi C ++ 'ın yöntemleri olmadığı konusunda ısrar ederse, bu aslında yanlış ve inanılmaz derecede rahatsız edici bisiklet dökümü.
amon

1
@JimmyHoffa bu daha iyi mi?
Monica Cellio

3
Onları çapraz dil API belgenizde yöntem olarak adlandırmanız yeterlidir. Giriş metnine "Program dili agnostik kalmaya çalışmak için bu API belgeleri C ++ üye işlevlerine başvurmak için terim yöntemini kullanacaktır" gibi bir ifade ekleyebilirsiniz.
Brandin

Yanıtlar:


11

Belgelerin giriş kısmına neden bir açıklama (sorunuzda yaptığınız gibi) neden katılmıyorsunuz, örneğin Sözleşmeler bölümü? Daha sonra, dokümantasyonda kullanılan "yöntem" teriminin, dokümantasyon tüm uygulamalar için geçerli olduğundan, genel metot (Java), üye fonksiyonu (C ++), anlam anlamında olduğunu açıklayabilirsiniz.


Yaptığım şey bu ve şimdiye kadar insanlar onunla iyi görünüyor. Önerin için teşekkürler.
Monica Cellio

15

Bunun için idam edilmeyeceksin.

C ++ dünyasındaki şikâyet, bilgiçlik doğruluğundan biri değil: belirsizliklerden biri. Hangi alanda bahsettiğinize bağlı olarak , vahşi doğada o kadar çok farklı "yöntem" var , bir grup daha sonra yanlış anlamaları önlemek için standart terminolojiye bağlı kalmayı tercih ediyoruz. Bu, kabaca "statik / [statik olmayan] [saf] sanal / [sanal olmayan] üye / [serbest] işlevi" anlamına gelir.

Bunun yerine belgelerinize "yöntem" yazarsanız, bazı C ++ programcıları neden bahsettiğinizin gerçekten net olmadığından şikayet edebilir veya bu C ++ kuralına aşina değilseniz , başkalarının ne eksik olduğunu düşünebilirsiniz.

Ama eminim milyonlarca profesyonel C ++ programcısı var. Bu büyük bir dünya.

Bunun için idam edilmeyeceksin.


3

Eiffel onlara Rutinler veya Özellikler diyor, C ++ onlara Üye İşlevleri diyor ve (neredeyse) tüm bilgi işlem geçmişinde yaratılan diğer tüm OO dilleri, C ++ onlara Yöntemler demeden önce ve sonra , bu nedenle son terim genellikle tarafından anlaşılmalıdır. C ++ (ve Eiffel) programcıları, gerçekten Simula, Smalltalk, Self, Objective-C, Newspeak, Java, C #, VB.NET, PHP, Python, Ruby, ECMAScript / JavaScript, Scala, CoffeeScript,…


Mesele şu ki, bu alanlarda genellikle farklı şeyler ifade ediyorlar. Bu yüzden OP'ler etki alanına özgü terminolojiye bağlı kalmanın daha iyi olup olmadığını ve doğru cevabın neden "evet" olduğunu soruyor ...
Monica ile Hafiflik Yarışları

Az önce sınıfları bile olmayan JavaScript'e atıfta bulunduğumu kanıtladığımı fark ettim (OO prototip tabanlı). Peki JavaScript yöntemleri başka yerlerdeki yöntemlerle nasıl aynı olabilir? İddia ettiğiniz karşılıklı anlaşılabilirlik aslında mevcut değil.
Monica ile

Prototip tabanlı OOP fark etmez. OOP, nesnelerin mesajlar yoluyla iletişim kurduğu (birbirine istek gönderen sunucular gibi) ve yöntem, belirli bir nesnenin belirli bir mesaja cevap verme şeklini (yöntem) ifade eder. Prototip OO sadece yöntemlerin kalıtsal olarak nasıl değişebileceği konusunda bir fark yaratır. Daha büyük bir fark yaratan şey, yuva tabanlı (Python gibi) ve mesaj tabanlı (Ruby gibi) OOP ve geç veya erken bağlantınız olup olmadığıdır.
saolof
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.