回答編集履歴
6
文章の修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# 前提
|
2
2
|
|
3
|
-
インターフェースは共通の振る舞いを定義するものです。また、インターフェースはプログラム実行前に定める必要があります。
|
3
|
+
インターフェースは共通の振る舞いを定義するものです。また、インターフェースはプログラム実行前に定める必要があります。プログラム実行中に変化されてはインターフェース(規格)としては当然使えなくなるのでプログラムを書く人が困ります。
|
4
4
|
|
5
5
|
よって、振る舞いが持つパラメータや戻り値には、**静的な型** を指定しなければなりません。
|
6
6
|
|
5
書式の改善
answer
CHANGED
@@ -15,10 +15,12 @@
|
|
15
15
|
#補足
|
16
16
|
|
17
17
|
hayataka2049 さんからのコメントを受け、回答内容を修正しました。
|
18
|
-
過去の回答はコメントから
|
18
|
+
過去の回答はコメントからトレースできるよう下記に残します。
|
19
19
|
|
20
|
-
|
20
|
+
---
|
21
21
|
|
22
|
+
# 前提
|
23
|
+
|
22
24
|
オブジェクト指向には `クラスベース` と `プロトタイプベース` の2種類があります。
|
23
25
|
|
24
26
|
両者の違いはオブジェクトの生成方法です。クラスベースは **クラスを通して生成(インスタンス化)** します。プロトタイプベースは **プロトタイプと呼ばれるオブジェクトをクローンして生成** します。
|
@@ -29,7 +31,7 @@
|
|
29
31
|
|
30
32
|
ここまでに述べた `静的な型` とは **プログラムの実行前から一意に決まっている型** のことで、`動的な型` とは **実行時の実際の値によって決まる型** のことです。静的な型を持つ言語はその性質上、コンパイルが必要な場合がほとんどです。
|
31
33
|
|
32
|
-
#
|
34
|
+
# 回答
|
33
35
|
|
34
36
|
インターフェースは内部に振る舞い(メソッド)を静的に定義します。よって、インターフェースを実装したオブジェクトは静的にその振る舞いを定義しなければなりません。
|
35
37
|
|
4
クラスベース/プロトタイプベースの説明をやめた
answer
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# 前提
|
2
2
|
|
3
|
+
インターフェースは共通の振る舞いを定義するものです。また、インターフェースはプログラム実行前に定める必要があります。もしプログラム実行中に変化されてはインターフェース(規格)として使えなくなってしまいます。
|
4
|
+
|
5
|
+
よって、振る舞いが持つパラメータや戻り値には、**静的な型** を指定しなければなりません。
|
6
|
+
|
7
|
+
`静的な型` とは **プログラムの実行前から一意に決まっている型** のことで、`動的な型` とは **実行時の実際の値によって決まる型** のことです。静的な型を持つ言語はその性質上、コンパイルが必要な場合がほとんどです。
|
8
|
+
|
9
|
+
# 回答
|
10
|
+
|
11
|
+
`JavaScript` は動的型付け言語なので、インターフェースを使用することができません。
|
12
|
+
|
13
|
+
インタフェースを利用した設計を行いたい場合は、`C#`や`Java`、`TypeScript` のようなオブジェクト指向かつ静的型付けな言語を使用する必要があります。
|
14
|
+
|
15
|
+
#補足
|
16
|
+
|
17
|
+
hayataka2049 さんからのコメントを受け、回答内容を修正しました。
|
18
|
+
過去の回答はコメントから追えるよう、下記に残します。
|
19
|
+
|
20
|
+
## 前提
|
21
|
+
|
3
22
|
オブジェクト指向には `クラスベース` と `プロトタイプベース` の2種類があります。
|
4
23
|
|
5
24
|
両者の違いはオブジェクトの生成方法です。クラスベースは **クラスを通して生成(インスタンス化)** します。プロトタイプベースは **プロトタイプと呼ばれるオブジェクトをクローンして生成** します。
|
@@ -10,7 +29,7 @@
|
|
10
29
|
|
11
30
|
ここまでに述べた `静的な型` とは **プログラムの実行前から一意に決まっている型** のことで、`動的な型` とは **実行時の実際の値によって決まる型** のことです。静的な型を持つ言語はその性質上、コンパイルが必要な場合がほとんどです。
|
12
31
|
|
13
|
-
# 回答
|
32
|
+
## 回答
|
14
33
|
|
15
34
|
インターフェースは内部に振る舞い(メソッド)を静的に定義します。よって、インターフェースを実装したオブジェクトは静的にその振る舞いを定義しなければなりません。
|
16
35
|
|
3
文章の修正
answer
CHANGED
@@ -6,8 +6,10 @@
|
|
6
6
|
|
7
7
|
例えば`C#`や`Java`、`TypeScript` のような言語はクラスベース、`JavaScript` はプロトタイプベースのオブジェクト指向をサポートしています。
|
8
8
|
|
9
|
-
クラスベースな言語はクラスを定義する性質上、静的な型を取り扱います。プロトタイプベースな言語には 糖衣構文等で疑似的にサポートされている場合を除き、本質的にはクラスが存在せず、静的な型も持ちません。全て動的な型として扱います。
|
9
|
+
クラスベースな言語はクラスを定義する性質上、静的な型を取り扱います。プロトタイプベースな言語には 糖衣構文等で疑似的にサポートされている場合を除き、本質的にはクラスが存在せず、静的な型も持ちません。全て動的な型として扱います。
|
10
10
|
|
11
|
+
ここまでに述べた `静的な型` とは **プログラムの実行前から一意に決まっている型** のことで、`動的な型` とは **実行時の実際の値によって決まる型** のことです。静的な型を持つ言語はその性質上、コンパイルが必要な場合がほとんどです。
|
12
|
+
|
11
13
|
# 回答
|
12
14
|
|
13
15
|
インターフェースは内部に振る舞い(メソッド)を静的に定義します。よって、インターフェースを実装したオブジェクトは静的にその振る舞いを定義しなければなりません。
|
2
文章の修正
answer
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
例えば`C#`や`Java`、`TypeScript` のような言語はクラスベース、`JavaScript` はプロトタイプベースのオブジェクト指向をサポートしています。
|
8
8
|
|
9
|
-
クラスベースな言語はクラスを定義する性質上、静的な型を取り扱います。プロトタイプベースな言語には 糖衣構文等で疑似的にサポートされている場合を除き、
|
9
|
+
クラスベースな言語はクラスを定義する性質上、静的な型を取り扱います。プロトタイプベースな言語には 糖衣構文等で疑似的にサポートされている場合を除き、本質的にはクラスが存在せず、静的な型も持ちません。全て動的な型として扱います。ここまでに述べた `静的な型` とは **プログラムの実行前から一意に決まっている型** のことで、`動的な型` とは **実行時の実際の値によって決まる型** のことです。静的な型を持つ言語はその性質上、コンパイルが必要な場合がほとんどです。
|
10
10
|
|
11
11
|
# 回答
|
12
12
|
|
1
静的な型がコンパイル必須とは限らない
answer
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
例えば`C#`や`Java`、`TypeScript` のような言語はクラスベース、`JavaScript` はプロトタイプベースのオブジェクト指向をサポートしています。
|
8
8
|
|
9
|
-
クラスベースな言語はクラスを定義する性質上、静的な型を取り扱います。プロトタイプベースな言語には
|
9
|
+
クラスベースな言語はクラスを定義する性質上、静的な型を取り扱います。プロトタイプベースな言語には 糖衣構文等で疑似的にサポートされている場合を除き、 本質的にはクラスが存在しないため、静的な型を持ちません。全て動的な型として扱います。ここまでに述べた `静的な型` とは **プログラムの実行前から一意に決まっている型** のことで、`動的な型` とは **実行時の実際の値によって決まる型** のことです。静的な型を持つ言語はその性質上、コンパイルが必要な場合がほとんどです。
|
10
10
|
|
11
11
|
# 回答
|
12
12
|
|