Apa itu "Orthogonality"?

124

Apa yang dimaksud dengan "ortogonalitas" saat berbicara tentang bahasa pemrograman?

Apa sajakah contoh dari Orthogonality?

AhmetB - Google
sumber

Jawaban:

255

Orthogonality adalah properti yang berarti "Mengubah A tidak mengubah B". Contoh sistem ortogonal adalah radio, di mana mengubah stasiun tidak mengubah volume dan sebaliknya.

Sistem non-ortogonal akan seperti helikopter di mana perubahan kecepatan dapat mengubah arah.

Dalam bahasa pemrograman ini berarti bahwa ketika Anda menjalankan sebuah instruksi, tidak ada yang lain kecuali instruksi itu yang terjadi (sangat penting untuk debugging).

Ada juga arti khusus saat mengacu pada set instruksi .

C. Ross
sumber
Jawaban ini mengingatkan saya pada teori "superposisi" dari sinyal dan sistem.
Özgür
1
Penjelasan yang sangat jelas tentang perbedaan penggunaan kata ini: c2.com/cgi/wiki?DefinitionOfOrthogonal
Lorenzo Solano
Jadi, apakah pemrograman fungsional sepenuhnya ortogonal?
corazza
Itu pertanyaan yang menarik @yannbane. Secara teori, tergantung pada bahasa fungsional teoretis, itu mungkin benar. Dalam praktiknya tidak, bahkan bahasa fungsional memiliki cara untuk mengubah status.
C. Ross
1
Saya yakin contoh helikopter itu berasal dari "Pragmatic Programmer" :)
Sreekanth Karumanaghat
36

Dari "Seni pemrograman UNIX" Eric S. Raymond

Ortogonalitas adalah salah satu properti terpenting yang dapat membantu membuat desain yang rumit menjadi kompak. Dalam desain ortogonal murni, operasi tidak memiliki efek samping; setiap tindakan (baik itu panggilan API, pemanggilan makro, atau operasi bahasa) hanya mengubah satu hal tanpa memengaruhi yang lain. Ada satu dan hanya satu cara untuk mengubah setiap properti dari sistem apa pun yang Anda kendalikan.

Federico klez Culloca
sumber
16

Anggap saja mampu mengubah satu hal tanpa memiliki pengaruh yang tak terlihat di bagian lain.

Martin Beckett
sumber
12

Jika Anda memiliki sekumpulan konstruksi. Sebuah bahasa dikatakan ortogonal jika memungkinkan pemrogram untuk mencampur konstruksi ini dengan bebas. Misalnya, di C Anda tidak bisa mengembalikan sebuah array (array statis), C dikatakan tidak lazim dalam hal ini:

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.
AraK
sumber
Sebenarnya saya melihat ini di buku saya dan masih tidak mengerti apa itu.
AhmetB - Google
LOL Saya menggunakan buku ini dan melihat pertanyaan ini di kuis online buku. Kebetulan sekali. Mungkin saya harus membaca bab pertama juga.
AhmetB - Google
2
Ini hanya mengatakan bahwa return dan array lebih kompleks saat disatukan: Anda tidak dapat menggunakan return di sekitar array tanpa memikirkan interaksi di antara keduanya. Idealnya, Anda akan tahu apa arti return, dan apa itu array, sehingga Anda akan tahu apa yang akan dilakukan mengembalikan array, tetapi sebenarnya, ini lebih kompleks dari itu, karena C memperlihatkan detail implementasi tentang array (dan return).
Lee B
Pengertian "ortogonal" ini tercakup oleh: en.wikipedia.org/wiki/Orthogonality_(programming) , tetapi ini adalah halaman baru dengan sedikit konten.
outis
1
Ini adalah jawaban yang "lebih tepat" tentang ortogonalitas dalam konteks pemrograman. "ortogonalitas" berarti bahwa konstruksi pemrograman dapat dicampur dengan konstruksi lain, dan semantiknya akan tetap sama.
treecoder
11

Secara garis besar, ortogonalitas adalah hubungan antara dua hal yang memiliki pengaruh yang minimal satu sama lain.

Istilah ini berasal dari matematika, di mana dua vektor bersifat ortogonal jika berpotongan pada sudut siku-siku.

Pikirkan tentang ruang kartesius 2 dimensi yang umum (Anda memiliki kisi tipikal dengan sumbu X / Y). Plot dua garis: x = 1 dan y = 1. Kedua garis itu ortogonal. Anda dapat mengubah x = 1 dengan mengubah x, dan ini tidak akan berpengaruh pada baris lainnya, dan sebaliknya.

Dalam perangkat lunak, istilah tersebut dapat digunakan dengan tepat dalam situasi di mana Anda berbicara tentang dua bagian dari sistem yang berperilaku independen satu sama lain.

timdev
sumber
5

Sebagian besar jawabannya sangat bertele-tele, dan bahkan tidak jelas. Intinya adalah: jika suatu perkakas ortogonal, ia dapat ditambahkan, diganti, atau dilepas, demi perkakas yang lebih baik, tanpa mengacaukan yang lainnya.

Ini adalah perbedaan antara tukang kayu yang memiliki palu dan gergaji, yang dapat digunakan untuk memalu atau menggergaji, atau memiliki kombinasi palu / gergaji bermodel baru, yang dirancang untuk menggergaji kayu, kemudian memaluinya bersama-sama. Keduanya akan bekerja untuk menggergaji dan kemudian memalu bersama, tetapi jika Anda mendapatkan beberapa tugas yang membutuhkan menggergaji, tetapi tidak memalu, maka hanya alat ortogonal yang akan berfungsi. Demikian juga, jika Anda perlu memasang sekrup alih-alih memalu, Anda tidak perlu membuang gergaji Anda, jika gergaji itu ortogonal (tidak tercampur dengan) palu Anda.

Contoh klasik adalah alat baris perintah unix: Anda memiliki satu alat untuk mendapatkan konten disk (dd), alat lain untuk memfilter baris dari file (grep), alat lain untuk menulis baris tersebut ke file (cat), dll. semua bisa dicampur dan dicocokkan sesuka hati.

Lee B
sumber
2

Saat berbicara tentang keputusan proyek tentang bahasa pemrograman, ortogonalitas dapat dilihat sebagai betapa mudahnya Anda memprediksi hal-hal lain tentang bahasa itu untuk apa yang Anda lihat di masa lalu.

Misalnya, dalam satu bahasa Anda dapat memiliki:

str.split

untuk memisahkan string dan

len (str)

untuk mendapatkan panjangnya.

Pada bahasa yang lebih ortogonal, Anda akan selalu menggunakan str.x atau x (str).

Saat Anda akan mengkloning suatu objek atau melakukan hal lain, Anda akan tahu apakah akan menggunakan

klon (obj)

atau

obj.clone

Itulah salah satu poin utama dalam bahasa pemrograman yang ortogonal. Itu menghindari Anda untuk berkonsultasi dengan manual atau bertanya kepada seseorang.

Artikel wikipedia berbicara lebih banyak tentang ortogonalitas pada desain kompleks atau bahasa tingkat rendah. Seperti yang disarankan seseorang di atas dalam sebuah komentar, buku Sebesta berbicara dengan bersih tentang ortogonalitas.

Jika saya hanya menggunakan satu kalimat, saya akan mengatakan bahwa bahasa pemrograman adalah ortogonal ketika bagian yang tidak diketahui bertindak seperti yang diharapkan berdasarkan apa yang Anda lihat. Atau ... tidak ada kejutan.

;)

Asrail
sumber
Jawaban ini tidak konsisten bagi orang lain; ini hanya mengklaim konsistensi antara pemanggilan fungsi atau keseluruhan struktur berbeda dengan yang lain yang berada di garis "less-coupling" atau "side-effectlessness".
Özgür
Ini adalah penggunaan yang biasanya saya dengar. Saya rasa alasannya ortogonal adalah jika Anda memiliki X.ToString dan X.GetType, Anda dapat memvariasikan objek dan sintaksnya sama, atau Anda dapat memvariasikan fungsi dan sintaksnya sama. Objek tidak bergantung pada fungsi.
dwidel
1

dari wikipedia :

Ilmu Komputer

Orthogonality adalah properti desain sistem yang memfasilitasi kelayakan dan kekompakan desain yang kompleks. Orthogonality menjamin bahwa memodifikasi efek teknis yang dihasilkan oleh komponen sistem tidak menciptakan atau menyebarkan efek samping ke komponen lain dari sistem. Tingkah laku yang muncul dari sistem yang terdiri dari komponen harus dikontrol secara ketat oleh definisi formal dari logikanya dan bukan oleh efek samping akibat integrasi yang buruk, yaitu desain modul dan antarmuka non-ortogonal. Ortogonalitas mengurangi waktu pengujian dan pengembangan karena lebih mudah untuk memverifikasi desain yang tidak menyebabkan efek samping atau bergantung padanya.

Misalnya, sebuah mobil memiliki komponen ortogonal dan kontrol (misalnya, mempercepat kendaraan tidak mempengaruhi apa pun kecuali komponen yang terlibat secara eksklusif dengan fungsi percepatan). Di sisi lain, desain non-ortogonal mungkin memiliki pengaruhnya terhadap pengereman (misalnya kontrol stabilitas elektronik), atau kecepatannya mengubah suspensi. 1 Konsekuensinya, penggunaan ini terlihat diturunkan dari penggunaan ortogonal dalam matematika: Seseorang dapat memproyeksikan sebuah vektor ke subruang dengan memproyeksikannya ke setiap anggota himpunan vektor basis secara terpisah dan menambahkan proyeksi jika dan hanya jika vektor basis saling ortogonal.

Sebuah set instruksi dikatakan ortogonal jika instruksi apapun dapat menggunakan register apapun dalam mode pengalamatan apapun. Terminologi ini dihasilkan dari mempertimbangkan suatu instruksi sebagai vektor yang komponennya adalah bidang instruksi. Satu bidang mengidentifikasi register yang akan dioperasikan, dan bidang lainnya menentukan mode pengalamatan. Sebuah set instruksi ortogonal secara unik mengkodekan semua kombinasi register dan mode pengalamatan.

TheVillageIdiot
sumber
Oh terima kasih saya baru saja mengunjungi stub ini en.wikipedia.org/wiki/Orthogonality_%28programming%29 Maaf.
AhmetB - Google
1

Dari Wikipedia :

Orthogonality adalah properti desain sistem yang memfasilitasi kelayakan dan kekompakan desain yang kompleks. Orthogonality menjamin bahwa memodifikasi efek teknis yang dihasilkan oleh komponen sistem tidak menciptakan atau menyebarkan efek samping ke komponen lain dari sistem. Perilaku yang muncul dari sistem yang terdiri dari komponen harus dikontrol secara ketat oleh definisi formal dari logikanya dan bukan oleh efek samping akibat integrasi yang buruk, yaitu desain modul dan antarmuka non-ortogonal. Ortogonalitas mengurangi waktu pengujian dan pengembangan karena lebih mudah untuk memverifikasi desain yang tidak menyebabkan efek samping atau bergantung padanya.

Misalnya, sebuah mobil memiliki komponen ortogonal dan kontrol (misalnya, mempercepat kendaraan tidak mempengaruhi apa pun kecuali komponen yang terlibat secara eksklusif dengan fungsi percepatan). Di sisi lain, desain non-ortogonal mungkin memiliki pengaruhnya terhadap pengereman (misalnya kontrol stabilitas elektronik), atau kecepatannya mengubah suspensi. [1] Akibatnya, penggunaan ini terlihat diturunkan dari penggunaan ortogonal dalam matematika: Seseorang dapat memproyeksikan vektor ke subruang dengan memproyeksikannya ke setiap anggota himpunan vektor basis secara terpisah dan menambahkan proyeksi jika dan hanya jika vektor basisnya adalah saling ortogonal.

Sebuah set instruksi dikatakan ortogonal jika instruksi apapun dapat menggunakan register apapun dalam mode pengalamatan apapun. Terminologi ini dihasilkan dari mempertimbangkan suatu instruksi sebagai vektor yang komponennya adalah bidang instruksi. Satu bidang mengidentifikasi register yang akan dioperasikan, dan bidang lainnya menentukan mode pengalamatan. Sebuah set instruksi ortogonal secara unik mengkodekan semua kombinasi register dan mode pengalamatan.

Sederhananya, dua hal adalah ortogonal jika perubahan yang satu tidak berpengaruh pada yang lain.

Laurence Gonsalves
sumber
1

Sebagai contoh kurangnya ortogonalitas dalam bahasa tingkat tinggi, pertimbangkan aturan dan pengecualian berikut di C. Meskipun C memiliki dua jenis tipe data terstruktur, array dan record (struct), record dapat dikembalikan dari fungsi tetapi array tidak bisa. Anggota struktur dapat berupa tipe data apa pun kecuali void atau struktur dengan tipe yang sama. Elemen array dapat berupa tipe data apa pun kecuali void atau fungsi. Parameter diteruskan oleh nilai, kecuali mereka adalah array, dalam hal ini mereka, pada dasarnya, diteruskan oleh referensi (karena kemunculan nama array tanpa subskrip dalam program C diartikan sebagai alamat elemen pertama array)

Imajinasi
sumber
0

Dalam bahasa pemrograman fitur bahasa pemrograman dikatakan ortogonal jika dibatasi tanpa batasan (atau pengecualian). Misalnya, dalam fungsi Pascal tidak dapat menampilkan tipe terstruktur. Ini adalah batasan untuk mengembalikan nilai dari suatu fungsi. Oleh karena itu kami dianggap sebagai fitur non-ortogonal. ;)

Dil
sumber
0

Ortogonalitas dalam Pemrograman:

Ortogonalitas adalah konsep penting, membahas bagaimana sejumlah kecil komponen dapat digabungkan dalam sejumlah cara yang relatif kecil untuk mendapatkan hasil yang diinginkan. Ini terkait dengan kesederhanaan; semakin ortogonal desainnya, semakin sedikit pengecualian. Hal ini mempermudah untuk mempelajari, membaca dan menulis program dalam bahasa pemrograman. Arti dari ciri ortogonal tidak bergantung pada konteks; parameter kuncinya adalah simetri dan konsistensi (misalnya, penunjuk adalah konsep ortogonal).

dari Wikipedia

Majid
sumber
0

Ortogonalitas dalam bahasa pemrograman berarti bahwa sekumpulan konstruksi primitif yang relatif kecil dapat digabungkan dalam sejumlah cara yang relatif kecil untuk membangun kontrol dan struktur data bahasa. Lebih jauh, setiap kombinasi yang mungkin dari primitif adalah legal dan bermakna. Misalnya, pertimbangkan tipe data. Misalkan sebuah bahasa memiliki empat tipe data primitif (integer, float, double, dan character) dan dua operator tipe (array dan pointer). Jika dua tipe operator dapat diterapkan pada dirinya sendiri dan empat tipe data primitif, sejumlah besar struktur data dapat didefinisikan. Arti dari fitur bahasa ortogonal tidak tergantung pada konteks kemunculannya dalam suatu program. (Kata ortogonal berasal dari konsep matematika vektor ortogonal, yang tidak bergantung satu sama lain. ) Orthogonalitas mengikuti simetri hubungan antara primitif. Kurangnya ortogonalitas menyebabkan pengecualian pada aturan bahasa. Misalnya, dalam bahasa pemrograman yang mendukung pointer, harus dimungkinkan untuk menentukan pointer untuk menunjuk ke tipe tertentu yang ditentukan dalam bahasa tersebut. Namun, jika pointer tidak diizinkan untuk menunjuk ke array, banyak struktur data yang ditentukan pengguna yang berpotensi berguna tidak dapat didefinisikan. Kita dapat mengilustrasikan penggunaan ortogonalitas sebagai konsep desain dengan membandingkan satu aspek bahasa assembly dari komputer mainframe IBM dan seri minikomputer VAX. Kami mempertimbangkan satu situasi sederhana: menambahkan dua nilai integer 32-bit yang berada di memori atau register dan mengganti salah satu dari dua nilai dengan jumlah. Mainframe IBM memiliki dua instruksi untuk tujuan ini,

A Reg1, memory_cell
AR Reg1, Reg2

dimana Reg1 dan Reg2 mewakili register. Semantik ini adalah

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

Instruksi penambahan VAX untuk nilai integer 32-bit adalah

ADDL operand_1, operand_2

yang semantiknya

operand_2 ← contents(operand_1) + contents(operand_2)

Dalam hal ini, salah satu operand bisa menjadi register atau sel memori. Desain instruksi VAX adalah ortogonal di mana instruksi tunggal dapat menggunakan register atau sel memori sebagai operan. Ada dua cara untuk menentukan operan, yang dapat digabungkan dengan semua cara yang memungkinkan. Desain IBM tidak ortogonal. Hanya dua dari empat kemungkinan kombinasi operan yang legal, dan keduanya memerlukan instruksi berbeda, A dan AR. Rancangan IBM lebih terbatas dan karena itu kurang dapat ditulis. Misalnya, Anda tidak dapat menambahkan dua nilai dan menyimpan jumlahnya di lokasi memori. Selain itu, desain IBM lebih sulit untuk dipelajari karena adanya batasan dan instruksi tambahan. Ortogonalitas terkait erat dengan kesederhanaan: Semakin ortogonal desain suatu bahasa, semakin sedikit pengecualian yang dibutuhkan aturan bahasa. Lebih sedikit pengecualian berarti tingkat keteraturan yang lebih tinggi dalam desain, yang membuat bahasa lebih mudah dipelajari, dibaca, dan dipahami. Siapa pun yang telah mempelajari bagian penting dari bahasa Inggris dapat bersaksi tentang kesulitan mempelajari banyak pengecualian aturannya (misalnya, i sebelum e kecuali setelah c).

Imajinasi
sumber
0

Orthogonality berarti sejauh mana bahasa terdiri dari sekumpulan konstruksi primitif independen yang dapat digabungkan seperlunya untuk mengekspresikan suatu program. Fitur ortogonal jika tidak ada batasan tentang bagaimana fitur tersebut dapat digabungkan

Example : non-orthogonality

PASCAL: fungsi tidak dapat mengembalikan tipe terstruktur. Bahasa Fungsional sangat ortogonal.

mali
sumber
0

Ide dasar ortogonalitas adalah bahwa hal-hal yang tidak terkait secara konseptual tidak boleh terkait dalam sistem. Bagian dari arsitektur yang benar-benar tidak ada hubungannya dengan yang lain, seperti database dan UI, tidak perlu diubah bersama. Perubahan yang satu seharusnya tidak menyebabkan perubahan pada yang lain.

acohen
sumber
-5

Periksa ortogonalitas matriks:

Ortogonalitas juga dapat berkaitan dengan matriks,

Matrix *(transpose of matrix)= identity matrix. 

Klik tautan di bawah ini untuk melihat video YouTube di Orthogonality.
https://youtu.be/tNekLaxnfW8

Roopesh
sumber
Pertanyaannya jelas tentang pemrograman.
aggsol