Bir bileşen ile modül arasında bir fark var mı


30

Modül ve bileşen terimlerinde küçük bir sorunum var Aklımda, bir modül sadece iyi tanımlanmış bir arayüz üzerinden erişilebilen, paketlenmiş sınıflardır. Tüm uygulama detaylarını gizlerler ve tekrar kullanılabilirler. Modüller bağlı oldukları modülleri tanımlar.

Bileşenlerin farkı nedir? Bazı kitaplarda araştırdım, ancak bileşenlerin açıklaması çok benzer.


5
Hangi dil? Hangi mimarlık? Modül tanımınız işe yarıyor. Bir bileşeni GUI'ye söyleyebilecek bir şeye takılan bir bileşen olarak düşünüyorum, bir modül GUI'ye bağlanamıyor; GUI yapıları tarafından kaydırılır / desteklenirse modüller bir GUI'de çalışabilir.
Guy Coder,

3
Bkz. Sınıfa Karşı Bileşene Karşı Kontrol Not: Yanıtlayamıyorum çünkü sorunuzun dili veya mimariden söz etmediği.
Guy Coder,

Evet, bu durumda, genel olarak tanımları düşünüyorum
Mirco,

2
Puanların peşinde değilim, daha geçerli bir cevap aldığınızdan emin olduktan sonra. Bunu geçerli bulursanız, sorunuzu düzenlemekten çekinmeyin ve bağlantıyı tercih ettiğiniz cevap olarak ekleyin. Bir cevap olarak göndermeyeceğim çünkü soru çok genel ve belirli bir cevap başkalarının başını belaya sokabilir.
Guy Coder,

Evet, sorumun çok genel olduğunu düşünüyorum ve cevap gerçekten kullanılan dile veya ortama bağlı. Nerver, bu terimler için çok farklı tanımların olduğunu düşündü
Mirco

Yanıtlar:


12

Terimler benzer. Genelde bir "modül" ün "bileşen" den daha büyük olduğunu düşünüyorum. Bir bileşen, muhtemelen genel amaçlı, genellikle kapsam bakımından nispeten küçük olan tek bir parçadır. Örnekler arasında UI kontrolleri ve zamanlayıcılar, iş parçacığı asistanları vb. Gibi "arka plan bileşenleri" bulunur. Bir "modül" bütünün daha büyük bir parçasıdır, genellikle dış müdahalesi olmadan karmaşık bir birincil işlev yapan bir şeydir. E-posta veya veritabanı ile entegrasyon sağlayan bir uygulamanın sınıf kütüphanesi olabilir. Bir ERP / muhasebe platformunun "Alacak Modülü" gibi tek bir paket uygulaması kadar büyük olabilir.

Ayrıca “modüller” in daha değiştirilebilir olduğunu düşünüyorum. Bileşenler, yenileri eskisi gibi görünmekle birlikte bir şekilde "daha iyi" olmakla birlikte çoğaltılabilir, ancak tipik olarak sistemin tasarımı bir bileşene (veya o bileşenin çok özel davranışına uymak için tasarlanmış bir yerine koymaya) daha katı bir şekilde bağlıdır. Bilgisayar dışı terimlerle, bir "bileşen" bir arabanın motor bloğu olabilir; Motorun içini tamir edebilir, tamamen bile değiştirebilirsiniz, ancak arabanın bir motora sahip olması ve arabanın "stok" motorunu değiştirmek için boyutlar, ağırlık, montaj noktaları vb. gibi çok katı özelliklere uygun olması gerekir. aslında sahip olmak için tasarlanmıştı. Öte yandan bir "modül", "plug-in" -tipi işlevini ifade eder; Bu modül her ne ise, Sistemin diğer parçaları üzerinde en az etkiyle modülün çıkarılabileceği ve / veya değiştirilebileceği hafif bir şekilde iletilebilir. Bir evin elektrik sistemi oldukça modüler; 120V15A fişli herhangi bir şeyi herhangi bir 120V15A prize takabilir ve taktığınız şeyin çalışmasını bekleyebilirsiniz. Ev kabloları, sistemin herhangi bir dalındaki güç taleplerinin güvenli sınırları aşmaması koşuluyla, prize takılan yerlere daha az önem veremez.


4
Tüm cevaplar bana gerçekten yardımcı oldu, ancak yalnızca birini kabul edebilirim. Bu yüzden KeithS'i kabul ediyorum çünkü en düşük temsilcisi var
Mirco

12

Modülün genel anlamı, belirli bir programa bağlı olmayan bir yeniden kullanılabilir kod grubudur. Bu, bütün bir GUI kitaplık kümesinden tek bir sınıfa kadar her şey olabilir.

Bileşenin genel anlamı, belirli bir arayüz kullanarak ikame edilebilirliği ilave kısıtlamaya sahip bir modüldür. Bir GUI Widget bileşeni oluşturursanız, arama kodunda özel bir şey yapmak zorunda kalmadan bir Widget'ın beklendiği herhangi bir yerde kullanılabilir. Genel olarak bu modüllerin böyle bir kısıtlaması yoktur. Qt ve GTK + modüllerdir, ancak kodda hatırı sayılır bir iş yapmadan birini diğerine çeviremem, bu yüzden bileşen değiller.

Birçok çerçeve veya programlama dili, terimleri çok daha spesifik bir şey ifade etmek için kullanır; bu yüzden insanlar bağlam hakkında soruyorlar. Bir şeyler genel anlamda bir bileşen olabilir, ancak çok özel bir IComponentarayüz uygulamıyorsa , bağlamda bir bileşen olarak kabul edilmeyebilir. Python'da, modulebir importkomutu kullanarak elde edebileceğiniz bir şeyin özel bir anlamı vardır . Genellikle insanlar bu içeriğe özgü anlamları ifade eder.


Tanımınız gayet iyi, ancak sizin örneğiniz (Qt vs. GTK +) hatalı. (Ben de bunlardan hiçbirine bir bileşen demeyeceğimi kabul ediyorum). IMHO Qt ve GTK + her ikisi de yüzlerce küçük bileşen içerir, böylece çok geniş bir arabirim koleksiyonu ortaya çıkar. Birinin hiç onlardan biri için bir arayüz uyumlu bir parça oluşturmak için zaman yatırım yapacağını çok olası kılan ve bu hiçbir bileşenleridir nedeni IMHO olduğunu. Ancak, iki yazılım parçası birbiriyle değiştirilemediğinden, yalnızca ortak bir arayüze sahip bileşenler olarak, bunları bileşen olarak diskalifiye etmez.
Doktor Brown,

8

Belirli dillerden, çerçevelerden ve kendi yorumlarından soyutlayacaksak, soyut yazılım ayrıntı düzeyi hiyerarşisi şudur:

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

Sade ve basit, Ürün bağlı fonksiyonel modüllerin çalışan bir koleksiyonudur.

  • modül

Adından da anlaşılacağı gibi, bir Modülün motivasyonu modülerliktir. Hangi iddiaların aksine, gerçekten kodların yeniden kullanımı anlamına gelmez. Gerçekten yeniden kullanılamayan ve tasarlanmadıkları hiçbir şeye uymayan birçok modül var.

Uygulanmasını ve sürdürülmesini çok daha kolay hale getiren farklı yazılım katmanlarını ayırmak önemlidir ve ön uç gibi farklı bir GUI çerçevesine yeniden uygulama ihtiyacı duyulursa modülerlik, kolay ve güvenli bir şekilde, kırılmadan gerçekleşmesini sağlar. her yerde kod.

Bir modül, tümü modül gereksinimleri tarafından tanımlandığı gibi ortak bir amaca hizmet eden bir bileşen koleksiyonunu kapsar. Bir modül kendi kendine yeten ve eksiksiz olmalı ve kendi başına kullanılamaz olsa da, uyumlu bir uygulama ile birlikte çalışabilmelidir.

  • Bileşen

Taneciklilik açısından Bileşen, Modül ve Nesne arasında oturur. Bir bileşenin amacı, bir amaca özel bir birim oluşturmak için genel amaçlı nesneler koleksiyonunu bir araya getirmektir.

Adından da anlaşılacağı gibi, Modül'den farklı olarak, Bileşen "kendi kendine yeten" değildir, daha büyük bir işlevsel bütünün bir parçasıdır.

  • Nesne

Nesneler, bileşenlerin daha küçük yapı taşlarıdır. Nesneler, ilkellerin koleksiyonlarıdır ve daha belirli bir amaç için daha evrensel, daha evrensel bir seviyeye hizmet etmek için onları bir araya getirirler.

  • İlkel

İlkel, yazılım geliştirme ayrıntı düzeyi en küçük, en basit ve en düşük seviyedir. Her ne kadar çoğu dilin kendi ek "birinci sınıf vatandaşları" olmasına rağmen, temelde sadece tamsayı ve gerçek sayılar ve fonksiyonlar / operatörler var.

İlkellerle yapabileceğiniz çok az şey var ve aynı zamanda, pratik olarak her şeyi başarabileceğiniz kadar düşük bir seviyede. Doğrudan ilkellerle çalışırken sadece çok, çok ayrıntılı, delice karmaşık ve imkansızca sıkıcı.

  • Bütün bunların amacı ne?

Yukarıda da belirtildiği gibi, doğrudan ilkellerle çalışmak son derece kötü bir fikirdir. Sadece günümüzün yazılım geliştirmesi için yapması imkansız derecede karmaşık, yavaş ve sıkıcı olduğu için değil, aynı zamanda test ve bakım için son derece engelleyici ve engelleyicidir.

Tüm bu kavramsal parçaların yazılım geliştirmeye dahil edilmesi onu daha kolay, daha hızlı, daha basit ve daha güvenli hale getirir. Çok yönlü ve evrensel atomların ne olduğuna bakılmaksızın, atomlardan bir ev yapmazsınız. Bu boşuna bir egzersiz olurdu. Atomların ilkellerin, kil senin nesnen, tuğlaların senin bileşenlerin, duvarların, zeminin ve çatının modüllerin olduğu, bir araya toplandıkları son ürünü gösterirler.

İnsanlar hiçbir şey icat etmiyor, sadece evrende zaten var olan şeyleri keşfediyoruz ve sonra onları kopyalayıp hayatlarımıza uyguluyoruz. Aynı taneciklilik hiyerarşisi, evrenin kendisine, atomlardan ve hatta aşağıdan organik moleküllere, proteinlere, dokulara, organlara, organizmalara ve yukarısına kadar içseldir, gerçekliğin kendisi de aynı prensibi yerine getirir - küçük, basit, sınırlı fonksiyonlar ve soyut şeyleri birleştirerek daha büyük, daha karmaşık, daha işlevsel şeyler ve daha fazla amaca özgü şeyler.

  • Terminoloji uyarıları

Teknik olarak hepsi "nesneler", hepsi de yazılım geliştirmenin "bileşenleri", hepsi bir araya gelebilecek kadar "modüler", hepsi üretildikleri gibi "ürünler". ..

Bu terminoloji veya terminoloji ile ilgili değildir, şeyleri yukarı ve aşağı ölçeklemenin yaratıcılığın ve üretkenliğin çeşitli yönlerini nasıl etkilediği ile ilgilidir. Ve sadece tüm bu farklı seviyeleri kullanmanın değil, aynı zamanda yanlış bir hedefe ulaşmaya çalışmamanın önemi değil, aynı zamanda sadece üretken olabilir.


1
Modül sürümünüz bir paket gibi geliyor.
JM Becker

1
@JMBecker gerçekten değil, ayrıntı bakımından bir paket, bir nesne koleksiyonundan bağımsız bir ürüne kadar her şeyden oluşabilir. Paketleme, kod yeniden kullanımı için ayrıntı düzeyi zincirindeki bir bağlantıdan daha kolay bir şeydir.
dtech

3

Bu, içeriğinize bağlıdır. Modül, bazı dillerde “paket” veya “assembly” gibi bazı dillerde DLL seviye gruplarına başvurmak için zaten kullanılıyor. Bileşen, COM geliştirmelerinde ve oyun geliştirmede yaygın olan Varlık Temelli Bileşen öğeleri için kullanılır.

Genel olarak mimari terimlerle, modül ve bileşen her ikisi de iyi tanımlanmış bir arayüzün arkasındaki bazı kod paketlerine gönderme eğilimindedir. Genel olarak, modül daha büyük paketlere gönderme eğilimindedir. Genellikle bir dizi arayüz vardır ve modül kendi başına durma eğilimindedir.

Öte yandan, bileşenler genellikle tam bir sınıftan daha küçük kod demetleri olma eğilimindedir. Adlarıyla, daha büyük bir şeyin bileşeni olma eğilimindedirler. Bazen bu uygulamanın kendisidir, ancak sınıf tasarımında kompozisyonun artan kullanımı ile daha sık daha büyük bir nesnenin bileşeni anlamına gelir. Bileşenler için iyi tanımlanmış arayüzler, uygulamanın bileşenleri birbiriyle değiştirmesine izin verme eğilimindedir. Modüller bu değiş tokuşa sahip olmama eğilimindedir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.