質問編集履歴

5

追記

2016/12/19 16:49

投稿

hanayamaKaoru
hanayamaKaoru

スコア36

test CHANGED
File without changes
test CHANGED
@@ -124,6 +124,8 @@
124
124
 
125
125
 
126
126
 
127
+
128
+
127
129
  追記
128
130
 
129
131
  ***
@@ -137,3 +139,11 @@
137
139
  あるinterfaceを継承したクラスAを利用するクラスBは
138
140
 
139
141
  classAではなくそのinterfaceに対してプログラミングをするという意味です
142
+
143
+ 逆に「実装に対してプログラミングしてはならない」なども書籍で数回目にしたのでテクニカルタームとしては一般的なのかと認識していました
144
+
145
+
146
+
147
+
148
+
149
+ [interfaceに対してプログラミングをする](http://promamo.com/?p=2241)

4

code追加

2016/12/19 16:49

投稿

hanayamaKaoru
hanayamaKaoru

スコア36

test CHANGED
File without changes
test CHANGED
@@ -26,8 +26,114 @@
26
26
 
27
27
 
28
28
 
29
+ ###「interfaceに対してプログラミングをする」ことはできないcode
30
+
31
+ *コンクラスタなどは省く
32
+
33
+ *Ownerもinterfaceを継承して実装を書くべきだとは思うが省く
34
+
35
+
36
+
37
+ interfaceに対してプログラミングをするならば
38
+
39
+ Ownerクラスにおいて
40
+
41
+ private Animal dog; とすべきだが
42
+
43
+ その場合dog.getName()などとはできない
44
+
45
+ そのため
46
+
47
+ > getterやsetterが必要になるようなクラスに対しては
48
+
49
+ interfaceをimplementsした抽象クラスにsetterとgetterを追加して
50
+
51
+ 「抽象クラスに対してプログラミングをする」を行えば良いのでしょうか
52
+
53
+
54
+
55
+ と質問した次第です
56
+
57
+
58
+
59
+ *クラスのフィールドにMap型を採用して全てそこにpropertiesを入れるのであれば
60
+
61
+ interfaceにgetProperties()やgetProperty(String key)を定義することも可能だと思いますが
62
+
63
+ ```java
64
+
65
+ public interface Animal{
66
+
67
+ public void eat();
68
+
69
+ }
70
+
71
+
72
+
73
+
74
+
75
+ public class Dog implements Animal{
76
+
77
+ private String name;
78
+
79
+
80
+
81
+
82
+
83
+ @Override
84
+
85
+ public void eat(){
86
+
87
+ System.out.println("ガブガブ");
88
+
89
+ }
90
+
91
+ public String getName(){
92
+
93
+ return name;
94
+
95
+ }
96
+
97
+ public void setName(String name){
98
+
99
+ this.name = name;
100
+
101
+ }
102
+
103
+
104
+
105
+ }
106
+
107
+
108
+
109
+
110
+
111
+ public class Owner{
112
+
113
+ private Dog dog;
114
+
115
+ /**/
116
+
117
+ /*略*/
118
+
119
+ }
120
+
121
+ ```
122
+
123
+
124
+
125
+
126
+
29
127
  追記
30
128
 
31
129
  ***
32
130
 
33
131
  interfaceの利用方法・手順ではなく作法としてどうなのかということについてお聞きしたいです
132
+
133
+
134
+
135
+ 「interfaceに対してプログラミングをする」とは
136
+
137
+ あるinterfaceを継承したクラスAを利用するクラスBは
138
+
139
+ classAではなくそのinterfaceに対してプログラミングをするという意味です

3

文章修正

2016/12/19 16:26

投稿

hanayamaKaoru
hanayamaKaoru

スコア36

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,9 @@
4
4
 
5
5
 
6
6
 
7
- interfaceにはgetterやsetterは基本的にはすべきではない(まだ存在しないフィールドのためメソッドを用意することになる)ので
7
+ interfaceにはgetterやsetterは基本的にはすべきではない(
8
+
9
+ まだ存在しないフィールドのためのメソッドを用意することになる)ので
8
10
 
9
11
  getterやsetterが必要になるようなクラスに対しては
10
12
 
@@ -20,4 +22,12 @@
20
22
 
21
23
 
22
24
 
23
- ご意見、訂正をお願いします
25
+ ご意見をお願いします
26
+
27
+
28
+
29
+ 追記
30
+
31
+ ***
32
+
33
+ interfaceの利用方法・手順ではなく作法としてどうなのかということについてお聞きしたいです

2

誤解生む表現の訂正

2016/12/19 15:41

投稿

hanayamaKaoru
hanayamaKaoru

スコア36

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- interfaceにはgetterやsetterは基本的には定義できない(すべきではない)ので
7
+ interfaceにはgetterやsetterは基本的にはすべきではない(まだ存在しないフィールドのためメソッドを用意することになる)ので
8
8
 
9
9
  getterやsetterが必要になるようなクラスに対しては
10
10
 

1

文章修正

2016/12/19 15:32

投稿

hanayamaKaoru
hanayamaKaoru

スコア36

test CHANGED
File without changes
test CHANGED
@@ -6,9 +6,13 @@
6
6
 
7
7
  interfaceにはgetterやsetterは基本的には定義できない(すべきではない)ので
8
8
 
9
+ getterやsetterが必要になるようなクラスに対しては
10
+
9
11
  「interfaceに対してプログラミングをする」ことはできないと思うのですが
10
12
 
13
+
14
+
11
- getterやsetterが必要になるようなクラスに対しては
15
+ ならば、getterやsetterが必要になるようなクラスに対しては
12
16
 
13
17
  interfaceをimplementsした抽象クラスにsetterとgetterを追加して
14
18