OOP'un arkasında bir teori / soyutlama var mı?


13

Fonksiyonel programlama, yedek teori olarak çok zarif Lambda Calculus ve varyantlarına sahiptir. OOP için böyle bir şey var mı? Nesneye yönelik model için soyutlama nedir?


5
Yükler ve yükler. Google'ı denediniz mi? Örneğin, 1993'ten beri çalışan Nesne Odaklı Dillerin Temelleri'ne adanan FOOL adında bir atölye serisi var. Bu sadece yüzeyi çiziyor.
Dave Clarke

@DaveClarke. Tam olarak aynı fikirde değilim. Lambda hesabı çok hassas bir şekilde fonksiyonel programlama için bir temeldir. Örneğin, Haskell raporu, tüm Haskell dilinin, yazılan lambda hesabına eşdeğer bir çekirdek dil için yalnızca sözdizimsel şeker olarak düşünülebileceğini söylüyor. Matematik açısından benzer bir iddiada bulunan herhangi bir nesne yönelimli dil bilmiyorum. Yani, "yükler" olduğu konusunda haklısınız. Ama bunların hiçbiri doğru değil.
Uday Reddy

@UdayReddy: Bu belki de nesneye yönelik dilin zenginliğinden kaynaklanmaktadır.
Dave Clarke

1
@DaveClarke Bir konunun zenginliği, (1) iyi bir terim olduğu anlamına gelebilir, (2) bir fikir birliğinin oluşturulması için konuyu gerçekten anlamıyoruz, (3) hemen hemen dik olan birkaç konuyu karıştırıyoruz . OO programlamasıyla ilgili (son) literatürü yakından takip etmeme rağmen, her zaman bunun hakkında çok açık bir şekilde davranmadan mixxing sorunları olduğu hissine kapıldım (elbette bu teorik çalışmalardan çok diller için geçerlidir). Bu konular arasında yazma, soyutlama, durum bilgisi, paralellik, kodun yeniden kullanımı yer alır. Bir (bir) teorinin tüm varyantları açıklaması pek olası değildir.
babou

Yanıtlar:


15

Dört ana yaklaşım vardır, ancak bunlar sadece mevcut olanın yüzeyini çizer:

  • lambdas ve kayıtlarla: fikir, nesneleri, sınıfları ve yöntemleri daha geleneksel yapılar açısından kodlamaktır. Benjamin Pierce'ın 90'ların ortasındaki çalışmaları bu yaklaşımı temsil ediyor.
  • Abadi ve Cardelli'nin nesne hesabı (bkz. Abadi ve Cardelli'nin Bir Nesneler Teorisi kitabı : ana soyutlama, yöntemlerin bir kaydıdır ve yaklaşım, nesne yönelimli programlamanın prototip tabanlı gerçekleştirilmesine daha yakındır, ancak sınıflar ve kalıtım kodlanabilir daha ilkel unsurların terimleri.
  • Castagna'nın multimethod hesabı (bkz. Castagna'nın Nesneye Yönelik Birleştirilmiş Bir Programlama kitabı ): Yaklaşımı çok metriktir, anahtar soyutlamadır.
  • Sınıf temelli hesaplar (Kim Bruce'un Nesne Tabanlı Dillerin Temelleri: Türler ve Anlambilim veya Tüy Siklet Java ) kitabında olduğu gibi : bu yaklaşımlar sınıf tabanlı programlamanın özünü yakalamayı ve sınıflara ve kalıtıma odaklanmayı amaçlamaktadır.

12

Nesne modeli çekirdeği ve küme teorisi arasındaki bağlantı aşağıdaki belgelerde açıklanmıştır:

Belgeler, nesneler arasındaki örnek ve miras ilişkilerinin yapısını sunar. Böyle bir yapı, OOP'nin mümkün olan en yüksek soyutlaması olarak kabul edilebilir. Yapının belirli programlama dillerine (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript) ve ayrıca ontoloji dillerine (RDF Şeması ve OWL 2 Full) nasıl uygulandığı gösterilmiştir.

Belgelerde, sınıflar nesne şeklindedir , böylece çekirdek yapı tek sıralıdır. Ana formda, yapı (O, ϵ , ≤, .ec) olarak ifade edilebilir ;

  • O bir nesneler kümesidir ,
  • ε olan (nesne) üyelik ilişkisi, bir arıtma örneğe ait ilişkisi,
  • kalıtım ilişkisi ve
  • .ec , seçkin, muhtemelen boş bir re alt ilişkisi olan güç sınıfı haritasıdır .

Ruby nesne modeline göre örnek bir çekirdek yapı aşağıdaki diyagramda gösterilmiştir. Bir mavi renkli - Yeşil bağlantılar dönüşlü geçişli azalma miras ilişkisi, mavi bağlantılar "yutulma azaltılması" üyelik ilişkisi show x en kaba puan x . Powerclass haritası .ec yatay mavi bağlantılar ile oluşturulur. Bu haritanın görüntüsündeki nesneler güç sınıflarıdır (gri renkte). Ruby'de bunlara eigenclasses veya singleton sınıfları denir (ikinci terim oldukça kullanılmamaktadır). S , u ve v (pembe renkte) nesneler terminaldir, kalan nesneler miras kökü r'nin torunlarıdır .

  r = BasicObject; c = Class; A = c.new(r); B = c.new(A); s = A.new; u = B.new; v = B.new; class << s; end; class << v; end

Yukarıdaki tüm dillerin nesne modelinin çekirdek kısımları, birkaç ek bileşen olmadan veya sadece birkaç bileşen olmadan yapının uzmanlık alanları olarak görülebilir. Teorik bakış açısından, ek bir kurucu maddenin en önemli örneği Dylan tarafından sunulan tekli haritadır ( .ɛϲ ). Bu, Dylan'ı (yukarıda belirtilenlerden) tek programlama dilidir (symbol) ○ (ϵ) ⊆ (ϵ), kompozisyon sembolünün left soldan sağa yorumlandığı monotonluk koşuluna (≤) ○ (ϵ) ⊆ (ϵ) tabi değildir.

Nesne modeli çekirdeği ve küme teorisi arasındaki bağlantıyı resmileştirmenin bir yolu, x.ec veya x.ɛϲ referans alınan belgelerde metaobject yapılar olarak adlandırılan yapıların ailesi (O, ≤, r, .ec, .ɛϲ) aracılığıyla düşünülebilir. arasında metaobjects olarak x . Bu yapılarda x.ec her nesne x için tanımlanır ve x.ɛϲ her sınırlı ("küçük") nesne x için tanımlanır . Yapılar aşağıdaki dokuz aksiyomlara tabidir. Aksiyomatizasyon, ilk sekiz aksiyom için oldukça basit olan tanımlayıcı bir uzantı kullanır ( Tsoyundan olmayanlardır - terminali nesnelerin dizi gösterir r , ve .ec * dönüşlü geçişli bir kapaktır .ec ) bunun son aksiyomu için çıkıyor.

  1. Kalıtım, , kısmi bir düzendir.
  2. Güç sınıfı haritası, .ec , (O, ≤) 'nin kendi içine gömülü bir sıralamasıdır .
  3. T.ec nesneleri azdır.
  4. Her güç sınıfı r'nin soyundan gelir .
  5. Set r.ec * Hiçbir bağlı düşüktür.
  6. Singleton haritası, ɛϲ injektiftir.
  7. O.ɛϲ.ec ∗' den nesneler minimumdur.
  8. Her nesne için x , y , öyle ki x.ɛς tanımlanır x.ɛς ≤ y.ec ↔ x ≤ y .
  9. Her nesne için x , x.ɛς ↔ tanımlanır xd <π .

Son aksiyomda, ϖ sabit bir sınır ordinalidir ve .d , tanımsal uzantı tarafından türetilen sıra işlevidir. Nesne üyelik ilişkisi, ϵ, (( .ɛϲ ) ∪ ( .ec )) ○ (≤) olarak elde edilir. Son aksiyoma göre, ϵ 'nin sınırlı nesne kümesine etki alanı kısıtlaması ( .ɛϲ ) ○ (≤)' ya eşittir . Atıfta bulunulan belgelerde bu ilişkiye sınırlı üyelik denir ve ∊ ile gösterilir. Önemli bir özellik olarak, bu ilişki iyi kurulmuştur. Bu beri-iyi-olmayan kurulmuştur £ değerinin aksine bulunmaktadır r ε r. Nesne teknolojisi ile küme teorisi arasındaki temel yazışmanın şu şekilde ifade edilebileceği ortaya çıktı:

∊ ↔ ∈

yani sınırlı üyelik, iyi kurulmuş kümeler arasındaki üyelik ayarlarına karşılık gelir. Özel bir durum olarak, ϖ + 1 rütbesi kısmi von Neumann evreni, tanımsal genişleme ile bir metaobject yapısıdır. Genel olarak, her soyut ( ϖ + 1 ) - üstyapı (O,) tanımlanmış olarak tam bir metaobject yapısına eşdeğerdir . Her metaobject yapısı, sadakatle von Neumann evrenine gömülebilen eksiksiz bir metaobject yapısına gömülebilir.

Temel yapı terimi metaobject yapılarının genelleştirilmesi için kullanılır. Bu genellemede, .ec ve .ɛϲ'nin (keyfi olarak) kısmi, muhtemelen boş olmasına izin verilir. Özellikle, sadece kalıtım kökü r'yi içeren minimum yapı ile sonlu bazik yapılar mümkündür . Her temel yapı, bir powerclass tamamlaması ve ardından da tekton tamamlanması ile bir metaobject yapısına genişletilebilir ve bu da temel yapıları von Neumann evrenine sadakatle gömülebilir hale getirir.


@Raphael Çok daha iyi - teşekkürler, paon!
David Richerby
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.