5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

抽象クラスなんて不要

1 :デフォルトの名無しさん:2008/10/22(水) 20:36:10
実際コードとして存在意味あるか?
概念上の話はコメントか仕様書にでも書いとけ!

2 :デフォルトの名無しさん:2008/10/22(水) 21:21:44
意味あるだろ。もうすこし勉強するといいよ。

3 :デフォルトの名無しさん:2008/10/22(水) 22:01:18
おう、全部インターフェースにしとけ

4 :デフォルトの名無しさん:2008/10/22(水) 22:30:54
Template Method勉強して、出直してこい

5 :デフォルトの名無しさん:2008/10/22(水) 23:16:47
> 概念上の話

擬似コードか何かと勘違いしてるのかw

6 :デフォルトの名無しさん:2008/10/23(木) 01:09:00
純粋仮想関数の virtual foo bar() = 0; というのは何とかならなかったのかね。
とってもダサイです。

7 :デフォルトの名無しさん:2008/10/23(木) 01:45:08
言語仕様上は不要という話なら賛同してやってもいい

8 :デフォルトの名無しさん:2008/10/24(金) 00:22:48
>>6
それ抽象クラス関係無い

9 :デフォルトの名無しさん:2008/10/24(金) 00:25:32
なにをもって抽象とするのかから話そうか

10 :デフォルトの名無しさん:2008/10/24(金) 00:31:02
抽象クラスを中傷すんな

よし、ポイントゲット

11 :デフォルトの名無しさん:2008/10/24(金) 01:19:59
>>6
何とかならなかったってびゃーねさん言っていた。

12 :デフォルトの名無しさん:2008/10/26(日) 15:26:40
>>9
抽象クラスなら、具体化できない=インスタンスかできない


13 :デフォルトの名無しさん:2008/10/26(日) 16:06:00
まぁ、たしかにAS3には抽象クラスがないが、
なんとかなってるしな。
インスタンス化したくないなら、他の方法を使えばいいし。

14 :デフォルトの名無しさん:2008/10/27(月) 21:43:29
インスタンス化したくないorさせたくないなら、
/*このクラスのインスタンスは作るな。抽象クラスと思え*/
と書いておけばいい。

15 :デフォルトの名無しさん:2008/11/02(日) 11:13:56
>14
prototype.jsにもそういうのあるよね。
PythonもNotImplementedError出して抽象だと言い張ってる。

でも、ネイティブコードを吐く処理系では、「概念上の話」じゃないよ。
言語をまたぐRMCではvtblのオフセットを合わせて呼ぶ仕組みがあるから。

vtblレイアウトが標準規格で決まってないC++みたいな言語では
抽象クラスの正しい使い方かと言われると疑問だけど。



16 :デフォルトの名無しさん:2008/11/02(日) 11:18:15
>11
何とかならなかったんじゃなくて、やりたくなかったんだよ。
VCだったら__abstructキーワードがあるよ。

17 :デフォルトの名無しさん:2008/11/02(日) 11:54:17
>>15
そういやそうだなぁ。
最近Cとかいじってないから忘れてた。

いまの自分にはネイティブコードを吐く言語がいらないから
抽象クラスも不要、ってことか。
やな結論だ。

18 :デフォルトの名無しさん:2008/11/02(日) 12:52:45
他には依存関係が疎なところと密なところのメリハリをつけたり、
>4のように多態を実現するために使う。

C++0xのconceptなんかは確かにわかりやすさ以外にメリットはないのだけれど、
これがないとひどく難解なコードになるので「なくてもいい」とは思わない。


19 :デフォルトの名無しさん:2008/11/02(日) 13:52:54
設計の基本ができてねぇなぁ!!!!!
よいツール教えたる
これでガンバリなぁ
http://www.digitalassist.co.jp/pw/page010.htm


20 :デフォルトの名無しさん:2008/11/02(日) 14:27:34
・ドキュメントを読まない
・決まりを守らない
・ついうっかり

大抵の言語仕様はこれらを防ぐためにある

21 :デフォルトの名無しさん:2008/11/02(日) 17:39:44
中小クラスをコメントで表現する?
アホか。じゃあpublicメソッドだけでシステム組めって一点のと一緒じゃないか。

ありえないね。ってかこれ立てたのそうとうとしいってるだめpgだろ

22 :デフォルトの名無しさん:2008/11/02(日) 18:43:10
C++のようにインターフェイスがない言語では
抽象クラスがないと困る、ってことかもね。
抽象クラスって、部分的な実装のついた
インターフェイスみたいなもんじゃない?

23 :デフォルトの名無しさん:2008/11/02(日) 18:59:09
>C++のようにインターフェイスがない言語では
そういう言い方ではC++に抽象クラスもありませんが

24 :デフォルトの名無しさん:2008/11/02(日) 19:33:28
>22
標準では組み込みのabstructキーワードが無いっていうだけの話。
実装を書き加えてコンパイラに怒られないのは汚いといえなくもないけど、
古いライブラリは除いて、普通はそんなことしない。

25 :デフォルトの名無しさん:2008/11/03(月) 00:23:36
モジュールごとに細かくインタフェースを作って対応するクラスで実装を定義して
インタフェースを継承しながら実装側は
has-a関係で委譲メソッドを使いまくって事実上の多重継承のようにしてしまえば
確かに抽象クラスは無くても。

26 :25:2008/11/03(月) 00:27:15
interface I1 {
 method1();
}

interface I2 extends I1 {
 method2();
}

class C1 implements I1 {
 method1() { ... }
}

class C2 implements I2 {
 I1 i1 = new C1();
 method1() { i1.method1(); }
 method2() { ... }
}

て感じ。

27 :デフォルトの名無しさん:2008/11/03(月) 11:30:10
実際インスタンス化されて困る事なんてあるの?

28 :デフォルトの名無しさん:2008/11/03(月) 14:12:01
クラス設計者が意図してなければダメだろ
普通はそのための小細工をなんかするけど。
できなければファクトリ側でやる。

29 :デフォルトの名無しさん:2008/11/24(月) 15:47:59
__pure_virtual result_type func_name(argument_types...);
って書いたら
virtual result_type func_name(argument_types...) =0;
になるようにプリプロセッサを改造して使ってるよ(^^v;

30 :デフォルトの名無しさん:2008/11/27(木) 13:08:31
抽象クラスなんて不要なんて不要

31 :デフォルトの名無しさん:2008/11/27(木) 17:29:41
抽象とは意味を捨て去ること

32 :デフォルトの名無しさん:2008/11/30(日) 01:25:06
いや意味は捨ててない。むしろ意味だけが存在している。

33 :デフォルトの名無しさん:2008/12/08(月) 16:21:06
結局抽象クラスなんて要らんってことでFA

34 :デフォルトの名無しさん:2008/12/08(月) 20:04:09
>>1が書いた「ほれ、やっぱり抽象クラスなしでも、こんな見事なコード書けるじゃん」という
具体例を公開してくれ
そしたらじっくり検討するからたのむぜっ

35 :デフォルトの名無しさん:2008/12/08(月) 21:13:33
抽象クラスがなけりゃ書きようがないコードの具体例を公開してくれ
そしたらじっくり検討するからたのむぜっ

36 :デフォルトの名無しさん:2008/12/08(月) 21:20:23
>>34
アホ暴露。
そんなこというなら抽象クラスどころかオブジェクト指向なんか無くてもプログラムは書ける。
むしろ、速度、サイズいずれのコード品質においてもそちらの方が有利
オブジェクト指向は人間にとってのみ意味がある。もっと言えば、生産性と保守性以外意味はない
んな基本ぐらい理解しとけやバカタレ

37 :デフォルトの名無しさん:2008/12/08(月) 21:22:50
>>35
何が何でも、抽象クラスを使わなければならないような事例はないと思う。

共通の親クラスを持ち、またTemplate Methodを実現したい場合、
抽象クラスにしておくと、未実装の際に発見しやすくなるかなとは思う。

その程度かな。


38 :デフォルトの名無しさん:2008/12/09(火) 09:58:10
>>37
意味を明示できるってのがメリットだわな。それによって、「見つけやすい」という嬉しい副作用が得られるわけで。
あと、その程度って言うが、テンプレートメソッドは最も重要なデザパタのひとつ。これ一つで充分過ぎるくらい価値があると思うよ。


39 :デフォルトの名無しさん:2008/12/09(火) 11:23:12
>>35
イベントが複数ある状態機械なんて、抽象クラス無しでどう書くの?
状態を enum で定義して switch 文いっぱい書くの?

40 :デフォルトの名無しさん:2008/12/09(火) 11:43:21
字句解析なんかは状態をラベルにしてgotoで遷移するようなの書くことがある。
正規表現のハードコードみたいなの。

41 :デフォルトの名無しさん:2008/12/09(火) 12:03:11
>>40 それはイベントが「次の文字」という一つだけしかないだろ。

42 :デフォルトの名無しさん:2008/12/09(火) 12:16:06
状態数がすごい事になるからやってらんないって事?

43 :デフォルトの名無しさん:2008/12/11(木) 16:19:22
VCだとドトネトじゃないときも↓書いてコンパイル通るのねー。

class Hoge
{
  virtual void func(void) abstract;
}

44 :デフォルトの名無しさん:2008/12/12(金) 11:57:54
げ、
ttp://msdn.microsoft.com/ja-jp/library/z8ew2153(VS.80).aspx
| The following sample shows that sealed is valid in native compilations:
| The following sample shows that override is valid in native compilations:
| The following sample shows that abstract is valid in native compilations:
ホンマや。

45 :デフォルトの名無しさん:2008/12/12(金) 22:44:59
ほかにはfor eachだって使えるよ

46 :デフォルトの名無しさん:2008/12/13(土) 01:39:32
spaced keywordしね

47 :デフォルトの名無しさん:2008/12/14(日) 22:32:03
>概念上の話はコメントか仕様書にでも書いとけ!

大規模な開発を経験すると、
言語仕様でサポートされていることの ありがたみが分かってくるよ
マジで

48 :デフォルトの名無しさん:2008/12/17(水) 16:17:58
コンストラクタで作れません例外投げればどうか

49 :デフォルトの名無しさん:2008/12/19(金) 13:32:03
>>39
ふーん。じゃ、ポリモーフィズムの概念のない、ステートマシン作成言語とも言えるHDLでステートマシンが書けないとでもおもってんのかお前。

50 :デフォルトの名無しさん:2008/12/19(金) 23:42:15
抽象的な議論だな……

51 :39:2008/12/20(土) 02:31:33
>>49
抽象クラスが無いとステートマシンが書けないなんて言ってないよ。

たとえば switch いっぱい書けば書けるけど保守性に問題が出てくるから、
そういう問題を解決するために抽象クラスが必要でしょ、って話。

HDL がどうなってるかは知らない。

52 :デフォルトの名無しさん:2008/12/20(土) 02:37:21
1種類の方法だけに固執したらだめよんてよく言うけどな。
俺は修行が足りないから色々思いつかないけど。

53 :デフォルトの名無しさん:2008/12/20(土) 19:12:10
逆にswitchやif文だらけでもメンテナンス性や可読性が落ちないというやり方はないのか

54 :デフォルトの名無しさん:2008/12/20(土) 22:27:31
yaccとかlexみたいに別の方法で記述して目的の言語に変換する。

11 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)