セマンティクス
日本語 | 意味 |
英語 | semantics |
ふりがな | せまんてぃくす |
フリガナ | セマンティクス |
プログラムが持つ「意味」。
通常は「シンタックス」と対にして使用し、「プログラムはシンタックス上~だが、セマンティクスとしては~だ」といった使い方をする。
プログラムは「言語」であるため、様々な機能を持つ予約語や記号の組み合わせによって作られる。
これらの予約語や記号の機能は「シンタックス」、つまり言語仕様上の機能でしかない。
だが、こういった単なる機能の組み合わせによって、プログラマーは「意図」をプログラムの中に含めることができる。この「意図」がセマンティクスである。
たとえば、あるメソッドをサブクラスから呼んでもらいたい、という意図を表現したいとする。
コメントに書くこともできるが、できればプログラム上で表現すべきである。なぜなら、コメントには強制力はないが、プログラムによって表現することができれば言語仕様により強制力を持たせることができるからである。
この例なら、protectedメソッドにすることがいいだろう。publicメソッドでもサブクラスから呼び出すことができるが、一般にpublicメソッドはどこからでも呼び出せるため、publicメソッドより制限のきついprotectedメソッドにすることで「どこからでも呼び出して欲しいわけじゃない」というセマンティクスを持たせることができる。
つまり、protectedメソッドの文法的機能(シンタックス)は、そこから発展してプログラマーの意図(セマンティクス)も表現しているわけである。
ただし、protectedメソッドは「同パッケージであれば別クラスからでも呼び出せる」ため、完全にはこのセマンティクスを表現しきれていない。
そのため、セマンティクスには少なからず「共通知識」が必要である。つまり、「こういった場合にはこういう意図がある」というイディオムが存在し、それを知っていなければセマンティクスは伝わらないのである。
このセマンティクスのイディオムは「デザインパターン」等によって共通認識化されており、J2SE等にふんだんに使われている。セマンティクスのイディオムを数多く知り、それらを使用してライブラリを読み解き、また自分のプログラムに反映させることが重要である。
通常は「シンタックス」と対にして使用し、「プログラムはシンタックス上~だが、セマンティクスとしては~だ」といった使い方をする。
プログラムは「言語」であるため、様々な機能を持つ予約語や記号の組み合わせによって作られる。
これらの予約語や記号の機能は「シンタックス」、つまり言語仕様上の機能でしかない。
だが、こういった単なる機能の組み合わせによって、プログラマーは「意図」をプログラムの中に含めることができる。この「意図」がセマンティクスである。
たとえば、あるメソッドをサブクラスから呼んでもらいたい、という意図を表現したいとする。
コメントに書くこともできるが、できればプログラム上で表現すべきである。なぜなら、コメントには強制力はないが、プログラムによって表現することができれば言語仕様により強制力を持たせることができるからである。
この例なら、protectedメソッドにすることがいいだろう。publicメソッドでもサブクラスから呼び出すことができるが、一般にpublicメソッドはどこからでも呼び出せるため、publicメソッドより制限のきついprotectedメソッドにすることで「どこからでも呼び出して欲しいわけじゃない」というセマンティクスを持たせることができる。
つまり、protectedメソッドの文法的機能(シンタックス)は、そこから発展してプログラマーの意図(セマンティクス)も表現しているわけである。
ただし、protectedメソッドは「同パッケージであれば別クラスからでも呼び出せる」ため、完全にはこのセマンティクスを表現しきれていない。
そのため、セマンティクスには少なからず「共通知識」が必要である。つまり、「こういった場合にはこういう意図がある」というイディオムが存在し、それを知っていなければセマンティクスは伝わらないのである。
このセマンティクスのイディオムは「デザインパターン」等によって共通認識化されており、J2SE等にふんだんに使われている。セマンティクスのイディオムを数多く知り、それらを使用してライブラリを読み解き、また自分のプログラムに反映させることが重要である。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
}
/**
* たとえばこのprotectedメソッド。
* protectedメソッドは、文法的(シンタックス)には
* 「他パッケージから呼ばれない」といったものですが、
* privateメソッドやpublicメソッド、abstractメソッドではない
* ことを考えると「サブクラスから呼んで欲しい」
* ということが読み取れます。これが「protectedメソッド」に
* していることに「意味(セマンティクス)」を持たせる、
* ということです。
*/
protected void method()
{
}
}
public class Sample
{
public static void main( String[] args )
{
}
/**
* たとえばこのprotectedメソッド。
* protectedメソッドは、文法的(シンタックス)には
* 「他パッケージから呼ばれない」といったものですが、
* privateメソッドやpublicメソッド、abstractメソッドではない
* ことを考えると「サブクラスから呼んで欲しい」
* ということが読み取れます。これが「protectedメソッド」に
* していることに「意味(セマンティクス)」を持たせる、
* ということです。
*/
protected void method()
{
}
}
// Sample.java public class Sample { public static void main( String[] args ) { } /** * たとえばこのprotectedメソッド。 * protectedメソッドは、文法的(シンタックス)には * 「他パッケージから呼ばれない」といったものですが、 * privateメソッドやpublicメソッド、abstractメソッドではない * ことを考えると「サブクラスから呼んで欲しい」 * ということが読み取れます。これが「protectedメソッド」に * していることに「意味(セマンティクス)」を持たせる、 * ということです。 */ protected void method() { } }