Nesneye Yönelik Programlama: Neden “Yönelimli”?


14

Oyun programlama derecemde en çok yoldayım. Bu bir bilgisayar bilimi derecesi değildir, bu nedenle teorinin çoğu pratik portföy oluşturma ve oyun endüstrisinde görünüşte daha önemli olan JIT öğrenme olarak gördüğüm lehine kaçınılmıştır. İlk konu "Nesneye Yönelik Programlamaya Giriş" idi.

Bu ifade, farklı programlama paradigmaları hakkında bilgi edinene kadar beni rahatsız etmedi (bu listeyi https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms adresinden alıyorum ):

  • Zorunlu
  • Fonksiyonel
  • Usul
  • Yapılandırılmış
  • Olaya Dayalı
  • Nesne odaklı
  • bildiren
  • Otomat Tabanlı

Bunun kapsamlı bir liste olmadığını ve bu kavramların hepsinin eşit olmadığını ve çoğunun bile özel olmadığını anlıyorum, ancak birçoğunun neden sadece bir kelime - zorunlu olduğunu anlamıyorum; fonksiyonel; bildirimsel - ancak nesnelerle programlama hakkında konuştuğumuzda, bu nesnelerin etrafına yönlendirildiğimizi açıklığa kavuşturmak zorundayız . Sadece nesne kullanamaz mıyız ? Biz sadece olamaz sahip nesneleri? Neden gerekir yönlendirmek bizim yol gösterici yıldızı olarak, bize?

Buraya bakıldığında ( https://en.wikipedia.org/wiki/Object-oriented_programming ), hiçbir yerde "yönlendirilmiş" teriminin kendi terimi olarak kullanılması söz konusu değildir. Sadece "nesne" açıklanır.

Ayrıca, Etkinlik Odaklı'nın neden kullanıldığına dair pratik nedenleri de görebiliyorum, çünkü Etkinlik Programlama zaten bir konferans yürütürken yaptığınız bir şey ve Automata Programming, robotik bir üretim hattı kuruyormuş gibi ses çıkarıyor, bu yüzden orada ek açıklayıcı kelimelere sahip olmak yardımcı olur.

Nesne Programlamayı bir cümle olarak, programlamada nesneleri kullandığımızda ne yaptığımızı açıklamak için yeterli olmayan nedir?

Açıkçası benim tonumda "odaklı" kelimesine çok düşkün değilim. Bana bir mahkeme muhabiri olarak zamanımı hatırlatıyor, avukatın bir tür sözlü kene olarak "ile ilgili" ifadesini kullandıktan sonra avukat dinliyor. Hiçbir şey ifade etmiyordu; sadece ne söyleyeceklerini düşünmeye çalışırken havayı doldurdukları bir terimdi. Ancak, bir dil değişikliğini savunmaya çalışmıyorum, sadece neden böyle olduğunu soruyorum. Birisi neden tamamen tarihsel, körel nedenlerle bu şekilde bilindiğini biliyorsa, o zaman cevap budur. Bir dil değişimini savunarak zamanımı boşa harcamam gerekirse mühimmat olacaktır.

Bir dil veya kod parçası olmalıdır neden için yararlı bir nedeni aslında varsa Öte yandan, işaret sadece olarak, kendi araç şeridinde onları zorunda aksine, diğer tüm yönlere hariç olmak üzere, nesneler doğru araçları , gerçekten olurdu öğrenmek istiyorum. Yararlı şeyler öğrenmeyi seviyorum.


11
"Objektif" veya "Objektif" gerçekten ne anlama geldiğinin doğru izlenimini vermeyeceğini tahmin ediyorum ;-)
Doc Brown

"Nesneleştirilmiş" diye düşündüm, ama bunun yanlış hisleri de vereceğine karar verdim.
Müstehcen


1
"Nesne" nin "yönelimli" değil hata olduğunu düşünüyorum. Nesneye yönelik dediğimiz şey genellikle sınıfa yöneliktir.
Steve314

1
Herhangi Phoenix Wright hayranları sadece "NESNE !! Programlama" demek istiyorum?
Katana314

Yanıtlar:


24

Ben Okuduğunuz inanmak yol basit gramer yapısı içerisine çok fazla. Kısaca alacağımız bir nedenden ötürü farklı sıralanan paradigmalar listenize bir göz atın:

  • Zorunlu
  • Fonksiyonel
  • Usul
  • Yapılandırılmış
  • bildiren
  • Olaya Dayalı
  • Otomat Tabanlı
  • Nesne odaklı

Kelimelerin ortak noktası nedir? Hepsi sıfattır çünkü "programlama" kelimesini değiştirmeyi amaçlamaktadırlar. Dahası, "zorunlu" hariç, hepsi "doğal" sıfatlar değil, "kabul edilmiş" isimler - paradigmanın çekirdeğini gerçekten tanımlayan isimler: fonksiyon, yapı, otomatlar ve nesne.

Ve isimlerin kabul edilmesinin iki farklı yolu vardır: -al veya -ed gibi bir sonekle veya bir tire kullanarak bileşik bir kelime oluşturarak. Şimdi Doc Brown'un işaret ettiği gibi, "nesne" yi ifade etmek için kullanılabilecek ekler farklı bir anlamla sonuçlanmaktadır. Hangi kompozisyon bırakır.

Alan Kay'ın kompozit sıfat "nesne yönelimli" için "yönelimli" kullanmayı seçmesinin saf tesadüf ya da tat olduğunu belirtiyorum. "Nesne güdümlü" veya "nesne tabanlı" da olabilir ve bunlara çok fazla şey okuyabilirsiniz. "Sürükleyici" bir tür sağlıksız saplantı gibi gelmiyor mu?


1
Mükemmel nokta (sıfatları değil, sıfatları kastettiğinizi düşünmeme rağmen - bu bağlamda "programlama" bir isimdir).
JW01

@ JW01: ayy, haklısın
Michael Borgwardt

Bu aslında çok iyi bir noktadır - "yönlendirilmiş" kelimesi, "nesne programlama" ifadesine farklı bir anlam vermektedir, çünkü "nesne" kelimesi tek başına bir sıfat değildir. Aslında, "yönlendirilmiş" in diğer kelimelere göre seçilmesinin sebebi, itiraz içindi. Ayrıca, içine hiçbir şey okumuyordum, literatürde tamamen açıklanamayan ve sorgulanmayan bu "odaklı" kelimesinin varlığını vurgulamak için abartıyordum, bu da bana onun yerini kazanmak için bir şey yapıp yapmadığını merak etmemi sağladı . : P
Excrubulent

Neden nesne takıntılı seçmediğini merak ediyorum ... oh evet, bunlar sadece ne zaman duracağını bilmeyen zelotlar. ;-)
Tekilleştirici

Polonyalı bir yazar olan Jerzy Grębosz'un "Symfonia C ++" ("C ++ 'da Senfoni") adlı bir kitabı var; nesne yönelimli "olduğu için, kodun üzerinde çalıştığı nesneye (polimorfik davranış) göre" kendini yönlendirebilmesi ". Bunu sadece veri parçaları olarak sadece “nesneler” kavramının olduğu dillerden ayırır. Bunun orijinal anlamı olduğuna dair tarihsel bir kanıt yoktur, ancak olay sonrası bir açıklama olarak bile oldukça açıklayıcıdır.
BarbaraKwarc

18

fakat nesnelerle programlama hakkında konuştuğumuzda, bu nesnelerin etrafına yönlendirildiğimizi açıklığa kavuşturmak zorundayız. Sadece nesne kullanamaz mıyız? Sadece nesnelerimiz olamaz mı?

Açıkçası, tarihin bir kalıntısı. Fonksiyonel programlama gerçekten fonksiyon odaklı programlama, deklaratif programlama gerçekten beyan odaklı programlama ... sonuçta sadece fonksiyonları kullanmıyor muyuz? Sadece fonksiyonlarımız olamaz mı?

"Nesneye yönelik" dili daha iyi yuvarlar ve tarihsel olarak kökleşmiş olur.

'Yönelim' gelir çünkü programlamadan değil tasarımdan bahsediyoruz. Nesneleri kullanmamız ya da işlevleri kullanmamız ya da olayları kullanmamız, tasarım metodolojimizin her üçünü de modelleyerek yapıldığı anlamına gelmez. Tasarım metodolojisinin yönünü belirleyerek, programcılara bu tasarımı nasıl yorumlamaları ve genişletmeleri gerektiğini - modelleme odağının uygulamayı nasıl renklendirdiğini bildirmeye yardımcı olur.


Yani, "nesne yönelimli" ifadesinin gereksiz ifadelerle bir tür politika ifadesi olduğunu söylüyorsunuz, tıpkı "pro-active" temelde "active" ile aynı anlama sahip gibi, yapmak için gereksiz bir önek eklendi dinleyicinin anlamını kaçırmadığından emin ol.
Mart'ta Öfkeli 0

1
Sanırım bu konuda çiviye çarptınız: Nesne odaklı tasarım yapıyoruz ve bu yüzden diller bu tasarımı ifade etmemize izin vermek için nesne odaklı.
K.Steff

1
@Excrubulent Hayır, "yönlendirilmiş" i eklemek daha belirgin hale getirir. "Nesneye yönelik", nesneleri programlama hakkında değil, programların nesneleri anlamlı bir şekilde kullanmaları için nasıl tasarlanacağını tartıştığımız anlamına gelir. "Nesne programlama", "fonksiyon programlama" veya "beyan programlama", tasarım ilkeleri yerine özel olarak bu kavram uygulaması hakkında konuşmayı ifade eder. "İşlevsel" ve "bildirici", aynı anlamı aktarmaya çalışan ekleri olan kelimelerdir, ancak "nesnel" veya "nesnel" nesneler için pek bir anlam ifade etmez.
Ilari Kajaste

Ve Michael Borgwardt cevap verdi , kelime "odaklı" herhangi bir şekilde ziyaretini özel değildir. Aynı şekilde "güdümlü" veya "temelli" olabilir. Önemli olan nokta "nesne programlama" olamaz. (Peki laguange her zaman akıcıdır, bu yüzden olabilir , ama sadece açıklayıcı olmayacaktı.)
Ilari Kajaste

Cevapları değiştirdim çünkü Michael Borgwardt'ın cevabı aslında kelimenin anlamını ve ifadeyi nasıl değiştirdiğini açıklıyor.
Excrubulent

2

Nesnelerin paradigmanın çok önemli bir parçası olduğunu açıklamaya yardımcı olan olarak adlandırmak.

Nesne Tabanlı programlama kökleri vardır Simula aslında ALGOL artı bazı yeni nesne programlama özellikleri oldu. Ve bu tarihe uygun olarak, bugün bile birçok dilde ("saf OO dilleri" bile), içinde sadece bazı nesnelerin bulunduğu prosedürel bir program olan bir şeyi kodlamak tamamen mümkündür. Ancak bu daha deneyimli geliştiriciler tarafından kötü bir stil olarak kabul edilir.

Aslında "nesne yönelimli" bir şey yapmak "usulsel yoldan" çok farklıdır. En önemli kavram, kalıtım ve polimorfizm kullanımıdır. Sınıfların ve sanal yöntemlerin çalışma şeklini gerçekten anladığınız ve içselleştirdiğinizde , birçok durumda kod yazma şeklinizi değiştiren göz açıcı bir deneyim, gerçek bir paradigma değişimi. (Tabii ki, önce prosedürel kod yazmaya başladığınızı varsayarsak. Bu günlerde birçok öğrenci ilk dil olarak doğrudan Java veya C # 'a gidiyor ve IMO bunu yaparak OO'nun faydalarını gerçekten anlamayı kaçırıyorlar.)

Buna nesne yönelimli programlama diyoruz çünkü OO tarzında yazılmış bir program sadece nesne içermiyor; tüm programın yapısı onların etrafında ve çalışma şekline dayanmaktadır.


Bu Telastyn'lere benzer bir cevaptır, ancak bir terim olarak "nesne yönelimli programlamanın" temel olarak "nesne programlamasından" farklı olduğunu ima ettiğiniz görülmektedir. Onların nasıl farklı olabileceğini açıklayabilir misiniz? Demek istediğim, OOP'nin OP'nin de aynı işleve hizmet edeceği kadar gevşek bir terim olduğu anlaşılıyor.
Mart'ta Öfkeli 0:

2
Bugünlerde birçok öğrenci doğrudan Java veya C # 'a ilk dil olarak gidiyor ve IMO bunu yaparak OO'nun faydalarını gerçekten anlamayı kaçırıyorlar. - Aslında, C ++ ile başladım ve ilk görevimde nesneler ve işlevlerin bir karışımını kullandım, ancak işlevleri kullanmam için işaretlendi. Bu işlevlerden bazıları tamamen işlevseldi ve bir nesnedeki kapsüllemeden hiç faydalanmadı, ancak çalışmak için değişkenlere işaret eden (yani: değiştirilmiş durum bilgisi) diğerleri, yapıldıktan ve çağrıldıktan sonra çok daha kolay hale geldi bir cisimde, her iki tarafını da gördüm.
Mart'ta Öfkeli
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.