Nasıl prosedürel programlama ve nesne yönelimli programlama içine alışkanlığı çıkmak mı?

19 Cevap php

Ben biraz bana tüm bu yıllar prosedürel programlama kötü bir alışkanlık sonra ben ne düşünün patlak yardımcı olacak bazı ipuçları elde umuyorum. I sonunda usul dönmeden sonuna kadar OOP'deki bir proje yapmak için teşebbüs her zaman. (Ben onun hakkında iyi her şeyi duydum düşünmek bile!) OOP ile tamamen ikna değilim sanırım.

Yani ben sık sık bu tür kullanıcı kimlik / yönetimi olarak yürütmek genel programlama görevleri herhangi bir iyi pratik örnekler sanırım, veri ayrıştırma, CMS / Blog / eComs tür i sık sık yapmak şeyler vardır, ama ben almak mümkün olmamıştır benim i inşa sistemlerinin çalışması ve iyi çalışması eğilimi, özellikle uzak usul gelen OOP ve bunları yapmak için nasıl etrafında baş.

Benim gelişimine bir yağış olarak görebilirsiniz bir şey, ben sık sık benim kodu yeniden yapmak olduğunu, ve genellikle daha yeniden yazar ve iyileştirme ihtiyacı, ama bazen benim yazılım geliştirme doğal bir evrim olarak düşünün.

Oysa ben değiştirmek istiyorum! arkadaşım programcılar için, ben bu kötü alışkanlığının patlak konusunda herhangi bir ipucu :) yardım?

19 Cevap

Bunu yapmak için iyi nedenler ya da motivasyon bulamıyorum zaman nesne yönelimli programlama kullanarak nokta nedir?

Sen nesneler gibi fikirleri gebe ve işlemek için ihtiyaç tarafından motive edilmelidir. Orada ihtiyaç kavramları algı olmak hissediyorum insanlar, akış veya fonksiyonları yerine nesnelerdir ve bunlar daha sonra kavramları, fikirleri, ya da fonksiyonel akışına doğru yönlendirilmiş programlama doğru motive.

13 yıl önce, ben gerekli fikirler vardı çünkü c den c + + açık ama c kolayca gerçekleştirmek olmaz. Kısacası, benim ihtiyaç nesnelere yönelik benim programlama motive.

The object-oriented mind-set

İlk olarak, bayt, karakter, tamsayı ve ondalıklı sayı var.

Then your programme starts being cluttered with all kinds of variables, local and static. Then you decide to group them into structs because you figured that all the variables which are commonly passed around.

Conglomeration of data

Yazıcının bilgisi Yazıcı yapı içine kapalı tüm değişkenleri olmalıdır şöyle:

{id, name, location,
 impactType(laser|inkjet|ribbon),
  manufacturer, networkAddr},
  etc.

Yazıcı bilgi over fonksiyonu sonra işlevini çağırdığınızda Yani şimdi, bağımsız değişkenler uzun bir liste veya çapraz konuşma büyük olanakları ile statik değişkenler geniş bir koleksiyona sahip işlevleri yok.

Incorporation of information

Ancak veri yığını yeterince iyi değil. Ben hala verileri işlemek için fonksiyonları bir demet bağımlı olmak zorunda. Bu nedenle, ben akıllı bir fikrim vardı ya Yazıcı yapı içine işlev işaretçileri dahil.

{id, name, location,
 impactType(laser|inkjet|ribbon),
 manufacturer, networkAddr,
 *print(struct printer),
 *clean(struct printer)
}

Veri / verileri algıladıkları tedavi konusunda süreçleri içeriyorsa veriler bilgi içine mezunları.

Quantization of information

Şimdi lazer, şerit ve mürekkep püskürtmeli yazıcılar tüm bilgilerin aynı set yok ama onlar tüm bilgi paydalar (LCD) bir çoğu ortak bir dizi var:

Her yazıcı için ortak Bilgisi: id, isim, yer, vb

Bilgi sadece şerit yazıcılarda bulunan: usedCycles, şerit (kumaş | selofan), colourBands, vb

Bilgi inkjet sadece bulundu: mürekkep kartuşları, vb

Bilgi lazerler sadece bulundu: ...

Bana ve birçok nesne yönelimli kuşaklar için, biz bir ortak bilgi kapsülleme içine tüm ortak bilgi nicemlemek, yerine her bir yazıcı türü için ayrı bir yapı / kapsüllemeyi tanımlamak için tercih.

Sonra, biz bütün bu yazıcılar baskı ya da aynı şekilde temizlenir, çünkü her yazıcı türü için tüm işleve başvuran yönetecek bir çerçeve kullanmayı tercih.

Bu yüzden uzak nesnelerden odaklı sizin tercihiniz / motivasyon nesneleri kullanmak istemiyorsanız, programlama hayatı daha kolay olduğunu söylüyor? Tüm sağlayan yapısal karmaşıklığı kendinizi yönetmeyi tercih olduğunu. Bunu bu şekilde hissetmek için yeterli yazılım yazdım olmamalıdır.

The necessity of laziness

Bazı insanlar demek - zorunluluk yaratıcılık anasıdır. (Yanı sıra, para Aşk kötülüğün köküdür).

Ama benim ve benim kohortlarda - zorunluluk karşısında tembellik yaratıcılık anne. (Yanı sıra para olmaması kötülüğün diğer üstüdür).

Bu nedenle, kısa yol ilkesi hayata tekme olurdu böylece programlama doğru tembel bir tutum benimsemeye teşvik ve bulacaksınız ama nesneler ile programlama doğru kendinizi yönlendirilmesi yönünde mezun daha başka seçeneğim yok.

Adım 1. Iyi Design Patterns kitap okuyun. http://www.oodesign.com/

Adım 2. Zaten biliyor ve bir OO bakış açısıyla yeniden işleme şey seç. Bu Kod Dojo yaklaşımdır. Zaten anlamak bir sorun almak ve nesne sınıfları tanımlar.

Bunu yaptım - ve ne yaptığını yazdım.

Bkz http://homepage.mac.com/s_lott/books/oodesign.html#book-oodesign

Sen OO tasarım ve kod asmak için egzersizler aynı dizi yapabilirsiniz.

OO zihniyet tasarım desenleri çok daha temel düzeyde yalan ilkelerine dayanmaktadır. Tasarım desenleri bir şekilde moda bu gün (ve bir süre için olmuştur), ve onlar are yararlıdır, ama onlar size {[(1)] daha temel şeyler üzerine koyabilirsiniz sadece bir tabaka vardır } düzgün OO yapmak istiyorsanız. Başka bir deyişle: Eğer tasarım desenleri mükemmel olmadan OO yapabilirsiniz. Aslında, çoğumuz ifade "tasarım desenleri" bile icat edildi önce iyi Ö.Ö. yaptı.

Şimdi, sen olmadan yapamam şeyler var. Ben temellerine başlamanızı öneririz. Okumak ve anlamak "Object-Oriented Software Construction" 2nd edition by Bertrand Meyer. Bu genişlik ve derinlik hem de, muhtemelen yaklaşık OO programlama üzerine en iyi kitap. Yani ilgileniyorsanız olduğunu programming.

İlk olarak, yeni bir şey öğrenmek için adımlar alarak tebrikler! Geliştiriciler teknoloji ile gelişmeye değil karar nefret ediyorum.

Bildiğim kadarıyla OOP prosedürel programlama hareketli gibi, ben yapabileceğiniz tek şey, varolan bir uygulamayı almak (diğerleri de söylediğim gibi) ve hatta bir metin editörü açmadan önce, oturup nasıl her yönüyle düşünmek olduğunu söyleyebilirim Uygulama dönüştürülür. Ben daha OO programlama yarısından fazlası ilk kafanızda kavramsal nesnelerin tanımlanması olduğunu bulduk.

Yine, tasarım desenleri herkesin önerileri ile kabul edecektir. Bu bir kavramak kolay bir olabilir gibi Özellikle, MVC (Model-View-Controller) kalıbı içine bakmak istiyorum. Zaten kod yazdım, böylece mevcut uygulamalar bakmak ve M, V veya C kategoride her parçası koyarak başlamak gerekir.

İyi şanslar ve eğlenin!

Nesne yönelimli bir şekilde programlama hakkında bilgi nerede hakkında epeyce cevaplar var zaten. Nitekim, ben soru yöntemine yeni birisi için geliştirme yoluyla "sopa" ile ilgili daha fazla olduğunu düşünüyorum ancak temel kavramları tanımlamak olacaktır orada çok büyük kitap vardır.

Nesne yönelimli programlama, bir yeni gelen kapsülleme gibi yolda sizi koruyacaktır ana bir çok kavramları. Benim sınıf kendisi dikkat çekmek için nasıl biliyor mu? Benim sınıf davranış var mı? O, o zaman bir sınıf yoksa yoksa, sen bir yapıya sahip ve muhtemelen procedures (o söylenir gibi, "sen geri olan kendi durumunu değiştirmek için bir sürü yazı olacak ) "Java C yazılı. Benim sınıf yalnızca kendi kullanımı için gerekli olan kamuya yöntemleri açığa çıkarıyor mu? Bu sorular korkunç üzerine özenli ama sınıfları tasarlarken belki de bu düşünce deneyi dikkate olmayabilir: uygulamanızın sınıfların her biri geliştirilen ve bakımı internet üzerinde farklı bir geliştirici tarafından ve sınıfları da birbirleri ile fazla etkileşim vardı olmak vardı ne olur internet. Her geliştirici bu nedenle yazma ve single responsibility principle yapışır sürdürmek ve olan sınıf onlar ne başkasının kodu olmalıdır korumak olmadığını mutlu olacağını fikirde misiniz?

Sınıf arayüzlerinin tasarımı konusunda, ilk sınıfları kullanan tüm kod yazma düşünün. Henüz metal gerçekleşmesi için ne dert etmeyin. İlk bit-twiddling uygulama detay yazmadan önce class relationships açısından tüm programı saplama gerekir. Eğer bit twiddling veya değişken kamu yapmadan bunu yapamıyorsanız, o zaman geri sınıf ilişki diyagram gidin ve bir soyutlama eksik olmadığını görmek için zamanı gelmiştir. Başka bir şekilde ifade, senden önce use kod write kod. Bunu ilk olarak yapmanız, ve daha önce hiç yapmadım eğer kodu ve arayüzleri söndürmeden nasıl temiz sürpriz olabilir.

Tasarım desenleri kesinlikle öğrenmek için iyi, bazıları son derece güçlü olmasına karşın tasarım kalıpları genellikle sadece dilde zayıflıkları maruz kalan bazı iddia (ve ben de aynı fikirdeyim) gibi, genellikle içsel nesne yönelimli değildir ve. Bir dilin tasarım desenleri başka temel kurucu ilkeleri olması. Başlarken Yani, bazı ilişki bir köprü ya da bir cephe için iyi bir aday olup olmadığı üzerinde asılı alamadım; Bu nesne yönelimli düşünce için, bu belirli bir dilin yapıları göze şeylerle ilişkili özgü değildir.

Ben öncelikle biraz mevcut, terbiyeli, kanıtlanmış nesne yönelimli kod (örneğin Qt kaynak kodu) gezdirmek için yardımcı olur böylece "nasıl yapıldığını" için bir fikir alabilirsiniz düşünüyorum. Bundan sonra, bir kitaptan öğrenme ya da kendi çerçevesini oluştururken çok daha etkili olacaktır.

Bu, kendinize söylemek size anlar verir genel olarak, gerçekten, hakkında okuma ve bunları uygulamak önce bağlamında şeyleri görmek için yardımcı olur "onlar niye Ah, o kadar!" En azından bu benim için nasıl çalıştığını bulunuyor.

OO zor kısmı şeyler bir nesneye araya koymak gerekir hangi. Zaten kaynak kodu evrimini belirtildiği gibi, burada bir OO tasarım doğru kaynak kodunu gelişmeye nasıl basit bir kılavuz var:

"Put stuff together that changes together."

Kodun iki adet benzer değişim hızları varsa, onlar aynı nesneye konulmalıdır bir ipucu. Değişim hızları farklı olduğunda, farklı nesneler yerleştirerek düşünün.

Bu aynı zamanda "Değişim Hızı" olarak bilinir.

O kılavuz takip ederseniz sizin kod doğal olarak iyi bir OO tasarım doğru gelişecektir. Neden?

Fragments of code often have similar change velocities if they access a common representation. Every time the representation changes, all the pieces of code that use it must change at once. This is part of the reason we use objects as modules to encapsulate representation. Separating interface from implementation makes sense under this guideline too - the implementation changing more often and thus having a higher change velocity.

If a class has a stable part and an unstable part, that's a difference in change velocity that suggests moving the stable part to a (possibly abstract) base class.

Similarly, if a class has two parts which change equally often but at different times or in different directions (that is to say, for different reasons), then that again suggests refactoring the class.

Sometimes replace "class" with "method". For example, if one line of a method is likely to change more often than the rest - perhaps it is the line which creates a new object instance and contains the name of its class - consider moving it to its own routine. Then subclasses can easily effect their change by overriding it.

I on C2 wiki many years ago Bu kavram geldi, ama nadiren o zamandan beri kullanılan gördüm. Ben çok yararlı buluyorum. Bu nesne yönelimli tasarım bazı önemli yatan motivasyon ifade eder. Tabii ki, bu nedenle kör edici açıktır.

These are changes of the program. There is another sense of change velocity - you don't want instance variables changing at different rate, or rather that is a sign of potential problems. For example, in a graphics editor you shouldn't keep the figures and the handles in the same collection, because the figures change once a minute or once an hour and the handles change once a second or once a minute.

In a somewhat larger view, you want a system to be able to change fast enough to keep up with the changes in the business.

PS:. the other principle that you should follow is "Law of Demeter", that is, an object should only talk to its friends. Friends are: yourself, instance variables, parameters, locals, and members of friendly collections - but not globallerinin ve statik değişkenler

Sen OO tasarım CRC (Sınıf / Sorumluluk / İşbirliği) kart yaklaşımı kullanmayı düşünebilirsiniz. Bu çok korkunç bir şey - senin nesneler ne olması gerektiğini çözmek için sadece bir yol, ve nesne düşüncelerinizi açıklığa kavuşturmak amacıyla dosya kartların bir demet şeyler yazarak hangi görevleri sorumlu olması gereken.

Başlangıçta OO düşünce için bir öğretim aracı olarak tasarlanmış, ve sizin için işe yarayabilecek. Orijinal kağıt almaktadır: http://c2.com/doc/oopsla89/paper.html

Bir afiş OO alışkanlıkları sizi zorlamak için Smalltalk'daki önerilen programlama üzerinde ve iyi bir öneri bir ölçüde - Smalltalk kesinlikle bana iyi bir şey yaptık, ama

a) Yeni bir dil öğrenmek için boş zaman olmayabilir. Bunu yaparsanız, harika.

b) Smalltalk kullanarak, OO programlama üniversite ders öğretmen için kullanılan ve öğrenciye "Sen herhangi bir dilde FORTRAN yazabilirsiniz" nasıl o eski şaka kanıtlayan mükemmel bir iş yaptı.

Sonunda: Ben karmaşık sınıf hiyerarşileri oluşturma, bir çok sınıflandırma izlenimi var (kitaplardan) OO hakkında öğrenme zaman. Ben OO programcıları ile çalışmaya başladığımda ben o kadar sık ​​düşündüğüm gibi olmadı gerçekleştirdi. Ben onlar öğrenme olduğunuzda herkes bu hatayı yapar düşünüyorum.

Iyi kod yazmak için tek yolu daha fazla kod yazmak için. Eğer prosedür uygulanan bir projeyi almak ve (her ikisi de destekleyen bir dilde çalışıyoruz varsayarak) OOP dönüştürmek. Muhtemelen bir kırılgan, sıkı birleştiğinde çözüm etrafında ilk kez birlikte bitireceğiz, ama o ok. Kötü OOP uygulama almak ve daha iyi bir şey haline üstlenmeden başlar. Sonunda, ne işleri anlamaya ve ne değildir olacak.

Eğer bir sonraki adımı atmaya hazır olduğunuzda, bir Design Patterns kitap almak ve OOP tasarım terminoloji bazı öğrenirler. Bu kesinlikle gerekli değil, ama size ortak sorunlar ve çözümleri bazı daha iyi kavramak verecektir.

Kapsamı, devlet ... pratikte sadece tasarım desenleri örnekleri okuyarak birçok terim ayıklamak mümkün olurdu: Ben örneğin prosedürel programlama, (Aşağıda bazı kodlardan, dikkat) ile olumsuz yanlarını tüm araştırma kendinizi ikna gerektiğini düşünüyorum (okuyun: birlikte nesneleri kullanarak yaygın örnekler.)

Eğer inanmıyorum şey öğrenme içine kendinizi vurgulayarak her yerde almazsınız. Daha önceki çalışmaları gerçekten kritik başlatın ve kopyalanan kodu ve küresel kapsamı kullanarak önlemek için refactor, ve kendinizi daha fazla isteyen bulacaksınız.

Benim için OOP ah-ha an ben koduna baktım ve ben bir üs sınıfa ortak şeyler Refactor olabilir fark ilk kez oldu. Siz açıkça kodu ve yeniden kullanım yolunuzu biliyorum, ama sınıflar değil prosedürler etrafında düşünmek gerekir. Kullanıcı kimlik doğrulaması ile size bir kullanıcı adı ve şifreye sahip olacak açık, şimdi onlar taban sınıfa gitmek, ama siz de bir tokenId ihtiyacınız varsa, mevcut oturum açma taban sınıfı yeniden kullanmak ne, ve bu yeni bir alt sınıf oluşturmak yeni davranışları ile, tüm mevcut kod değişikliği olmadan çalışır.

Bu sizin için nasıl çalıştığını görmek.

Peki, ilk tasarım desenleri off desen programlamanın en kötü şey hakkında.

Bu şeyler sadece büyük bir set bulunuyor. Bu OOP ile ilgisi yok ve böyle tek olarak çoğu sürekli olarak tüm yanlış nedenlerle (yani başlatma) için kullanılır. Eğer onlar hakkında söylüyorum yani kullanmak zorunda Bunlardan bazıları, anlamsız diğerleri ters vardır, ve geri kalanı sadece özel bir durum şeylerdir. Eğer bir şey, bu şekilde öğrenmek için çalışırsanız her şey onlar (nadiren doğrudur) sonsuz genericity gerekli, çünkü çok özel bir sorun için geldi bazı tuhaf doodad biri gibi ya da bakmaya başlar. Insanlar sebepsiz bir milyon iterators ve şablonları kullanarak sizi con ve işler on kat daha karmaşık hale izin vermeyin.

Gerçekten OOP kitlesel overcomplicated alır basit bir konudur. Ne yazık ki C + + bu konularda bir sürü var ama gerçekten basit bir sanal yöntemleri önemli nelerdir. Kadar bir java arayüz nesne gibi kullanılan saf sanal taban sınıflar burada en kullanışlı ama aynı zamanda sadece düz sanal yöntemlerdir ve kullanışlı gelecektir.

Çoğunlukla solmuş oldu. Ayrıca her soruna iyi bir aday değildir. Veritabanı ve gui şeyler yaparsanız o kadar iyi kendisi verir. Sistem araçları yaparsanız genellikle kadar yararlı değildir.

Ben gerçekten benim için OOP faydalarını katılaşmaya yardımcı olmuştur şeylerden biri (örneğin {[) (0]} gibi) bir alay nesne çerçevesi birim testleri yazmak olmuştur bulundu. Eğer bu şekilde geliştirmeye başladığınızda, sınıflar arayüzleri arkasındaki modüller yalıtmak nasıl görmek ve aynı zamanda daha kolay test için izin verebilirsiniz.

Akılda tutulması gereken bir şey, insanların ilk OOP öğrenme zaman, genellikle miras üzerinde bir vurgu var olmasıdır. Kalıtım onun yeri vardır, ancak kolayca gereksiz yere bir araçtır. Kompozisyon veya basit bir arayüz uygulanması genellikle şeyler yapmanın daha iyi yolları vardır. Eğer bir polimorfizm açısından biraz mantıklı miras ağaçlar yapmak miras yoluyla kodu yeniden çalışırken şimdiye kadar gitmeyin. Ikamesi ilkesi, subclassing kodu ile yeniden ki gerçektir, kalıtım / arabirim uygulaması güçlü değil ne yapar.

Büyük bir adım, bir cepten çerçeve başlangıç ​​olacaktır, yine çerçevesinde usul kodu yazabilirsiniz ama zamanla sizin kodlama alışkanlıkları ve rafine edebilirsiniz nesnelerine dönüştürme işlevi başlar.

Ayrıca desen ve okuma hakkında veri modelleme bir OOP tarzda mantığı kod hakkında daha fazla fikir verecektir.

Ben programlama soyutlama eğitmek için öğrenme çok yoğun bir yol tanımlanmış bir işlevselliğe sahip bir OOP kütüphane oluşturmak için, ve sonra aynı anda bu kitaplığa üzerine inşa ediyoruz benzer ama yine de farklı gereksinimleri olan iki projeyi uygulamak olduğunu bulduk.

Bu çok zaman alıcı olduğunu ve (S.Lott diğer cevap bazı büyük bağlantıları vardır) ilk OOP temellerini öğrenmiş olması gerekir. Sürekli üstlenmeden ve bir sürü "Doh!" anlar kural vardır; ama bu ben yaptım her şeyi projelerden birinin uygulanması hemen göze çarpar çünkü modüler programlama öğrenmek için harika bir yol buldu.

Basitçe uygulama. OOP hakkında her şeyi okudum ve something OOP hakkında bilmek ve dil PHP uygulanan OOP ilkeleri biliyorum ... o zaman sadece, pratik uygulama ve biraz daha pratik.

Şimdi, çivi gibi çekiç ve her şey gibi OOP inceleyen gitmez, ama bir projede en az bir sınıf dahil çalışın. Başka bir proje vb yeniden kullanabilirsiniz eğer bakın.

Ben ilk teorisini öğrenmek için önemli olduğunu düşünüyorum. Yani bir kitap okumak iyi bir başlangıç ​​olacaktır.

  1. Ben OOP mekaniği tamamen keyfi gibi görünüyor ve tasarım desenleri üzerine bir kitap okudum ve "neden" bunu anlamak kadar hiçbir mantıklı inanıyoruz. Ben Head First Design Patterns öneririz. Ben bu kitabı aldım ve aslında için neyin iyi olduğunu gördüm kadar OOP gülünç ve tamamen yararsız olduğunu düşündüm.

  2. Eğer işlev işaretçileri anlamak OO çok daha mantıklı ve dolaylı işlev çağrıları ve geç bağlama ile ilgilidir nasıl. C işlev işaretçileri ile Çal etrafında, C + +, ya da bir süre için D ve onlar için ne konum için bir fikir almak ve nasıl çalışır. OO polimorfizmi / sanal işlev bölümü bu üstüne soyutlama sadece bir tabakasıdır.

  3. Usul, bazı işler için doğru araçtır. Yanlış gibi hareket etmeyin. IMHO üç büyük paradigmalar (prosedürel, OO, fonksiyonel) even at a fine-grained level, within a single module değerlidir. Ben tercih eğilimindedir:

Benim sorunum basit (ya da ben zaten şimdi basit düşünebilirsiniz subproblem sahip fonksiyonel ve OO ile yeterince çarpanlarına ettik) ve ben engel soyutlama bir sürü olmadan en basit çözümü istediğinizde Usul iyidir.

Benim sorunum daha karmaşık olduğunu ve sorunun etki bağlamında mantıklı devletin çok fazla olduğunda nesne yönelimli iyidir. Bu durumlarda devletin varlığı bir uygulama ayrıntı değil, tam bir temsilidir uzakta soyut tercih biridir.

Benim sorunum karmaşık ama sorun etki seviyesinde mantıklı hiçbir devlet olduğunda işlevsel iyidir. Sorun etki açısından bakıldığında, devletin varlığı bir uygulama ayrıntı.

Yapmak değil.

Birincisi, yazma öğrenmek. İkinci olarak, kullanıcı deneyimi ve etkileşimi tasarım öğrenmek. Üçüncü olarak, iş analizi öğrenirler. Dördüncü, rol modelleme öğrenmek.

Şimdi nesnelerin ne olduğunu biliyoruz, sen nesneleri kodunda bulunan olmadığını görmek için gelecek. Onlar zamanında bulunur; makine ve kullanıcının aklında arasındaki boşlukta. Bu nesne yönelim gerçekten anlamı budur. Ne yazık ki son akademi mühendislik kavramının içine bükülmüş. Hiçbir şey işareti kapalı uzak olabilir. Onlar taklit olabilir gibi deneyin, sonuç bok. Neden? Kimlik decompositional analizi: sektöründe bugün bildiği gibi "OOP" paradigma bir temelde kusurlu fikri üzerine kurulu. Bu nasıl kusurludur? Kendi içinde ve kimlik anlamsız olduğu için. Bu geçersizdir. Matematiksel anlamda, bir felsefi anlamda. Bu bir insan algıladığı ve dünya ile nasıl etkileşime değildir.

Canon: Alan Kay, Trygve Reenskaug, James (Jim) Coplien'in

Nasıl ben senin konumunda olsaydı. :)