お願いします。言語は問いません。
オブジェクト指向言語じゃなくても
オブジェクト指向の話であれば問題ありません。
オブジェクト指向の活用方法を教えて下さい
■ このスレッドは過去ログ倉庫に格納されています
2014/03/25(火) 21:44:07.66ID:AtcH5MLU
2014/03/25(火) 21:52:21.12ID:EiPXCdKp
アイ オブジェクト たべたい
2014/03/25(火) 21:53:45.99ID:pgzxn/ED
オブジェクト指向の活用方法とあらためてきかれてもな。
仕事やってるなら、オブジェクト指向以外を使うことのほうが
まれだよ。まあ空気のようなものだ。
仕事やってるなら、オブジェクト指向以外を使うことのほうが
まれだよ。まあ空気のようなものだ。
4デフォルトの名無しさん
2014/03/25(火) 22:27:48.82ID:NjDRIK2T ポリモーフィズム
2014/03/26(水) 00:23:07.66ID:u5ViS8To
もしオブジェクト指向がなかった場合に困るのであれば、あなたが一体どんな風に
困るのかを教えてください。自分は困ったことがないので。
困るのかを教えてください。自分は困ったことがないので。
2014/03/26(水) 00:32:00.76ID:2aKYqEvM
2014/03/26(水) 00:43:25.50ID:q9v11IGY
SQLは関数型言語ですが何か?業務プログラマじゃないのがバレバレな発言だね。
2014/03/26(水) 00:49:07.29ID:czRoHAkF
困るのは関数の数が数百だとか数千だとか、ある程度規模が大きい場合だな。
オブジェクト指向なんて呼び方しているけど、本質的には構造化言語でもやっていた
モジュール化だからな。大量の関数を個別に扱うなんて大変な事をするよりも、
分類してまとめたモジュールを単位として組み合わせた方がシンプルになるからね。
そういう便利なモジュール化を最初から言語仕様に取り込んで
class{} とするだけで誰でも簡単にモジュールが作れるようにしたのが
オブジェクト指向言語。
オブジェクト指向なんて呼び方しているけど、本質的には構造化言語でもやっていた
モジュール化だからな。大量の関数を個別に扱うなんて大変な事をするよりも、
分類してまとめたモジュールを単位として組み合わせた方がシンプルになるからね。
そういう便利なモジュール化を最初から言語仕様に取り込んで
class{} とするだけで誰でも簡単にモジュールが作れるようにしたのが
オブジェクト指向言語。
2014/03/26(水) 00:52:05.00ID:2aKYqEvM
へー、SQLは関数型なのか。
俺は業務プログラマじゃないよw
俺は業務プログラマじゃないよw
2014/03/26(水) 00:56:46.58ID:UFBUrpIy
SQLが関数型であるという考え方は、
C言語は関数を定義するから関数型だよね、と同じ
C言語は関数を定義するから関数型だよね、と同じ
2014/03/26(水) 00:59:32.24ID:rbVA5aPF
SQLは宣言型言語だったかと。HTMLもそうだけど。
2014/03/26(水) 01:47:31.32ID:u5ViS8To
2014/03/26(水) 01:54:10.43ID:XRtgkR6L
それで出来ないのは属性の隠蔽と、継承による親子関係だな
まあ継承には最初はそんなにお世話にならんが、ある程度のクラス群を定義してくと
それらにグループ的な物が出来てくると思う
まあ継承には最初はそんなにお世話にならんが、ある程度のクラス群を定義してくと
それらにグループ的な物が出来てくると思う
2014/03/26(水) 05:17:45.52ID:q9v11IGY
実は、SQLは集合論を基にしているという点で、ある種の関数型言語とも考えられる(言語と
しては制限が多すぎるにしても)。
thinkbiganalytics.com/programming-trends-to-watch-logic-and-probabilistic-programming/
しては制限が多すぎるにしても)。
thinkbiganalytics.com/programming-trends-to-watch-logic-and-probabilistic-programming/
2014/03/26(水) 07:05:24.48ID:q8kXJDbw
>>12
実運用
自分1人で自分だけしか触らないプログラムだったら別にそのやり方でもある程度まで出来るだろうけど、
複数人数だとか、他の人が触るだとかするようになると、決めてたことが守られなくなってスパゲティに
なるのが常。
それをしっかりと見張って、ルールを破ったソースは絶対に許さないと監視してくれるのが、
その言語のコンパイラさん。
ちなみに俺も、1人で行うC言語の開発ではオブジェクト指向的に関数名や変数名を区分して作る。
実運用
自分1人で自分だけしか触らないプログラムだったら別にそのやり方でもある程度まで出来るだろうけど、
複数人数だとか、他の人が触るだとかするようになると、決めてたことが守られなくなってスパゲティに
なるのが常。
それをしっかりと見張って、ルールを破ったソースは絶対に許さないと監視してくれるのが、
その言語のコンパイラさん。
ちなみに俺も、1人で行うC言語の開発ではオブジェクト指向的に関数名や変数名を区分して作る。
2014/03/26(水) 07:48:30.63ID:5lLsdkXL
>>14
集合論ベースなら論理型じゃないのか?
集合論ベースなら論理型じゃないのか?
2014/03/26(水) 09:03:17.98ID:isiCXEht
SQLはクエリーであって、つまり問い合わせであって
それだけでアプリケーションになるわけないしな。
実際にSQLだけでアプリを作ったことあるのかい?って話。
それだけでアプリケーションになるわけないしな。
実際にSQLだけでアプリを作ったことあるのかい?って話。
2014/03/26(水) 09:10:42.35ID:isiCXEht
>>12
> それで達成できないことは何?
複雑さの低減かな。
たとえば、アセンブラ使って比較とジャンプで
ループは作れる。でも言語としてループがあれば簡単に書ける
つまりは複雑さが減ってるわけ。
オブジェクト指向も同じで、使えば複雑さが減る。
読んで考えなきゃいけないことが、
単語一つで、あぁあれね。とすぐに知ることが出来る。
そういうコードになる。
> それで達成できないことは何?
複雑さの低減かな。
たとえば、アセンブラ使って比較とジャンプで
ループは作れる。でも言語としてループがあれば簡単に書ける
つまりは複雑さが減ってるわけ。
オブジェクト指向も同じで、使えば複雑さが減る。
読んで考えなきゃいけないことが、
単語一つで、あぁあれね。とすぐに知ることが出来る。
そういうコードになる。
2014/03/26(水) 12:27:56.78ID:Vvdm35l0
2014/03/26(水) 19:13:13.84ID:C/yXeurz
SQLはチューリング完全じゃないんでしょ
2014/03/26(水) 20:05:10.15ID:u5ViS8To
>>18 複雑さの低減のところ、詳しく。
オブジェクト指向について書かれた本だと例題がそもそも短いので、オブジェクト
指向の導入によって逆に長い記述になってしまうし、わざとらしい例ばかりなので
これで本当に分かりやすくなったの?生産性や保守性は本当に上がったの?という
点がいつまで経っても納得がいかない。
(いまどきの学校なら、先生がちゃんと教えてくれるんだろうか?)
オブジェクト指向について書かれた本だと例題がそもそも短いので、オブジェクト
指向の導入によって逆に長い記述になってしまうし、わざとらしい例ばかりなので
これで本当に分かりやすくなったの?生産性や保守性は本当に上がったの?という
点がいつまで経っても納得がいかない。
(いまどきの学校なら、先生がちゃんと教えてくれるんだろうか?)
2014/03/26(水) 20:36:30.54ID:65VtCojr
18じゃないが。
電気回路で例えたら、抵抗とかダイオードとかトランジスタがびっしり基板を埋め尽くす
回路を作っていたのを、ICチップ数個を配線して繋げればいいだけにした
みたいなものかな。
ICチップ自体を作るところで確かに手間はかかるけど、
そのICチップという単位で手軽に扱える便利さが出てくるよね。
電気回路で例えたら、抵抗とかダイオードとかトランジスタがびっしり基板を埋め尽くす
回路を作っていたのを、ICチップ数個を配線して繋げればいいだけにした
みたいなものかな。
ICチップ自体を作るところで確かに手間はかかるけど、
そのICチップという単位で手軽に扱える便利さが出てくるよね。
2014/03/26(水) 20:54:01.45ID:lornT58y
オブジェクト指向によるループの簡略化ってなんだ?アイテレータか?
foreach構文使える言語ならOOPしなくても簡略化できるぜ。
foreach構文使える言語ならOOPしなくても簡略化できるぜ。
2014/03/26(水) 21:17:17.67ID:lornT58y
構造化プログラミングでは「機能」で全体を切り分けてた。
それがC++などのオブジェクト指向プログラミングになると「オブジェクト」で全体を切り分けるようになる。
電気回路に例えるなら、
それぞれの機能は基盤ごと、チップごとに整理されているが電源が一つしかない状態が構造化プログラミング。
それぞれの機能が自前の電源を持ってるのがオブジェクト指向。
それがC++などのオブジェクト指向プログラミングになると「オブジェクト」で全体を切り分けるようになる。
電気回路に例えるなら、
それぞれの機能は基盤ごと、チップごとに整理されているが電源が一つしかない状態が構造化プログラミング。
それぞれの機能が自前の電源を持ってるのがオブジェクト指向。
2014/03/26(水) 21:43:06.83ID:dEVLbQ7F
>>23
そういうレイヤーの話じゃないんだよね。
あなた関数の中の話をしてるじゃない?関数の中の書き方の話じゃない。
関数ではないものにデータがある。データは関数ではない。
オブジェクト指向はデータにそのデータを扱う関数をまとめたもの。
関連があるものを別々に管理するよりも、まとめたほうがわかりやすい。
データと処理が一体で管理できるから、このデータを扱えることが出来る処理はどれだろう?
などと考えなくて良くなる。管理がものすごく楽になる。
このまとめた物がオブジェクト。
そしてオブジェクト指向は、そのまとめた、物 と 物。
物自体と物同士を組み合わせて使うときの考え方。
物の生成をどうするか?
物の構造をどうするか?
物の振る舞いをどうするか?
そういうレイヤーの話じゃないんだよね。
あなた関数の中の話をしてるじゃない?関数の中の書き方の話じゃない。
関数ではないものにデータがある。データは関数ではない。
オブジェクト指向はデータにそのデータを扱う関数をまとめたもの。
関連があるものを別々に管理するよりも、まとめたほうがわかりやすい。
データと処理が一体で管理できるから、このデータを扱えることが出来る処理はどれだろう?
などと考えなくて良くなる。管理がものすごく楽になる。
このまとめた物がオブジェクト。
そしてオブジェクト指向は、そのまとめた、物 と 物。
物自体と物同士を組み合わせて使うときの考え方。
物の生成をどうするか?
物の構造をどうするか?
物の振る舞いをどうするか?
2014/03/26(水) 22:07:44.33ID:dEVLbQ7F
>>21
たとえばゲームで考えるとね。キャラクターを横に1つ移動するはX座標をプラス1するだけ。
だけどこれだけじゃゲームとして成り立たない。キャラクターには座標以外にも色々な情報がある。
キャラクターが持ってるであろう情報にはどんなものがある?
と聞いたら、いくつも答えが出てくるでしょう?
ならそれをまとめて種類(クラス)として管理したほうが楽じゃない?
敵キャラとかキャラクター自体は一緒だけどデータ(座標など)が違うものってあるじゃない?
敵キャラという物がいてある場面になったら、この物を生成する必要があるじゃない?(敵出現)
敵と自分が戦うとしたら、それは物と物と関連があってそこである作用が発生するということ。
つまりこういうこと。
小さな処理ではなくて、巨大なアプリを作ることを考えてみよう。
座標を1動かすという小さな処理だけを見ていたら分からないが、
なにかアプリを作ろうと思ったら、その処理を沢山組み合わせて作ることになる。
その処理をバラバラに管理していたら複雑になりすぎる。複雑だと時間がかかるしバグも増える。
出来るか出来ないかではなく、複雑にならないように作るというのが実際の開発で必ず求められる要件。
じゃあ、複雑にならないようにある単位でまとめようと思うだろう?
その後はまとめた物同士をどう組み合わせるのがいいか考えるようになるだろう?
そこでオブジェクト指向を使うと自然な形でまとめやすくなるんだよ。
わからなければ実際に頭の中で考えてみたらいい。たとえばブラウザを作るってのはどう?
aタグなら〜、ulタグなら〜などと、いきなり詳細なものを考える前に、まずブラウザを構成している要素。
UI部分、HTMLレンダリング部分、JavaScript部分、CSS部分と分けて考えるでしょう?
そこから更に各部分を小さく分けて、それをまた小さく分けてって考えていくでしょう?
この時大抵の人ならデータと処理を分離せずに分けていくと思うから、それがオブジェクトになるんだよ。
オブジェクト指向でなかったら、最後にデータと処理に分けてそれを関連付ける処理まで考えなといけない。
分けるたびに数は増えるから最後は膨大になるよね。それは嫌だから一つ手前のオブジェクトにしておきましょう。
たとえばゲームで考えるとね。キャラクターを横に1つ移動するはX座標をプラス1するだけ。
だけどこれだけじゃゲームとして成り立たない。キャラクターには座標以外にも色々な情報がある。
キャラクターが持ってるであろう情報にはどんなものがある?
と聞いたら、いくつも答えが出てくるでしょう?
ならそれをまとめて種類(クラス)として管理したほうが楽じゃない?
敵キャラとかキャラクター自体は一緒だけどデータ(座標など)が違うものってあるじゃない?
敵キャラという物がいてある場面になったら、この物を生成する必要があるじゃない?(敵出現)
敵と自分が戦うとしたら、それは物と物と関連があってそこである作用が発生するということ。
つまりこういうこと。
小さな処理ではなくて、巨大なアプリを作ることを考えてみよう。
座標を1動かすという小さな処理だけを見ていたら分からないが、
なにかアプリを作ろうと思ったら、その処理を沢山組み合わせて作ることになる。
その処理をバラバラに管理していたら複雑になりすぎる。複雑だと時間がかかるしバグも増える。
出来るか出来ないかではなく、複雑にならないように作るというのが実際の開発で必ず求められる要件。
じゃあ、複雑にならないようにある単位でまとめようと思うだろう?
その後はまとめた物同士をどう組み合わせるのがいいか考えるようになるだろう?
そこでオブジェクト指向を使うと自然な形でまとめやすくなるんだよ。
わからなければ実際に頭の中で考えてみたらいい。たとえばブラウザを作るってのはどう?
aタグなら〜、ulタグなら〜などと、いきなり詳細なものを考える前に、まずブラウザを構成している要素。
UI部分、HTMLレンダリング部分、JavaScript部分、CSS部分と分けて考えるでしょう?
そこから更に各部分を小さく分けて、それをまた小さく分けてって考えていくでしょう?
この時大抵の人ならデータと処理を分離せずに分けていくと思うから、それがオブジェクトになるんだよ。
オブジェクト指向でなかったら、最後にデータと処理に分けてそれを関連付ける処理まで考えなといけない。
分けるたびに数は増えるから最後は膨大になるよね。それは嫌だから一つ手前のオブジェクトにしておきましょう。
2014/03/26(水) 22:19:45.69ID:2aKYqEvM
要は、プログラマが問題解決の為に注目するスコープを、小さくするって事だよな。
2014/03/26(水) 23:16:50.71ID:dEVLbQ7F
オブジェクト指向使わないでも ”出来る” とかいうやつがいるけど、
出来るのは出来るんだよ。
重要なのはどれだけ複雑にしないで出来るかということ。
その複雑という観点が抜けてる意見は的外れで参考にならない。
たまに本当にオブジェクト指向じゃなくても複雑にしないで
できることもある。オブジェクト指向よりもシンプルに作れることもある。
それは問題領域が異なるから。上でSQLの話がでていたが
それはRDBMSからのデータ取得という問題だから。
SQLはその問題に特化した言語なのだから得意なのは当然。
でもアプリを作るという問題の場合は、オブジェクト指向が適していることが多い。
例題程度の短い問題で、オブジェクト指向の利点を感じないのも
短い問題だからという理由で説明できるね。
出来るのは出来るんだよ。
重要なのはどれだけ複雑にしないで出来るかということ。
その複雑という観点が抜けてる意見は的外れで参考にならない。
たまに本当にオブジェクト指向じゃなくても複雑にしないで
できることもある。オブジェクト指向よりもシンプルに作れることもある。
それは問題領域が異なるから。上でSQLの話がでていたが
それはRDBMSからのデータ取得という問題だから。
SQLはその問題に特化した言語なのだから得意なのは当然。
でもアプリを作るという問題の場合は、オブジェクト指向が適していることが多い。
例題程度の短い問題で、オブジェクト指向の利点を感じないのも
短い問題だからという理由で説明できるね。
2014/03/26(水) 23:42:37.18ID:u5ViS8To
(A) オブジェクト指向だとクラスやインスタンスに名前を付けなければならない
→ 手間が増えるところ
(B) だけどクラス内のプロパティとメソッドの関連付けに対して名前を付ける必要がない
→ 手間が減るところ
普通、ひとつのクラスには複数(多数)のプロパティ、メソッドがあるので、
abs(B) > abs(A)
ということになり、これが「複雑さの低減」という理解で合ってますか?
→ 手間が増えるところ
(B) だけどクラス内のプロパティとメソッドの関連付けに対して名前を付ける必要がない
→ 手間が減るところ
普通、ひとつのクラスには複数(多数)のプロパティ、メソッドがあるので、
abs(B) > abs(A)
ということになり、これが「複雑さの低減」という理解で合ってますか?
2014/03/26(水) 23:52:53.55ID:u5ViS8To
もしそうだとすると、自分がオブジェクト指向のありがたみが分からないのは
abs(B) = abs(A)
のような、1つのクラスに1つのプロパティと1つのメソッドしかないような
ものばかり作っているのが原因ではないかと思えてきました
abs(B) = abs(A)
のような、1つのクラスに1つのプロパティと1つのメソッドしかないような
ものばかり作っているのが原因ではないかと思えてきました
2014/03/26(水) 23:55:51.39ID:lornT58y
>オブジェクト指向だとクラスやインスタンスに名前を付けなければならない
javascriptみたく、プロトタイプベースのオブジェクト指向あるから、
これは必ずしもオブジェクト指向に当てはまる性質とは違う。
もちろん、名前付けてもいいけど。
javascriptみたく、プロトタイプベースのオブジェクト指向あるから、
これは必ずしもオブジェクト指向に当てはまる性質とは違う。
もちろん、名前付けてもいいけど。
2014/03/26(水) 23:56:29.04ID:2aKYqEvM
2014/03/27(木) 00:03:01.47ID:gcsG9K2Q
>>29
少し微妙なところはあるけれど、
>>30の
> のような、1つのクラスに1つのプロパティと1つのメソッドしかないような
> ものばかり作っているのが原因ではないかと思えてきました
ということであれば、その程度じゃ理解し難いと思うよw
処理と定義文の行が同じぐらいだろうからね。
普通は一つのクラスに、複数のプロパティとメソッドある。
関数やクラスの定義のための行よりも、処理の行数のほうが圧倒的に多い。
小さな問題なら関数さえ使わなくていい。
数行で終わる単純なスクリプトなら実際にそうする。
多くのプログラミング技術っていうのは、大きくて複雑な問題を
解決するために考えだされているものだから、
簡単な問題を使わなくても出来る というのは意味がなくて
大きな問題で比較しないといけない。
少し微妙なところはあるけれど、
>>30の
> のような、1つのクラスに1つのプロパティと1つのメソッドしかないような
> ものばかり作っているのが原因ではないかと思えてきました
ということであれば、その程度じゃ理解し難いと思うよw
処理と定義文の行が同じぐらいだろうからね。
普通は一つのクラスに、複数のプロパティとメソッドある。
関数やクラスの定義のための行よりも、処理の行数のほうが圧倒的に多い。
小さな問題なら関数さえ使わなくていい。
数行で終わる単純なスクリプトなら実際にそうする。
多くのプログラミング技術っていうのは、大きくて複雑な問題を
解決するために考えだされているものだから、
簡単な問題を使わなくても出来る というのは意味がなくて
大きな問題で比較しないといけない。
2014/03/27(木) 00:04:50.94ID:2gDV9B/K
ICチップの例でいうなら、その中に1個のダイオードしか入っていないものを作っている
ので、ICにする意味がない(なかった)、ということです
ので、ICにする意味がない(なかった)、ということです
2014/03/27(木) 00:08:07.39ID:1568NTop
>>29
実際にやって見るのがいいと思う
C#とかなら、書き込みや読み込みを行う抽象クラスであるStreamをとるメソッドに、ファイル、メモリ、ネット、データベースなんかを区別なく渡せたりする
自分でStreamを実装したクラスを作れば、それを利用する側は一切の修正なしに自作のStreamを使える、とか。
実際にやって見るのがいいと思う
C#とかなら、書き込みや読み込みを行う抽象クラスであるStreamをとるメソッドに、ファイル、メモリ、ネット、データベースなんかを区別なく渡せたりする
自分でStreamを実装したクラスを作れば、それを利用する側は一切の修正なしに自作のStreamを使える、とか。
2014/03/27(木) 00:11:02.12ID:ZCk9J0RA
>>34
そのダイオードがオブジェクトだよ。
ダイオードには入力と出力があってダイオードの仕事をするだろう。
入出力というinterfaceがわかれば、中はブラックボックスでいい。
外から見た時に、中がどんな仕組みなのかは知らなくてもいい。
それがオブジェクト指向だ。
そのダイオードがオブジェクトだよ。
ダイオードには入力と出力があってダイオードの仕事をするだろう。
入出力というinterfaceがわかれば、中はブラックボックスでいい。
外から見た時に、中がどんな仕組みなのかは知らなくてもいい。
それがオブジェクト指向だ。
2014/03/27(木) 00:11:39.64ID:j3gvVEw0
クラスを作る目的の1つは、ある変数に対してアクセスする関数群を同じクラスにまとめて、
変数自身は極力非公開にして、どこからか勝手にいじられないように隠蔽することだよ。
カプセル化というんだけどね。
変数自身は極力非公開にして、どこからか勝手にいじられないように隠蔽することだよ。
カプセル化というんだけどね。
2014/03/27(木) 00:14:40.12ID:j3gvVEw0
2014/03/27(木) 00:18:11.94ID:gcsG9K2Q
俺もダイオードは関数だと思わ。
そんな単機能のものではなく、
ダイオードなどを使って作られる製品。
ダイオードなどのパーツを組み合わせて作る製品
その製品を作るために各パーツどうやって組み合わせて効率よく作るか
という方法論としてソフトウェアではオブジェクト指向があると思うよ。
そんな単機能のものではなく、
ダイオードなどを使って作られる製品。
ダイオードなどのパーツを組み合わせて作る製品
その製品を作るために各パーツどうやって組み合わせて効率よく作るか
という方法論としてソフトウェアではオブジェクト指向があると思うよ。
2014/03/27(木) 00:26:18.85ID:2gDV9B/K
>>37 そうだとすると、1つのプロパティしかないような場合でもクラスにする価値が
あるということなんだろうけど、勝手にいじられるものが"変数"なのか"関数"なのか
というだけなので、結局同じに思えてしまうなあ
(暴走を引き起こすような)でたらめな値を設定できないようにするということかな?
あるということなんだろうけど、勝手にいじられるものが"変数"なのか"関数"なのか
というだけなので、結局同じに思えてしまうなあ
(暴走を引き起こすような)でたらめな値を設定できないようにするということかな?
2014/03/27(木) 00:28:46.02ID:ZCk9J0RA
2014/03/27(木) 00:29:16.59ID:2gDV9B/K
フリップ・フロップならオブジェクトかもしれないね
2014/03/27(木) 00:32:34.40ID:gcsG9K2Q
一つのプロパティしかないクラスであっても
アプリ全体で、そのクラスだけしか使ってないってことはまず無い。
小さなクラスしか見てないからわからないのであって
アプリ全体という大きなもので考えよう。
小さなクラスが数個あろうが、このクラスは他のクラスと
協調して動くでしょう? そういうところまで含めて考えないとダメだよ。
小さな視点ではなく、大きな視点を持つこと。
大きな視点を持てば、たまたまプロパティが一つしか
無いクラスがあったとしても、それがシステム全体として
必要なことであればなんら不思議ではない。
アプリ全体で、そのクラスだけしか使ってないってことはまず無い。
小さなクラスしか見てないからわからないのであって
アプリ全体という大きなもので考えよう。
小さなクラスが数個あろうが、このクラスは他のクラスと
協調して動くでしょう? そういうところまで含めて考えないとダメだよ。
小さな視点ではなく、大きな視点を持つこと。
大きな視点を持てば、たまたまプロパティが一つしか
無いクラスがあったとしても、それがシステム全体として
必要なことであればなんら不思議ではない。
2014/03/27(木) 00:39:43.19ID:E6f/eeJ0
javaなんかだと標準出力に文字を表示するのにSystem.out.println("Hello World!"); なんてことやってるわけで
ダイオードがstreamの一種ならオブジェクトで問題ない。
仕組みの複雑さが外から見えないという意味で、ダイオードは実に成功していると言えるだろう。
ダイオードがstreamの一種ならオブジェクトで問題ない。
仕組みの複雑さが外から見えないという意味で、ダイオードは実に成功していると言えるだろう。
2014/03/27(木) 00:41:16.91ID:gcsG9K2Q
オブジェクト指向の話で
クラスとインスタンスの話で
終わっちゃう人がいるけど、
オブジェクト指向の話には
インスタンスとインスタンスを組み合わせて動かすという
構造の話、組み合わせ方の話も含まれるよ。
クラスとインスタンスの話で
終わっちゃう人がいるけど、
オブジェクト指向の話には
インスタンスとインスタンスを組み合わせて動かすという
構造の話、組み合わせ方の話も含まれるよ。
2014/03/27(木) 00:42:23.36ID:gcsG9K2Q
インスタンスとインスタンスを組み合わせだけじゃなくて
クラスとクラスの組み合わせも。
(クラスの代わりにインターフェースだったりもする)
ほんと関数の中身などという小さな部分じゃなくて
全体を見ないとね。
クラスとクラスの組み合わせも。
(クラスの代わりにインターフェースだったりもする)
ほんと関数の中身などという小さな部分じゃなくて
全体を見ないとね。
2014/03/27(木) 00:43:14.26ID:E6f/eeJ0
ハローワールドでさえオブジェクト指向の真髄に触れてるわけで、
小さいプログラムだからOOPの恩恵が無いなどということはない。
Javaでは十分に抽象化され、簡便に使えるように用意されたライブラリ群を使っているではないか。
でも何でもかんでもオブジェクトにしてしまおうとするのは疑問だな。
小さいプログラムだからOOPの恩恵が無いなどということはない。
Javaでは十分に抽象化され、簡便に使えるように用意されたライブラリ群を使っているではないか。
でも何でもかんでもオブジェクトにしてしまおうとするのは疑問だな。
2014/03/27(木) 00:43:29.31ID:ht0q0Cmu
組み合わせが固定的な場合、一見オブジェクトに見えても単なる構造化にすぎないことが
多い。新しいオブジェクトをくっつけようとして、全部のオブジェクトを書き換えるはめになる。
依存性が多すぎるのだ。究極まで依存性をなくして何でも接続できるようにしたものを、
Inversion of Control (IoC), とか dependency injection (DI) と呼ぶ。テスト環境と本番環境と
で、まったく同じモジュールを動かしてテストできるようになる。が、何もかもIoCやDIにでき
るわけではないので、本当に使えるケースはあまりない。仕掛けが大掛かりすぎて、一行の
SQLやスクリプトに負けてしまうことも多い。
多い。新しいオブジェクトをくっつけようとして、全部のオブジェクトを書き換えるはめになる。
依存性が多すぎるのだ。究極まで依存性をなくして何でも接続できるようにしたものを、
Inversion of Control (IoC), とか dependency injection (DI) と呼ぶ。テスト環境と本番環境と
で、まったく同じモジュールを動かしてテストできるようになる。が、何もかもIoCやDIにでき
るわけではないので、本当に使えるケースはあまりない。仕掛けが大掛かりすぎて、一行の
SQLやスクリプトに負けてしまうことも多い。
2014/03/27(木) 00:47:32.14ID:gcsG9K2Q
IoCやDIを使うところは構造に関する所だと思う。
クラスがアプリの構造を表している所だと思う。
クラス(インスタンス)を値として使う場合
たとえばBigInt型みたいな、int値の巨大版みたいな
"値" にはDIを使わない方がいい。
こういう場合は値として普通にnewした方がいい。
クラスがアプリの構造を表している所だと思う。
クラス(インスタンス)を値として使う場合
たとえばBigInt型みたいな、int値の巨大版みたいな
"値" にはDIを使わない方がいい。
こういう場合は値として普通にnewした方がいい。
2014/03/27(木) 00:50:57.11ID:2gDV9B/K
規模の話が出てきたので、アンケートをとってもよいでしょうか?
1. 作成しているアプリケーションの分野は?
2. アプリケーションの規模について
2.1 行数
2.2 関数の個数
2.3 変数の個数
2.4 複数のファイルから構成されているならば、そのファイル数
ちなみに俺は
1. テキストフィルタ
2.1 1,000行〜10,000行
2.2 5個〜20個
2.3 10個〜30個
2.4 1ファイル
です
1. 作成しているアプリケーションの分野は?
2. アプリケーションの規模について
2.1 行数
2.2 関数の個数
2.3 変数の個数
2.4 複数のファイルから構成されているならば、そのファイル数
ちなみに俺は
1. テキストフィルタ
2.1 1,000行〜10,000行
2.2 5個〜20個
2.3 10個〜30個
2.4 1ファイル
です
2014/03/27(木) 01:07:11.24ID:gcsG9K2Q
>>50
えと、そのコードを客観的に評価してもらったことある?
たとえばコードメトリクスツールで計測するとか。
その評価がないと、それ見てもなんの参考にもならない。
体育会系的に無駄で非効率な努力すれば
行数なんて稼げるしね。
コピペがだめな行為だってのは言うまでもないと思うけど、
コピペをすると簡単に行数稼げるよ。
えと、そのコードを客観的に評価してもらったことある?
たとえばコードメトリクスツールで計測するとか。
その評価がないと、それ見てもなんの参考にもならない。
体育会系的に無駄で非効率な努力すれば
行数なんて稼げるしね。
コピペがだめな行為だってのは言うまでもないと思うけど、
コピペをすると簡単に行数稼げるよ。
2014/03/27(木) 01:17:32.04ID:gcsG9K2Q
>>50
ちょうど手元に今作っているソフトのカバレッジ結果を
開いていたから書くわ。オープンソースなので詳細は伏せるけど
1. 秘密
2.1 行数 約750行
2.2 関数の数 98個
2.3 変数の数 不明 (計測する意味が無い)
2.4 ファイル数 20個
2.5 クラス 25個
3. コードメトリクス 10点満点中 9.5
4. カバレッジ 90%
ちなみに一番、評価が低い関数だけど行数32行
行数は問題ではなくて、一つの関数にifとループが
多いから(と言っても8個)評価が低くなってる。
ちょうど手元に今作っているソフトのカバレッジ結果を
開いていたから書くわ。オープンソースなので詳細は伏せるけど
1. 秘密
2.1 行数 約750行
2.2 関数の数 98個
2.3 変数の数 不明 (計測する意味が無い)
2.4 ファイル数 20個
2.5 クラス 25個
3. コードメトリクス 10点満点中 9.5
4. カバレッジ 90%
ちなみに一番、評価が低い関数だけど行数32行
行数は問題ではなくて、一つの関数にifとループが
多いから(と言っても8個)評価が低くなってる。
2014/03/27(木) 01:18:19.58ID:2gDV9B/K
関数や変数は多めに数えたんですが、こういった規模でもオブジェクト指向を活用できるのか
どうかを知りたかったのです。関数はさておき、変数はがんばって捻出しても増やせないと思
います。関数は増やせるかもしれませんが、無理をしそうな気がします。つまり不自然なソー
スになりそうです。
どうかを知りたかったのです。関数はさておき、変数はがんばって捻出しても増やせないと思
います。関数は増やせるかもしれませんが、無理をしそうな気がします。つまり不自然なソー
スになりそうです。
2014/03/27(木) 01:21:39.80ID:gcsG9K2Q
>>50
> 2.1 1,000行〜10,000行
> 2.2 5個〜20個
1関数あたり、200行〜500行ってことでいい?
これは多い。コードを把握するために一目で
スクロールしないで見渡せることが重要なので一画面が目安。
だいたい50行〜長くても100行
> 2.1 1,000行〜10,000行
> 2.2 5個〜20個
1関数あたり、200行〜500行ってことでいい?
これは多い。コードを把握するために一目で
スクロールしないで見渡せることが重要なので一画面が目安。
だいたい50行〜長くても100行
2014/03/27(木) 01:23:40.03ID:gcsG9K2Q
2014/03/27(木) 01:24:04.56ID:ze0m1e8o
オブジェクト指向はプログラムの問題というより人間の問題に近い。
オブジェクト指向にすれば、人間らしい仕様変更に比較的強いというだけの話。
オブジェクト指向にすれば、人間らしい仕様変更に比較的強いというだけの話。
2014/03/27(木) 01:26:05.92ID:2gDV9B/K
>>54 いや、違います。1関数あたり10行位です。残りがメインルーチンです。
2014/03/27(木) 01:30:04.40ID:ZCk9J0RA
>>50
1ファイルで10000行は見通し悪くないかねw
俺のは簡単に言うとだが、シンセで80ファイル、各200から1000行程度。
電卓で50ファイル、各100から1500行ってところだな。
長い関数で120行ぐらいだよ。
1ファイルで10000行は見通し悪くないかねw
俺のは簡単に言うとだが、シンセで80ファイル、各200から1000行程度。
電卓で50ファイル、各100から1500行ってところだな。
長い関数で120行ぐらいだよ。
2014/03/27(木) 01:31:59.53ID:1568NTop
ものによるんじゃない?
テキストフィルターがどういうものかわからないけど、変更に強くするとか再利用できるようにするとか
ただ、無理に小分けにしても返って複雑になることもありうる
テキストフィルターがどういうものかわからないけど、変更に強くするとか再利用できるようにするとか
ただ、無理に小分けにしても返って複雑になることもありうる
2014/03/27(木) 01:32:11.42ID:gcsG9K2Q
アンチパターン(悪いコートパターン)本に
"メイン"ルーチン という名前がでてきたら
それはアンチパターンだって書いてあった気がするなw
1関数10行?それが5個で
1000行 - 10*5 = メインルーチンが950行?
関数20個でもメインルーチン800行だよね?
一度コード品質計測してみるといいよ。
10点満点中1点未満とか言われるだろうから。
"メイン"ルーチン という名前がでてきたら
それはアンチパターンだって書いてあった気がするなw
1関数10行?それが5個で
1000行 - 10*5 = メインルーチンが950行?
関数20個でもメインルーチン800行だよね?
一度コード品質計測してみるといいよ。
10点満点中1点未満とか言われるだろうから。
2014/03/27(木) 01:34:26.69ID:2gDV9B/K
着目したい変数/関数があったとき、grep するとプログラムの実行順と同じ順序で
表示されて便利です。
表示されて便利です。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」 [ぐれ★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 【苺ましまろ】立民衆院議員、人気漫画の水着少女画像を「醜悪」タイ人少女の性搾取事件と関連付け…党内で反発 [少考さん★]
- 「残業キャンセル界隈」若者が増加?「職務放棄」との批判も…“定時退社の権利”どこまで通用するか [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 ★5 [蚤の市★]
- 【実況】博衣こよりのえちえちチーズケーキを仕込み(雑談あり)🧪
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- 【超速報】統一教会、陳謝 [519511584]
- 高市政権「かけてもつながらない。機能していない」防衛当局間のホットライン機能せず [834922174]
- 30過ぎた大人おじさんが大学生(昔)のままのファッションをする「おじさんキッズコーデ」、炎上して問題視される。 [153490809]
- 【高市悲報】中国軍「公海で空母の発着訓練するって事前通告したのになんで自衛隊機は急接近してきたんだ…?」中国軍困惑★2 [931948549]
