Okuduğum tek geliştirici blogda, o Joel-On-Software-Founder-of-SO adam tarafından, uzun zaman önce OO'nun üretkenlik artışına yol açmadığını okudum. Otomatik hafıza yönetimi yapar. Güzel. Verileri kim reddedebilir?
Ben hala OO'nun OO olmayanlar için fonksiyonlarla programlamanın her şeyi sıralı programlamak için olduğuna inanıyorum.
(Ve bilmeliyim ki, GWBasic ile başladığım gibi.) İşlevleri kullanmak için kodu yeniden düzenlediğinizde, içinde bulunduğunuz yöntem
variable2654
haline gelir
variable3
. Ya da daha iyisi, anlayabileceğiniz bir adı var
ve işlev kısa ise , denir
value
ve tam kavrayış için bu yeterlidir.
İşlevsiz kod, yöntemlerle kod haline geldiğinde, kilometrelerce kod silersiniz.
Olmak için kodu yeniden zaman gerçekten OO, b
, c
, q
, ve Z
olmak this
, this
, this
ve this
. Ve this
anahtar kelimeyi kullanmaya inanmadığım için kilometrelerce kod siliyorsunuz. Aslında, kullansanız bile bunu yaparsınız this
.
OO'nun doğal bir metafor olduğunu düşünmüyorum.
Dilin de doğal bir metafor olduğunu düşünmüyorum, Fowler'ın "kokularının" "bu kodun tadı kötü" demekten daha iyi olduğunu da düşünmüyorum. Bununla birlikte, OO'nun doğal metaforlarla ilgili olmadığını düşünüyorum ve
nesnelerin size doğru fırladığını düşünen insanlar temelde noktayı kaçırıyorlar.
Nesne evrenini tanımlarsınız ve daha iyi nesne evrenleri, daha kısa, daha kolay anlaşılır, daha iyi çalışan veya bunların tümü (ve unuttuğum bazı kriterler) kodla sonuçlanır. Müşterilerin / alanın doğal nesnelerini programlama nesneleri olarak kullanan insanların evreni yeniden tanımlama gücünü kaçırdıklarını düşünüyorum.
Örneğin, bir havayolu rezervasyon sistemi yaptığınızda, rezervasyon dediğiniz şey yasal / ticari bir rezervasyona hiç karşılık gelmeyebilir.
Temel kavramlardan bazıları gerçekten harika araçlardır
Bence çoğu insan "çekiç varken, hepsi çivi" olayı tümüyle abartıyor. Madeni paranın / aynanın diğer tarafının da aynı derecede doğru olduğunu düşünüyorum: polimorfizm / kalıtım gibi bir aletiniz olduğunda, eldiven / çorap / kontakt lens gibi uygun olduğu kullanımları bulmaya başlarsınız. OO'nun araçları çok güçlüdür. Tek kalıtım, bence, insanların başka yere taşınmaması için kesinlikle gerekli, kendi
çoklu miras yazılımıma karşı koyamıyor.
OOP'nin amacı nedir?
Kesinlikle büyük bir kod tabanını idare etmenin harika bir yolu olduğunu düşünüyorum. Bence kodunuzu düzenlemenize ve yeniden düzenlemenize olanak tanır ve bunu yapmak için size bir dil sunar (çalıştığınız programlama dilinin ötesinde) ve kodu oldukça doğal ve anlaşılması kolay bir şekilde modüler hale getirir.
OOP, geliştiricilerin çoğu tarafından yanlış anlaşılmaya mahkumdur
Bunun nedeni, yaşam gibi göz açıcı bir süreç olmasıdır: OO'yu deneyimle giderek daha çok anlarsınız ve daha akıllı hale geldikçe belirli kalıplardan kaçınmaya ve başkalarını kullanmaya başlarsınız. En iyi örneklerden biri, kontrol etmediğiniz sınıflar için kalıtımı kullanmayı bırakmanız ve bunun yerine
Cephe modelini tercih
etmenizdir .
Mini makaleniz / sorunuzla ilgili olarak
Haklı olduğunu söylemek istedim. Yeniden kullanılabilirlik, çoğunlukla boş bir hayaldir. İşte Anders Hejilsberg'den bu konuyla ilgili (harika) bir alıntı buradan :
Yeni başlayan programcılardan bir takvim denetimi yazmalarını isterseniz, genellikle kendi kendilerine şöyle düşünürler: "Ah, dünyanın en iyi takvim denetimini yazacağım! Takvim türüne göre polimorfik olacak. Göstericileri olacak, ve mungers ve bu, o ve diğerleri. " İki ay içinde bir takvim uygulaması göndermeleri gerekiyor. Tüm bu altyapıyı kontrol altına alıyorlar ve ardından üzerine berbat bir takvim uygulaması yazmak için iki gün harcıyorlar. "Uygulamanın bir sonraki sürümünde çok daha fazlasını yapacağım" diye düşünecekler.
Soyut tasarımlarının tüm bu diğer somutlaştırmalarını aslında nasıl uygulayacaklarını düşünmeye başladıklarında, tasarımlarının tamamen yanlış olduğu ortaya çıkıyor. Ve şimdi kendilerini bir köşeye boyadılar ve her şeyi dışarı atmak zorundalar. Bunu defalarca gördüm. Minimalist olmaya güçlü bir inancım var. Genel problemi gerçekten çözmeyecekseniz, belirli bir problemi çözmek için bir çerçeve oluşturmaya çalışmayın, çünkü bu çerçevenin nasıl görünmesi gerektiğini bilmiyorsunuz.