Soru Özel statik yöntemleri kullanma [duplicate]


Bu sorunun zaten bir cevabı var:

Kullanarak hakkında ne düşünüyorsun özel statik yöntemler?

Şahsen ben bir statik özel yöntem statik olmayan herhangi bir alan alanına erişim gerektirmediği sürece.

Ama bu uygulamanın OOP ilkelerini ihlal ettiğini duydum.

Düzenleme: Performansı değil, görünümden yola çıkarak stil merak ediyorum.


32
2018-03-26 12:21


Menşei


Teşekkürler. Onu bulamadı. - Andrey Vityuk


Cevaplar:


bir private static Metodu kendi başına OOP'yi ihlal etmemektedir, ancak bu alanlara çok fazla ihtiyaç duyduğunuzda, örnek alanlara ihtiyaç duymayan (ve yapamaz) bir OO yolunda programlama yapmıyorsunuz, çünkü “nesne” ima eder. Bu durumdaki durum + işlemleri birlikte tanımlanır. Herhangi bir devlete ihtiyaç duymazlarsa, neden bu yöntemleri bu sınıfa koyuyorsunuz?

(*) = Prensipte, Java'daki sınıf düzeyi görünürlüğü nedeniyle, bir sınıfta statik bir yöntem vardır o sınıfın bir nesnenin örnek alanlarına erişim, örneğin:

class Test
{
  int field = 123;

  private static void accessInstance(Test test)
  {
    System.out.println(test.field);
  }
}

Referansa bir örneğe geçmeniz gerekir (this Tabii ki, tabii ki, tabii ki, örnek yöntemlerini taklit ediyorsun. Sadece bütünlük için bunu söylüyorum.


36
2018-03-26 12:44



Güzel nokta. Statik yöntemleri içermek için bir karşıt argüman uyum için olurdu, ama eğer çok fazla varsa, sınıfın niyetlerini aştığını gösterebilir. - Aram Kocharyan


Yukarıda belirtildiği gibi, tekrar kullanılan mantığı düzenlemek ve tekrarlanan kodu azaltmak / ortadan kaldırmak için özel statik yöntemler genellikle yararlıdır. Bu tartışmada performanstan hiç bahsetmediğime şaşırdım. Renaud Waldura'nın 'Finalde Son Sözü':

(Not, özel statik yöntemler kesin olarak sonlandırılmıştır)

"Son bir yöntem yalnızca bildirim sınıfında uygulandığından, bir aramayı son bir yönteme dinamik olarak göndermeye gerek yoktur ve bunun yerine statik başlatma kullanılabilir. Derleyici, yönteme doğrudan bir çağrı gönderebilir ve tamamen normal bir şekilde atlayabilir. sanal yöntem çağırma yordamı Bu nedenle, son yöntemler, bir Just-In-Time derleyici veya benzer bir en iyileştirme aracı tarafından inlining için de adaylar. (Unutmayın, özel / statik yöntemler zaten son, bu nedenle her zaman bu optimizasyon için dikkate alınır.) "

Bütün gazeteye göz atın: http://renaud.waldura.com/doc/java/final-keyword.shtml


19
2018-03-26 16:06





özel veya genel bir fark yaratmaz - statik yöntemler iyi, ancak bunları her zaman kullandığınızı fark ederseniz (ve herhangi bir örnek alanına erişemeyen örnek yöntemlerin temelde bu amaç için statik yöntemler olduğu), o zaman muhtemelen tasarımı yeniden düşünmeniz gerekir. Her zaman mümkün değildir, ancak çoğu zaman yöntem, üzerinde çalıştıkları verilerle birlikte kalmalıdır - bu, OOP'un temel fikridir.


3
2018-03-26 12:38





Yaptığınız şeyle ilgili gerçek bir problem görmüyorum, fakat ilk soru, yöntem herhangi bir örnek alanına erişim gerektirmiyorsa, o zaman bu sınıfta ne yapıyor?


2
2018-03-26 12:37



Bazı ortak yöntemlerde giriş parametreleri için belirli denetimleri uygulamanız gerektiğinde bu olabilir. Bir çeşit küçük yardımcı yöntem gibi. - Andrey Vityuk
... ya da statik alanlarla uğraşırken, açıkça = 8-) - Yuval
@Andrey - bu mükemmel bir anlam ifade ediyor. Dediğim gibi, kendimi aynı şeyi yapsam kendime sormam gereken ilk soru. Çoğu zaman bu "yardımcı" yöntemler, başka şeyler için yararlı olabilir ve başka bir sınıfa daha iyi refactored edilir. Ama sonra bazen de değiller. - Eric Petroelje
Ortak yanıtın "özgür fonksiyonlara izin vermeyen bir dil kullanıyorum" olduğunu düşünüyorum. - D.Shawley
Paket özel yaparsanız, bunları da test edebilirsiniz. - Tom Hawtin - tackline


Bu bir tat meselesi, ama nesnenin statik içindeki bir duruma tepki vermeyen yöntemler yapıyorum. Bu şekilde, statik bir işlev benzer işlevlere ihtiyaç duyarsa, kodu yeniden yazmak zorunda kalmam. Bir sıralama işlevi böyle bir durumun iyi bir örneği olabilir.


0
2018-03-26 12:37





Özel statik yöntemler kullanmama eğilimindeyim. Genel statik yöntemleri kullanır ve bunları yeniden tanıtmak için Util sınıflarına gruplandırırım.


0
2018-03-26 12:41



Peki, paylaşıma çok özgü olan yöntemlerle ne yaparsınız? Bazı genel işlevler için yardımcı sınıflara da yöntemler ayırım. - Andrey Vityuk
Urgh. Yöntemleri rasgele gruplama. - Tom Hawtin - tackline


Özel statik yöntemler, örneğin sınıflarının özel statik üyeleri üzerinde çalışabilir. Bu, belirli sınıflara özgü işlemleri kapsüllemek ve birleştirmek için kullanılabilir.

Statik yöntemleri kullanmanın en büyük dezavantajı bence, birinin geçersiz kılma olasılığını ortadan kaldırmasıdır. Java'daki sınıflar, Smalltalk'taki sınıflara benzemediğinden, statik yöntemleri geçersiz kılamazsınız.

Sorunuz özel statik yöntemlerle ilgili olduğundan, geçersiz kılma zaten seçenek dışıdır.

Statik yöntemleri yalnızca yardımcı sınıflar (java.lang.Math gibi) ya da Singleton modeli gibi desenler kullanıldığında kullanıyorum. Bunların hepsi özelden daha yüksek görünürlük gerektirir, çünkü sınıfları tarafından diğerlerine sunulan hizmetleri temsil ederler.

Son düşünce: Bir veya daha fazla özel statik yönteminiz varsa, bunları özel bir yardımcı program sınıfına çıkarmayı ve bunları herkese açık yapmayı düşünün. Daha da iyisi, örnek yöntemlerini yap ve Singleton modelini kullan.


0
2018-03-26 13:28