Co oznacza „ortogonalność”, gdy mówimy o językach programowania?
Jakie są przykłady ortogonalności?
language-agnostic
terminology
lexicon
AhmetB - Google
źródło
źródło
Z książki „Art of UNIX Programming” Erica S. Raymonda
źródło
Pomyśl o tym, że jest w stanie zmienić jedną rzecz bez niewidocznego wpływu na inną.
źródło
Jeśli masz zestaw konstrukcji. Mówi się, że langauge jest ortogonalny, jeśli pozwala programiście dowolnie mieszać te konstrukcje. Na przykład w C nie można zwrócić tablicy (tablicy statycznej), mówi się, że C jest nieortogenalne w tym przypadku:
źródło
Mówiąc ogólnie, ortogonalność to relacja między dwiema rzeczami, która ma na siebie minimalny wpływ.
Termin pochodzi z matematyki, w której dwa wektory są ortogonalne, jeśli przecinają się pod kątem prostym.
Pomyśl o typowej dwuwymiarowej przestrzeni kartezjańskiej (typowa siatka z osiami X / Y). Narysuj dwie linie: x = 1 iy = 1. Te dwie linie są ortogonalne. Możesz zmienić x = 1, zmieniając x, co nie będzie miało wpływu na drugą linię i odwrotnie.
W oprogramowaniu termin ten może być odpowiednio używany w sytuacjach, gdy mówisz o dwóch częściach systemu, które zachowują się niezależnie od siebie.
źródło
Większość odpowiedzi jest bardzo rozwlekła, a nawet niejasna. Chodzi o to, że jeśli narzędzie jest ortogonalne, można je dodać, wymienić lub usunąć na korzyść lepszych narzędzi, bez skręcania wszystkiego innego.
To jest różnica między stolarzem posiadającym młotek i piłę, której można używać do kucia lub piłowania, a posiadaniem nowego zestawu młotek / piła, który jest przeznaczony do piłowania drewna, a następnie wbijania go razem. Albo będą pracować przy piłowaniu, a następnie młotkowaniu, ale jeśli dostaniesz jakieś zadanie, które wymaga piłowania, ale nie młotkowania, będą działać tylko narzędzia ortogonalne. Podobnie, jeśli musisz wkręcać zamiast młotkiem, nie musisz wyrzucać piły, jeśli jest prostopadła (nie pomieszana) z młotkiem.
Klasycznym przykładem są narzędzia wiersza poleceń unix: masz jedno narzędzie do pobierania zawartości dysku (dd), drugie do filtrowania wierszy z pliku (grep), drugie do zapisywania tych wierszy do pliku (cat) itd. wszystkie można dowolnie mieszać i dopasowywać.
źródło
Mówiąc o decyzjach projektowych dotyczących języków programowania, ortogonalność może być postrzegana jako to, jak łatwo jest przewidzieć inne rzeczy dotyczące tego języka w odniesieniu do tego, co widziałeś w przeszłości.
Na przykład w jednym języku możesz mieć:
do dzielenia łańcucha i
za uzyskanie długości.
W języku bardziej ortogonalnym zawsze używałbyś str.x lub x (str).
Gdybyś sklonował obiekt lub zrobił cokolwiek innego, wiedziałbyś, czy użyć
lub
To jeden z głównych punktów dotyczących ortogonalności języków programowania. To pozwala uniknąć zajrzenia do instrukcji lub zadawania pytań.
Artykuł w Wikipedii mówi więcej o ortogonalności w złożonych projektach lub językach niskiego poziomu. Jak ktoś zasugerował powyżej w komentarzu, książka Sebesta mówi wyraźnie o ortogonalności.
Gdybym użył tylko jednego zdania, powiedziałbym, że język programowania jest ortogonalny, gdy jego nieznane części działają zgodnie z oczekiwaniami na podstawie tego, co widziałeś. Albo ... bez niespodzianek.
;)
źródło
z wikipedii :
Informatyka
Ortogonalność to właściwość projektu systemu, która ułatwia wykonalność i zwartość złożonych projektów. Ortogonalność gwarantuje, że modyfikacja efektu technicznego wytwarzanego przez komponent systemu nie powoduje ani nie propaguje skutków ubocznych na inne komponenty systemu. Wyłaniające się zachowanie systemu składającego się z komponentów powinno być ściśle kontrolowane przez formalne definicje jego logiki, a nie przez skutki uboczne wynikające ze słabej integracji, tj. Nieortogonalnego projektu modułów i interfejsów. Ortogonalność skraca czas testowania i opracowywania, ponieważ łatwiej jest zweryfikować projekty, które nie powodują skutków ubocznych ani nie są od nich zależne.
Na przykład samochód ma ortogonalne komponenty i elementy sterujące (np. Przyspieszenie pojazdu nie wpływa na nic innego, jak tylko na komponenty związane wyłącznie z funkcją przyspieszania). Z drugiej strony, nieortogonalna konstrukcja może mieć wpływ na układ kierowniczy na hamowanie (np. Elektroniczna kontrola stabilności) lub regulować prędkość zawieszenia. 1 W konsekwencji, to użycie jest postrzegane jako wyprowadzone z użycia ortogonalności w matematyce: można rzutować wektor na podprzestrzeń, rzutując go na każdy element zbioru wektorów bazowych oddzielnie i dodając rzuty wtedy i tylko wtedy, gdy wektory bazowe są wzajemnie ortogonalne.
O zestawie instrukcji mówi się, że jest ortogonalny, jeśli jakakolwiek instrukcja może wykorzystywać dowolny rejestr w dowolnym trybie adresowania. Terminologia ta wynika z rozważania instrukcji jako wektora, którego składowymi są pola instrukcji. Jedno pole identyfikuje rejestry, na których mają być obsługiwane, a inne określa tryb adresowania. Zestaw instrukcji ortogonalnych w unikalny sposób koduje wszystkie kombinacje rejestrów i trybów adresowania.
źródło
Z Wikipedii :
Mówiąc najprościej z możliwych, dwie rzeczy są ortogonalne, jeśli zmiana jednej nie ma wpływu na drugą.
źródło
Jako przykłady braku ortogonalności w języku wysokiego poziomu, rozważ następujące reguły i wyjątki w C. Chociaż C ma dwa rodzaje ustrukturyzowanych typów danych, tablice i rekordy (struktury), rekordy mogą być zwracane z funkcji, ale tablice nie. Elementem struktury może być dowolny typ danych, z wyjątkiem void lub struktury tego samego typu. Element tablicy może być dowolnym typem danych z wyjątkiem void lub funkcji. Parametry są przekazywane przez wartość, chyba że są to tablice, w którym to przypadku są w efekcie przekazywane przez referencję (ponieważ pojawienie się nazwy tablicy bez indeksu w programie C jest interpretowane jako adres pierwszego elementu tablicy)
źródło
W językach programowania mówi się, że funkcja języka programowania jest ortogonalna, jeśli jest ograniczona bez ograniczeń (lub wyjątków). Na przykład w funkcji Pascal funkcje nie mogą zwracać typów strukturalnych. To jest ograniczenie dotyczące zwracania wartości z funkcji. Dlatego uważamy, że jest to cecha nieortogonalna. ;)
źródło
Ortogonalność w programowaniu:
z Wikipedii
źródło
Ortogonalność w języku programowania oznacza, że stosunkowo niewielki zestaw konstrukcji prymitywnych można łączyć na stosunkowo niewielką liczbę sposobów, aby zbudować kontrolę i struktury danych języka. Co więcej, każda możliwa kombinacja prymitywów jest legalna i znacząca. Na przykład rozważ typy danych. Załóżmy, że język ma cztery pierwotne typy danych (liczba całkowita, zmiennoprzecinkowa, podwójna i znakowa) oraz dwa operatory typu (tablica i wskaźnik). Jeśli dwa operatory typu można zastosować do siebie i czterech pierwotnych typów danych, można zdefiniować dużą liczbę struktur danych. Znaczenie funkcji języka ortogonalnego jest niezależne od kontekstu jej pojawienia się w programie. (słowo ortogonalne pochodzi z matematycznej koncepcji wektorów ortogonalnych, które są od siebie niezależne. ) Ortogonalność wynika z symetrii relacji między pierwotnymi. Brak ortogonalności prowadzi do wyjątków od reguł języka. Na przykład w języku programowania, który obsługuje wskaźniki, powinno być możliwe zdefiniowanie wskaźnika wskazującego na dowolny określony typ zdefiniowany w języku. Jeśli jednak wskaźniki nie mogą wskazywać tablic, nie można zdefiniować wielu potencjalnie przydatnych struktur danych zdefiniowanych przez użytkownika. Możemy zilustrować użycie ortogonalności jako koncepcji projektowej, porównując jeden aspekt języków asemblera komputerów mainframe IBM i serii minikomputerów VAX. Rozważamy jedną prostą sytuację: dodanie dwóch 32-bitowych wartości całkowitych, które znajdują się w pamięci lub rejestrach i zastąpienie jednej z dwóch wartości sumą. Komputery mainframe IBM mają do tego celu dwie instrukcje,
gdzie Reg1 i Reg2 reprezentują rejestry. Ich semantyka to
Instrukcja dodawania VAX dla 32-bitowych wartości całkowitych to
którego semantyka jest
W tym przypadku operand może być rejestrem lub komórką pamięci. Konstrukcja instrukcji VAX jest ortogonalna, ponieważ pojedyncza instrukcja może używać albo rejestrów, albo komórek pamięci jako argumentów. Istnieją dwa sposoby określania operandów, które można łączyć na wszystkie możliwe sposoby. Projekt IBM nie jest ortogonalny. Tylko dwie z czterech możliwości kombinacji operandów są dozwolone, a dwie wymagają różnych instrukcji, A i AR. Projekt IBM jest bardziej ograniczony, a zatem mniej zapisywalny. Na przykład nie można dodać dwóch wartości i przechowywać sumy w lokalizacji pamięci. Ponadto projekt IBM jest trudniejszy do nauczenia z powodu ograniczeń i dodatkowych instrukcji. Ortogonalność jest ściśle związana z prostotą: im bardziej ortogonalny jest projekt języka, tym mniej wyjątków wymagają reguły językowe. Mniejsza liczba wyjątków oznacza wyższy stopień regularności w projekcie, co ułatwia naukę, czytanie i zrozumienie języka. Każdy, kto nauczył się istotnej części języka angielskiego, może zaświadczyć o trudnościach w nauce wielu wyjątków od jego reguł (np. I przed e, z wyjątkiem po c).
źródło
Ortogonalność oznacza stopień, w jakim język składa się z zestawu niezależnych konstrukcji pierwotnych, które można łączyć w razie potrzeby w celu wyrażenia programu. Funkcje są ortogonalne, jeśli nie ma ograniczeń co do sposobu ich łączenia
PASCAL: funkcje nie mogą zwracać typów strukturalnych. Języki funkcjonalne są wysoce ortogonalne.
źródło
Podstawową ideą ortogonalności jest to, że rzeczy, które nie są powiązane koncepcyjnie, nie powinny być powiązane w systemie. Części architektury, które tak naprawdę nie mają nic wspólnego z innymi, takie jak baza danych i interfejs użytkownika, nie powinny być zmieniane razem. Zmiana na jedną nie powinna powodować zmiany w drugiej.
źródło
Sprawdź ortogonalność macierzy:
Ortogonalność może również odnosić się do macierzy,
Kliknij poniższy link, aby obejrzeć film z YouTube na temat ortogonalności.
https://youtu.be/tNekLaxnfW8
źródło