電子書籍の厳選無料作品が豊富!

質問①
 何でテレビオブジェクトにアクセルペダルが付いているのですか?
 そうするとプログラミング効率が上がるのですか?
 何で誰もそんなもの取り払えと言わないのですか?

質問②
 何で開発環境がことごとく重いのですか?
 そうするとプログラミング効率が上がるのですか?

質問③
 Webシステム開発で使うフレームワークが何種類も生き残っているのはなぜですか?
 なぜいつまで経っても淘汰され切れず、いいとこ取りした決定版が出来ないのですか?

質問④
 ソースコードlが
 cfbjikdnbdznb.szrgug(xfjj.xfhcfh(cfxgjcfjy.xdghdgh(hkgj,xfhjxhf.fgjnfhnj,fhjfhyj.sfgsg)))
 のように、長い文字と点がいっぱいあるのはなぜですか?
 こうなっているとプログラミング効率が上がるのですか?

質問者からの補足コメント

  • ①を補足します。
    Visualstudio等で"オブジェクト名."をキー入力すると、
    プロパティやオブジェクトの候補がたくさん出てきます。

    エディタが有用そうな候補を出そうと頑張っているのは解りますが、
    そもそも、オブジェクトが無用なプロパティ/メソッドを多く含んでいるのは、
    クラス設計から失敗している、いやもっと言えば、
    クラスという概念には致命的な欠陥があるのではないか?と思ったのです。

    テレビを作るとき、アクセルペダルを付けるでしょうか?
    そんなシュールな製品を皆欲しいと思うでしょうか?

      補足日時:2016/05/14 21:14
  • ①に関して
    ・No.5さんのご回答により、各オブジェクトは無用のプロパティ/メソッドを持たない事がわかりました。
    ・No.4さんの回答より、汎用性を重視した結果、ソースが解りにくい傾向を示すことがわかりました。

    例えばVB .net のListBoxは160個のプロパティ/メソッドを持っています。
    私は、この160個うちの殆どが無用のものであると思っていましたが、それは違うという事がわかりました。

    しかし、やはりこの160候補がエディタで表示された瞬間、私は「ふざけるな」と感じます。
    たかがListBoxに160種類もの指示がある事に、どうしても納得がいかないのです。

    デジタル腕時計が流行り始めた頃、自分の時計の機能が多さを競いあう場面があったりしまたが、そんな気持ちで機能を増やしているとしたら、私にとっては迷惑千万です。

    この160個という数は、仕方なくそうなったのでしょうか。

      補足日時:2016/05/15 02:09

A 回答 (7件)

分かるところだけ



②:人間は楽をしたいものです。また、前よりも複雑で難しい処理、高度な処理をプログラムにやらせたいと思うもの。
やるべきことが100から1000に増えたとき、人間が楽するなら、増分はコンピュータ、つまり開発環境にやってもらうしかない。
それで、どんどん開発環境は重くなりました。
でも、コンピュータの処理能力は、CPU高速化、メモリー・HDDの大容量化、高速化したため、トータルとしてプログラミング効率はアップしました。

③:Webシステムに限りませんが、現在稼働中のシステムは、今後しばらくはメンテしながら使い続けられます。
「あんな腐ったフレームワークなんて捨てちまえ!!」と思う人もいるでしょうが、それが無いとメンテナンスできませんから使われますよね?
そのメンテ担当者は、今年新卒の派遣プログラマさんかもしれない。となれば、「腐ったフレームワーク」だとしても、勉強するために本が売れるかもしれません。
少なくともフレームワークを必要とするプログラマが1人増えることは確かです。そして腐ったものは生き延びます。

「いいとこどりした決定版」までは行かなくとも、「腐った」よりもましな「腐りかけ」の別のフレームワークは誰かが作っていると思います。
でも、「腐ったもの」で作られた既存システムを「腐りかけ」のフレームワークに乗せかえると、修正工数が発生します。再テストも必要です。
新規開発するほどの要望と予算があれば、いいとこどりしたフレームワークが使われるかもしれませんが。

ということでフレームワークではありませんがJavaのような腐った言語で作られたレガシーシステムでさえも、使い続けられるのです。
某銀行のように予算がある部門では、トラブル原因となるJavaを捨てて、COBOLでシステムを作り直すこともあるみたいです。

④:プログラミング効率、言い換えると開発効率を上げるためには、新規開発を減らす必要があります。

例えば、新築の一戸建てを建てる、あるいは、30部屋あるマンションを新築するっていうとき、大きな手間(予算)を食うのが水回りです。
もし、大工さんが台所やお風呂場のサイズに合わせて、手作りするなら、金額も上がるし、工事期間も長くなります。
でも、住宅機器メーカのカタログにある売れ線のシステムキッチン、ユニットバスを使えば、金額を安く、工期を短くできます。

つまりは、ゼロから作るのでなく、事前に作られた部品を組み合わせれば、開発効率がアップするということです。

とはいえ、そこに住む人にとって、一生の買い物となる家であれば、カタログにあるセットでは、満足できませんよね?
「このキッチンの上収納は、電動で上下する可動式にしてくれない?コンロは料理好きの妻の要望で、IHじゃあなくガスコンロにして欲しい」
「組み込みの食洗機はいらない、かわりに調味料などが入れられるような収納にして欲しい」
なんて、一部の不要なものを削って、代わりに別の部品を差し込めるようにしてあれば、お客様の要望に素早く対応できます。

そんなお客様の細かなオプション要望を書類にまとめると、システムキッチンだけで20個くらいの記入欄が必要になるかもしれません。

そして、プログラムも同じことが起こっているわけです。そのため、ソースコードのある関数のパラメータが、最初は3個だったかもしれませんが、要望に応えるために関数(部品)の拡張をし続けた結果、10個とか15個になったりするのです。

それでも、そのプログラム部品を使わず、パラメータが少なくて済むようなパーツを新規で作るよりは、はるかにプログラミング効率がアップします。

ちなみに、オブジェクト指向の延長線では、このようなパラメータの数が増える「パラメータ地獄」を防ぐことはできません。
でも、ラムダ式という構文を導入すれば、この地獄をある程度防ぐことが可能になります。

C#では、2007年からラムダ式が使えるようになりました。
Javaは、C#で使われるラムダ式を横目でみながら、「あれいいなあ、Javaにも欲しいよおおおおお」と嘆き、やっとのことで2014年のJava8からラムダ式が使えるようになりました。

時代に遅れるJavaを使い続けるのは、メンテするからとか、就職に有利という考えなら仕方ありませんが、そういうしがらみが無いなら、情弱ってことかもしれません。
    • good
    • 0

>>たかがListBoxに160種類もの指示がある事に、どうしても納得がいかないのです。



たしかに、「たかがListBoxのために160種類もの指示って・・・」って思う部分もありますよね?
でも、プログラムを使うユーザ側の立場からすると、細かな部分でいろんな注文がでるわけです。
それらのすべてに答えようとしたとき、共通部品(クラス)に対する指示は、どうしても増えてしまいます。

というか、自分が使うプログラムを作っているときでさえ、マイクロソフト提供のクラスのプロパティやメソッドが足りないので、プロパティを追加したり、継承クラスを作ることがあったりしますので、160種類になっていても、「しゃあないなあ」と思っています。

以前、DOS環境でつかうアプリ用の共通部品(米国製)のソースをみていたとき、「こんなに設定値が多いのって、めんどくさいなあ」なんて思っていたことありましたけど、いざ共通部品をつかって実用のアプリを作り出すと、「足りない機能を、この部品に追加したいけど、影響範囲が広範囲だからどうしよう?」なんて悩んだりしました。
まあ、長い時間かけて、そのCソースと格闘し、GUI部分の機能拡張をしましたけど、現在のC#であれば、似たようなものが極めて短期間に完成させることができてしまいます。

ところでC#の源流を探ると、今は無きボーランド社のDelphiにたどり着くそうです。
Delphiを始めて使ったとき、その機能に驚いたものですけど、最近は、C#の拡張された機能を応用することで、いままで思ってもみなかったようなことが可能となり、生産性が大幅アップして、その当時と同じような驚きを感じることがありますね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

共通部品に対する指示が160種類あるのは仕方が無いという事を、
C#を使った時のフィーリングや、楽しさと共に示して頂けたと思います。

丁寧なご回答や体験談を頂けた事に感謝し、
最初に頂いたNo.1の回答をベストアンサーとさせていただきます。

お礼日時:2016/05/15 11:27

>ListBoxは160個のプロパティ/メソッドを持っています。



多くはControlから継承しているはず。
描画や配置、イベントを考えるとこんなものですよ。
このくらいでびびってはいけません。
GUI部品というのは共通部分が結構複雑なんです。

大部分は共通なので、個別に覚えることは
僅かです。大変なのは最初だけです。

因みに腕時計の比喩は不適切でしょう。
電子部品のデータシートを思い浮かべるのが適切。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>大部分は共通なので、個別に覚えることは
>僅かです。大変なのは最初だけです。
この一文から、クラス階層の上流から順に理解すればプロパティ/メソッドの数に納得が行きそうな気がしてきました。

>因みに腕時計の比喩は不適切でしょう。
>電子部品のデータシートを思い浮かべるのが適切。
この一文から、無駄な機能の押し付けの類ではなく、本当に必要な物を吟味して実装しているのだと理解しました。

お礼日時:2016/05/15 11:14

>>そもそも、オブジェクトが無用なプロパティ/メソッドを多く含んでいるのは、


クラス設計から失敗している、いやもっと言えば、クラスという概念には致命的な欠陥があるのではないか?と思ったのです。

無用なプロパティ/メソッドなんて無いと思います。
ただ、メソッドの機能拡張などによって、使われなくなった古いプロパティ・メソッドっていうものはあるでしょうね。

新規開発する方からみれば、それらは”無用なプロパティ・メソッド”に思えるかもしれませんが、古いバージョンから使っている人にとっては、それらは”必要なプロパティ・メソッド”となります。


そして、マイクロソフトでは、質問者さんと同じように、「古いプロパティ・メソッドが表示されるなんて邪魔なだけだ!」と考える人がいるので、ある程度バージョンが進んだ段階で、そういうプロパティ・メソッドは削除されています。

ですので、勉強のために、ネットで探したサンプル・プログラムをビルドしようとすると、「そんなプロパティ・メソッドは無いよ!」と怒られたりしました。
「ネットで公開しているのだから、このサンプルって動いていたはずだよなあ??」と疑問に思って、改めてサイトの日付を見ると、しばらく前の古い日付だったりしますね。

なお、クラスという概念は有用ですけど、最近のC#では、開発手法においてクラスの地位は低くなって、ラムダ式やLinqとかリフレクション、そして、メタ・プログラミングの技法が重視されているように感じられますね。
なんというか、古い”クラス”という定番商品のみに注目しすぎて、2倍、3倍、あるいは10倍の開発効率アップを生み出す、これらの新しいテクニックが無視されているという感じがしてしまいます。

そういう点からみると、「クラスという概念には致命的な欠陥があるのではないか?と思ったのです」という質問者さんの考え方は、現象的に当たっている部分があるっていえるかもしれません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>無用なプロパティ/メソッドなんて無いと思います。
試しに、VB .net 2015でListBoxのプロパティ/メソッド候補を表示させてみました。
この場合は160個ほど表示されますが、これらの全てにはListBoxの操作に関してそれなりの意味があるものと理解しました。
この中から、使いたいものを使えばよいと思います。

開発効率アップをもたらす新しいテクニックがあるとのことで、そちらも調べてみたいと思います。

お礼日時:2016/05/15 01:36

>Visualstudio等で"オブジェクト名."をキー入力すると、


>プロパティやオブジェクトの候補がたくさん出てきます。

う~ん、.netの話なんだろうか?
全く具体性がないので何が失敗だとかんじているのか
見当もつきませんね。

私もフレ-ムワーク設計をしたことがありますが、
ソ-スの解りやすさと汎用性/再利用性は相反するもの。
検索した程度でわかるはずありません。そんなミクロレベルの
話より前に、まず設計の基本方針と目的の理解が必要です。
    • good
    • 0

No.1です



④の質問を勘違いしていました。
パラメータの数が多いのじゃあなく、長い修飾子になっていることが質問でしたね。

オブジェクト指向になってソフトの部品化が進んでゆくと、おおざっぱに見て同じ機能だけど、細かな部分で機能の違うソフトの在庫部品がどんどん増えてきます。
それらの部品を重複しない名前で管理するとなると、WebのURLと同じように点で切られた長い文字列になってしまいます。

また、短い名前だと、似たようなソフト部品がまったく同じ名前になる可能性が増えます。
長い名前にすれば、重複するのを防ぐことができます。

プログラミング効率としては悪くなりますけど、必要悪ですね。

対策として、タイピング数を減らすために、マイクロソフトのVisualStudioでは、強力な文字補完機能が導入されています。
これでタイプ数が減ると同時に、タイプミスを減らすことに大きく役立っています。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
おかげさまで、③④における諸事情を理解しました。

②は各開発環境が欲する機器の仕様を再度確認するとして、
①について補足を追記したことを、この場を借りてお知らせ致します。

お礼日時:2016/05/14 22:08

質問① 何のはなし?


質問② 今時i5以上なら何を使っても重くないです。
セレロンならあきらめましょう。
質問③ 用途、規模、使い方により必要とされるものが違うから。
質問④ わかり安いコードは饒舌です。
饒舌なコードは簡潔だけど、名前は長くなります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!