一昔前にオブジェクト指向という言葉が全盛期だった時代に、新人や入社2,3年程向けのシステムエンジニアに、コードを小さく分割して共有化していくという手法を推奨した教育があったように思います。
けれども、その手法をゴリゴリに使って作っているシステムが更新期を迎えて、修正作業の為に、その開発にタッチをした事の無いエンジニアがプログラムを確認しようとした時に何が待っているかというと…
自作のオレオレ関数の中に、さらに複数の自作関数が入りまくって、変数一つの流れを追うのも難儀する事になり、地獄の炎上が待っています。
しかも、自作関数の機能のコメントは大雑把で、プログラム内で使われた、一つ一つの変数の役割の説明が無い場合が多いのではと思います。
そして、コードの分割と共有化は保守性が良いという理由ですが、これも大きく間違っています。
実際の修正を行う現場では、自作関数だらけの中でコードの共有化をされていた場合には、特定機能の修正をしたくても、他の共有化された部分にも影響が出てしまう為に 非常な厄介な作りとなります。
その為に、同じコードを、2度以上記述してはいけないという、意味不明なカルトじみた信仰は、WindowsOSなども、まだ存在しない、記憶容量が、KBレベルで工夫をしなければならない数十年前の話だと思います。
現在に、後の修正作業をするエンジニアの事を考えた「まともな作り」をするなら、自作関数の中には自作関数を入れない事が大前提だと思います。
そして、自作関数には、プログラム言語の標準関数のように説明書を丁寧に作成します事と、プログラム内で使った変数は、フラグ用も含めて全て可能なかぎり使用方法を記述した方が良いように思います。
おそらく、PMやPLが、最初に内部設計を作った後に、開発中に発生する、自作関数や変数の説明を定期的に報告してもらい、それを設計書に逐次追加していくような形式が良いように思うのですが・・・
現在のエンジニアの開発現場で、こういう考え方が浸透して、過剰なオブジェクト指向によるコードの分散と共有化という大きな間違いに気が付いてくれるにはどうすれば良いのでしょうか・・・?
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
「自作関数」と「自作じゃない関数」の違いは何?って話ですね。
まぁ「自作関数ガー」とか言っている時点で問題点が手前にあるということを自白しているのだとは思いますけど、それをオブジェクト指向のせいだと転嫁するのは感心しません。No.7
- 回答日時:
>コードを小さく分割して共有化していくという手法
OOPから何でそんな話になるのか解りません。
OOPに限らず、処理のスコープは特に共通/公開用のものを除いて極力狭く
するのが普通。共有化は同じ様な処理が3ヶ所以上現れて初めて検討を始めるもので、当然分かりやすい/使い易い形でかつ良いドキュメントで提供しなければなりません。OOPとは全く無関係な話です。プロジェクトの統制が出来ておらず、実装規約が守られていないということ。あるいはそういう規約さえ未整備ということなんでしょう。
No.6
- 回答日時:
APIのクラス設計のプロセスが間違ってるんでしょうね。
オブジェクト指向が悪いのではなく、圧倒的にやり方が誤ってる。
オブジェクト指向の意義は、構造化プログラミングにおいてコードを細分化することではありませんので。
No.5
- 回答日時:
No.2です
前のは、ちょい文章が長かったので、もっと簡単な言い方をします。
オブジェクト指向脳というか、オブジェクト指向のルールがあってもいいと思います。
でも、それだけじゃあなく、それ以前からあって、情報処理試験の問題にも出ていた「複合設計」に出てくるルールを学んで守ることにすればいいかなと思います。
No.4
- 回答日時:
オブジェクト指向と言うよりもっと基本的な設計部分の話な気がします。
PMやPLが「関数を作る時は適切なコメントを記述すること」や「変数のスコープを広げ過ぎた場合は目的をコメントすること、他の手段を考えること」を明文化しなかったのが間違いで、それを理解できるメンバーが足りなかったんじゃないでしょうかこれってオブジェクト指向の問題なのかなぁ?とか思います。
「じゃあどうすれば良かったのか」と。
オブジェクト指向は設計とリファクタリングを簡単にするためのもので、普通のコピペプログラマにはもしかしたら難易度が高いのかもしれないです。
No.3
- 回答日時:
もっといい開発手法を提言するとか
色んな意見はあると思うけど、そもそも、学習コストとメンバーの能力が見合ってないせいでそうなってるんじゃないのと思う
コードレビューをうまく入れれば良いし、この質問の内容はもうどっちかって言うとオブジェクト指向の問題じゃあない気がする。
で、そんな依存関係が凄まじくて容易に修正できないってことは開発時に「メンテナンスを諦めて、開発速度を重要視した」と言うだけじゃないかな
当然メンテの際は文句言いながらやるしかない
そこまで大規模なプロジェクトに関わらないのが安牌じゃないかな
No.2
- 回答日時:
>>コードを小さく分割して共有化していくという手法を推奨した教育があったように思います。
うん?「コードを小さく分割」ってのは書籍でも目にしましたが、「共有化」ってのは目にしませんでした。
>>実際の修正を行う現場では、自作関数だらけの中でコードの共有化をされていた場合には、特定機能の修正をしたくても、他の共有化された部分にも影響が出てしまう為に 非常な厄介な作りとなります。
そういう意味での「コードの共有化」については、初期のオブジェクト指向では、あまり言及されていなかったと思います。
もし、その特定機能の修正をしたら、他の部分にも影響が出るとなれば、オブジェクト指向の失敗、あるいは、オブジェクト以前のモジュール化、関数化の失敗ということでしょうねえ。
>>過剰なオブジェクト指向によるコードの分散と共有化という大きな間違いに気が付いてくれるにはどうすれば良いのでしょうか・・・?
過剰なオブジェクト指向というよりも、「まちがったオブジェクト指向」に気づくってことかな?
ちなみに、某社で過去においてオブジェクト指向が大流行した頃に開発されたC++アプリにおいて、質問者さんの指摘されるような問題が発生していました。
結局、そのアプリは数億の開発費を費やしましたが、完成直後のレビューで、GUIに大修正が必要になったのですが、それが無理ってことでボツになったことありましたね。
No.1
- 回答日時:
オブジェクト指向で開発するいいところは実装を隠蔽してるところ。
あなたの書いてること読むと特定機能の修正は影響範囲が見えないから怖くてできないみたいなことになってるけど、それって全然実装を隠蔽できてないよね。
要するにオブジェクト指向が間違ってるんじゃなくて、あなたの直面している現場が壮大な間違いをやらかしてるだけですね。世の中で起きてるんじゃなくて「おま環」て奴。
どうすればいいかって言うと、オブジェクト指向に対する正しい認識を身につけて実践しましょうってことになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- C言語・C++・C# C言語の関数と配列に関する質問 8 2024/02/27 15:45
- 物理学 時間を語るなら、(複数の時間の正体)を知る必要が有る。 1 2023/02/16 22:14
- Excel(エクセル) エクセル関数に詳しい方、教えてください(テキスト関数と条件付書式) 1 2024/04/11 02:44
- 哲学 説得力を修辞の巧みさまたは論理の強さの2つに分析するにはどうすると良いでしょうか? 0 2022/07/20 05:46
- 新卒・第二新卒 新卒2年目 転職について 5 2023/12/29 00:57
- その他(プログラミング・Web制作) PythonのTkinter詳しい方へ。画像や言葉の意味を答える3択クイズを作るのに手間取っています 1 2023/12/04 17:10
- 統計学 加重最小二乗法=①「変数を自然対数変換」=②「誤差項の分散の逆数を重み付け」? 8 2022/11/26 11:15
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Excel(エクセル) 【Excel(エクセル)】複数シートで名簿管理したいです(数式?マクロ?) 3 2023/11/03 08:01
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
とっておきの「まかない飯」を教えて下さい!
飲食店で働く方だけが食べられる、とっておきの「まかない飯」。 働いてらっしゃる方がSNSなどにアップしているのを見ると、表のメニューには出てこない秘密感もあって、「食べたい!!」と毎回思ってしまいます。
-
AIの登場でプログラマーたちが解雇されていますが
その他(プログラミング・Web制作)
-
楽しくて最高のプログラミング言語を作りたいのですが、そもそもプログラミング言語を作る意味なんてないと
その他(プログラミング・Web制作)
-
0 == False はいいけど
C言語・C++・C#
-
-
4
プログラミング ソースコード
その他(プログラミング・Web制作)
-
5
40代後半でゼロからのプログラム業界への転職
その他(プログラミング・Web制作)
-
6
プログラミング
その他(プログラミング・Web制作)
-
7
プログラマーと学歴の関係性について
その他(プログラミング・Web制作)
-
8
プログラム言語について c言語もコードによって機械語に通訳されると知りました。直接機械が通訳しなくて
C言語・C++・C#
-
9
どちのほうがすきですか?
C言語・C++・C#
-
10
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
11
なんかC言語でプログラム書いてると脳汁というかエクスタシーというかなんかすげえ気持ちいいんですけどな
C言語・C++・C#
-
12
CPUが16bitでも32bitOSでコンパイルしたコード(例えばintが4バイトと定義されている)
C言語・C++・C#
-
13
プログラマーは誘惑にさらされる人生?
その他(プログラミング・Web制作)
-
14
10進数からN進数に変換するプログラミング(C言語)
C言語・C++・C#
-
15
逆コンパイルと逆アセンブルの違いはなんですか
C言語・C++・C#
-
16
システムエンジニアの適正について
C言語・C++・C#
-
17
[C言語]fputsとfprintfの違い
C言語・C++・C#
-
18
c言語
C言語・C++・C#
-
19
C言語 配列と関数の練習問題
C言語・C++・C#
-
20
小学1年生の子です。塾に行かせるのは難しいので、自宅で学べたらと思うのですが、子供にプログラミングを
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
1日に1人がこなせるプログラム...
-
access2021 VBA メソッドまたは...
-
SQL
-
変数名「cur」について
-
1、Rstudioで回帰直線を求める...
-
VBA 現在のセル番地を記憶、復...
-
ASCIIコードを文字に変換したい
-
Exel VBA 別ブックから該当デ...
-
ユーザーフォームに2つのコン...
-
Excel VBAでOpenTextのFieldInf...
-
Visual BASIC イベント作成しよ...
-
Nullの使い方が不正です。
-
access2003 クエリSQL文に...
-
マクロ 連続印刷
-
改ページ
-
videopadについて
-
セレクトボックスで年月日を指...
-
JavaScriptの定数名が取り消し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
1日に1人がこなせるプログラム...
-
JavaScriptの定数名が取り消し...
-
access2003 クエリSQL文に...
-
Nullの使い方が不正です。
-
sinカーブの表示のさせ方
-
access2021 VBA メソッドまたは...
-
IF文、条件分岐の整理方法
-
COBOLの文法
-
変数名「cur」について
-
Exel VBA 別ブックから該当デ...
-
【VB6】実行ファイルとした後、...
-
Excel VBA素人です。VBAで図形...
-
ペンダントライトのコードの色...
-
VBAでファイルオープン後にコー...
-
PreviewKeyDownイベントが2回...
-
ACCESSユニオンクエリでORDER B...
-
VB6のComboBox関連の書き方をVB...
-
Access DCountでの連番について
おすすめ情報