Nesneye yönelik programlamanın büyük bir programlama paradigması olmasına neden olan tarihsel koşullar nelerdi?


14

Nesneye yönelik programlama dillerinin etkili olmasına yol açan bazı ekonomik (ve diğer tarihsel) faktörler nelerdi? Simula'nın bir şeyler başlattığını biliyorum , ancak iş dünyasının artan ihtiyaçları nedeniyle OOP dillerinin benimsenmesi miydi? Yoksa evlat edinme, daha çok OOP dillerinde yapılabilecek yeni şeyler yüzünden miydi?

Düzenleme En çok, dillerin dışına çıkmalarına izin veren bazı faktörlerin olup olmadığıyla ilgileniyorum.


Bu mantıklı, ama sanırım geliştirme sırasında olan dış koşullarla daha fazla ilgileniyordum. Dış etkenlerin sınırlı bir etkisi olması çok iyi olabilir.

Dış etkenlerle ilgili bir soru için bile programcılar.stackexchange'in daha iyi bir mekan olduğunu garanti ederim. Endüstride aktif olarak çalışan bir ton insan ve endüstrinin başlamasından bu yana çalışan birçok insan var. Orada, sorunuza mükemmel bir cevabı olan bir kişiyi buradakinden çok daha fazla bulacaksınız.
Opt

2
Smalltalk vermedi değil onu başlayın. Simula , nesne yönelimi ile ilgili temel kavramları yarattı. Smalltalk'ın yaptığı bu fikirleri alıp onları çok farklı bir modele çevirip adı uygun hale getirmekti. Ancak, Smalltalk OO modelini takip eden hiçbir dilin program oluşturmak için gerçekten çok başarılı olmadığını belirtmek gerekir. (Özel bir durum olan Objective-C hariç: Apple onu herkesin boğazını yanlarında itiyor, ancak Apple ekosisteminin dışında kimse kullanmıyor.) Tüm başarılı OO dilleri: C ++, Delphi, Java, C #, vs, Simula modelini kullanın.
Mason Wheeler

1
Lego oyuncak tuğlaları harici bir etki olarak sığabilir ...
Jamie F

1
@Mason: Simula ve Smalltalk modellerini neyin böldüğünden emin değilim. Ruby'yi nereye koyardın? LUA? Python? JavaScript?
kevin cline

Yanıtlar:


10

Kısa cevap

OO günlerinden önce yazılım projelerinin karmaşası olduğunu düşünüyorum. OO, temel olarak kritik konsepti ekleyerek yardımcı oldu - Gerçek dünyayı modelleyin .


İlk nesne yönelimli programlama dili 1967'de Simula idi . Ancak, o zamanlar genel olarak yazılım geliştirme hala laboratuvarlarda daha fazlaydı ve çoğu paradigma hala donanım durumuna daha yakındı .

Kurumsal uygulamalar için bir başka on yıllık yazılım geliştirme süreci boyunca, diğer ticari uygulamalar büyüdü ve yazılım geliştirme, 1970'lerin tamamında genişledi. Bugün (1980 öncesi) günümüzde hayatta kalan diller C, Cobol, Fortran ve benzerleri idi. Bu dillerin çoğu prosedüreldir. Lisp de o günden beri varlığını sürdürdü - ancak, bunun ticari gelişim için önemli bir genel dil olup olmadığından emin değilim. Ünlü Şelale modeli de 1970'lerin başında üretildi.

Çoğu ticari ortamda yazılım geliştirmede ortaya çıkan en önemli unsur proje yönetimi olmuştur. Sıkı ve en azından öngörülebilir bütçelere ve projenin bitiş çizgisine sırayla ulaşmasını sağlamak için dondurulması gereken yönetmeliklere ciddi bir ihtiyaç vardı. Bu dönemde 1975'te Efsanevi Manmonlardan biri de vardı .

Sanırım 70'in sonunda insanlar yanmıştı - prosedürel diller bu vaatlere uymadığı için. Ve o zamandan beri var olan yeni bir paradigma Nesne yöneldi . Her ne kadar insanlar aynı fikirde olmasa da, 1983'te tanıdık ve kanıtlanmış deneyime ve C'ye yardımcı olan C ++ ve Nesne Yönlendirme Sözü'nü (başlangıçta Sınıflarla C adıyla), Nesne yönelimli programlamanın başarısının köşe taşı olduğunu düşünüyorum.

Daha fazla perspektif için bazı referanslar - http://journal.thedacs.com/issue/43/88

Öyleyse neden OO?

Bence o günler (eğer proje başarı bakış açısına bakarsanız) - daha iyi anlayabileceğiniz şeyin daha iyi yönetilebilir olacağı mantıklıydı. "Hayattaki her şey bir nesnedir" vaadiyle nesne yönelimli metodoloji, anlamlı olduğu kanıtlanmadan bile daha mantıklı görünüyordu. Bu faktörün pratik başarısı , silahı atmadan önce gerçek dünyayı ve problemi yeterince modelleme fikriydi - bu, OO'nun o tarihe kadar başka bir paradigmanın sunmadığı temelde yeni bir şey olduğunu düşünüyorum. Ve kesinlikle bu paradigmanın sizi prosedürel dillerden daha fazla kodlamadan önce düşünmeye zorladığı göz önüne alındığında, kullanılan yazılım projelerinde görünür başarı gösterdi ve o zamandan beri yakalandı!

EDIT
Ayrıca, programlama dillerinin bu gibi temel kavramlara (OO paradigması, Aspect, Sanal makineler,) paralel olarak aynı anda geliştiğini de ekleyeceğim. çekirdek! Aynı zamanda - bu yeni konsept ve yeni diller sadece yeni iş sorunları nedeniyle ortaya çıktı. 1980'ler - Büyük ölçekli yazılımlar için OO, 1990 İnternet çağında Java, PHP / ASP ve web için birçok. Programlama dillerindeki yenilikler daha çok süreksiz pazar ihtiyacından kaynaklanmıştır.

Özetle, 80'li yılların başları daha büyük ölçekli ticari yazılımların kalktığı yaştı - prosedürel dilleri olan projelerin sorunları vardı, OO daha iyi ışık gösterdi ve projeleri daha başarılı hale getirdi.


Vardiyanın karakteristikleri neredeydi ve nereye gidilecekti? 70'lerin sonu. Geliştiricilerin gitme zamanını anlamasını sağlayan şey nedir? İşlemden bıktınız mı, evet, ama alternatifin düzineleri var mı?
Bağımsız

@Jonas - tamam - cevabı değiştirdi.
Dipan Mehta

Tarihsel başarıya göre değerlendirdiğimizde - kesinlikle aşinalıkların bir rol oynadığını söyleyebiliriz. C (B'nin ardılıydı), OO'nun bir paradigma değişimi olduğu halde C ++ daha iyi bir C idi. Java bile C ++ 'dan hazır bir sıçrama (daha çok C ++ problemleri olmayan C ++ gibi .eg. Bellek ve taşınabilirlik). Bu dillerin çoğu, içinde daha temel bir şeyleri olmasına rağmen mevcut alanı daha etkili bir şekilde elde ederek chams'ları aştı . Dahası, çünkü her dil, başka programlama dillerini zaten bilen bazı programcılar edinecektir. AMA bu her zaman doğru olmayabilir!
Dipan Mehta

1
Programlama dillerinin bu tür temel kavramlara (OO paradigması, Unsur, Sanal makineler,) paralel olarak aynı anda geliştiğini de ekleyeceğim. Her yeni konsept ve yeni düşünce sadece yeni bir programlama dilinin hakimiyetinde ortaya çıktı - sadece aşinalık koruyun ancak temelleri temelden değiştirin ! Aynı zamanda - bu yeni konsept ve yeni diller sadece yeni iş sorunları nedeniyle ortaya çıktı. 1980'ler - Büyük ölçekli yazılımlar için OO, 1990 İnternet çağında Java, PHP / ASP ve web için birçok. Programlama dillerindeki yenilikler daha çok süreksiz pazar ihtiyacından kaynaklanmıştır.
Dipan Mehta

1
"Gerçek dünyayı modelleyin" kulağa kesin geliyor, ancak çoğu durumda bu gerçekleşmiyor. CustomerSınıf gibi yöntemi yok eatLunch, goToWorkya sleepbu müşterilerin yapması gereken şeydir rağmen gerçek dünyada . ProductEn ürünler tüm tam olarak hiçbir davranışa sahip olsa sınıf, çeşitli yöntemler vardır gerçek dünyada . Bu nedenle, OO modelinin sadece özellikler bakımından (az ya da çok), ancak davranış açısından, gerçek dünya ile hiç uyuşmadığını iddia ediyorum. Ancak gerçek dünyadaki nesnelere karşılık gelen bir veri modeline sahip olmak için OO'ya ihtiyacınız yoktur. Kayıt türleri yeterlidir.
user281377

6

Bence en büyük neden X ve Windows gibi grafiksel kullanıcı arayüzlerinin başarısı oldu. Bir GUI, kendi başına bir davranışa sahip OO'nun yakından temsil edebileceği bir şey olan birkaç nesneden oluşur.

Öte yandan, metin tabanlı bir kullanıcı arabirimi (GUI'ye benzemeye çalışmayan), genellikle yordamsal bir dilde kolayca uygulanabilen bir komut yanıt desenini izler. İş kuralları ve benzeri şeyler, on yıllardır prosedürel dillerle, çok fazla sorun olmadan uygulandı ve bugün hala iş uygulamaları için birçok OO programı oldukça prosedürel; verileri tutan aptal nesneler ve iş kurallarını içeren vatansız nesneler; birincisi prosedürel bir dildeki kayıtlar, daha sonraları prosedürler olabilir.


4

OOP'u prosedür kodundan doğal bir evrim adımı olarak görüyorum:

  1. Prosedür kodu: Makineye A yapmasını söyleyin, ardından B yapmasını söyleyin.
  2. OOP: Prosedür talimatlarını arayüzleri / giriş / çıkışları tanımlayarak çok tekrar kullanılabilir parçalara paketleyin. (Uyarı: basitleştirme.)

Eminim daha geniş bir görüşe sahip biri chime olacak, ama bu sadece programcılar daha hızlı kod üretmek için izin doğal bir ilerleme gibi görünüyor: yani daha fazla kod yeniden kullanımı izin.

Bu görüşe göre, en büyük dış faktör, işlemci beygir gücü maliyetinin azalmasıydı (tipik programlar oluşturmak için geliştirici işgücü maliyetine karşı): OOP sınıflarını kullanma maliyetinin hesaplanması, geliştirici zaman tasarruflarından daha az endişe kaynağı oldu. (Bu aynı CPU gideri ile programcı giderinin aynı tutarının programlamanın diğer birçok yönünü de etkiledi.)


2

Başlangıçta zorunlu programlama vardı (eğer böyle diyebilirseniz). Ana kareye ne ve nasıl hesaplanması gerektiğini söyleyen basit talimatlar. Bu programlama dilleri, çoğu bugünün standartlarına göre egzotik olan koşulsuz sıçramalar ve diğer "yapılandırılmamış" talimatlar kullandı.

Sonra birisi programlama için yapılar geliştirdi. For, while, do while ve foreach bugün biliyoruz. Nispeten karmaşık akışlı uygulamalar kolayca yazılabildiğinden ve anlaşılabildiğinden beri büyük bir yenilikti. Böylece yapılandırılmış programlama doğdu.

Sonra burada ve orada bir sürü kodu tekrarlamanız gerektiğini söyleyen diğer bazı insanlar geldi ve kodu yeniden kullanmanın bir yolu icat edilmelidir böylece korumak için bir kabus oldu. İnsanlar yeniden kullanılabilir kod parçalarını sınırlamak için prosedürler ve işlevler geliştirdiler. Bu da kapsülleme ve tek sorumluluk ilkelerini doğurdu.

Sonra bazı akademisyenler, işlevselliğin üzerinde çalıştığı verilerle yakından eşleştirilmesi gerektiğini söyledi. Daha sonra, kodlamanın yeniden kullanımı ve polimorfizm için kalıtım kavramlarını, sınıflamanın gerçek hayatta çalıştığı mantıksal yolla eşleştirmek için eklediler. Böylece üçüncü nesil programlama dilleri ve OOP doğdu.

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.