Perbedaan antara Asosiasi dan Ketergantungan?

91

Dalam diagram kelas UML, apa perbedaan antara hubungan asosiasi dan hubungan ketergantungan?

Dari apa yang saya tahu, sebuah asosiasi adalah hubungan yang lebih kuat daripada ketergantungan, tetapi saya tidak yakin bagaimana itu lebih kuat.

Contoh apa pun akan lebih dari diterima :)

Charlie
sumber

Jawaban:

50

Apa perbedaan antara Dependensi dan Asosiasi? :

Secara umum, Anda menggunakan asosiasi untuk merepresentasikan sesuatu seperti bidang di kelas. Tautannya selalu ada, sehingga Anda selalu dapat meminta pesanan untuk pelanggannya. Ini sebenarnya tidak perlu berupa bidang, jika Anda memodelkan dari perspektif antarmuka yang lebih, itu hanya dapat menunjukkan keberadaan metode yang akan mengembalikan pelanggan pesanan.

Mengutip dari UML Distilled edisi ke-3 (sekarang baru saja keluar) "ketergantungan ada antara dua elemen jika perubahan pada definisi satu elemen (pemasok) dapat menyebabkan perubahan pada elemen lainnya (klien)". Ini adalah hubungan yang sangat kabur dan umum, itulah sebabnya UML memiliki sejumlah stereotip untuk berbagai bentuk ketergantungan. Dalam istilah kode, hal-hal seperti menamai tipe parameter dan membuat objek dalam variabel sementara menyiratkan ketergantungan.

...

Mitch Wheat
sumber
6
Mengapa menjawab, ketika Martin melakukannya jauh lebih baik untuk Anda ?! +1
Randolpho
5
Belum jelas bagi saya, tetapi satu hal yang saya mengerti adalah bahwa dependensi agak 'lebih lemah' daripada asosiasi. Tampaknya asosiasi adalah bagian dari dependensi, meskipun menurut saya setidaknya, ketergantungan adalah kata yang lebih kuat daripada asosiasi. Itu mungkin yang menjadi sumber kebingungan.
Felipe
Artikel itu mengatakannya dengan baik. Faktanya itu sejalan dengan pikiran saya. Jadi menarik beberapa poin darinya di sini: (1) Anda tidak ingin menampilkan setiap ketergantungan pada diagram UML - jumlahnya terlalu banyak. Anda harus sangat selektif dan hanya menunjukkan hal-hal yang penting untuk apa pun yang Anda komunikasikan. (2) Jika ada asosiasi antara dua kelas, ada juga ketergantungan. Asosiasi menyiratkannya, seperti halnya generalisasi. Jadi jelas untuk menyimpulkan ketergantungan adalah hubungan superset dari hubungan UML lainnya
Mahesha999
1
Penjelasan Anda terlalu jauh dari contoh dunia nyata, sehingga tidak memberikan pemahaman yang jelas bahkan kepada insinyur perangkat lunak.
softninja
@ softninja: maksud Anda Anda tidak mengerti. Semua orang tampaknya menganggapnya dapat diterima. Oh dan terima kasih atas downvote-nya.
Mitch Wheat
74

Sebuah asosiasi hampir selalu menyiratkan bahwa satu objek memiliki objek lain sebagai bidang / properti / atribut (terminologi berbeda).

Sebuah ketergantungan biasanya (tetapi tidak selalu) menyiratkan bahwa obyek menerima objek lain sebagai parameter metode, instantiates, atau menggunakan objek lain. Sebuah ketergantungan sangat banyak tersirat oleh asosiasi .

Randolpho
sumber
Ini adalah cara yang paling dekat dengan cara saya biasanya memutuskan masalahnya. Jika kelas lain berkontribusi secara substantif terhadap keadaan atau perilaku kelas saya, maka itu adalah asosiasi. Dengan demikian kelas strategi akan menjadi asosiasi meskipun mereka tidak memiliki status internal sendiri. Jika kelas lain hanya menyediakan layanan ke kelas saya maka itu adalah ketergantungan.
Kecebong Mengerikan
49

Dalam istilah OOP:

Asosiasi -> A memiliki objek C (sebagai variabel anggota)

Ketergantungan -> A referensi B (sebagai parameter metode atau tipe kembalian)

public class A {
    private C c;
    public void myMethod(B b) {
        b.callMethod();
    }
}

Ada juga jawaban yang lebih detail .

Ahmad Abdelghany
sumber
1
Agregasi @Naruto_Uzumaki adalah relasi seluruh bagian. A Playlist & Song misalnya. Silakan periksa jawaban saya yang lain untuk perbedaan yang lebih luas antara Asosiasi, Ketergantungan dan Agregasi stackoverflow.com/a/34069760/1998422
Ahmad Abdelghany
Dari buku Distilled UML oleh Martin Fowler : "Dengan kelas, dependensi ada karena berbagai alasan: Satu kelas mengirim pesan ke kelas lain; satu kelas memiliki kelas lain sebagai bagian dari datanya; satu kelas menyebutkan kelas lain sebagai parameter operasi"
Ahmad Abdelghany
24

Dependensi seperti ketika Anda mendefinisikan metode yang mengambil String (di Java, C #, karena string adalah objek di dalamnya) sebagai parameter, maka kelas Anda bergantung pada kelas String.

Asosiasi adalah seperti saat Anda mendeklarasikan string sebagai atribut di kelas Anda. maka kode Anda dikaitkan dengan kelas string.

String name = null //: is a association.
Shrikant Mali
sumber
"Asosiasi adalah seperti ketika Anda mendeklarasikan string sebagai atribut di kelas Anda, kemudian kode Anda dikaitkan dengan kelas string." Jika demikian, lalu apa perbedaan antara asosiasi dan komposisi?
Dean P
16

Ketergantungan - Perubahan dalam kelas mempengaruhi perubahan dalam kelas tergantung itu. Contoh- Lingkaran bergantung pada Bentuk (antarmuka). Jika Anda mengubah Bentuk, itu juga mempengaruhi Lingkaran. Jadi, Circle memiliki ketergantungan pada Shape.

Asosiasi - berarti ada hubungan tertentu antara 2 objek

(satu-satu, satu-banyak, banyak-banyak)

Asosiasi terdiri dari 2 jenis-

  1. Komposisi
  2. Pengumpulan

    1) Komposisi - Asosiasi atau hubungan yang lebih kuat antara 2 objek. Anda membuat objek kelas B di dalam kelas A lain

 public class A {
       B b;
       public void setB(){
         this.b= new B();
        }
     }

Jika kita menghapus kelas A, B tidak akan ada (objek B dibuat di dalam A saja).

Contoh lain -Tubuh & Hati. Hati tidak bisa ada di luar Tubuh.

2) Agregasi - jenis Asosiasi yang lebih lemah antara 2 objek.

public class A {       
             B b;
             public void setB(B b_ref){
                 this.b= b_ref;   
                /* object B is passed as an argument of a method */
              }
   }

Bahkan jika Anda menghapus kelas A, B akan ada di luar (B dibuat di luar dan diteruskan ke Kelas A)

Contoh lain dari ini- Man & Car. Manusia memiliki Mobil tetapi Manusia & Mobil ada secara mandiri.

Deen John
sumber
Ketergantungan adalah lingkup lokal, dimana Asosiasi adalah ruang lingkup kelas.
dimpiax
10

Di sini: "Asosiasi vs. Ketergantungan vs. Agregasi vs. Komposisi" , Anda memiliki mecum vade yang hebat dengan diagram kelas uml dan cuplikan kode. Penulis memberi kita daftar hubungan: Asosiasi, Ketergantungan, Agregasi, Komposisi di satu tempat.

Raf
sumber
1
Saya suka definisi ini. Asosiasi adalah: Saya (kelas yang mereferensikan kelas lain) hanya memegang referensi ke suatu objek, saya tidak menggunakannya dan anggota kelas itu tidak menarik bagi saya. Ketergantungannya adalah: Saya menggunakan beberapa anggota, jadi jika kelas yang direferensikan berubah, itu dapat berdampak pada saya. Jika saya melakukannya dengan benar maka itu mudah dimengerti!
robsch
1
Pertanyaan pertama yang muncul di benak saya ketika saya membaca komentar Anda: dalam kasus asosiasi - mengapa seseorang memegang referensi ke suatu objek dan tidak menggunakannya? Maksud Anda seperti referensi hanya bidang, hanya dikembalikan jika klien ingin tahu tentang referensi?
H.Rabiee
3

Ketergantungan sangat umum dan menurunkan kompleksitas adalah tentang mengurangi ketergantungan sebanyak mungkin.

Asosiasi adalah ketergantungan yang kuat (statis). Agregasi dan Komposisi bahkan lebih kuat.

programmernovice
sumber
-1

Asosiasi adalah ketika satu objek hanya memiliki tautan ke yang lain dan tidak menggunakan metode objek relasional. Untuk ruby ​​misalnya

class User
  has_one :profile
end

user = User.first
profile = user.profile
profile.sign_out

Artinya Anda bisa mendapatkan objek profil dari pengguna tetapi pengguna tidak menggunakan metode profil di dalam dirinya (tidak memiliki ketergantungan pada antarmuka Profil).

Ketergantungan berarti Pengguna memiliki tautan ke objek lain dan memanggil metode objek itu di dalam dirinya

class User
  has_one :profile

  def personal_info
    profile.info
  end
end

Di sini jika metode info Profil akan diubah atau diganti namanya, kelas Pengguna Tergantung kami juga perlu diubah.

stopanko
sumber
Bisakah Anda menunjukkan dari mana Anda mendapatkan informasi ini? Saya tidak berpikir ada aturan dalam spesifikasi UML yang mengatakan bahwa satu sisi asosiasi tidak menggunakan metode sisi lain. Secara umum, sebuah asosiasi adalah hubungan yang lebih kuat daripada ketergantungan.
Geert Bellekens
@ GeertBellekens Seperti yang saya pahami, Dependensi perlu menunjukkan bahwa perubahan dalam kelas pemasok akan memerlukan perubahan dalam kelas klien. Dalam pemrograman ini hanya jika Anda menggunakan antarmuka pemasok (atau Tunjukkan alasan lain). Dari sudut pandang Anda tidak ada perbedaan dalam panah ini. Mereka tidak menunjuk pada implementasi kode dan hanya konseptual.
stopanko
Saya khawatir itu adalah pemahaman pribadi Anda, tetapi tidak seperti yang dijelaskan dalam spesifikasi UML. Dari UML 2.5 § 7.8.4.1: Ketergantungan adalah Hubungan yang menandakan bahwa satu Elemen model atau sekumpulan Elemen model membutuhkan Elemen model lain untuk spesifikasi atau implementasinya. Ini berarti bahwa semantik lengkap dari ClientElement bergantung secara semantik atau struktural pada definisi Elemen pemasok.
Geert Bellekens