OOP teknolojisinin ölümü [kapalı]


9

En boy yönelimli programlama hakkında birçok kez duydum, çoğunlukla programlamadaki "yeni nesil" teknoloji ve OOP'u 'öldürecek'.

Doğru mu? OOP ölecek mi yoksa bunun nedeni ne olabilir?

Yanıtlar:


40

Birisi size bir yazılım teknolojisinin diğerini öldüreceğini veya tüm pazara / kullanıma / kitleye hükmedeceğini söylediğinde şunu unutmayın:

Aklı başında (dinamik ama istikrarlı) bir ekosistem, çok çeşitli türlerden oluşur.

Bu, yeni bir hiper teknolojinin yutturmaca eğrisinden geçeceği ve sonunda bunun zaman ve deneyim yoluyla belirli amaçlarını bulacağı anlamına gelir .

Yutturmaca

Bu aynı zamanda, yönelimli programlama gibi aşırı bir kavramın, gerektiğinde, yani her zaman değil, çok sık değil, zımni maliyetlerden dolayı faydalı olduğu anlamına gelir.

Ancak, OOProgramming gibi, jenerik programlama gibi, fonksiyonel programlama gibi, prosedürel programlama gibi bir yeri var.

Gerçek hayatta daha çok kullanılan (ve tartışmalı olarak popüler olan) ve yaygın olarak kullanılan dillerin "saf" olmadığını fark ettiniz mi? Çünkü birçok paradigmaya izin vermek, zaman içinde bağlamı değiştirmeleri için onları daha esnek hale getirir ve daha fazla kullanım nişini doldurur.


1
'Saf değil' için +1. Saf OOP dilleri, çok niş kullanımlar / akademisyenler hariç, özellikle ölüdür .
jv42

Saf OO dilini ne düşünürüz? Smalltalk?
Zhehao Mao

20

OOP, AOP yüzünden ölmeyecek. AOP bir değer katıyor, ancak OOP ile mükemmel bir arada yaşıyor. Fonksiyonel programlamanın OOP'yi de öldüreceğini sanmıyorum. OOP, birçok türde etki alanı için çok iyi, onu işlevsel paradigma ile değiştirmek mantıklı olmaz.


1
Bu oldukça öznel. OOP'nin belirli bir sorun alanı için iyi bir uygun olduğunu düşünmüyorum, belirli bir geliştiricinin nasıl bir çözüm ürettiğine iyi uyuyor. OOP ölmeyecek çünkü geliştiriciler paradigma anahtarları yapamıyorlar.
Raynos

6
OOP'un uygun olduğu klasik örnek GUI'lerdir. Dil olmasa bile, OO olmayan bir GUI araç takımı için bir API hayal etmek zor. (Verilmiş, sorunlu etki alanı terimi genellikle bu şekilde kullanılmamaktadır) OOP'un uygun olduğu gerçek bir sorun etki alanı örneği vermek için: Depo otomasyonu. Depolama ve geri alma araçlarının ve faaliyetlerinin modellenmesi, OOP'nin doğal bir uyum gibi hissettiği yerdir.
user281377

2
@ ammoQ, GUI'ler OO ile ifade edildiğinde korkunçtur. Tüm API'lerin DSL'lere (WPF ve benzeri) doğru sürüklenmesinin nedeni budur. Diyelim ki, Tk - orada tek bir OOP izi yok, ama yine de mükemmel (programlama için, görünüşü için değil), overbloated Java OO araç kitlerinden çok daha iyi. OOP, ajan tabanlı simülasyonlara (listeledikleriniz gibi) gerçekten iyi uyuyor, ancak mevcut sorunların küçük bir oranı.
SK-logic

6
Bulabildiğim ilk tk örneklerine baktığımızda, bu nasıl OO değil? Öğreticiden: "Widget'lar nesneler, düğmeleri temsil eden sınıf örnekleri, çerçeveler vb." tkdocs.com/tutorial/concepts.html Dahası, DSL'lerin kendisi OO programlamasına çok bağımlı. Yani ne demeye çalıştığını gerçekten anlamıyorum?
İnka

3
@ Sk-logic, @ammoQ, @Raynos, @jkocking, kendi başına bir soruya yükselttim: programmers.stackexchange.com/questions/88385/… Bu konuda daha fazla açıklama yapmak isterim, ben çok öğrenmek istiyor.
İnka

12

Paradigmalar gelir ve gider, ancak eski kod sonsuza dek kalır. Her zaman korumak için C ++ kodu olacak, bu yüzden OOP asla tamamen ölmeyecek.


6
Gerçekten parlak bir ifade için +1: "Paradigmalar gelir ve gider, ancak eski kod sonsuza dek"
NoChance

8

Kısa cevap: Hayır, sanmıyorum.

Daha uzun cevap: AOP hakkında anladığım kadarıyla, bu kendi başına bir programlama paradigması değil (olduğu gibi, OOP'nin yerini almaz), daha çok ek, daha kısa yöntemler, daha basit, tek sorumluluk sınıfları yazmanıza yardımcı olan bir araç seti , ve benzeri. Ancak OOP'un yerini almaz.

(En azından kısmen) yapar şey değiştirmek veya OOP ekler aslında fonksiyonel programlama, olduğu olduğu (o örneğin, OOP ile karıştırılabilir, ancak farklı bir programlama paradigması Scala programlama dili ). Değişmez veri yapılarını ve özellikle eşzamanlılık söz konusu olduğunda OOP geliştiricilerini hayal kırıklığına uğratan her türlü fantezi özelliği tercih eder.


Fonksiyonel <-> Zorunlu çizgi. OOP buna paraleldir. Prosedürün OOP'nin diğer ucunda olduğunu düşünüyorum ama emin değilim. Tabii ki, İşlevsel paradigmanın OOP paradigmasından sonra daha eski olması eğlencelidir :)
Raynos

2
@Raynos, düz bir çizgi yok. OOP, muazzam (sonsuz) olası soyut diller setinin içindeki küçük bir metalinguistik soyutlamadır. Ve elbette kendinizi bunlardan herhangi biriyle sınırlamak son derece aptalca.
SK-logic

6

OOP, birçok durumda fiili yaklaşım olarak kabul edildiğinden bu günlerde daha az bahsedilmektedir. AOP, herhangi bir kitle hareketi gibi hiçbir zaman yerden inmedi.

http://imgur.com/9VmKC


5

İlk kez OOPSLA '97 Eğiticisinde otururken Yönüne Yönelik Programlama hakkında bir şeyler duyduğumu hatırlıyorum. O zamanlar OO'yu öldüreceğini söylediler. O zamandan beri OO sadece en çılgın beklentilerin ötesine geçti. AOP, bilgisayar endüstrisi üzerinde esasen hiçbir etkisi olmadan hala zar zor biliniyor. Bence cevap AOP'nin OO katili olmadığı ortada.


1

Mevcut bazı AOP sistemlerine bakın. Bazı biçimlerde bazı kodlar yazmanıza bağlıdırlar - örneğin, Bahar AOP yöntemlerinizi bir sınıfta tanımlamanıza bağlıdır. Windsor Kalesi, onu nesne yönelimli bir dil olan C # ile destekliyor.

Teorik olarak OOP'den yapılandırılmış programlamaya geçebilir ve yine de AOP'yi tutabilirsiniz, ancak pratikte bu zor olurdu. Bir şeyi alt sınıflara ayırmak, uygun önceki / sonraki filtreleri çağırmak için ilgili yöntemi geçersiz kılmak ve bunu bağımlılık enjeksiyonu sürecinde aktarmak kolaydır.

Kullanıcı tanımlı filtreleri çağırmak için tasarlanmış bir trambolin yöntemine yönlendirmek için statik yöntem çağrılarını yeniden yazmakla karşılaştırıldığında kanlı.

Dolayısıyla, ortak bir uygulama açısından, AOP OOP gerektirir.


0

OOP kesinlikle gümüş bir kurşun olmasa da, AOP için de aynı şey söylenebilir. Bileşen tabanlı tasarımı destekler, ancak daha büyük şemada bileşenleriniz yeni nesnelerdir ve bileşen arabirimleri temel olarak gerçek OOP DEĞİL olan işlemlerin bir işlem listesidir.

Daha fazla AOP ve bileşen tabanlı tasarım, kendimden daha akıllı insanların eleştirdiği bir Anemik Veri Modelini destekler.

http://martinfowler.com/bliki/AnemicDomainModel.html

(Yukarıdaki makalenin eski olduğunu, ancak şaşırtıcı derecede alakalı olduğunu biliyorum)

Sonuç olarak, AOP sistemleri burada kalacak ancak mükemmel olmaktan çok uzak. Hiçbir sistem mükemmel değildir.

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.