Kod yeniden kullanım açısından nesneler teslim edildi mi?


17

Sık sık nesnelerin kodun yeniden kullanımı açısından teslim olmadığını söyledi duydum. Katılıyor musun? Eğer inanmıyorlarsa, neden olmasın?


4
Kimsenin bunu söylediğini hiç duymadım ...
TheLQ

2
@Ben kimsenin söylediğini duyduğuma inanmıyorum , ama okudum.
George Marian

Yeniden kullanılabilirlik, OOP'nin tek avantajı değildir.
Kimse

2
"Kod yeniden kullanım açısından nesneler teslim edildi mi?" -> OOP satış görevlilerinin o gün geri döndüğüne inanıyorsanız (60'ları mı unuttum?)
Steven Evers

Yanıtlar:


18

Hayır, ille de değil.

Nesneler daha iyi anlambilim, kod / işlevsellik organizasyonu ve muhtemelen kullanım kolaylığı sağlar.

İyi tasarlanmış kütüphaneler , nesnelerin kendileri yerine kodun yeniden kullanılması vaadini sunar.


İyi evet. Ancak nesneler, kitaplıklarının yeniden kullanılmasını kolaylaştıran seçenekler sunarak kütüphane tasarımcılarına yardımcı oldu mu? Sahip olduklarını iddia ediyorum ve bu nedenle nesneler daha iyi yeniden kullanım sağladı.
Jules

@ Birinci Kurallar da sadece tartışma uğruna tartışmayı seviyorum. Nesnelerin kitaplık tasarlamayı kolaylaştırmadığını iddia etmem. Düzgün sonuçlara yol açan araçların doğru kullanımı olduğunu savunuyorum.
George Marian

7

Dürüst olmak gerekirse "kod yeniden kullanımı" gerçekten kimse sonra (veya en azından sonra olmalıdır) gerçekten emin değilim. Benim felsefem "yazılım bileşenleri", yani iyi arayüzler sayesinde daha iyi bakım ve gereksiz bağlantıdan kaçınmak. "Kodun yeniden kullanımı" bazen bunun dışında kalan şeylerden biridir - gereksiz yere çoğaltılan kod, şeyleri yanlış bir şekilde düzenlediğinizin ve elbette sürdürülmesi gereken bir işarettir.

Soruyu biraz daha doğrudan cevaplamak için, kendinizi tekrar etmekten kaçınmak için oldukça iyi araçlar koleksiyonu var: miras, özellikler, delegasyon, üst düzey işlevler, vb. Bana sorarsanız, biraz fazla kullanmak eğilimindedirler. Belki de bazı "OO berbat" havasının geldiği yer budur: kalıtımın doğal bir hakkı olmadığı yerde sıkışıp kaldığını bulmak :)


Kodun yeniden kullanılması kesinlikle kod kalitesini feda etmekten kaçınabileceğiniz amaçlanan bir şeydir
Casebash

1
Yine de kodun yeniden kullanımı kendi başına bir amaç değildir. Yeniden kullanım, bağlantı için başka bir kelimedir. Bu nedenle, yeniden kullanıma dikkatle yaklaşmalısınız. Bir çok geliştirici bunu unutuyor gibi görünüyor. Ayrılmış sistemler istiyorlar, ancak geri dönüyorlar ve her yerde var olan sınıfları kullanmaya çalışıyorlar.
Andy

5

Hayır, "nesneler" kod kullanımını daha kolay veya daha yaygın hale getirmedi. Kodun modüler bir programda yeniden kullanılmasını engelleyen aynı kaygılar (genel amaçlı bir API tasarlama, test etme ve belgeleme, bir kerelik bir rutin yazmaktan çok daha fazla çaba gerektirir ve tüm işlemlerin girişi hiçbirinin ustası - yeniden kullanılması amaçlanan mantık, gerçekte konulduğu kullanımlar için iyi optimize edilmemiş olabilir), kötü tasarlanmış bir nesne modelinin başka türlü yeniden kullanılabilir durumun yeniden kullanımını engelleyebileceği endişesi ile OO programlarına başvurun. kodu.

OO, birçok sorun için kullanışlı bir soyutlamadır, ancak '80s-90s yutturmacaya karşı dikkatli olun: uykunuzda waffle yapmaktan çok ticaretimizin temel sorunlarını sihirli bir şekilde çözmez.


5

TÜM nesnelerin yeniden kullanılmasını beklemiyorum ama birçok farklı projede yeniden kullandığımız çok fazla nesnemiz var. Ayrıca tek bir projede yeniden kullanılan nesnelerimiz de var. Aynı proje için aynı iş nesnelerini (veya veri aktarım nesnelerini) ve aynı zamanda bir Click-Once masaüstü uygulamasından, bir web uygulamasından ve bir telefon uygulamasından iş mantığı nesnelerini sık sık tüketeceğiz.

OO'nun yeniden kullanıma sunmadığını nereden duydunuz? Sebep neydi? Belki de nesnelerinin tasarımı onları bu duruma zorladı ...


4
Çeşitli makaleler. Ve kişisel deneyimlerden, bir nesneyi tekrar kullanılabilir hale getirmek hiç de kolay değil
Casebash

3

Bazı Programcılar herhangi bir dilde ve stilde kopyalayıp yapıştıracaktır.

Gerçekten iyi programcılar hemen hemen her dilde kopyalama ve yapıştırma işlemlerini önleyebilir.

OO kalıplarının yeniden kullanımı teşvik etme eğiliminde olduğunu düşünüyorum. (O veri crappy ORM nedeniyle koddan ayrıldı) OO olmayan bir tarzda yazılmış Java kodu gördüm ve yeniden kullanımı gerçekten sefil - ama OO aynı programcılar tasarım daha iyi bir iş yaptı ( ve yeniden kullanın).

Ayrıca ayarlayıcılar / alıcılar, anahtar ifadeleri, anonim iç sınıflar, devasa işlevler ve benzeri gibi oo olmayan desenleri veya oo anti-patters kullandığımız durumlarda, kodun yeniden kullanıldığını ve kazan plakasının önemli ölçüde arttığını gördüm.

ps. İnsanların bir önceki paragrafta problemleri olacağını biliyorum, bu yüzden biraz açıklayacağım.

Ayarlayıcılar ve alıcılar bir nesnenin üyeleri üzerinde çalışmanıza izin verdikleri için OO sorunlarına neden olurlar (bir nesne OWN üyelerini değiştirmelidir) Bu, sınıfınızda çalışan kodu işlevselliği ayarlayıcı / alıcıya kopyalamanızı gerektiren diğer sınıflara dağıtır . Bu, Özellikler için de geçerlidir - Özelliklerin daha kolay olması, onları her durumda "İyi" yapmaz.

Anonim iç sınıflardaki kod hiç yeniden kullanılamaz ve insanlar birçok şeyin (dinleyiciler gibi) tam teşekküllü sınıflar olabileceğini ve olması gerektiğini unuturlar - bu da kapanışlar için geçerlidir! Dinleyici gibi bir şeyi uygulamak için anonim bir iç sınıf kullandıysanız, kodu bir yönteme veya kendi sınıfına ayıklamaktan ziyade uygulamanızı kopyalayıp yapıştırmanız çok daha olasıdır. Kapaklar da yeniden kullanılabilirliği artırabilir - bunları nasıl kullandığınıza bağlıdır.

Birçok durumda kullanabileceğiniz özellikler kodunuzu nasıl yapılandırdığınızı şekillendirir. OO, tüm kodunuzu ve nasıl etkileşime girdiğini görselleştirmenize yardımcı olduğunda daha da güçlüdür, ancak bu başka bir soru.


2

Nesnelerin, bir merdiven tırmanıcısının veya diğer fitness ekipmanlarının kilo kaybı verebileceğinden daha fazla kod yeniden kullanma yeteneği yoktur. Geliştiriciler araçları doğru şekilde kullanmaya motive edilmelidir.

Yazılım ekipleri, test edilen kodların yeniden kullanılmasına, tüm ayrıntıları başlarında tutmaya kıyasla daha yüksek bir değer verdiğinde, çok daha ayrıntılı nesneler ve yöntemler ve dolayısıyla daha fazla kodun yeniden kullanılmasını göreceksiniz.


2

Evet

OOP size kodu yeniden kullanmanın daha fazla yolunu sunar

Hayır

gümüş mermi yok

Değişir

içine ne koymak ve karşılığında ne bekleniyor!


1

Evet. İyi nesne yönelimli programlama, kaygıların ayrılmasını, düşük eşleşmeyi, yüksek bütünlüğü ve bilgi gizlemeyi destekler. Bunların hepsi yeniden kullanılabilir kod için kritik öneme sahiptir.

OOP'un ana faydasının yeniden kullanmaktan ziyade modülerlik ve değiştirilebilirlik olduğunu iddia ediyorum, ancak bu başka bir soru.


4
Nesnelerin kodu daha güzel hale getirdiğine katılıyorum, ancak maalesef nesnelerimin bu kadar büyük bir kısmı tekrar kullanılamıyor. Sıklıkla, bir nesneyi tekrar kullanılabilir hale getirmek, durumu aşırı basitleştirmek anlamına gelir
Casebash

2
@casebase +1 Ancak, nesneleri yeniden kullanılabilir hale getirmenin durumu (nesneyi) aşırı karmaşıklaştırmak anlamına geldiğini söyleyebilirim.
George Marian

Her şey tekrar kullanılamaz. Çoğu şey olmaz. Ancak, düşük eşleştirme, bilgi gizleme, vb., Yeniden kullanım için önkoşuldur ve nesne bunu teşvik eder.
Fishtoaster

2
@Fishtoaster: Arabanızın hareket etmesinin işe başlamak için bir ön koşul olduğunu ve eğimli bir araba yolunun bunu teşvik ettiğini söyleyebilirsiniz. Teknik olarak doğrudur, ancak uç durumların dışında bir fark yaratması pek olası değildir: yeniden kullanmanız gerekiyorsa ve yeniden kullanmak istiyorsanız, OO veya hayır; eğer yapmazsanız, önkoşullara sahip olmak yanlışlıkla gerçekleşmesini sağlamaz.
Shog9

@Bay. C- Demek istediğini takip ettiğimden emin değilim. Sadece OOP'un desteklediği şeylerin (modülerlik, vb.) Kütüphaneler gibi şeyleri kolaylaştırdığını söylüyordum. Endişeleri ayırarak kodu yeniden kullanılabilir hale getirmenin birçok yolu vardır, vb- OOP birdir, iyi yöntem tasarımı başka bir şeydir, uygun problem ayrışması başka bir şeydir.
Fishtoaster

1

Nesneler kodun yeniden incelenmesini sağlar, ancak bunun için en teknik değildir. Kod yeniden kullanımının kalıtım, polimorfizm, aşırı yükleme ve şablonlar gibi nesne ile ilgili tekniklerle desteklendiğini düşünüyorum.


1

Evet, yaparlar, bir süper sınıftan genişletme (devralma) açıkça kodun yeniden kullanımına katkıda bulunur, herkes nasıl aksini iddia edebilir emin değilim. Sadece bir sınıf genişletmek ve süper sınıftan geri kalanı kullanırken bir yöntemi geçersiz kılabilirsiniz, bu kod yeniden kullanım yardımcı değilse o zaman ne olduğunu bilmiyorum


0

Eğer onlar şimdiye kadar kod yeniden kullanım vaadinde teslim var mı? Evet, eğer OOP düşünülerek yazılmış programlar tasarım kalıplarını akıllıca uygularsa. Aksi takdirde, çoğunlukla hayır. Ancak Adobe sistemlerinin, Google'ın ve benzerlerinin C ++ veya Java veya diğer OOP dilleriyle yazdığı büyük ölçekli önemsiz programların popülaritesine bakarak, OOP'un aşamalı olarak bitmeden önce uzun bir yolu olduğunu söyleyebilirim. O zaman bu soruyu sormak için çok daha uygun olacak ve yeni bir paradigma için zemin çalışması sağlamaya yardımcı olabilir.

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.