

Elbette programın tasarım karmaşıklığına (
Merak ettiğim şey,
Miras (
Derlenen sınıflardan oluşturulan
Saygılar.


Bu durumda nesneye yönelik programlama yapmak icin tasarlanmis Java dilini C dilinde oldugu gibi fonksiyon kolleksiyonlari ihtiva eden kod birimleri olusturmak icin kullanmis olursunuz ki bunun icin Java dilini kullanmak zorunda degilsiniz. Siniflari gövdesinde sadece fonksiyon barindiran yapilar olarak görmemek lazim. Siniflar nesneleri olusturmak icin kullanilan sablonlardir. Her nesnenin kendine ait bir ic dünyasi (state) ve dis dünya ile mesajlasmak icin kullandigi metotlari vardir.
Nesneye yönelik programlama yapilabilen dillerde siniflar yapilandirilirken tek sorumluluk prensibi takip edilmelidir (bknz link1, link2). Bu prensipten ne kadar uzaklasirsaniz, kodunu bakimi ve gelistirilmesi o kadar zorlasir.
Java'da daha fazla sinifin olmasi derleme süresini uzatabilir, lakin bu az sinif olusturma yönünde gecerli bir argüman olamaz. Uygulama calisirken siniflar sinif yükleyicileri tarafindan (class loader) hafizaya yüklenir. Cok fazla sinifinizin oldugunu uygulama calisirken ya da siniflar yüklenirken farketmezsiniz. Sadece daha fazla hafiza alanina ihtiyaciniz olur ki bu da megabytelarla ölcülen hafiza alani ihtiyacidir.
Miras bakimi, gelistirilmesi ve test edilmesi zor kod birimlerinin olusmasini destekler. Bunun yerine kompozisyon kullanilmalidir. Burada test edilebilir tasarim hakkinda bir yazim mevcut. Polomorfik yapilar kompleksiteyi artirmakla birlikte, uygulamanin kapali acik prensibine göre degisiklige ugramadan, genisletilebilir yapida olmalarini saglarlar.
Java 7 ye kadar Java hafiza alani (heap) old generation, eden generation ve permanent generation bölümlerinden olusuyordu. Siniflar permanent generation icinde yer alirlar. Cok fazla sinifiniz varsa, permanent generation alani icin daha fazla hafiza alani tahsis etmeniz gerekir. Bunun haricinde siniflarin hafiza yönetimi (garbage collection) üzerinde olumsuz bir etkileri olmaz, cünkü gercek nesnelerden ayridirlar. Java 8 ile G1 garbage collection yönetimi geldi ve saymis oldugum heap dagilimi kaldirildi. Artik siniflarda ana hafiza alanina yer aliyorlar. Bunun performansi nasil etkilediginin incelenmesi gerekiyor.
cevaplandı: 26 Eyl '14, 04:50
özcanacar ♦♦


Bu soruya en iyi cevabı Algoritma Analizi ve Tasarım Şablonları konularında bulabilirsin.
Son olarak da şunu söylemek istiyorum. Bir problemi çözmenin en iyi yolu "böl ve zaptet" yöntemidir. Yani ne kadar çok parçaya ayırırsan geliştirmesi de o kadar kolay olur. Design Pattern'lara uyduğun zaman da karmaşıklık diye bir problemin olmaz. Karmaşıklık spagetti kod yazdığın zaman ortaya çıkar. Problem çözmek az yada çok kod yazmakla alakalı değildir.