"Ortogonalite" nedir?


Yanıtlar:


255

Ortogonalite , "A'yı değiştirmek B'yi değiştirmez" anlamına gelen özelliktir. Ortogonal sisteme bir örnek, istasyon değiştirmenin ses seviyesini değiştirmediği ve bunun tersi olan bir radyo olabilir.

Ortogonal olmayan bir sistem, hızı değiştirmenin yönü değiştirebildiği bir helikopter gibidir.

Programlama dillerinde bu, bir talimatı yürüttüğünüzde, bu talimattan başka hiçbir şeyin olmadığı anlamına gelir (hata ayıklama için çok önemlidir).

Komut setlerine atıfta bulunmanın da belirli bir anlamı vardır .


Bu cevap bana sinyal ve sistemlerden "süperpozisyon" teorisini hatırlatıyor.
Özgür

1
Bu kelimenin farklı kullanımlarının çok net bir açıklaması: c2.com/cgi/wiki?DefinitionOfOrthogonal
Lorenzo Solano

Öyleyse işlevsel programlama tamamen ortogonal mi?
corazza

Bu ilginç bir soru @ yannbane. Teorik olarak, teorik işlevsel dile bağlı olarak doğru olabilir. Pratikte hayır, işlevsel dillerin bile durumu değiştirme yolları vardır.
C. Ross

1
Bahse girerim bu helikopter örneği "Pragmatik Programcı" dan :)
Sreekanth Karumanaghat

36

Eric S. Raymond'un "Art of UNIX programlama" dan

Dikeylik, karmaşık tasarımları bile kompakt hale getirmeye yardımcı olabilecek en önemli özelliklerden biridir. Tamamen ortogonal bir tasarımda, operasyonların yan etkileri yoktur; her eylem (ister bir API çağrısı, ister bir makro çağrısı veya bir dil işlemi olsun) diğerlerini etkilemeden yalnızca bir şeyi değiştirir. Kontrol ettiğiniz sistemin her bir özelliğini değiştirmenin tek ve tek bir yolu vardır.


16

Bir şeyi başka bir parçada görünmeyen bir etkiye sahip olmadan değiştirebildiğini düşünün.


12

Bir dizi yapınız varsa. Programcının bu yapıları serbestçe karıştırmasına izin veriyorsa, bir dilin ortogonal olduğu söylenir . Örneğin, C'de bir dizi (statik dizi) döndüremezsiniz, bu durumda C'nin ortogonal olmadığı söylenir:

int[] fun(); // you can't return a static array.
// Of course you can return a pointer, but the langauge allows passing arrays.
// So, it is unorthognal in case.

Aslında bunu kitabımda gördüm ve hala bunun ne olduğunu anlamıyorum.
AhmetB - Google

LOL Bu kitabı kullanıyorum ve bu soruyu kitabın çevrimiçi testinde gördüm. Ne tesadüf. Belki ilk bölümü de okumalıyım.
AhmetB - Google

2
Basitçe söylemek gerekirse, dönüş ve diziler bir araya getirildiğinde daha karmaşıktır: diziler arasında dönüşü, aralarındaki etkileşimi düşünmeden kullanamazsınız. İdeal olarak, dönüşün ne anlama geldiğini ve bir dizinin ne olduğunu bilirsiniz ve böylece bir diziyi döndürmenin ne işe yarayacağını bilirsiniz, ancak aslında bundan daha karmaşıktır, çünkü C diziler (ve dönüş) hakkında uygulama ayrıntılarını ortaya çıkarır.
Lee B

Bu "ortogonal" duygusu: en.wikipedia.org/wiki/Orthogonality_(programming) tarafından kapsanmaktadır , ancak çok az içeriğe sahip yeni bir sayfadır.
outis

1
Bu, programlama bağlamında ortogonalite hakkında "daha doğru" cevaptır. "Ortogonallik", bir programlama yapısının başka herhangi bir yapı ile karıştırılabileceği ve anlambiliminin hala aynı kalacağı anlamına gelir.
treecoder

11

Genel olarak, diklik, birbirleri üzerinde minimum etkiye sahip olacakları şekilde iki şey arasındaki bir ilişkidir.

Terim, iki vektörün dik açılarda kesişmeleri durumunda ortogonal olduğu matematikten gelir.

Tipik bir 2 boyutlu kartezyen uzay düşünün (X / Y eksenli tipik ızgaralısınız). İki çizgi çizin: x = 1 ve y = 1. İki çizgi ortogonaldir. X'i değiştirerek x = 1'i değiştirebilirsiniz ve bunun diğer satırda bir etkisi olmayacaktır ve bunun tersi de geçerlidir.

Yazılımda terim, birbirinden bağımsız davranan bir sistemin iki bölümünden bahsettiğiniz durumlarda uygun şekilde kullanılabilir.


5

Cevapların çoğu çok uzun soluklu ve hatta belirsiz. Mesele şudur: eğer bir alet ortogonal ise, diğer her şeyi mahvetmeden daha iyi aletler lehine eklenebilir, değiştirilebilir veya çıkarılabilir.

Çekiçli bir marangoz ile çekiçlemek veya testereyle kesmek için kullanılabilen bir testere veya ahşabı kesmek için tasarlanmış yeni çıkıntılı bir çekiç / testere kombinasyonuna sahip olan bir marangoz arasındaki farktır. Her ikisi de testereyle kesmek ve sonra birlikte çekiçlemek için çalışacaktır, ancak çekiçle değil, testereyle kesmeyi gerektiren bir görev alırsanız, o zaman yalnızca ortogonal aletler çalışacaktır. Aynı şekilde, çekiçlemek yerine vidalamanız gerekiyorsa, çekiciniz ortogonal ise (karıştırılmamışsa) testerenizi atmanıza gerek kalmayacaktır.

Klasik örnek, unix komut satırı araçlarıdır: bir diskin (dd) içeriğini almak için bir araca, dosyadan (grep) satırları filtrelemek için bir diğerine, bu satırları bir dosyaya (cat) yazmak için başka bir araca sahipsiniz. Bunlar, hepsi isteğe göre karıştırılabilir ve eşleştirilebilir.


2

Programlama dilleri ile ilgili proje kararları hakkında konuşurken, ortogonallik, geçmişte gördükleriniz için o dil hakkında başka şeyler tahmin etmenin sizin için ne kadar kolay olduğu olarak görülebilir.

Örneğin, bir dilde aşağıdakilere sahip olabilirsiniz:

str.split

bir dizeyi bölmek için ve

len (str)

uzunluğu elde etmek için.

Daha dik bir dilde, her zaman str.x veya x (str) kullanırsınız.

Bir nesneyi klonladığınızda veya başka bir şey yaptığınızda, kullanıp kullanmayacağınızı bilirsiniz.

klonu (obj)

veya

obj.clone

Bu, programlama dillerinin ortogonal olmasının ana noktalarından biridir. Bu, kılavuza başvurmanızı veya birisine sormanızı önler.

Wikipedia makalesi, karmaşık tasarımlar veya düşük seviyeli diller üzerindeki ortogonaliteden daha çok bahsediyor. Yukarıda birisinin bir yorum üzerine önerdiği gibi, Sebesta kitabı diklik hakkında net bir şekilde konuşuyor.

Tek bir cümle kullanırsam, bir programlama dilinin, bilinmeyen bölümleri gördüklerinize bağlı olarak beklendiği gibi davrandığında ortogonal olduğunu söyleyebilirim. Ya da ... sürpriz yok.

;)


Bu cevap diğerleriyle tutarlı değildir; bu sadece "daha az bağlaşıklık" veya "yan etkisizlik" satırlarında olanların aksine işlev çağrıları veya genel yapı arasında tutarlılığı iddia eder.
Özgür

Genelde duyduğum kullanım budur. Bence ortogonal olmasının nedeni, X.ToString ve X.GetType'a sahipseniz, nesneyi değiştirebilmeniz ve sözdiziminin aynı olması veya işlevi değiştirebilmeniz ve sözdiziminin aynı olmasıdır. Nesne, işlevden bağımsızdır.
dwidel

1

dan wikipedia :

Bilgisayar Bilimi

Ortogonalite, karmaşık tasarımların fizibilitesini ve kompaktlığını kolaylaştıran bir sistem tasarım özelliğidir. Ortogonalite, bir sistemin bir bileşeni tarafından üretilen teknik etkiyi değiştirmenin, sistemin diğer bileşenlerine yan etkiler yaratmayacağını veya yaymayacağını garanti eder. Bileşenlerden oluşan bir sistemin ortaya çıkan davranışı, zayıf entegrasyondan kaynaklanan yan etkilerle değil, yani modüllerin ve arayüzlerin ortogonal olmayan tasarımıyla değil, kesinlikle mantığının biçimsel tanımlarıyla kontrol edilmelidir. Ortogonallik, test ve geliştirme süresini azaltır çünkü yan etkilere neden olmayan veya bunlara bağlı olmayan tasarımları doğrulamak daha kolaydır.

Örneğin, bir arabanın ortogonal bileşenleri ve kontrolleri vardır (örneğin, aracın hızlandırılması, yalnızca hızlanma işlevi ile ilgili bileşenlerden başka hiçbir şeyi etkilemez). Öte yandan, ortogonal olmayan bir tasarım, direksiyonunun frenlemesini (örneğin, elektronik denge kontrolü) etkilemesine veya süspansiyonunun hızının ayarlanmasına neden olabilir. 1 Sonuç olarak, bu kullanımın matematikte ortogonal kullanımından kaynaklandığı görülmektedir: Bir vektör, bir temel vektörler kümesinin her bir üyesine ayrı ayrı projelendirilerek ve ancak ve ancak temel vektörler ise projeksiyonları ekleyerek bir altuzaya bir vektör yansıtabilir karşılıklı olarak ortogonaldir.

Herhangi bir komut herhangi bir adresleme modunda herhangi bir kayıt kullanabiliyorsa, bir komut setinin ortogonal olduğu söylenir. Bu terminoloji, bir talimatı, bileşenleri talimat alanları olan bir vektör olarak ele almaktan kaynaklanır. Bir alan, üzerinde çalıştırılacak kayıtları tanımlar ve bir diğeri adresleme modunu belirler. Ortogonal bir komut seti, tüm yazmaç ve adresleme modları kombinasyonlarını benzersiz şekilde kodlar.


Oh teşekkürler, bu saplamayı ziyaret ettim en.wikipedia.org/wiki/Orthogonality_%28programming%29 Üzgünüm.
AhmetB - Google

1

Gönderen Vikipedi :

Ortogonalite, karmaşık tasarımların fizibilitesini ve kompaktlığını kolaylaştıran bir sistem tasarım özelliğidir. Ortogonalite, bir sistemin bir bileşeni tarafından üretilen teknik etkiyi değiştirmenin, sistemin diğer bileşenlerine yan etkiler yaratmayacağını veya yaymayacağını garanti eder. Bileşenlerden oluşan bir sistemin ortaya çıkan davranışı, zayıf entegrasyondan kaynaklanan yan etkilerle değil, yani modüllerin ve arayüzlerin ortogonal olmayan tasarımıyla değil, kesinlikle mantığının biçimsel tanımlarıyla kontrol edilmelidir. Ortogonallik, test ve geliştirme süresini azaltır çünkü yan etkilere neden olmayan veya bunlara bağlı olmayan tasarımları doğrulamak daha kolaydır.

Örneğin, bir arabanın ortogonal bileşenleri ve kontrolleri vardır (örneğin, aracın hızlandırılması, yalnızca hızlanma işleviyle ilgili bileşenlerden başka hiçbir şeyi etkilemez). Öte yandan, ortogonal olmayan bir tasarım, direksiyonunun frenlemesini (örneğin, elektronik denge kontrolü) etkilemesine veya hızının süspansiyonunu ayarlamasına neden olabilir. [1] Sonuç olarak, bu kullanımın matematikte ortogonal kullanımından kaynaklandığı görülmektedir: Bir vektör, bir temel vektörler kümesinin her bir üyesine ayrı ayrı projelendirilerek ve ancak ve ancak temel vektörler ise projeksiyonları ekleyerek bir altuzaya bir vektör yansıtabilir karşılıklı olarak ortogonal.

Herhangi bir komut herhangi bir adresleme modunda herhangi bir kayıt kullanabiliyorsa, bir komut setinin ortogonal olduğu söylenir. Bu terminoloji, bir talimatı, bileşenleri talimat alanları olan bir vektör olarak ele almaktan kaynaklanır. Bir alan, üzerinde çalıştırılacak kayıtları tanımlar ve bir diğeri adresleme modunu belirler. Ortogonal bir komut seti, tüm yazmaç ve adresleme modları kombinasyonlarını benzersiz şekilde kodlar.

Mümkün olan en basit terimlerle ifade etmek gerekirse, birinin değiştirilmesinin diğeri üzerinde bir etkisi yoksa iki şey ortogonaldir.


1

Yüksek seviyeli bir dilde ortogonalite eksikliğinin örnekleri olarak, C'de aşağıdaki kuralları ve istisnaları göz önünde bulundurun. C'nin iki tür yapılandırılmış veri türü, diziler ve kayıtlar (yapılar) olmasına rağmen, kayıtlar işlevlerden döndürülebilir ancak diziler döndürülemez. Bir yapının bir üyesi, void veya aynı tipte bir yapı dışında herhangi bir veri türü olabilir. Bir dizi öğesi, void veya bir işlev dışında herhangi bir veri türü olabilir. Parametreler, diziler olmadıkları sürece değere göre iletilirler, bu durumda aslında başvuruya göre iletilirler (çünkü bir dizi adının bir C programında alt simge olmadan görünümü, dizinin ilk elemanının adresi olarak yorumlanır)


0

Programlama dillerinde, bir programlama dili özelliğinin, herhangi bir kısıtlama (veya istisna) olmaksızın sınırlandırılmışsa ortogonal olduğu söylenir. Örneğin, Pascal'da işlevler yapılandırılmış türleri döndüremez. Bu, bir işlevden değer döndürmeye ilişkin bir kısıtlamadır. Bu nedenle ortogonal olmayan bir özellik olarak kabul ediliriz. ;)


0

Programlamada ortogonalite:

Ortogonalite, istenen sonuçları elde etmek için nispeten az sayıda bileşenin nispeten az sayıda yolla nasıl birleştirilebileceğini ele alan önemli bir kavramdır. Basitlikle ilişkilendirilir; tasarım ne kadar ortogonal olursa, o kadar az istisna olur. Bu, programları bir programlama dilinde öğrenmeyi, okumayı ve yazmayı kolaylaştırır. Ortogonal bir özelliğin anlamı bağlamdan bağımsızdır; anahtar parametreler simetri ve tutarlılıktır (örneğin, bir işaretçi ortogonal bir kavramdır).

dan Vikipedi


0

Bir programlama dilinde dikeylik, nispeten küçük bir ilkel yapı kümesinin, dilin kontrol ve veri yapılarını oluşturmak için nispeten az sayıda yolla birleştirilebileceği anlamına gelir. Dahası, ilkellerin her olası bileşimi yasal ve anlamlıdır. Örneğin, veri türlerini düşünün. Bir dilin dört ilkel veri türü (tamsayı, kayan nokta, çift ve karakter) ve iki tür operatörü (dizi ve işaretçi) olduğunu varsayalım. İki tip operatör kendilerine ve dört ilkel veri tipine uygulanabilirse, çok sayıda veri yapısı tanımlanabilir. Ortogonal bir dil özelliğinin anlamı, bir programdaki görünümünün bağlamından bağımsızdır. (ortogonal kelimesi, birbirinden bağımsız olan ortogonal vektörlerin matematiksel kavramından gelir. Ortogonalite, ilkeler arasındaki ilişkilerin simetrisinden kaynaklanır. Diklik eksikliği, dilin kurallarında istisnalara yol açar. Örneğin, işaretçileri destekleyen bir programlama dilinde, dilde tanımlanan herhangi bir belirli türe işaret etmek için bir işaretçi tanımlamak mümkün olmalıdır. Bununla birlikte, işaretçilerin dizileri göstermesine izin verilmiyorsa, birçok potansiyel olarak yararlı kullanıcı tanımlı veri yapısı tanımlanamaz. IBM ana bilgisayarlarının montaj dillerinin bir yönünü ve VAX serisi mini bilgisayarları karşılaştırarak bir tasarım konsepti olarak ortogonalitenin kullanımını gösterebiliriz. Tek bir basit durumu ele alıyoruz: bellekte veya kayıtlarda bulunan iki 32 bitlik tam sayı değeri eklemek ve iki değerden birini toplamla değiştirmek. IBM ana bilgisayarlarında bu amaç için iki yönerge vardır,

A Reg1, memory_cell
AR Reg1, Reg2

Reg1 ve Reg2 kayıtları temsil eder. Bunların semantiği

Reg1 ← contents(Reg1) + contents(memory_cell)
Reg1 ← contents(Reg1) + contents(Reg2)

32 bitlik tam sayı değerleri için VAX ekleme talimatı

ADDL operand_1, operand_2

kimin anlam bilgisi

operand_2 ← contents(operand_1) + contents(operand_2)

Bu durumda, işlenenlerden biri kayıt veya bellek hücresi olabilir. VAX komut tasarımı, tek bir talimatın işlenenler olarak yazmaçları veya bellek hücrelerini kullanabilmesi açısından ortogonaldir. Tüm olası yollarla birleştirilebilen işlenenleri belirlemenin iki yolu vardır. IBM tasarımı ortogonal değildir. Dört işlenen kombinasyon olasılığından sadece ikisi yasaldır ve ikisi farklı komutlar gerektirir, A ve AR. IBM tasarımı daha kısıtlıdır ve bu nedenle daha az yazılabilir. Örneğin, iki değer ekleyip toplamı bir bellek konumunda saklayamazsınız. Ayrıca, kısıtlamalar ve ek talimatlar nedeniyle IBM tasarımının öğrenilmesi daha zordur. Diklik basitlikle yakından ilgilidir: Bir dilin tasarımı ne kadar ortogonal ise, dil kurallarının gerektirdiği istisna sayısı o kadar azdır. Daha az istisna, tasarımda daha yüksek bir düzenlilik anlamına gelir ve bu da dilin öğrenilmesini, okunmasını ve anlaşılmasını kolaylaştırır. İngilizcenin önemli bir bölümünü öğrenmiş olan herkes, birçok kural istisnasını öğrenmenin zorluğuna tanıklık edebilir (örneğin, c'den sonra e dışında i'den önce).


0

Ortogonalite, dilin bir programı ifade etmek için gerektiği gibi birleştirilebilen bir dizi bağımsız ilkel yapıdan oluşma derecesi anlamına gelir. Nasıl birleştirilebilecekleri konusunda herhangi bir kısıtlama yoksa özellikler ortogonaldir

Example : non-orthogonality

PASCAL: işlevler yapılandırılmış türleri döndüremez. İşlevsel Diller oldukça ortogonaldir.


0

Ortogonalitenin temel fikri, kavramsal olarak ilişkili olmayan şeylerin sistemde ilişkilendirilmemesi gerektiğidir. Veritabanı ve kullanıcı arayüzü gibi mimarinin diğeriyle gerçekten ilgisi olmayan kısımlarının birlikte değiştirilmesi gerekmemelidir. Birinde yapılan bir değişiklik, diğerinde bir değişikliğe neden olmamalıdır.


-5

Matrislerin dikliğini kontrol edin:

Ortogonalite matrislere göre de olabilir,

Matrix *(transpose of matrix)= identity matrix. 

Orthogonality ile ilgili bir YouTube videosu izlemek için aşağıdaki bağlantıya tıklayın.
https://youtu.be/tNekLaxnfW8


Soru açıkça programlama ile ilgili.
aggsol
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.