OOP gerçek dünyada baskın programlama modeli midir?


20

Nesneler Asla? Pek, Hiç

ACM İletişiminin VIEWPOINT bölümünde, " Nesneler Asla? Hiç, Hemen hemen hiç " başlıklı ilginç bir makale buldum . İlk ya da geç nesnelere göre kökten farklı bir bakış açısı. "Nesneleri asla-asla" veya belki "nesneleri-lisansüstü okulu" önerir.

Yazar OOP hakkında konuştu ve OOP'un gerçek dünya programlama ortamlarında nasıl kullanıldığı hakkında bir soru sordu. OOP'nin baskın programlama modeli olmadığını düşünüyor. Örneğin, programlamaların% 70'inin OOP'nin gerçekten uygun olmadığı Gömülü Sistemler için yapıldığını iddia ediyor.

Üniversitelerdeki bazı profesörler OOP'un faydaları hakkında konuşmak istediğinde, kodların yeniden kullanımı hakkında konuşuyorlar. Başka bir örnek olarak, yine, bunun gerçek dünyada gerçek durum olmadığını iddia ediyor. kodun yeniden kullanımı üniversitelerde iddia edilenlerden daha zordur:

OOP kullanımının çoğu insanın inandığı kadar yaygın olmadığını, savunucularının iddia ettiği kadar başarılı olmadığını ve bu nedenle CS müfredatındaki merkezi yerinin haklı olmadığını iddia ediyorum.

Yığın taşan insanların bu konuda nasıl düşündüklerini bilmek benim için ilginç mi? OOP, programcıların bakış açısından baskın programlama modeli midir?

Sadece bir yaklaşım seçmeli / öğrenmeli / kullanmalıyım, OOP mu yoksa değil mi? neden?


26
"Programlamaların% 70'i Gömülü Sistemler için yapılıyor"? Bu proje, geliştirici veya LOC başına mı? "Tüm programlamalar" ın% 70'inin Excel'de yapıldığını hissediyorum. Programcı olmayanlar bile elektronik tabloları programlar.
LennyProgrammers

1
@ Lenny222: Tahminimi istiyorsanız, programların dağıtılmış kopyalarının% 70'i gömülü yazılımda ya da bunun gibi bir şeydedir. Şimdi, bazı gömülü şeyler C ++ 'da yapılır ve genellikle C ve nesneleri bırakan saldırıya uğramış bir sürümdür, bu nedenle gömülü nesnenin asla nesne yönelimli olmadığını iddia etmek tuhaf görünmektedir.
David Thornley

9
Bence baskın programlama modeli uzun zamandır çamur topuydu ve olacak.
whatsisname

Bu makale uzaktan bile anlamadığım "sınıflar" ve "alt sistemler" arasında garip bir ayrım yapıyor. DiskBrake extends BrakeOOP'nin bir araba için nasıl iyi olmadığı hakkında konuşur , çünkü "gerçek dünyada" bu iletişim "ağ sinyalleri ve veri yolu protokolleri" ile gerçekleştirilir - ne gibi DiskBrake implements BrakeInterface? Belki de bu benim kendi << 43 yıllık deneyimim, ama bana örnekler yazarın iddiasını desteklemiyor.
OJFord

2
Bağlantı şimdi bir ödeme duvarının arkasında. Her neyse, OOP çoğunlukla düşük tanımlı ve abartılıdır. Ama diyelim ki "en" yeni programlar, Java ve ilham alan bazı OOP-esque tarzında alıcılar ve ayarlayıcılar ve SessionManager
Charles Salvia

Yanıtlar:


19

ACM İletişiminin GÖRÜNÜM bölümünde

Pratik programlamayla ilgileniyorsanız , ACM ve benzerlerinin işlemleri okumak istediğiniz son kaynaktır. Bunlar genellikle gerçek dünyada hiçbir başvurusu olmayan [sözde] bilimsel yayınlardır. Bunlar, yazarın kendisini kalabalıktan farklılaştırması ve kendi insanını tanıtması için genellikle tanıtım için yapılan alışılmadık görüşlerdir.

OOP kullanımının çoğu insanın inandığı kadar yaygın olmadığını, savunucularının iddia ettiği kadar başarılı olmadığını ve bu nedenle CS müfredatındaki merkezi yerinin haklı olmadığını iddia ediyorum.

Ben senin fikrinle aynı fikirde değilim. OOP yaygındır ve gayet iyi çalışır. OOP tabanlı projeler sayıca muhtemelen diğer stratejilerle yapılan gelişmeleri aşmıştır (modern zaman hakkında konuşalım, 15-20 yıl).

Ancak OOP gümüş bir kurşun değildir. Bazı gelişmeler için çalışıyor, diğerleri için çalışmıyor. Tıpkı diğer yaklaşımlar gibi.

Ancak bahsetmemiz gereken bir şey, bir müfredatın farklı yaklaşımlar hakkındaki bilgileri aktarması gerektiğidir. OOP tabanlıysa, yanlıştır. FP tabanlıysa, yanlış. Hepsini kapsamalı veya bu konuya tamamen dokunmamalı.

PS Neden baskın olan ve olmayan nedir? Sadece elinizdeki proje için uygun olanı alın ve sayıları "araştırmacılara" bırakın.


3
Bilgi işlem alanlarında henüz ana akım haline gelmemiş araştırma yazılarıdır. Akademinin düzenli olarak yaptığı gibi, genellikle gerçek dünyaya süzülmesi yıllar alır.
Aralık'ta Orbling

4
@DeveloperArt: Bildirinin yazarının yazılım geliştirme konusunda 43 yıllık tecrübesi olduğunu lütfen unutmayın!
Ehsan

6
Alan Kay, cacm.acm.org/magazines/2010/9/… ' de bir yorum ekliyor -' Bunun aksine, kendilerini "nesne yönelimli" olarak adlandırılan sistemlerin çoğunun , başlangıçta paramparça olduğum zaman bile anlamıma yakın olduğunu hiç düşünmedim. dönem.' - mesajımla teğet olarak bağlanan - "OO? Kimin OO?"
Frank Shearar

9
@Developer Art: Gönderiniz hakkında bana (biraz) minnettar olan şey "araştırmacılar" kısmı. Şu akademisyenler. Bizim için ne yaptılar? Ah. Lambda hesabı, kapanışları, nesneler, fonksiyonel programlama, ... Ama diğer bundan daha ne akademisyen hiç bizim için yaptın?
Frank Shearar

4
-1 Bilgisayar bilimi araştırmacılarının korkutucu alıntılara ihtiyacı var mı? ACM sahte bilim yayınlıyor mu? Ciddi anlamda?
jprete

17

Eğer bildiğiniz tek paradigma OOP ise , belki daha fazlasını öğrenmelisiniz. Ama gerçekten, OOP aslında ne anlama geliyor? Java veya C ++ anlamına mı geliyor? Smalltalk demek mi? Ayarlanabilir değer aralıkları ve kapanmaları anlamına mı geliyor? (Merhaba, Şema!) Bu mesaj göndermek anlamına mı geliyor? (Selam Erlang!)

Kısacası, sormak ilginç bir soru gibi görünüyor. "OO faydalı mı?" daha iyi bir soru. Ve, öyle görünüyor. (Kesinlikle benim için.)


6
+1 Pratikte OOP'un "nesne adı verilen şeyleri kullanan iyi bir kod yazma yolu" dışında bir şey ifade etmediğinden şüpheleniyorum.
Larry Coleman

Atıfta bulunulan makale, bir OO dilinin kullanılmasının oo kullanımının bir garantisi olduğunu düşünmemektedir ve diğer mühendislik disiplinlerinde bulunmadığından paradigma olup olmayacağı sorularıdır.
JeffO

Belki de yazar programlamada neyin aynı olup neyin olmadığı hakkında çok zaman harcayan William Cook ve Matthias Felleisen'i okumalıdır.
Frank Shearar

9

Tüm geliştiriciler bu "programlamanın% 70'ini" nerede yapıyor? % 1'den daha azının Gömülü sistemler üzerinde çalıştığını bildiğim tüm geliştiricilerden.

Yani, 3 seçeneğimiz var:

  1. Benzersizim ve tüm arkadaşlarınız gerçekten gömülü programlama yapıyor
  2. Bir yerde bodrum katında kilitli olan geliştiricilerin orduları var.
  3. bu istatistik oluşur ve makale saçmadır

Seçenek 1 veya 2'nin gerçekten doğru olduğuna dair bazı kanıtlar görmezsem, seçenek 3 ile gidiyorum.

(BTW, modern mobil geliştirme gömülü programlamayı düşünmüyorum ve mobil geliştirme genellikle OO'dur, tüm Apple sizi iPhone için geliştirmek için * Objective * C kullanmaya zorlar)


FWIW, birkaç saniye sürdüm ve "programlamanın% 70'i" için yarım düzine olası önlem aldım. Yazar yedinci kullanmış olabilir. (Ayrıca, gömülü programcılar dışarıda, sadece aynı yerlerde takılmama eğilimindedirler ve genellikle kendilerini programcılar yerine elektrik mühendisleri veya bunun gibi bir şey olarak düşünürler.)
David Thornley

1
@David Thornley - istatistiklerle yalan söyleme hala yalan söylüyor, yazar bugün dünyadaki programlamanın ezici çoğunluğunun gömülü sistemler için olduğunu iddia ediyor - ve bu toplam boğalar olduğunu söylüyor # @ $ t, eminim bir icat yapabilirim dünyadaki programların çoğunun şu anda bulunduğum odada yapıldığını gösteren bir ölçü (başka bir geliştiriciyle paylaştığım) - ancak bu gözlemin üzerine inşa ettiğim herhangi bir sonuç, yapılan önlem kadar değersiz olacak .
Nir

1
Ben gömülü bir adamım. Üretilen / gönderilen işlemcilerin yaklaşık% 99'unun gömülü sistemler için olduğunu bildiren birkaç rapor gördüm (gerçekten gerekliyse geri dönüp raporları aktarabilirim). Bunu söyledikten sonra, tüm programlamanın % 70'inin gömülü sistemler için yapılmadığından eminim . Gönderilen tüm işlemcilerin% 50'si gibi bir şeyin 4 bit ve 8 bit olduğunu düşünüyorum, ancak bunlar muhtemelen tüm programlamanın% 0.1'ini (veya daha azını) oluşturuyor. David'in dediği gibi, "programlamanın% 70'ini" bulmak için birçok yol vardır. Sayı% 20-25 olsaydı şaşırmazdım.
Radian

+1 "istatistiklerle yalan söylemek hala yalan söylüyor"; çok doğru, çok doğru…
Donal Fellows

8

Takip edecek gerçeklerim yok, ama OOP baskın programlama modeli değil. Görsel bir temel kurs alan veya Excel'de makro programlama yapan biri tarafından geliştirilen tüm şirket içi uygulamaların hayal edin.

Birçok uygulama, tüm mantığın tek bir sınıfta veya görünümde istiflendiği yerlerde zorunlu programlama yapıyor. Bu muhtemelen tüm işletmelerde çalışan dahili basit uygulamaların büyük çoğunluğudur.

Bunda yanlış bir şey yok, aynı sorunu çözmenin birkaç yolu var. Bazıları diğerlerinden daha uygundur.

Ayrıca belirttiğiniz gibi, OOP tüm senaryolar için yararlı değildir. Başka modeller de var.


Sonra yine, baskın model olarak tanımlanması gereken soru olabilir. "Model X ile geliştirilen uygulama miktarı" mı yoksa "model X ile geliştirilen kod miktarı" mı? Her iki durumda da hala OOP'nin baskın model olmayacağını düşünüyorum.
Morten

1
+1 OOP'nin eğitimli profesyoneller ile her yerde bulunmasına rağmen, dünya çapındaki endüstri bunu tam olarak yansıtmıyor ve orada çok sayıda doğrudan zorunlu kod var.
Aralık'ta Orbling

5

OOP'nin baskın programlama modeli olup olmadığı önemsizdir, sadece farklı modelleri farklı durumlara uyarlayın.

Gümüş mermi yok.

Moti Ben Ari'nin tartıştığı şey, zaten anlamsız olan akademik bir iddiadır. Bununla birlikte, OOP'yi asla "mantıklı" bulamadığını, binlerce geliştirici ve yazılım mühendisine açıkça yaptığını ve birçok sistemde kullanıldığını belirtiyor ...

Ama, cevabımın asıl amacı şudur: Bir modelin ya da diğerinin baskın olup olmadığını belirtmek ne kadar iyi, o zaman körü körüne kullanmak için iyi bir mantık mı? Tabii ki değil.


Birçok kişi bir model kullandığını iddia ederse ve kullanmazsa, bu bir sorundur. Soru, baskın / daha iyi olmakla ilgili değil, göründüğü kadar yaygındır.
JeffO

4

Bu aslında güvenilir bir şekilde cevaplanması zor bir sorudur. En büyük neden, kodun asla binamızdan ayrılmadığı özel, şirket içi uygulamalarda çalışan benim gibi insanlar. Burada OO kullanıyor muyuz? Söylemiyorum. Başka kaç programcının benzer işleri var? Onlar da söylemiyorlar. İş sitelerimiz var, ancak tüm işler gönderilmiyor ve tüm ilanlar, isim listeleri toplamaya çalışan işe alım yapanların aksine gerçek işler için değil.

Çalıştığım yerde OO kullandığımızı söylesem bile, bu bağlantılı makaledeki geleneksel tanım anlamına mı geliyor: Nesneler, Sınıflar, Kalıtım? Yoksa nesneleri öncelikle kod düzenleme aracı olarak kullandığım anlamına mı geliyor? Yoksa bu sadece arayüzlere programladığım ve kalıtımı neredeyse hiç kullanmadığım anlamına mı geliyor? Hala söylemiyorum, ama bunlardan hangisi gerçekten OO olarak sayılıyor?

Yukarıdaki sorulara cevap verilinceye kadar OO'nun faydalı olup olmadığını sormak bile baskın değil.


2

Tabii ki, çünkü yönetimin kilitlediği son terimdir. Ayrıca zorunlu programlama daha iyi kapsülleme ve soyutlama sunuyor, bu yüzden oop gelen bir sonraki gelen sıçramak oop için zorunlu daha uzun sürebilir düşünüyorum.

PS2: Sadece bir yaklaşım seçmeli / öğrenmeli / kullanmalıyım, OOP mu yoksa değil mi? neden?

Eğer sadece bir tane öğrenecekseniz farklı bir alan seçmelisiniz.

Türler ve kapsülleme ve OOP'un diğer tüm faydaları hakkında bilgi edinmeli ve daha sonra aynı şeyleri işlevsel bir programlama tarzı kullanarak nasıl gerçekleştireceğinizi öğrenmelisiniz.


Bir yaklaşımı öğrenmeyi planlıyorsanız, farklı bir alan seçme hakkındaki yorum için +1. Delilik bu.
Mat Nadrofsky

1

OOP kesinlikle gerçek dünyadaki en baskın programlama modellerinden biridir.

Karşılaşalım, dijital donanım tasarlayan insanlar bile, çip tasarımcılarının kendisi, SystemVerilog ve SystemC ikilisine geçiş yapıyorlar. Bunlar nesne yönelimli programlama dilleridir.

OOP nerede kullanılmaz? Cihaz sürücülerini kodluyorsanız, neden genel programlama veya çoklu mirasa ihtiyacınız olduğunu hayal etmek zor VEYA AI işlevsel programlama teknikleri yapıyorsanız, kafasında çok daha kolay hale getirin. Çok sayıda başka durum da var, ancak OOP'un oligopolistik bir programlama dünyasında olmak için oldukça güçlü bir yer olduğunu söylemeye yeter.


1

Hayır derdim.

Ben bir 'nesne yönelimli' dil kullanılarak yazılmış büyük miktarda kod olduğunu anlıyorum, ama genellikle kod sadece prosedürel sınıflara sarılmış olduğunu bulmak. (bu mutlaka kötü bir şey değildir). Bu dillerde daha fazla OO olarak yazıldığını gördüğüm kod, tipik olarak sürdürülemez olan sınıflar arasında korkunç bir bağımlılık karmaşası olma eğilimindedir.

OO'nun tamamen bağımsız nesneler arasında mesaj iletme ile ilgili olması gerekiyor ve bunu bugünün kodunda, ancak çok daha büyük bir düzeyde görüyoruz - yani bu nesnelerin dll veya derleme veya COM nesnesi olarak uygulandığını görüyoruz. 'Bileşenler' olarak tanımlandığını duydum.

Bu yüzden, OO'nun kullanılıp kullanılmadığı gerçekten önemli değil - kod ömrü boyunca korunabilirse, tasarlandığı ölçüde yeniden kullanılabilir ve hızlı bir şekilde geliştirilebilirse, o zaman umrumda değilim tamamen prosedürel veya yarı nesne yönelimli veya tamamen OO ise. Herkesin baskın stilin bunlardan herhangi biri olup olmadığını söyleyebileceğinden şüpheliyim, ancak fonksiyonlar yerine sınıflara ayrılsa bile prosedür stilinin en yaygın olacağı tahmininde bulunuyorum.


0

Bir Nesne Odaklı Yaklaşım ve Nesne Odaklı Paradigmayı KULLANARAK uygulanan bir çözüm ile elde edilen bir çözümü ayırt etmenin önemli olduğunu düşünüyorum. İyi bir nesne oriente yazılım parçası hakkındaki düşüncem her iki çözümü de birleştirmektir. Nesneleri düşünürseniz ve nesne tanımlarına ve etkileşimlerine saygı duyarsanız ve sorununuz bu yapıyı kullanacak şekilde uyarlanabilirse, esnek ve sağlam bir kodunuz olacaktır. Ancak yordamsal bir paradigma kullanarak bir kodu çözmek için nesneler kullanırsanız, Nesneler profesyonellerinden faydalanmayacak kötü bir karışım elde edersiniz.

Kodumu Nesne Odaklı olmayı gerçekten tercih ediyorum ve ilk başta iyi bir yapı oluşturmak için biraz daha can sıkıcı olabileceğini fark ettim, ama bugün esneklik ve istemci flaş gereksinimleri ile uğraşırken, buna değer olduğunu düşünüyorum. çaba.


0

Kesin sayıları bildiğimi, hatta kaba bir tahminde bulunduğumu iddia etmiyorum, ancak OOP içermeyen birçok programlama projesi var. Endüstriyel robotlarla çalışıyorum. Programlar oldukça basit ve basit bir prosedür kodu olma eğilimindedir. Gerçek robot işletim sistemi daha da böyledir.

Kullandığımız "araçlarımızın" çoğu OOP tabanlıdır, ancak robot denetleyicisiyle değil PC'lerle çalışırlar. Bunlar editörleri, simülasyonları ve yardımcı programları içerir.

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.