他のヒント

エリック・レイモンドさんから "UNIXプログラミングのアート"

  

直交性は、複雑なデザインがコンパクトに作るのを助けることができる最も重要な特性の1つです。純粋に直交設計で、操作は副作用はありません。各アクションは、(それがAPI呼び出し、マクロ呼び出し、または言語操作のかどうか)他の人に影響を与えずに、ただ一つのことを変更します。 1あなたがコントロールしているものは何でも、システムの各プロパティを変更する唯一の方法があります。

それが見えない他の部分に影響を与えることなく、一つのことを変更することができることを考えています。

大まかに言えば、直交性は、彼らがお互いに最小限の影響を有するように二つのものの間の関係である。

用語は、彼らが直角に交差する場合二つのベクトルが直交する数学、から来ています。

一般的な2次元直交座標空間(X / Y軸とのあなたの典型的なグリッド)について考えてみてください。プロット二行:X = 1、Y = 1。 2行は直交しています。あなたは、xを変更することで、X = 1を変更することができ、これは他のラインには影響しませんし、その逆になります。

ソフトウェアでは、この用語は、適切に使用すると、互いに独立して振る舞うシステムの2つの部分の話をしている状況で使用することができます。

あなたがコンストラクトのセットを持っている場合。 langaugeが、それはプログラマが自由にこれらの構造をミックスすることを可能にする場合は、の直交のように言われています。例えば、Cであなたが配列(静的配列)を返すことができない、Cは、この場合unorthognalあると言われている

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.

答えのほとんどは非常にったらしい-長く、さらにはあいまいです。ポイントは次のとおりです。ツールが直交している場合、それはアップ他のすべてをねじ込むせずに、より良いツールの賛成で、追加、置き換え、または削除することができます。

これは、ハンマーとハンマーやソーイング、または木を見てするように設計されたいくつかの新しい-fangledハンマー/見たコンボを持つために使用することができのこぎりを持つ大工の違いだし、それを一緒にハンマー。どちらかが鋸切断し、その後一緒に打撃のために働くだろうが、あなたはのこぎりで切る必要があり、いくつかのタスクを得るが、ハンマーでない場合は、唯一の直交ツールが動作します。あなたはハンマリングの代わりにネジ止めする必要がある場合、それは直交だ場合同様に、あなたはあなたのハンマー(と混ざっていない)、あなたののこぎりを捨てる必要はありません。

古典的な例は、UNIXのコマンドラインツールです:あなたは、ディスクの内容(DD)を取得するための単一のツールを持っている、別のファイル(グレップ)から行をフィルタリングするため、ファイル(猫)にそれらの行を記述するための別の、などが挙げられる。これらは、すべての意志で混合し、照合することができます。

から wikipedia:

コンピューター科学

直行性のあるシステムデザイン性の円滑な実施可能性、コンパクトの複雑なデザインです。直行性を保証する変更の技術的効果によるコンポーネントシステムは作成さも伝播副作用のその他のコンポーネントシステム。の創発的挙動システムを構成する部品を管理する必要があるように厳重に形式的な定義の論理ではなく副作用による貧困層の統合、すなわち非直交デザインのモジュールおよびインタフェース直行性の低減試験および開発時間やすさから検証するデザインは副作用を引き起こすとともに依存します。

例えば、車軸部品とコントロール(例えば加速車両に影響を与えませんので何での部品組みを加速できます。一方、非直交デザインがその運営に影響を与えるブレーキなど電子安定制御)、またはその速度調整、その停止が発生します。1 その結果、この利用していると認められたさせることによって得られる利用の直交数:るのがプロジェクトベクターを部分空間射影でそれぞれの会員のための基本となる重要な事項のベクトルは別途、追加の見通しになっている場合にのみの基底ベクトルを互いに直交す

命令セットと言われる直交する場合の指示に利用することができます登録の他に対応モードになります。この用語の結果を考慮しの指示としてベクトルの分母の命令ます。一つの分野を特定し、登録で使われるようになると、別の指定に対応モードになります。直交命令セットの独自のコードを組み合わせを登録や対応のモードがある。

からウィキペディアするます:

  

直交性は、システム設計であります   プロパティ促進実現可能性と   複雑なデザインのコンパクトさ。   その直交性を保証   技術的効果を変更します   システムの構成要素によって生成されます   どちらも作成していないにもサイドを伝播   の他のコンポーネントへの影響   システム。の緊急行動   成分からなるシステムべきです   正式によって厳密に制御します   そのロジックの定義としないことにより、   貧しいから生じる副作用   統合、すなわち非直交   モジュールおよびインターフェイスの設計。   直交性は、テストを低減し、   開発時間がより容易であるため、   そのどちらも、原因の設計を検証します   副作用もそれらに依存ます。

     

は、例えば、車は、直交有します   コンポーネントおよびコントロール(例えば   車両を加速することはありません   何かに影響を与えるが、   で独占的に関連するコンポーネント   加速機能)。上の   一方、非直交設計   そのステアリングはその影響を及ぼしている可能性があります   制動(例えば、電子安定   コントロール)、またはその速度微調整その   サスペンション。[1]したがって、この   使用方法は、由来すると見られています   数学の直交の使用:ワン   部分空間上にベクトルを投影してもよいです   各部材の上に投影することにより   別途基底ベクトルのセットと、   突部場合にのみを追加します   基底ベクトルは、相互にあります   直交ます。

     

命令セットがあると言われて   任意の命令が使用できる場合には、直交   任意のアドレッシングモードで任意のレジスタ。   この用語はから得られます   ベクトルとして命令を考慮   その成分の命令です   フィールド。 1つのフィールドは識別します   オペレートするレジスタ、および   別のアドレッシングモードを指定します。   直交命令を一意に設定します   レジスタのすべての組み合わせをコード   そして、アドレッシングモードます。

1を変更すると、他の時には効果がありません場合は、

できるだけ簡単な用語でそれを置くために、二つのことが直交している。

プログラミング言語のプロジェクトの決定について話している間、あなたが過去に見てきたもののためにその言語に関する他のものを予測するためにどのように簡単であるように、

、直交性が見られることがあります。

たとえば、一つの言語であなたが持つことができます:

  

str.split

の文字列を分割すると

  

LEN(STR)

な長さを取得するためます。

より直交言語で、あなたは常にstr.xまたはX(STR)を使用することになります。

あなたがオブジェクトを複製または何かをするだろうときに、あなたが使用するかどうかを知っているだろう。

  

クローン(OBJ)

または

  

obj.clone

これは直交しているプログラミング言語の主なポイントの一つです。それはあなたがマニュアルを参照するか、誰かに聞いて回避します。

Wikipediaの記事は、複雑なデザインや、低レベルの言語での直交性についての詳細を語っています。 誰かがコメントに上記で示唆したように、Sebestaブックは直交性についてきれいに語っています。

私は一つの文を使用する場合は、

、私はあなたが見たものに基づいて予想されるように、その未知の部分が行動する際のプログラミング言語が直交していると言うでしょう。 それとも...ない驚きます。

;)

プログラミングにおける直交性:

直交性は重要な概念であり、比較的少数のコンポーネントを比較的少数の方法で組み合わせて望ましい結果を得る方法を扱います。それは単純さと結びついています。計画がより直交的であればあるほど、例外は少なくなります。これにより、プログラミング言語でのプログラムの学習、読み書きが容易になります。直交特徴の意味はコンテキストとは無関係です。重要なパラメータは対称性と一貫性です (たとえば、ポインタは直交する概念です)。

から ウィキペディア

は、プログラミング言語では、プログラミング言語の特徴は、制限なし(または例外)で囲まれている場合は直交するように言われています。  例えば、パスカル関数で構造化された型を返すことはできません。これは、関数から値を返すの制限です。そこで我々は、それは非直交機能として考えられています。 ;)

高レベル言語で直交性の欠如の例としては、Cで次のルールおよび例外を考えるCは、構造化データ型、アレイ及び記録(構造体)の二種類があるが、レコードは、関数から返されることができるが配列はできません。構造体のメンバは、空隙以外の任意のデータ・タイプまたは同じタイプの構造であってもよいです。配列要素は、ボイド又は機能以外の任意のデータ・タイプとすることができます。彼らはである場合にアレイされていない限りパラメータは、値によって渡される(Cプログラムで添字なしの配列名の出現は、アレイの最初のエレメントのアドレスであると解釈されるので)、実質的に、参照渡し

直交プログラムを表現するために必要に応じて組み合わせることができる独立したプリミティブ構築物のセットで構成する言語程度を意味します。     彼らは組み合わせることができる方法に制限はありません場合特長は直交している。

Example : non-orthogonality

PASCAL:関数は、構造型を返すことができません。 関数型言語は非常に直交している。

直交性の基本的な考え方は、概念的に関連していないものがシステムに関連してはならないということです。本当に他とは何の関係もないアーキテクチャの一部は、このようなデータベースやUIとして、一緒に変更する必要はありません。 1への変更は、他の変更が発生することはありません。

プログラミング言語の直交性の比較的小さなセットということを意味します プリミティブ構築物はする方法は比較的少数で組み合わせることができます 言語の制御やデータ構造を構築します。さらに、すべてのPOS- プリミティブのsible組み合わせは、法的かつ有意義です。たとえば、データタイプを考えます。言語は、4つのプリミティブデータ型(整数、浮動小数点数を持っていると仮定し、 ダブル、文字)と2つのタイプ演算子(配列とポインタ)。 2の場合 型演算子は、自分自身と4つのプリミティブデータ型に適用することができ、 データ構造を多数定義することができます。 直交言語機能の意味はとは無関係です プログラムで、その外観の文脈。 (ワード直交から来ています それぞれ独立している直交ベクトルの数学的な考え方 その他。)直交性はprimi-間の関係の対称性から、以下の tives。直交性の欠如は、言語の規則の例外につながります。 たとえば、ポインタをサポートしているプログラミング言語で、それがなければなりません 言語で定義された任意の特定のタイプを指すようにポインタを定義することができます。 ポインタが配列を指すように許可されていない場合は、多くの潜在的に有用な、ユーザー定義のデータ構造を定義することはできません。 私たちは、compar-によって設計コンセプトとして直交性の使用を説明することができます IBMのメインフレームコンピュータのアセンブリ言語の一の側面をINGの そして、ミニコンピュータのVAXシリーズ。我々は、単一の簡単な状況を考慮してください。 メモリまたはレジスタのいずれかに存在する2つの32ビット整数値を加算し 合計で2つの値のいずれかを交換します。 IBMのメインフレームは2を持っています

の形式を持って、この目的のための指示、
A Reg1, memory_cell
AR Reg1, Reg2

レジスタReg1とREG2はレジスタを表します。これらの意味がある。

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

32ビット整数値のVAX加算命令である

ADDL operand_1, operand_2

セマンティクスです。

operand_2 ← contents(operand_1) + contents(operand_2)

この場合には、いずれかのオペランドがレジスタまたはメモリセルとすることができます。 VAX命令の設計は、その中に直交する単一の命令することができます オペランドとしてレジスタまたはメモリセルのいずれかを使用します。には2つの方法があります。 すべての可能な方法で組み合わせることができるオペランドを指定します。 IBMデザイン 直交しません。唯一の2つから4つのうち、オペランドの組み合わせの可能性があります 法的、2つは異なる命令、AとARが必要です。 IBMデザイン より制限されたため、あまり書き込み可能です。たとえば、あなたが追加することはできません。 二つの値およびメモリ位置に合計を格納します。さらに、IBM デザインがあるため制限と追加の指示を学ぶことはより困難です。 直交性は簡潔に密接に関連している:より多くの直交 言語の設計、言語ルールが必要と少ない例外。少ないです 例外は作るデザインの規則度が高く、意味します 学び、読み、そして理解しやすい言語です。 SIG-を学習している誰も 英語のnificant一部は、学習の難しさを証明することができ、その 多くのルールの例外(例えば、I Cの後を除いて電子の前に)。

行列のチェック直交ます:

直交もマトリックスに対してすることができ、

Matrix *(transpose of matrix)= identity matrix. 

直交上のYouTubeのビデオを表示するには、以下のリンクをクリックしてください。
https://youtu.be/tNekLaxnfW8する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top