Composition(HAS-A Relation) (Java)

Composition kavramını sahiplik ilişkisi olarak türkçeye çevirebiliriz. Örneğin bir bilgisayar anakart, kasa, ram gibi parçalara sahiptir. İç içe objeleri kullanabilmek için güzel bir yöntemdir. Farklı sınıflar bir objeyi oluşturabilir. Bu durumda HAS-A ilişkisini kullanırız.

Monitör sınıfımız olabilir fakat monitör bir bilgisayar değildir. Ya da örneğin bir araba yaparken tekerlek sınıfı bir araba değildir ancak arabanın bir parçasıdır. Bu yüzden arabanın tekerleği vardır şeklinde HAS-A ilişkisi kullanılır.

Yukarıdaki şekilde öğrencinin bir adresi vardır ve adresin de kendi içinde özellikleri vardır.

Main fonksiyonun içinde bir metodu çağırmak için Pc.getMonitor().monitorukapat(); şeklinde bir kullanım örneği verebiliriz.

Aşağıdaki kodlarda bir bilgisayar sınıfı ve CPU sınıfı gözükmekte. Kod çok fazla uzamasın diye diğer sınıfların yazımını da size bırakıyorum. Ancak bilgisayar sınıfında bilgisayarın fazladan ram ve hafıza sınıflarının da olduğunu görebilmekteyiz.

 

public class Computer {
    
    // "HAS A" relation member variables/objects/references
    private CPU cpu;
    private RAM ram;
    private SecondaryStorage storage;

    public Computer() {
        cpu = new CPU();
        ram = new RAM();
        storage = new SecondaryStorage();
    }

    public Computer(CPU cpu, RAM ram, SecondaryStorage storage) {
        this.cpu = cpu;
        this.ram = ram;
        this.storage = storage;
    }

    public CPU getCpu() {
        return cpu;
    }

    public void setCpu(CPU cpu) {
        this.cpu = cpu;
    }

    public RAM getRam() {
        return ram;
    }

    public void setRam(RAM ram) {
        this.ram = ram;
    }

    public SecondaryStorage getStorage() {
        return storage;
    }

    public void setStorage(SecondaryStorage storage) {
        this.storage = storage;
    }
    
    public void printComputerInfo() {
        cpu.printCpuInfo();
        ram.printRamInfo();
        storage.printStorageInfo();
    }
    
}

public class CPU {
    private String brand;
    private String model;
    private float speed;    
    private int generation;

    public CPU() {
        brand = "UNKNOWN";
        model = "UNKNOWN";
        speed = 0.0f;
        generation = 0;
    }

    public CPU(String brand, String model, float speed, int generation) {
        this.brand = brand;
        this.model = model;
        this.speed = speed;
        this.generation = generation;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public float getSpeed() {
        return speed;
    }

    public void setSpeed(float speed) {
        this.speed = speed;
    }

    public int getGeneration() {
        return generation;
    }

    public void setGeneration(int generation) {
        this.generation = generation;
    }
    
    public void printCpuInfo() {
        System.out.println("***** CPU INFO *****");
        System.out.println("CPU Brand : " + brand);
        System.out.println("CPU Model : " + model);
        System.out.println("CPU Speed : " + speed + "GHz");
        System.out.println("CPU Generation : " + generation);
    }
    
    
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir