インテンショナルプログラミングの中核的概念として同一性がある。多くのプログラミング言語ではソースコードは平坦なテキストであり、オブジェクトは名前で定義/参照され、その同一性はコンパイラが推測するしかない。例えば、ある名前が変数としても、プロシージャ名としても、さらにはデータ型名としても使われることもある。大きなプログラムでは、あるシンボルが実際にはどのオブジェクトを指しているのかを把握するのが非常に困難になる。何かの名前を変更したとき、それに対応してどこを修正しなければならないかは、注意深く調査しなければならない。
対照的に、インテンショナルプログラミングでは、全ての定義には名前が付けられるだけでなく、ユニークな識別子とオブジェクトの対応付けがなされる。従って、変数やプロシージャを参照したとき、名前だけでなくオリジナルの実体に付与された識別子ともリンクされる。
このため、ある実体の名前を変更すると、プログラム内の全ての参照が自動的に更新される。また、別の名前空間で同じ名前を使った場合でも、間違った参照を修正するという作業が不要となる。この機能により、プログラムを各種言語バージョンに移植することも簡単になる。英語の名前群と日本語の名前群を必要に応じて切り換えるなどといったことが簡単にできる。
プログラム内の全ての定義されたオブジェクトにユニークな識別子を付与することで、リファクタリングの自動化や、バージョン管理システムへのコードのチェックインの単純化が容易になる。例えば、共同作業むけのバージョン管理システム（CVSなど）では、2人のプログラマの修正でコンフリクトが生じたとき（例えば、1人がある関数名を変更し、もう1人がその関数の中身を修正した場合）、バージョン管理システムはそれを間違って解釈する可能性がある（1人が新たな関数を定義し、もう1人が古い関数を修正した）。インテンショナルプログラミングでは、同一性が維持されるため、このような誤解が生じない。
詳細さのレベル.
インテンショナルプログラミングでは詳細さのレベルを何段階か用意し、プログラマが「ズームイン」したり「ズームアウト」したりできる。例えば上の例では、ズームアウトすると次のような表示となる。