Merhaba, Amacım kendi oluşturduğum basit bir sınıf içerisinden bu sınıftan oluşan bir liste veren bir metot hazırlamak, belki yaklaşım yanlış olabilir, daha iyi bir yol varsa dinlemeye hazırım.

Konuyu küçük bir örnekle anlatmaya çalışayım. Kendi geliştirdiğimiz küçük bir meyve sınıfımız olduğunu düşünelim kodları söyle;

class Meyve 
{
    private int kodu;
    private String adi;
    private double fiyati;

    public Meyve(int kodu, String adi, double fiyati)
    {
        this.kodu = kodu;
        this.adi = adi;
        this.fiyati = fiyati;
    }

    public String Adi()
    {
        return adi;
    }

    public List<Meyve> verMeyveListesi()
    {
        return null;
    }
}

Normalde program içinde elindeki bir çok meyveyi bir listeye doldurup kullanabiliyorum. Benim istediğim mevyeListesi metodunuda bu sınıf içine taşıyabilmek. Umarım anlatabilmişimdir. Yazdığım örneğin çalışan hali aşağıda.

package javaapplication3;

import java.util.List;
import java.util.ArrayList;

public class JavaApplication3 
{
    public static void main(String[] args) 
    {
        Meyve meyve1 = new Meyve(101, "Çilek", 3.50);
        Meyve meyve2 = new Meyve(102, "Elma", 2.00);
        Meyve meyve3 = new Meyve(103, "Portakal", 1.50);
        Meyve meyve4 = new Meyve(104, "Muz", 4.50);
        Meyve meyve5 = new Meyve(105, "Kavun", 2.50);

        List<Meyve> meyveSepeti = new ArrayList();
        meyveSepeti.add(meyve1);
        meyveSepeti.add(meyve2);
        meyveSepeti.add(meyve3);
        meyveSepeti.add(meyve4);
        meyveSepeti.add(meyve5);

        for (Meyve meyve : meyveSepeti)
        {
            System.out.println("Meyve -> " + meyve.Adi());
        }
    }
}

class Meyve 
{
    private int kodu;
    private String adi;
    private double fiyati;

    public Meyve(int kodu, String adi, double fiyati)
    {
        this.kodu = kodu;
        this.adi = adi;
        this.fiyati = fiyati;
    }

    public String Adi()
    {
        return adi;
    }

    public List<Meyve> verMeyveListesi()
    {
        return null;
    }
}

soruldu: 08 Nis '14, 02:02

zafer's gravatar image

zafer
41591019
cevap kabul oranı: 11%

değiştirildi: 09 Haz '14, 15:39

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

1

Şunu da ekleyeyim, Meyve ver metod'u meyveye ait bir şey değildir. Yazılım presiplerine uygun bir yaklaşım değil SoC prensibine ters bir durum. Veri yapısı şeklinde düşünürseniz aşağıdaki örnek sizin istediğinizi verebilir.

 public class Meyve {

private int kodu;
        private String adi;
        private double fiyati;
        private Meyve meyve;

public int getKodu() {
            return kodu;
        }

public void setKodu(int kodu) {
            this.kodu = kodu;
        }

public String getAdi() {
            return adi;
        }

public void setAdi(String adi) {
            this.adi = adi;
        }

public double getFiyati() {
            return fiyati;
        }

public void setFiyati(double fiyati) {
            this.fiyati = fiyati;
        }

public Meyve getMeyve() {
            return meyve;
        }

public void setMeyve(Meyve meyve) {
            this.meyve = meyve;
        }

}

public class Test {
    public static void main(String[] args) {
        Meyve birinci = new Meyve();
        birinci.setAdi("Elma");
        birinci.setFiyati(12);
        birinci.setKodu(1233);

Meyve ikinci = new Meyve();
        ikinci.setAdi("Kiraz");
        ikinci.setFiyati(13);
        ikinci.setKodu(333);
        birinci.setMeyve(ikinci);

Meyve ucuncu = new Meyve();
        ucuncu.setAdi("Armut");
        ucuncu.setFiyati(15);
        ucuncu.setKodu(141);
        ikinci.setMeyve(ucuncu);

Meyve meyve = birinci;
        while(meyve != null){
            System.out.println("Meyve -> " + meyve.getAdi());
            meyve = meyve.getMeyve();
        }
    }
}
(08 Nis '14, 02:51) molgun molgun's gravatar image

Merhaba,

Yazdıklarına hak veriyorum molgun, ve kavramların ayrılmasınında (Separation of Concerns) doğru olduğunu düşünüyorum.

Burada benim merak ettiğim meyve listesini neden meyve sınıfından ayırmalıyız. Neticede meyve liteside meyve nesnelerinden oluşan bir topluluk değil mi ve temel de meyve nesneleri ile direk olarak alakali değil mi?

(08 Nis '14, 05:43) zafer zafer's gravatar image

Olayın anlaşılması için şöyle örnek vereyim. Çünkü meyveyi meyve vermez. Meyveyi ağaç verir. Bunun gibi düşünmek lazım. Yani meyve ağacın kontrolündedir. MVC modeline göre, Meyve bir modeldir yani bir objeyi veya bir varlığı temsil eder. Bir meyvenin görevi besin depolamaktır ağaçta ne kadar meyve olduğunu bilmez. Veya diyelimki senin sepetinde meyveler var. Bu sefer Sepet sınıfı yazarsın içinde bir meyve listesi olur. Sonra getMeyveList dersin sepetteki meyveleri çekersin. Bu arada bunu yorum olarak yazman daha doğru olur cevap yerine :)

(08 Nis '14, 05:50) molgun molgun's gravatar image

Ben senin mesajına cevap vermek istemiştim. Sanırım yanlış oldu. Evet meyve ve ağacı birlikte düşünmeye başlayınca olay daha netleşti. Güzel anlatım ve örnek için teşekkürler.

O zaman meyve isminde basit bir sınıf tasarlayıp, örneğin MeyveSepeti isimli bir sınıf daha oluşturup liste işlemini bu sınıf üzerinden yapmak en doğrusu görünüyor. Peki örneğin meyveleriKamyonaYukle() gibi bir metodun MeyveSepeti sınıfında yer alması doğru olurmu? Yoksa meyve sepetini nakliye isimli başka bir sınıfamı göndermek daha doğru olur?

(08 Nis '14, 06:17) zafer zafer's gravatar image

Dostum, aynı soruyu tekrar sormuşsun. Yazılım içinde oldukça güzel bir diğe prensip, loose coupling, high cohesion : bu prensip derki, bir sınıf kendine ait işleri yapsın fakat diğer sınıflar ile bağımlılığıda oldukça esnek olsun.

Senin meyveleri kamyona yükleme işi, meyve sepetinemi ait? Meyveleri kim yükler sepete? Sorunun cevabı işi yapacak sınıfı sana verir. Nakliye dersin, A dersin B dersin önemi yok ;)

Ricam bu konu anlaşılmışsa, arkadaşımızın cevabını kabul edelim ve diğer sorular için başlık açalım.

Keyifli kodlamalar.

(08 Nis '14, 07:11) Turgay Can Turgay%20Can's gravatar image

Meyvenin diğer meyveler ile entegre olması ayrı bir class yazılmadan da yapılabilir. Ama bu yöntem de içerde list tutmaktan farklı bir mantık var ve işini görür mü bilmiyorum. Tree(ağaç)yapısını kullanabilirsin. Zannederim yapıyı biliyorsundur. Her meyve diğer bir meyveye bağlanarak bir arada durabilirler. Ve bu durumda meyveleri bir arada tutmak için ağaca ihtiyaç olmayacaktır. Meyve sınıfı içerisine bir meyve nesnesi tanımlarsan böylece bütün meyveleri bağlayabilirsin. Ama stackoverflowa düşme ihtimalinde var. Denemeye değer düşüncesindeyim. Ayrıca, ağaç meyve benzetmesi gerçekten başarılı.

(08 Nis '14, 08:27) osmanraifgunes osmanraifgunes's gravatar image

sanalism, sorunun elbette bir çok çözüm yolu bulunabilir. Ancak yukarıda bahsedilen prensipler içeriside kalmak ve bunun neden böyle olması gerektiğini anlamak benim için önemliydi.

J2EE, buranın bu kadar mekanik olduğunu bilmiyordum. Bazen bazı konuları kavramak için üzerinden tekrar tekrar konuşmak veya başka görüşlerle konuyu zenginleştirmek gerekebilir. Benim bildiğim forumlar insanların fikir ve bilgi paylaşabildiği alanlardır. Lütfen bir takım kaygılardan dolayı bunları heder etmeyelim.

(08 Nis '14, 10:37) zafer zafer's gravatar image
1

Selam @zafer, Forum mantığından uzak bir platform niteliğinde burası. Zenginliğin daha düzenli ve tertipli olması için, hedef noktası spesifikleştirilmeli. Basit mantıkla, bu soru için istenilen cevap alınmışsa bu soru burada kapanmıştır. Bunun genel olarak, sonucu nihayetine ulaşmış demektir.

Eğer farklı bir soru sorarsanız ve cevap alırsanız böylelikle zenginlik sağlanmaya devam eder bunun yanındada tutarlı ve düzenli içerik oluşmuş olur.

Kompleksite ve karmaşık zenginlik aslında aranılan cevabı bulmayı güçleştirir. Bu karışıklık içinde bu kural basit çözüm oluşturuyor.

(08 Nis '14, 13:11) Turgay Can Turgay%20Can's gravatar image
8 yorumdan 5 tanesi gösteriliyor hepsini göster
Bu soruya ilk cevap veren sen ol!
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×6

Soruldu: 08 Nis '14, 02:02

Görüntüleme: 2,522 kez

Son güncelleme: 09 Haz '14, 15:39

powered by BitNami OSQA