Şimdi Ara

java nın c#tan farklılıkları üzerine sorular

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
9
Cevap
0
Favori
356
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Selamlar ben nesne tabanlı programlama diline ilk kez c# ile başladım (aslında programlama dillerinede ilk kez c#la başladım başka bir geçmişim yok ) java ya geçmek istedim ve haliyle alışkanlıklar c#ta takılı kaldı şimdi c#ta bildiğim ama javada karşılığını bulamadığım bazı şeyler hakkında siz bilir kişilere bir kaç sorum olacaktı

    1- Struct (bence bunu soracağımı hissettiniz )

    c#ta kullandığım bu yapı nesneleri üzerinden eşitleme yaptığımda sınıflardaki gibi ram üzerindeki referansı değil referans üzerindeki değerle ilgileniyordu böylece bir nesnedeki değişiklik diğer nesneyi etkilemiyordu. Bu yapının java da olmadığını biliyorum ama atasal dilinde olduğuda bi gerçek java yaratıcıları bunu kullanmayı bir sebepten dolayı gerekli görmemişler. neden böyle bir ihtiyaç görmemişler javada anlayamadığım bir neden mi var yoksa aslında javaya eklenmesi beklenen bir özellikmi bu ve ben javanın şuan ki halinde böyle bir yapıyı nasıl kullanabilirim. yani nesneleri birbirine eşitlediğimde bellekteki referansı değil değerleri işleme sokacak bir yöntem varmı?

    2. Operator overloading

    c#ta structlar üzerinde kullandığım bir özellik javada ihtiyacım olduğundan değilde olurda ileride ihtiyacım olduğunda böyle birşeyi nasıl yapabilirim örneğin bir integer ve bir string özelliği olan iki sınıf nesnesini "+" operatörüyle topladığımda integerleri kendi aralarında toplamasını stringleri uç uca eklemesini istiyorum gibi

    3. Delegate

    c#ta bir metoda parametre olarak başka bir metod ekleyebiliyordum. buna javada ihtiyaç duyacağımı hissediyorum belkide ihtiyacım olmayacak javayı tam bilmediğimden böyle hissediyorum velhasıl ihtiyacım olursa javada böyle birşeyi nasıl yapabilirim?

    Bu üç soruyu cevaplarsanız çok müteşekkir olurum hayırlı forumlar.







  • quote:

    Orijinalden alıntı: WolfyGame

    Selamlar ben nesne tabanlı programlama diline ilk kez c# ile başladım (aslında programlama dillerinede ilk kez c#la başladım başka bir geçmişim yok ) java ya geçmek istedim ve haliyle alışkanlıklar c#ta takılı kaldı şimdi c#ta bildiğim ama javada karşılığını bulamadığım bazı şeyler hakkında siz bilir kişilere bir kaç sorum olacaktı

    1- Struct (bence bunu soracağımı hissettiniz )

    c#ta kullandığım bu yapı nesneleri üzerinden eşitleme yaptığımda sınıflardaki gibi ram üzerindeki referansı değil referans üzerindeki değerle ilgileniyordu böylece bir nesnedeki değişiklik diğer nesneyi etkilemiyordu. Bu yapının java da olmadığını biliyorum ama atasal dilinde olduğuda bi gerçek java yaratıcıları bunu kullanmayı bir sebepten dolayı gerekli görmemişler. neden böyle bir ihtiyaç görmemişler javada anlayamadığım bir neden mi var yoksa aslında javaya eklenmesi beklenen bir özellikmi bu ve ben javanın şuan ki halinde böyle bir yapıyı nasıl kullanabilirim. yani nesneleri birbirine eşitlediğimde bellekteki referansı değil değerleri işleme sokacak bir yöntem varmı?

    2. Operator overloading

    c#ta structlar üzerinde kullandığım bir özellik javada ihtiyacım olduğundan değilde olurda ileride ihtiyacım olduğunda böyle birşeyi nasıl yapabilirim örneğin bir integer ve bir string özelliği olan iki sınıf nesnesini "+" operatörüyle topladığımda integerleri kendi aralarında toplamasını stringleri uç uca eklemesini istiyorum gibi

    3. Delegate

    c#ta bir metoda parametre olarak başka bir metod ekleyebiliyordum. buna javada ihtiyaç duyacağımı hissediyorum belkide ihtiyacım olmayacak javayı tam bilmediğimden böyle hissediyorum velhasıl ihtiyacım olursa javada böyle birşeyi nasıl yapabilirim?

    Bu üç soruyu cevaplarsanız çok müteşekkir olurum hayırlı forumlar.

    Struct c ailesiyle gelen mini class gibi takiliyor. Object oriented dilde bence olmasina gerek yok.
    Operator overloading olmamasi bence eksiklik.
    Delegation olmamasi biraz eksiklik. Olmasi durumunda aklima gelen bir olumsuzluk yok, eclipse gibi toollar kosu refactor ederken delegation yapiyor ancak dil destegi ile degil ayni metod ismini wrap ederek yapiyorlar. Bir de delegation bana encapsulation i bozan bir seymis gibi geliyor, yani ben bir isi yapan metodu biliyorsam, bunu yapmasi icin o metodu baska bir yapiya parametre olarak vermemeliyim, islerin nasil yurudugunu bu kadar bilmemeliyim gibi geliyor. Yine de olsa idi bence daha iyi olurdu.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • Mephalay M kullanıcısına yanıt
    Teşekkür ederim cevapladığınız için

    struct meselesinde eklmedikleri gördüğüm an bende kendime "demek ki gerek görülmüyor" demiştim ama yinede bahsettiğim sınıf türünden her hangi iki nesneyi eşitlediğimizde bellek üzerindeki referansa değil direk değere eşitlenmesi hususunu şuanki java8de nasıl yapabilirim gerçekten merak ediyorum

    Integer a = new Integer(50);
    Integer b = new Integer(10);
    a=b;

    dediğimiz anda artık b de yaptığımız her değişiklik aynı zamanda a üzerindede yapılmış olacak bildiğiniz gibi ve ben nerde ne zaman kullanırım hiç bir fikrim olmadan sırf merağımdan b de yaptığım değişikliğin a yı etkilememesini istiyorum.

    Operator overload için farklı alternatifler görüyorum tam anlayamasamda gerçekten java içerisinde bunun hiçbir yolu yokmu yoksa siz olmamasından kastınız c#taki gibi olmamasımıydı

    delegation benim için unity3d programının yeni guileriyle ortaya çıktı açıkçası yeni gui sistemiyle kullanmamızı istedikleri kütüphane çok karmaşıktı bende kendi kütüphanemi oluşturmak istedim. onlar butona tıklandığında çalıştırılmasını istedikleri metodu lambda kullanarak çağırmışlardı ben belki biraz uzun yoldan ama daha iyi anladığım şekliyle delegation kullanarak kendime özgü bir kütüphane geliştirmiştim ileride yine tıpkı böyle birşeyle karşılaşırsam javada bu sorunun nasıl üstesinden gelinebileceğinide gerçekten çok merak ediyorum.




  • WolfyGame W kullanıcısına yanıt
    Struct sisteminin olmaması bence bazı projelerde eksiklik olarak görülebilir bazı durumlarda struct hız kazanmasını sağlar.
    Delegate sisteminin benzerini(neredeyse aynısını) inner class yöntemiyle oluşturabilirsin delegate sistemi bence bu c# ın bir avantajıdır.
    Operator overloadin ise maalesef javada bulunmamakta fakat string için varsayılan bir mekanizma bulunmaktadır yani iki stringi toplama yapabilirsiniz

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • bersgurs kullanıcısına yanıt
    Teşekkürler yani iki mesajdan da anladığım kadarıyla javada primitive tipler dışında nesnelerle bellekteki referanslarla değilde direk değerlerle işlem yapabilmenin bir yolu yok olsaydı illaki şu yolla "uzunda olsa" yapılabilir gibi birşeyle karşılaşırdım.

    İnner class konusuna hakim değilim ama c#ta bir "A" sınıfta yazdığım "a"metoda parametre olarak girdiğim delegate sayesinde diğer başka bir "B"sınıftan bu "a"metodunu çağırınca "B" sınıfından bir "b" metodunu "A sınıfından "a" metodunun içinden çağırabiliyordum. Böyle birşey mümkünse javada o zaman delagate sistemi yok diyemeyiz sadece delagate keywordu yok diyebiliriz :)

    Operator overloadı da zaten c#ta sadece structlarda kullanıyordum örneğin koordinat yapısı iki koordinat yapısını + ile topla dediğimde derleyici böyle bir operatör tanımlı değil diyordu bende o operatoru o structta x'leri toplayıp X e , y'leri toplayıp Y ye aktarıyordum. javada struct olmasada bu işlem sınıflarada uygulanabilir pek tabiki ama böyle bir operator overloading mekanizması yoksa nasıl uygulanır bilemem internette operator yerine static metodların kullanılması daha performanslı olduğu için javada buna ihtiyaç duyulmayacağı söyleniyordu.




  • WolfyGame W kullanıcısına yanıt
    Static metotların daha performanslı oldugu doğrudur fakat operator aşırı yüklemesi kodun okunabilirliğine büyük katkı yaptığıda bir gerçek performansın önemli olmadığı heryerde operator overloading bence mantıklı bir neden. Diğer dediğinden de hiçbir şey anlamadım maalesef sanırım event sistemi ile ilgili birşey olsa gerek event lerde birer delegate olduğu için javada farklı yollar ile halledilmek zorunda.

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • WolfyGame W kullanıcısına yanıt
    Eger yanlis anlamiyorsam sen object clone u istiyorsun.
    Yani:
    Integer a = new Integer(50);
    Integer b = new Integer(10);
    a=b;

    Yaptigin zaman Java nin senin icin a degeri icin yeni bir new Integer(10) olusturmasini istiyorsun. Boylece b.degistir() gibi bir degisiklik yaparsan a nin degismemesini istiyorsun. Ancak bunun icin Java'nin senin icin her kompleks objenin deep copy yapmayi bilmesi gerekiyor. Yani Integer icin bu olabilir ama diyelim ki 8 parametre isteyen ComplexObject() diye bir class'in var. a=b ; yaptiginda memory 'de Ayni ComplexObject() in yeniden yaratilmasi gerek bu da bana gore gereksiz, ustelik kullanisli da degil. Yani ben a=b; yaptiktan sonra b.degisiklik() metodu cagirirsam a'nin da degismesini bekliyorum zaten : )

    Java 'da Cloneable interface'ini implement edersin, a = b yerine, a = b.clone() dersin ve boylece ayni obje'den yeni bir tane generate edersin ve farkli olduklarini garanti altina alirsin. Bu dedigin olayin, yani Integer icin belki basittir cunku orada basit bir boxing-unboxing olayi var, C# da da oldugunu dusunmuyorum, yanilma ihtimalim olabilir zira cok hakim degilim C# a.

    Genel olarak programlama dillerinde bir objenin referansini almayi basaran farkli pointer lar ayni memory blogu uzerinde degisiklik yapabilirler, yapabilmeliler de zaten istedigimiz sey de bu.

    a = new Integer(50); dedikten sonra a=b; dememiz halinde a nin point ettigi objeyi degistiriyoruz. Artik new Integer(10) a point ediyor. Eski point ettigi objeyi yenisiyle esitle gibi bir seyden bahsetmiyoruz. Eger boyle bir implementasyon olacaksa, sadece a'nin point ettigi seyi degistirmek gerektigi zaman yeni bir syntax kullanmak zorunda olacagiz bu da Javanin uzerine kuruldugu temel ile celisen bir istek bana gore. Bilmem anlatabildim mi, pointerlar soz konusu oldugunda her zaman olayin daha sofistike hale gelmesi gibi bir problem ortaya cikiyor : )




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • Mephalay M kullanıcısına yanıt
    Kesinlikle anladım sağol çok teşekkür ederim istediğim olay bir interface işleminden geçiyormuş demekki
  • Konu benim adımada baya faydalı oldu konu sahibinede cevaplayanlarada teişekkürler
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.