質問編集履歴

10

結論を追加

2019/04/09 00:04

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,24 @@
1
+ ### 結論
2
+
3
+ クラスを作成し`static`なメンバ関数を利用する方法と`namespace`を定義して非メンバ関数を利用する方法で悩みましたが、
4
+
5
+ 最終的にnamespaceを定義する方向がよいのではないかという結論に至りました。
6
+
7
+
8
+
9
+ - クラスはメンバ変数を追加したり利用したり出来るので「ついうっかり」神クラス化してしまうリスクがある
10
+
11
+ - 汎用ライブラリでも同じ手法がとられている
12
+
13
+
14
+
1
- 宜しくお願い致します。
15
+ ことが理由です。
16
+
17
+
2
18
 
3
19
  ### 前提・実現したいこと
20
+
21
+ 宜しくお願い致します。
4
22
 
5
23
 
6
24
 

9

見やすく?変更

2019/04/09 00:04

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -62,11 +62,27 @@
62
62
 
63
63
 
64
64
 
65
- - クラスを作ってメンバ関数として実装(MyThresold()関数のみをメンバに持ち、メバ変数ももたないごく短いクラスになるでしょう)
65
+ > - Utilityクラスを作っちゃうパターン
66
66
 
67
- - クラスを作って`public:static`属性のついた関数として実装
67
+ > クラスを作ってメンバ関数として実装
68
68
 
69
+ > MyThresold()関数のみをメンバーに持ち、メンバ変数も活用しないごく短いクラスになるでしょう。
70
+
71
+ >
72
+
73
+ > - 静的関数だけのUtilityクラスを作っちゃうパターン
74
+
75
+ > クラスを作って`public:static`属性のついた関数として実装。
76
+
77
+ > 個人的にはここまでするとクラスとして定義する理由が希薄に感じます。
78
+
79
+ >
80
+
81
+ > - オブジェクト指向とは?パターン
82
+
69
- - `namespace`を定義してその中に非メンバ関数(free-function)として実装
83
+ > `namespace`を定義してその中に非メンバ関数(free-function)として実装
84
+
85
+ > クラスの旨みを使わないならクラスを使わなければいいんだ!的な発想。将来的にどうなってしまうか3つの中でもっとも想像のつかないパターンです。
70
86
 
71
87
 
72
88
 

8

気になった記述を修正

2019/04/08 06:04

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -62,11 +62,11 @@
62
62
 
63
63
 
64
64
 
65
- - クラスを作って関数として実装(MyThresold()関数のみをメンバーに持ごく短いクラスになるでしょう)
65
+ - クラスを作ってメンバ関数として実装(MyThresold()関数のみをメンバーに持ち、メンバ変数ももたないごく短いクラスになるでしょう)
66
66
 
67
67
  - クラスを作って`public:static`属性のついた関数として実装
68
68
 
69
- - `namespace`を定義してその中にどのクラスにも属さない関数(free-function)として実装
69
+ - `namespace`を定義してその中に非メンバ関数(free-function)として実装
70
70
 
71
71
 
72
72
 

7

文章を追加

2019/04/08 05:43

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -64,13 +64,17 @@
64
64
 
65
65
  - クラスを作って関数として実装(MyThresold()関数のみをメンバーに持つごく短いクラスになるでしょう)
66
66
 
67
- - クラスを作って`static`属性のついた関数として実装
67
+ - クラスを作って`public:static`属性のついた関数として実装
68
68
 
69
- - `namespace`を定義してその中にどのクラスにも属さない関数として実装
69
+ - `namespace`を定義してその中にどのクラスにも属さない関数(free-function)として実装
70
70
 
71
71
 
72
72
 
73
73
  の3パターンが思いつくのですがどの手法がよいか、または別に適切な方法があればご教授ください。
74
+
75
+ どの方法がどう駄目か、という意見でもありがたいです。
76
+
77
+ 正しい方法は場合によりけりと思いますが、基本的な方針を決めることでコードの品質を上げられると思っています。そのために皆様にご意見を頂けると助かります。
74
78
 
75
79
 
76
80
 

6

サンプルソースの修正

2019/04/08 04:26

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,9 @@
22
22
 
23
23
  ```c++
24
24
 
25
+ // 20190408 ソースに戻り値の型がない問題、宣言していない変数を使っている点を変更しました。
26
+
25
- CImgPrf::MyThreshold(cv::Mat & srcImg)
27
+ cv::Mat CImgPrf::MyThreshold(const cv::Mat & srcImg, const int lowThreshold, const int hightThresold)
26
28
 
27
29
  {
28
30
 
@@ -36,7 +38,7 @@
36
38
 
37
39
  cv::Mat binImg;
38
40
 
39
- cv::threshold(gryImg, binImg, lowerThreashold, upperThreshold, CV_THRESH_BINARY);
41
+ cv::threshold(gryImg, binImg, lowThreshold, hightThresold, CV_THRESH_BINARY);
40
42
 
41
43
  return binImg;
42
44
 

5

タイトルを抽象性の高い質問である旨わかるよう変更

2019/04/08 03:08

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
@@ -1 +1 @@
1
- Utilityクラスを作らないようにしたい
1
+ (プログラミングの手法、方針について)Utilityクラスを作らないようにしたい
test CHANGED
File without changes

4

こういう質問はクローズしないまま放置されているパターンがあるのでクローズ条件明記

2019/04/05 08:04

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -72,6 +72,14 @@
72
72
 
73
73
 
74
74
 
75
+ ###当質問のクローズ条件
76
+
77
+
78
+
79
+ もし回答をいただけなくても1週間程度でクローズします。
80
+
81
+
82
+
75
83
  ### 補足情報(FW/ツールのバージョンなど)
76
84
 
77
85
  - VC++

3

例示した関数名がopencvと関数がかぶってしまうので修正(頭文字が大文字小文字の違いはあるが紛らわしい)

2019/04/05 08:03

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  ```c++
24
24
 
25
- CImgPrf::Threshold(cv::Mat & srcImg)
25
+ CImgPrf::MyThreshold(cv::Mat & srcImg)
26
26
 
27
27
  {
28
28
 
@@ -60,7 +60,7 @@
60
60
 
61
61
 
62
62
 
63
- - クラスを作って関数として実装(おそらくごく短い関数になるでしょう)
63
+ - クラスを作って関数として実装(MyThresold()関数のみをメンバーに持つごく短いクラスになるでしょう)
64
64
 
65
65
  - クラスを作って`static`属性のついた関数として実装
66
66
 

2

誤字修正

2019/04/05 07:47

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -9,6 +9,8 @@
9
9
 
10
10
 
11
11
  Utilityクラスを作らないようにしたい
12
+
13
+
12
14
 
13
15
  仮に、
14
16
 
@@ -58,20 +60,20 @@
58
60
 
59
61
 
60
62
 
61
- - クラスを作って関数として実装
63
+ - クラスを作って関数として実装(おそらくごく短い関数になるでしょう)
62
64
 
63
- - クラスを作ってstatic属性のついた関数として実装
65
+ - クラスを作って`static`属性のついた関数として実装
64
66
 
65
- - namespaceを定義してその中にどのクラスにも属さない関数として実装
67
+ - `namespace`を定義してその中にどのクラスにも属さない関数として実装
66
68
 
67
69
 
68
70
 
69
- の3パターンが思いつくのですがどの手法がよいか、またはどれも最でなくより適切な方法があればご教授ください。
71
+ の3パターンが思いつくのですがどの手法がよいか、または別に適切な方法があればご教授ください。
70
72
 
71
73
 
72
74
 
73
75
  ### 補足情報(FW/ツールのバージョンなど)
74
76
 
75
- - CV++
77
+ - VC++
76
78
 
77
79
  - VisualStudio2015 SP1

1

途中で投稿してしまったので追記

2019/04/05 07:44

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -22,17 +22,23 @@
22
22
 
23
23
  CImgPrf::Threshold(cv::Mat & srcImg)
24
24
 
25
+ {
26
+
27
+ //グレースケール化
28
+
25
29
  cv::Mat gryImg;
26
-
27
- //グレスケ化
28
30
 
29
31
  cv::cvtColor(srcImg, gryImg, CV_BGR2GRAY);
30
32
 
31
33
  //2値化
32
34
 
33
- cv::Mat binImg;
35
+ cv::Mat binImg;
34
36
 
35
37
  cv::threshold(gryImg, binImg, lowerThreashold, upperThreshold, CV_THRESH_BINARY);
38
+
39
+ return binImg;
40
+
41
+ }
36
42
 
37
43
 
38
44