Nesneye Yönelik Modellerin “Nesneleri” için matematikte biçimsel tanım / karşı kısım


9

Bu, matematik SE forumunda sorduğum bir soru ve burada yönlendirildim. İşte soru-

Hem resmi matematikte hem de teorik bilgisayar bilimlerinde yeniyim, bu yüzden sorumun doğru çerçevelenmediğini fark ederseniz lütfen yanımda olun. Nesneye Dayalı Modelleme, gerçek dünyayı simüle ederken karmaşık etkileşimlerin tanımlanmasında çok yararlı görünmektedir. Ancak daha çok programlamada kullanılır. Matematikte de benzer bir konseptimiz olup olmadığını merak ediyordum. Programlama yaparken, "Nesneler" ve "Nesneye Yönelik Programlama" kavramlarını anlayabilir ve uygulayabiliriz. Peki, Set Teorisi açısından "Objelerin" resmi tanımı var mı? Ya da bu konuda başka herhangi bir matematiksel teori var mı?

Üç temel nesne yönelimli modelleme kavramını uygulayabilir / resmi olarak tanımlayabilir miyiz? 1. Kapsülleme 2. Kalıtım 3. Çok Biçimlilik

Sorunun çok geniş olduğunu biliyorum, ancak bu kavramları daha iyi anlayabilmem için bazı işaretçiler de sunabilirseniz gerçekten takdir edersiniz.


2
Gördüğüm gibi gerçekten iki soru var. Birincisi, nesne yönelimli kavramların formalizmini istemek. Diğeri ise matematikte nesneye yönelik kavramlar istiyor. Belki iki ayrı soru sormak daha iyi olur. İlk soruyu cevaplayan çok fazla malzeme var, ancak muhtemelen ikincisi için biraz. (Ve belki yarın soruyu cevaplamak için zaman bulacağım.)
Dave Clarke

Teşekkürler .. Bana standart veya "ders kitabı" olarak kabul edilen nesne yönelimli kavramların resmileştirilmesi için bir materyal önerebilir misiniz? İkinci soru için cevabınızı bekleyeceğim .... :)
user1260776

2
Standart kitap (birkaç yıl önceki) bir Nesneler Teorisi'dir . Daha yeni çalışmalar Featherweight Java . Ayrıca bu konularla ilgilenen Nesneye Dayalı Dillerin Temelleri adlı bir dizi atölye çalışması da bulunmaktadır .
Dave Clarke

Teşekkürler! Onları geçecek ... Ayrıca,
sorumla

Yanıtlar:


9

Cevap iki nedenden dolayı karmaşıktır.

  1. Bilgisayar Bilimlerinde farklı insanlar "nesne" terimini farklı yorumlarlar. Birincisi, bir nesnenin birlikte paketlenmiş bazı verilerden ve işlemlerden oluşmasıdır. Diğeri, bir nesnenin "devlet" e sahip olan tek şey olması, yani değiştirilebilir bir varlığın bir şeklidir .

  2. "Değişim" in ne anlama geldiği (ve sürekli olarak değiştiği için "varlık" ne anlama geldiği) ve matematiksel tanımların gerçekten değiştirilebilir varlıkları yakalayıp yakalamadığıyla ilgili derin felsefi konular vardır.

Veri + işlemler anlamında nesne : Matematikte oldukça standarttır. Herhangi bir grup teorisi ders kitabını alın. Gibi bir yerde bir tanımı olacakhg(x)=gxg-1. (Bu bir konjugasyon operatörüdür.)hgbu terminolojide bir "nesne" dir. Bazı verileri var (g) ve bir işlem xgxg-1. Ya da çifti alarak daha nesne-y yapabilirsinizg,xgxg-1 veya üçlü g,xgxg-1,xg-1xg. Bu tür "nesneleri" lambda soyutlaması olan ve tuples oluşturmanın bir yolu olan herhangi bir işlevsel programlama dilinde inşa edebilirsiniz. Abadi ve Cardelli'nin "Nesneler Teorisi" bu tür nesnelerle kapsamlı bir şekilde ilgileniyor.

İle Nesneler devlet (veya nesneler o değişim ): mu matematik böyle şeyler var mı? Ben öyle düşünmüyorum. Bir matematikçinin mesleki hayatında değil, değişen bir şey hakkında konuştuğunu görmedim. Newton eskiden yazıyordux sözde değişen bir parçacığın pozisyonu için ve x˙değişim oranı için. Matematikçiler nihayet Newton'un bahsettiği şeyin bir işlev olduğunu anladılarx(t) gerçek sayılardan bir vektör uzaya ve x˙ ilk türevi olan böyle bir işlevdi x(t) göre t. Bundan, derin düşünen birçok matematikçi değişimin gerçekten var olmadığı ve sahip olduğunuz tek şeyin zamanın işlevleri olduğu sonucuna varmıştır. Fakat Newton mekaniğinde değişen şey pozisyon değil parçacıktı . Pozisyon anlık durumudur. Hiçbir matematikçi veya fizikçi parçacığın matematiksel bir fikir olduğunu iddia etmez. Fiziksel bir şey.

Yani nesnelerle. Bunlar "fiziksel" şeylerdir ve devletler matematiksel özellikleridir. Bu konuyla ilgili güzel bir tartışma için Abelson ve Sussman'ın Bilgisayar Programlarının Yapısı ve Yorumu Bölüm 3'üne bakın . Bu MIT'de bir ders kitabı ve bunu "fiziksel" şeyleri gayet iyi anladığını düşündüğüm tüm bilim insanlarına ve mühendislere öğretiyorlar.

Parçacıkların matematiksel olmaması, onlarla matematiksel olarak baş edemeyeceğimiz anlamına gelmez. Bir matematikçiden iki parçacık sistemini modellemesini istersen, hemen iki işlevi oluşturur ve onları çağırır.x1(t) ve x2(t). Böylece, iki parçacık iki anlamsız indekse indirgenir (1 ve 2). Matematikçinin bu parçacıkların ne olduğunu bilmediğimizi ve umursamadığımızı söylemenin yolu budur. Bilmemiz gereken tek şey, konumlarının bağımsız olarak (veya ayrı olarak) gelişmesidir. Bu yüzden onları iki ayrı işlevle modelleyeceğiz.

Benzer şekilde, nesne yönelimli programları modellemenin standart matematiksel yolu, her nesneyi durum alanına bir dizin olarak ele almaktır. Tek fark, nesneler gelip gittiğinden ve sistemin yapısı dinamik olduğundan, onu her dünyanın temelde bir endeksler koleksiyonu olduğu "olası bir dünya" modeline genişletmemiz gerektiğidir. Nesnelerin tahsisi ve serbest bırakılması bir dünyadan diğerine geçmeyi içerecektir.

Yine de bir sorun var. Mekanikten farklı olarak, nesnelerimizin durumunun kapsüllenmesini istiyoruz . Ancak nesnelerin matematiksel tanımları, devletleri her yere koyar ve kapsüllemeyi tamamen yok eder. "İlişkisel parametriklik" adı verilen ve şeyleri yeniden boyutlandırmak için kullanılabilecek bir matematik hilesi vardır. Şimdi içine girmeyeceğim, bunun matematiksel bir hile olduğunu vurgulamak dışında, kapsüllemenin çok kavramsal bir açıklaması değil. Nesneleri matematikle, kapsülleme ile modellemenin ikinci bir yolu , durumları inceler ve nesne davranışını gözlemlenebilir olaylar açısından tanımlamaktır. Her iki modelin de iyi bir tartışması için, sizi Algol benzeri Dillerdeki Nesneler ve sınıflar başlıklı makaleme yönlendirebilirim .


[Not eklendi:]

Nesnelerin matematiksel temellerinin güzel bir analizi William Cook'un " Veri Soyutlamasını Anlama, Yeniden Gözden Geçirme " makalesinde bulunabilir .


2
Buradaki birinin cevap verebileceğini biliyordum ...
Andrej Bauer

Teşekkürler Uday, zaman ayırdığınız için ve ayrıntılı cevap. Bu soruyu sorduğumda, sadece "veri + işlemleri" anlamında düşünüyordum ve grup teorisinin "NESNE" yi "veri + işlemleri" olarak temsil edebileceği hiç aklıma gelmedi. Ayrıca, referans verdiğiniz bağlantıları da inceleyeceğim.
user1260776

@AndrejBauer. Evet, muhtemelen denize girdim. OP muhtemelen bir disiplinin aksine "matematiği" biçimselleştirme sözcüğü olarak kullanıyordu.
Uday Reddy

@Uday, doğru bir şekilde kelime öbeği sormamış olabilirim, ama "matematik" demek istediğimde, açıkça resmi matematik demek istedim. Benim düşüncem matematiğin temelini oluşturan '' set teorisi '', set teorisi açısından OO Modelleme nesnelerini nasıl 'açıklamak' veya 'türetmek' idi. birinci dereceden mantık) ... "Cevabınızı tam olarak anlamama rağmen, söylediklerinizin" anlamını "elde edebiliyorum ve sizi temin ederim, beklediğim cevap bu. (Fikirlerim r tamamen organize değil, plz beni affet ben hala acemi :))
user1260776

2
@ user1260776. Anlıyorum. Ama benim açımdan "resmi" ve "matematik" farklı fikirler. Kavramları matematiğe indirmeden (veya matematikten türetmeden) resmileştirebilirsiniz. Newton mekaniği resmileştirdi, ancak "parçacıkları" "setlere" indirmeye zahmet etmedi. Ben şahsen Newton'un liderliğini takip etmekten ve setlere indirgemediğim şeyleri kabul etmekten oldukça mutluyum. Ancak, sanırım ne zaman azaltılacağını ve ne zaman azaltılmayacağını bilmeliyiz. Bir Fizikçi olarak eğitildim, bunu oldukça kolay buluyorum. Diğer birçok Bilgisayar Bilimcisi için bu o kadar kolay olmayabilir.
Uday Reddy

0

abelson & sussman'ın şemaya (lisp varyantı) dayanarak eski klasik kitaptaki "bilgisayar programlarının yapısı ve yorumlanması" [1] nesnelerinin oldukça iyi bir teorik açıklaması olduğunu düşünün. şimdi ücretsiz çevrimiçi! bu, yerel durumu depolamak için bir mekanizmanız varsa, nesne yönlendirme kavramının lambda hesabı (~ aka Lisp) içine nasıl gömülebileceğini gösterir. anladığım kadarıyla, bu birçok yıl için bir std MIT ders kitabı oldu. bunun subj üzerinde en iyi ref olduğunu söylememek; eminim bu pt daha iyi olanlar vardır.

Bu duyduğum her yerde tamamen resmileştiğini sanmıyorum ama gevşek konuşan nesneler temelde kod + verilerden oluşuyor

  • yöntemler (parametrelerle)
  • durum, yani örnek değişkenler

bazı kapsüllenmiş biçimlerde. tartışmasız kalıtım gibi diğer yönler temel değildir. abelson & sussman'da belirtildiği gibi "sözdizimsel şeker" dediklerini.

[1] abelson & sussman tarafından bilgisayar programlarının yapısı ve yorumu


3
Tabii ki nesne yönelimli programlama anlamındaki nesneler resmileştirildi. Abadi & Cardelli, Castanga ve Kim Bruce'un konuya adanmış kitapları var. FOOL serisinde nesne yönelimli programlamanın temellerine adanmış 10 yıllık çalıştaylar yapıldı. ECOOP ve OOPSLA konferanslarında düzenli olarak OO'nun temelleri üzerine yazılar vardı. Gerçekten de, OO'nun anlambilimi üzerine ilk makale yaklaşık 20 yaşındadır.
Dave Clarke

@vzn, cevap için teşekkürler. Önerdiğiniz kitapları inceleyeceğim ...
user1260776

DC-- Bunu kötü ifade ettim. daha doğru bir şekilde, tam olarak bir "nesne" yi neyin oluşturduğuna veya OOP'nin temel / temel bileşenlerinin ne olduğuna ilişkin resmi tanımların literatürde önemli ölçüde değişme eğiliminde olduğunu söylemek güvenli olduğunu düşünün. tanımlar muhtemelen zaman içinde önemli ölçüde genişlemiştir. örneğin kalıtımın daha sonra eklendiğinden şüpheleniyorum ve asıl fikir en çok kapsüllenmiş bir biçimde sadece kod + verilerdi.
vzn

Söyleyebileceğim kadar temel olarak kabul edilmeyen bir OOP özelliğinin başka bir örneği, örneğin C ++ 'da görülen ancak java'da arabirimler lehine kasıtlı olarak kaçınılan çoklu miras. vb
vzn
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.