Apakah ada perbedaan antara komponen dan modul

31

Saya punya sedikit masalah dengan modul syarat dan komponen. Dalam pikiran saya, modul adalah kelas yang dibundel, yang hanya dapat diakses melalui antarmuka yang terdefinisi dengan baik. Mereka menyembunyikan semua detail implementasi dan dapat digunakan kembali. Modul-modul mendefinisikan modul-modul di mana mereka bergantung.

Apa perbedaan komponen? Saya mencarinya di beberapa buku, tetapi deskripsi komponen sangat mirip.

Mirco
sumber
5
Bahasa apa? Arsitektur yang mana? Definisi modul Anda berfungsi. Saya menganggap komponen sebagai sesuatu yang dihubungkan ke sesuatu untuk mengatakan GUI sementara modul tidak dapat dihubungkan ke GUI; modul dapat bekerja dalam GUI jika dibungkus / didukung oleh konstruksi GUI.
Guy Coder
3
Lihat Kelas vs. Komponen vs. Kontrol Catatan: Saya tidak menjawab karena pertanyaan Anda tidak menyebutkan langauge atau arsitektur.
Guy Coder
Ya, dalam hal ini, saya berpikir tentang definisi secara umum
Mirco
2
Saya tidak mengejar poin, lebih setelah memastikan Anda mendapatkan jawaban yang valid. Jika Anda menemukan ini valid, silakan edit pertanyaan Anda dan tambahkan tautan sebagai jawaban yang Anda inginkan. Saya tidak akan mempostingnya sebagai jawaban karena pertanyaannya terlalu umum dan jawaban spesifik dapat membuat orang lain mendapat masalah.
Guy Coder
Ya, saya pikir pertanyaan saya sangat umum dan jawabannya sangat tergantung pada bahasa atau lingkungan yang digunakan. Nerver mengira ada definisi yang sangat berbeda untuk istilah-istilah ini
Mirco

Jawaban:

12

Istilahnya serupa. Saya biasanya menganggap "modul" lebih besar dari "komponen". Komponen adalah bagian tunggal, biasanya dalam ruang lingkup yang relatif kecil, mungkin untuk tujuan umum. Contohnya termasuk kontrol UI dan "komponen latar belakang" seperti timer, asisten threading dll. "Modul" adalah bagian yang lebih besar dari keseluruhan, biasanya sesuatu yang melakukan fungsi utama yang kompleks tanpa gangguan dari luar. Ini bisa menjadi perpustakaan kelas aplikasi yang menyediakan integrasi dengan email atau database. Ini mungkin sebesar aplikasi tunggal suite, seperti "Modul Piutang Usaha" dari platform ERP / akuntansi.

Saya juga menganggap "modul" lebih bisa dipertukarkan. Komponen dapat direplikasi, dengan yang baru terlihat seperti yang lama tetapi menjadi "lebih baik" dalam beberapa cara, tetapi biasanya desain sistem lebih ketat tergantung pada komponen (atau penggantian yang dirancang agar sesuai dengan perilaku spesifik komponen itu). Dalam istilah non-komputer, "komponen" dapat menjadi blok mesin mobil; Anda dapat bermain-main di dalam mesin, bahkan menggantinya seluruhnya, tetapi mobil harus memiliki mesin, dan itu harus sesuai dengan spesifikasi yang sangat kaku seperti dimensi, berat, titik pemasangan, dll untuk mengganti mesin "stok" di mana mobil pada awalnya dirancang untuk dimiliki. "Modul", di sisi lain, menyiratkan fungsionalitas tipe "plug-in"; apa pun modul itu, itu dapat dikomunikasikan dengan cara yang sedemikian ringan sehingga modul dapat dilepas dan / atau diganti dengan efek minimal pada bagian lain dari sistem. Sistem kelistrikan rumah sangat modular; Anda dapat menyambungkan apa pun dengan colokan 120V15A ke soket 120V15A apa pun dan mengharapkan benda yang Anda gunakan berfungsi. Kabel rumah tidak peduli dengan apa yang terpasang di mana, asalkan tuntutan daya di setiap cabang sistem tidak melebihi batas aman.

KeithS
sumber
4
Semua jawaban benar-benar membantu saya, tetapi saya hanya dapat menerimanya. Jadi saya menerima KeithS karena dia punya perwakilan terendah
Mirco
12

Arti generik dari modul adalah sekelompok kode yang dapat digunakan kembali, tidak terikat pada satu program tertentu. Ini bisa berupa segalanya dari seluruh set pustaka GUI hingga satu kelas.

Arti generik dari komponen adalah modul dengan pembatasan substitusi tambahan menggunakan antarmuka spesifik. Jika Anda membuat komponen Widget GUI, itu dapat digunakan di mana saja sebuah Widget diharapkan, tanpa harus melakukan sesuatu yang istimewa dalam kode panggilan. Modul pada umumnya tidak memiliki batasan seperti itu. Qt dan GTK + adalah modul, tapi saya tidak bisa menukar satu sama lain tanpa kerja keras dalam kode yang memanggilnya, karena itu mereka bukan komponen.

Banyak kerangka kerja atau bahasa pemrograman menggunakan istilah tersebut untuk mengartikan sesuatu yang jauh lebih spesifik, itulah sebabnya orang bertanya tentang konteks. Sesuatu mungkin merupakan komponen dalam arti umum, tetapi jika tidak mengimplementasikan IComponentantarmuka yang sangat spesifik , itu mungkin tidak dianggap sebagai komponen dalam konteks. Dalam python, modulememiliki arti teknis yang sangat spesifik dari sesuatu yang bisa Anda peroleh menggunakan importperintah. Biasanya orang mengacu pada makna khusus konteks ini.

Karl Bielefeldt
sumber
Definisi Anda baik-baik saja, tetapi contoh Anda (Qt vs. GTK +) cacat (meskipun saya setuju bahwa saya tidak akan menyebut salah satu dari mereka komponen juga). IMHO Qt dan GTK + keduanya mengandung ratusan komponen kecil, sehingga menghasilkan koleksi antarmuka yang sangat luas. Itu membuatnya sangat tidak mungkin bahwa seseorang akan pernah menginvestasikan waktu untuk membuat pengganti antarmuka yang kompatibel untuk salah satu dari mereka, dan itulah alasan mengapa mereka tidak ada komponen. Namun, hanya karena dua buah perangkat lunak tidak dapat dipertukarkan tidak mendiskualifikasi mereka sebagai komponen, hanya sebagai komponen dengan antarmuka umum.
Doc Brown
9

Jika kita ingin abstrak dari bahasa tertentu, kerangka kerja dan interpretasinya sendiri, hierarki granularity perangkat lunak abstrak adalah sebagai berikut:

Product - application, library, service
  Module - GUI, core logic, data, etc...
    Component - purpose specific collection of objects
      Object - collection of primitives
        Primitive - numbers, functions, etc...
  • Produk

Polos dan sederhana, Produk adalah kumpulan modul fungsional yang terhubung.

  • Modul

Seperti namanya, motivasi Modul adalah modularitas. Bertentangan dengan apa yang diklaim banyak orang, itu tidak benar-benar menyiratkan penggunaan kembali kode. Ada banyak modul yang tidak benar-benar dapat digunakan kembali, dan tidak cocok dengan apa pun yang tidak dirancang untuk itu.

Adalah penting untuk memisahkan lapisan perangkat lunak yang berbeda, yang membuat perangkat lunak lebih mudah untuk diimplementasikan dan dipelihara, dan jika perlu untuk mengimplementasikan sesuatu seperti ujung depan ke kerangka kerja GUI yang berbeda, modularitas memungkinkan hal itu terjadi dengan cara yang mudah dan aman, tanpa merusak kode di semua tempat.

Modul merangkum kumpulan komponen yang semuanya melayani tujuan yang sama seperti yang didefinisikan oleh persyaratan modul. Modul harus mandiri dan lengkap, dan meskipun tidak benar-benar dapat digunakan sendiri, modul harus dapat bekerja bersama dengan implementasi yang sesuai.

  • Komponen

Dalam hal granularity, Komponen terletak di antara Modul dan Objek. Tujuan suatu komponen adalah untuk mengumpulkan kumpulan objek tujuan umum untuk membentuk unit tujuan tertentu.

Seperti namanya, tidak seperti Modul, Komponen tidak "mandiri", itu adalah bagian dari keseluruhan fungsional yang lebih besar.

  • Obyek

Objek adalah blok bangunan komponen yang lebih kecil. Objek adalah kumpulan primitif dan dipasangkan bersama-sama untuk melayani tingkat yang lebih rendah, lebih universal sementara masih agak spesifik.

  • Primitif

Primitif adalah tingkat granularitas pengembangan perangkat lunak terkecil, paling sederhana dan terendah. Ini pada dasarnya hanya bilangan bulat dan nyata serta fungsi / operator, meskipun sebagian besar bahasa memiliki "warga negara kelas satu" tambahan.

Ada sangat sedikit yang dapat Anda lakukan dengan primitif, dan pada saat yang sama, itu adalah pada tingkat yang sangat rendah sehingga Anda dapat melakukan hampir semua hal dengannya. Itu hanya sangat, sangat verbose, sangat rumit dan tidak mungkin membosankan untuk diselesaikan saat bekerja secara langsung dengan primitif.

  • Apa gunanya semua ini?

Seperti yang telah disebutkan di atas, bekerja dengan primitif secara langsung adalah ide yang sangat buruk. Bukan hanya karena itu sangat rumit, lambat dan membosankan untuk dilakukan untuk pengembangan perangkat lunak modern, tetapi juga sangat mengganggu dan menghalangi untuk pengujian dan pemeliharaan.

Memiliki semua bagian konseptual yang dimasukkan ke dalam pengembangan perangkat lunak membuatnya lebih mudah, lebih cepat, lebih sederhana dan lebih aman. Anda tidak membuat rumah dari atom, terlepas dari seberapa fleksibel dan universalnya atom. Itu akan menjadi latihan sia-sia. Atom Anda adalah primitif Anda, tanah liat adalah objek Anda, batu bata adalah komponen Anda, dinding, lantai dan atap adalah modul Anda, dirakit bersama-sama mereka mewujudkan produk akhir.

Manusia tidak benar-benar menciptakan sesuatu, kita hanya menemukan hal-hal yang sudah ada di alam semesta, dan kemudian menyalin dan menerapkannya dalam kehidupan kita. Hirarki granularitas yang sama intrinsik dengan alam semesta itu sendiri, dari atom dan bahkan di bawah, ke molekul organik, protein, jaringan, organ, organisme dan di atas, realitas itu sendiri mematuhi prinsip yang sama - menggabungkan hal-hal kecil, sederhana, terbatas fungsi dan tujuan abstrak ke dalam lebih besar, lebih kompleks, lebih fungsional, dan lebih spesifik.

  • Terminologi peringatan

Secara teknis mereka semua adalah "objek", mereka semua adalah "komponen" pengembangan perangkat lunak, mereka semua "modular" cukup untuk dapat cocok bersama, mereka semua adalah "produk" dalam arti bahwa mereka telah diproduksi dan sebagainya. ..

Ini bukan tentang terminologi atau nomenklatur, ini tentang bagaimana meningkatkan dan memengaruhi berbagai aspek kreativitas dan produktivitas. Dan tentang pentingnya tidak hanya menggunakan semua level yang berbeda itu, tetapi juga pentingnya tidak berusaha mencapai tujuan pada level yang salah, yang hanya bisa menjadi kontraproduktif.

dtech
sumber
1
Versi modul Anda terdengar seperti sebuah paket.
JM Becker
1
@ JMBecker tidak benar-benar, dalam hal granularity paket dapat terdiri dari apa saja dari kumpulan objek hingga produk mandiri penuh. Pengemasan lebih merupakan hal yang nyaman untuk penggunaan kembali kode daripada tautan dalam rantai granularitas.
dtech
3

Itu tergantung pada konteks Anda. Modul sudah digunakan untuk merujuk pada kelompok level DLL dalam beberapa bahasa, mirip dengan 'paket' atau 'perakitan' dalam bahasa lain. Komponen digunakan untuk hal-hal COM serta hal-hal Komponen Berbasis Entitas yang umum dalam pengembangan game.

Dalam istilah arsitektur umum, modul dan komponen melakukan keduanya cenderung merujuk pada beberapa kumpulan kode di belakang antarmuka yang terdefinisi dengan baik. Secara umum, modul cenderung merujuk pada bundel yang lebih besar. Seringkali ada satu set antarmuka dan modul cenderung mampu berdiri sendiri.

Komponen di sisi lain cenderung berupa kumpulan kode yang lebih kecil, seringkali lebih kecil dari kelas penuh. Dengan nama mereka, mereka cenderung menjadi komponen dari sesuatu yang lebih besar. Kadang-kadang itu adalah aplikasi itu sendiri, tetapi dengan meningkatnya penggunaan komposisi dalam desain kelas, itu lebih sering berarti komponen dari objek yang lebih besar. Antarmuka terdefinisi dengan baik untuk komponen juga cenderung memungkinkan aplikasi untuk saling menukar komponen untuk satu sama lain. Modul cenderung tidak memiliki swapability itu.

Telastyn
sumber