C#/Java Paket Yönetimi. Hangisi Daha Verimli?
-
Aslında soracağım soru biraz sınıflarla ilgili. Package/Namespace olayı aynı mantıkla çalışıyor diye biliyorum. O yüzden onu sormuyorum.
Java 'da kullanacağımız her bir sınıfı içeri alıyoruz.
import java.util.ArrayList; import java.util.LinkedList; import java.util.Vector;
Tek tek sınıf isimleri yazılmayıp, util 'den sonra '*' koysakta Java tarafında önerilmiyor bu. Gereksiz yükleme yaptığı için.
C# ise
using System.Collections;
yazıp bırakırız. Her sınıfı tek tek içeri almayız.
Şimdi bu durumda C# tüm sınıfları içeri aldığından performans kaybı olmuyor mu? C# nasıl performans kaybetmeden yönetiyor bunu?
Veya Java neden C# şeklinde güncellemiyor kendini. Her sınıfı tek tek almak amelelik değil mi?
Bu durumun hikmeti nedir?
Mod not. Kodların düzgün görüntülenmesi için etiketler değiştirildi.
-
Hocam şurada güzel açıklamışlar: http://stackoverflow.com/questions/187453/import-package-vs-import-package-specifictype
Kısaca bir performans kaybı olmamakla beraber bağımlılıkların daha net ve temiz görünmesi için tek tek import edilmesi tercih ediliyor.
Aynı isimdeki classların farklı packagelerde olmasını örnek vermiş birisi ki durumu açıklayan güzel bir örnek bence.
Lightsaber tarafından 26/Ağu/16 23:10 tarihinde düzenlenmiştir -
Sınıfları ekleme şeklin direk olarak verimlilik ile doğrudan bağlantılı değil.
Sonuç olarak tüm dillerde yazılan kodlar binary ve sonrasında assembly, sonunda 1 ve 0 lara dönüşüyor.
Java'da kullanılan sistemin önerilmesinin nedeni şu, eklediğin her sınıfa ait binary oluşturulan projeye eklenir.
Dolayısıyla eğer tüm sınıfı eklersen kullanmadığın binary kısımda projene eklenmiş olacaktır. Ufak çaplı projelerde (ödev, staj vs gibi) tümünü eklemek çok problem yaratmayacaktır.
Ancak profesyonel bir yazılım geliştiriyorken, sadece kullanacağın sınıfları eklemek gerekmektedir. Aksi takdirde oluşan çalıştırılabilir uygulamanın boyutu gereksiz yere büyüyecektir.
-
Java bilmiyorum.Söyleyeceklerim c# için geçerlidir.
Hocam öncelikle sen c# ile uygulama geliştirirken using System.Collections; dediğin zaman sınıfı içeri alma gibi bir durum olmuyor.
Farklı firmalar yada kişiler aynı projede çalışırken sınıf isimleri çakışmasın diye c# dilinde isim alanları (namespaces) diye bir kavram var. Ve ayrıca isim arama diye bir konuda var, buda kendi içinde nitelikli isim arama ve niteliksiz isim arama olarak 2 ye ayrılır.
Sen bir sınıf türünden bildirim yaptığın zaman yani
Sample x; dediğin zaman derleyici burda x değişkenini aramaz ancak Sample sınıfını arayıp bulmak zorundadır.Bildirilen isimler aranmaz, kullanılan isimler aranır. Sen burda kodun tepesine using direktifi ile isim alanını yazdığın zaman derleyici acaba bu Sample sınıfı yukardaki isim alanlarından birinde mi diye bakar.Bulursa sorun yoktur.
İsim alanları mantıksal kavramlardır, soyutlardır.Fiziksel olan seyler .dll uzantılı dinamik kütüphane dosyalarımızdır. .Net yazdığı tüm kodlar için en tepede System isim alanını kullanmıştır.Sen kendi projene bi isim vereceğin için .net te olan bir sınıf adını kullansan bile derleyici .netteki sınıfı System.Sınıfadı olarak degerlendırır. Senın projende ise bu Projeadin.Sınıfadın dır.(Arakodda sınıf adının önüne namespace adı ekleniyor sanırım. )
Performans ile using direktiflerinin bir alakası yok yani hocam bunlar sadece programın derleme aşamasına ilişkin kavramlar.İstersen kullanmayacağın 100 tane using yaz kodun tepesine.
Farklı isim alanlarında bulunan sınıflar fiziksel olarak aynı .dll içinde bulunabilir.Pek çok .net sınıfı System.Core isimli dll de bulunur ama bunların çoğunun ait olduğu namespaceler farklıdır.
Özetle isim alanlarının performansa etkisi olmaz, isim arama da kullanılır ve mantıksal kavramlardır.Soyuttur.Konu uzun ama özet geçmeye çalıştım.
-
Hepinize ayrı ayrı teşekkür ediyorum beyler. Çok sağolun. Yanış biliyormuşum.
Ben performansı etkiliyor diye biliyordum. Ama etkilemiyormuş. En büyük nedeni okunabilirlikmiş. Sonra da programın boyutu...
Tekrar sağolun.