トップページ⇒tech
102コメント40KB

クラスについて、教えて

■ このスレッドは過去ログ倉庫に格納されています
0001cobol NGNG
以前同じスレ立てた物です。
C++なんか勉強中、Javaも。
そこで、クラス継承の概念が理解できず、困っています。
市販の本を読んでも今一つ。
たとえば、車のクラスを作り、F1カーに継承みたいな説明が
書いてあって、何のことか解りません。
どうか、ドキュソのCobolerに理解できるよう
ご教授下さい。
夜までに頼みまそ。
0002名無しさん@お腹いっぱい。 NGNG
差分プログラム
0003名無しさん@お腹いっぱい。 NGNG
ぼ、僕もC++初心者ですけど、超初心者並に僕の誤った伝承概念を君に伝承しよう。
車って非常に一般的だね。まず、車を親と置き、そいつ(車)の子供をF1カーとしようではないか。
詰まり、このF1カーは親(車)の遺伝子を一部、或いは全て受け次ぐとしよう(伝承)
そして、その共通する遺伝子は両方とも車と言う種類であり、タイヤやガソリンを必要をしてする。
F1カーにあって車にない遺伝子は・・・例えば後部にあるでっかいウイングとか諸々、そのウィングを
記述するファンクッションをWingFnc()とし、そして、
F1カーのクラスだけに採用する。つーか、長くなるので京は此処まで。
0004名無しさん@お腹いっぱい。 NGNG
ピンと来ないうちは継承なんてしないほうが身のため。
0005名無しさん@お腹いっぱい。 NGNG
うーむC++クラス継承...。
http://hp.vector.co.jp/authors/VA000092/jokes/strup.html
0006名無しさん@お腹いっぱい。 NGNG
>>3
その調子で1年位やってくれ。
0007>5 NGNG
マジでいろいろ心当たっちまうのがやだなあ
0008名無しさん@お腹いっぱい。 NGNG
継承は最後の手段
0009名無しさん@お腹いっぱい。 NGNG
継承で「おお」と思ったのは継承によるポリモルフィズムかなぁ。
はじめて見た時はある種の switch - case を置き換えられて便利なのかと思った。
0010cobol NGNG
1.モジュール化したものを、コピペする
2.マクロを作る
3.全てを包含したモジュールを最初に作る
等との決定的な違いは何でせう。
0011名無しさん@お腹いっぱい。 NGNG
車にF1カーってものすごいたとえだな。
F1カーにはエアコンやカーステ付いてないから
機能下がってるじゃん。
(エンジン性能だけな。上がってるの。
誰が書いたんじゃ。

そんな下らん例え話より実際の開発のシチュエーション
書いたほうがええじゃん。

Aという既存のロジックがあってそれをベースに
B@` C@` Dという処理をそれぞれ別の人が作らなければ
ならないとする。

継承のメカニズムがない言語ならここでB@` C@` DはAを
元にその処理用に書き加えて使うだろう。

ところが処理要件が変わってAを書き換えなければ
ならなくなった。当然、B、 C、 Dも同様。

継承メカニズムのない言語ならAの変更箇所をチェック
してB@` C@` Dにも全て漏らさず適用しなければならない。
何人かで分担して作業するにしろ、一人でするにしろ、
結構大変な作業。

これが継承のメカニズムを持った言語なら、Aをコンパイル
したものを再リンクするだけで事は済む。

ここでリンクライブラリとの決定的な違いは、B@` C@` Dもまた
拡張のベースとなれること。多態(ポリモーフィズム)で
同じメッセージを共有し、別の動作を行わせることが出来ること。

1.コピペじゃ抜けが発生するかも知れないし、テストも
大変。元が簡単な変更ならまだしも、大幅に改変された場合、
それを元にして作ったのが100本ぐらいあったらどうします?

2.マクロって何?#define?ライブラリの部品?テンプレート?

3.の方法だとそのモジュールの実装者に相当負荷がかかるし、
そのモジュールだけ複雑になりすぎるだろ?

まあ、ここらへんの話って開発技法を解説した本に結構書か
れてるんだけど・・・
0012>10 NGNG
クラスとは直接関係ないが、、、

コピペはやめろ。
今すぐやめ呂
絶対やめろ

もとのコードがバグっていたらどうするつもりだ?
ペーストした所をゼンブ覚えておくつもりか?
0013>10,12 NGNG
コピペがだめなのと同じ理由で
10の答え3も却下
0014>10 NGNG
以前、「クラス=構造体+関数」って逝ってた者だけど、質問は良いよ。
これはクラスを知ってる人の質問では?どっかからのコピペ?

>1.モジュール化したものを、コピペする
>2.マクロを作る
>3.全てを包含したモジュールを最初に作る

1.クラスを派生すると、追加・変更したいメソッドとプロパティを実装するだけなので、
劇的にステップが減る。派生元にバグがあった場合、それを直すだけで全て直る。

2.マクロは関数のみで手続き抽象。クラスはデータ抽象+手続き抽象。
これにより飛躍的に記述性があがる。

3.全ての機能を持ったものに新しい機能を追加することが難しい。
仕様上の矛盾、実装時にステップが大きくなりすぎる、既存システムのテストが必要。
クラスを派生させる場合、機能の少ないクラスを派生させれば仕様上の矛盾を避けられる、
実装時のステップは差分のみ、既存システムに全く影響が無い。
0015名無しさん@お腹いっぱい。 NGNG
class A {
int field = 10;
void method(){
System.out.println("てきとう");
}
}
class B extends A{
public static void main(String args[]){
//クラスBにmethod()はないが・・・
method();
//呼び出せるよん。
//ついでにfieldも・・・
System.out.println(field);
}
}
001615 NGNG
うそです。すいません。厨房がいきがってしまいました。
class B extends A{
public static void main(String args[]){
new B();
}
B(){
//クラスBにmethod()はないが・・・
method();
//呼び出せるよん。
//ついでにfieldも・・・
System.out.println(field);
}

}
0017>15@`16 NGNG
何か逝いたいんだろうけど、ぱっと見て読む気にならん。ましてやCobolerは...
0018名無しさん@お腹いっぱい。 NGNG
>15
いいたいことは分かるが、嘘つかないで。
classBのインスタンスがどこにも無いのに
アクセスできるのか?

その程度のソースくらい、動作確認してよ。
Java使えねえ!とか言い出すやついたら困る。
0019名無しさん@お腹いっぱい。 NGNG
なにもBのコンストラクタ(イニシャライザ)から呼び出さなくても。。
いいけど。
002019 NGNG
>18
new B();
でインスタンスは作られるんじゃない?
0021>15〜 NGNG
そういう議論を止めないと、cobolerが可愛そうだ。
読んでも意味無いのに、そういうやり取りって気になるんだよね。
0022名無しさん@お腹いっぱい。 NGNG
>20
ごめん。16の前の時点で出したのよ。
>21
その通りだね。ごめんなさい。
0023>21 NGNG
それが2chだ。(藁
0024名無しさん@LV1 NGNG
犬 extends 哺乳類 extends 動物
0025>12@`13 NGNG
cobolerに言ってもとうらんよ。
1.夜間バッチでタスクが落ちたとき原因がスーパークラスにあった日にゃ
夜中にまごこの代までコンパイルしなおせっての?C++じゃmakeがあったってつらかろう
javaならって??なにをどこまでテストすればいいんじゃ!!
Onlineだっておんなじで、汎用じゃトラブルが局所化してくれないと運用できんよ。

2.#defineは問題点製造機って意見は賛成だけど、関数ライブラリみたいな
だめClassの単なる手続き=メソッドならドッコいですね。s/370アセンブラのspマクロって
ありゃレジスタの使えるCですぜ。

3.Classったってモジュール感覚の肥満児はよくあるお話。

この辺があって汎用世界にはOOP特に継承を進めない自分です。
個人的・井戸的世界ではべつだが@`汎用ならCORBAでつないでidl書いて
そしてその向はすべて何で書いてもClassじゃって言いたい。
0026>25 NGNG
文章力無いね。文を読んでも何も感じない。
0027名無しさん@お腹いっぱい。 NGNG
継承をつかった下手なプログラムよりは使わないで下手なプログラムの
方がまたいいな。
0028>26 NGNG
基礎知識に欠けた厨房
002925>28 NGNG
この文章を読んで、cobolerがクラスを理解出来るとでも?先ず、要約出来るならやってみろ。
その後、内容を議論してやろう。
003029 NGNG
先ずお前の見解、と逝うことなら、既に説明しました。 --> 14
0031名無しさん@お腹いっぱい。 NGNG
>継承をつかった下手なプログラムよりは使わないで下手なプログラムの

こういう文章がcoboler(っていうか初心者)を惑わすんだよ。害しか無いよ。
「クラスライブラリを派生させて差分コーディングすれば楽なんだよ」って何で素直に教えてあげない?
0032>30 NGNG
規模が大きくって一人で端まで見渡せないとき継承なんか使ったってトラブルだけです。
ラッピング/インターフェースの確立がいるならコンポーネント指向で行くべき。
するとClassは継承から離れちゃう。
誰かが誰かにお願いしてなんかやっていただく。その誰かがClassじゃでなんでいかんの?
なんでClassと継承がへばりつかにゃいかんのだ。>27うまい賛成。
003325=31>32 NGNG
>規模が大きくって一人で端まで見渡せないとき継承なんか使ったってトラブルだけです。

規模が大きいものをコピペ開発されると、変更が出来ない。
派生元を作っといて、他の人にそれを派生させて作らせると、
派生後のステップが少なくなる&変更すべき箇所が集約させるんだよ。

後、クラスライブラリを派生させることを否定する人は、
歴史上存在しないと思うんだが、あなたは何者?

一行目から内容が変なので、二行目以降も同じく逝って良し。
003425=31>32 NGNG
>コンポーネント指向で行くべき。

これどういう意味?
例えば、JavaやDelphiなら、クラスを作ってコンポーネントに登録するかどうかって話だけど。
害基地?
003525=31>32 NGNG
>Classと継承がへばりつかにゃいかんのだ

「オブジェクト指向言語=クラス」です。何でこのスレに入って来たの?
0036名無しさん@お腹いっぱい。 NGNG
個人的には、

憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門
翔泳社
ISBN:4881356194

とゆう本が、OOP厨房の頃とても役に立ちました。

クラスとインスタンス、継承、...などなど、オブジェクト指向の断片についての知識はあるが、

インスタンスどうしがどうやって連携しているか、イメージがつかめない
したがって、OOP(C++)で組まれたプログラムの全体像がみえない

という状態の人が、OOP(C++)で組まれたプログラムの全体像を理解できるようになり、次の
ステップの勉強にすすむには、良い本だと思います。

(自分の場合は、先輩のコードを解析させてもらいながらこの本を読んだから良かったのかもしれません)
003735補足 NGNG
Booch定義に、クラスが満たす条件に継承が出来ることと逝う条件があります。
もしBooch定義が気に入らないなら、自分で条件を作って啓蒙&流行らせて下さい。
003836 NGNG
OOP(C++)→OOPL(C++)
0039>34@`35 NGNG
推薦図書
1.オブジェクト指向における再利用のデザインパターン(Gofですね)。
2.オブジェクト指向開発の落とし穴。
3.アンチパターンソフトウェア危篤患者の救出。
手元にある超有名どころを選びました。
1.はUMLじゃないけど読んで損はありません。
>1はClassってなにってきいて継承でこんがらかってるわけ。
無理もないよ。このアプローチが落とし穴なんだから。
後”実践UML”をお勧めします。ともかく継承はどっかへほっときなさい。
いまどきooって単なるコーディングテクニックだと思ってる人いる。?
やれやれ厨房だらけだ。
0040>37 NGNG
5@`25@`28@`33@`39が同一。ちょっと極論してるよ。でもまー結構本気です。
あたしゃオブジェクトコンポジション派でブラックボックス派ですから。
汎用で大規模にooやる気ならこれっきゃないもん。
>1が本職Cobolerとみて同業者がだめソース書いて自分が偉い気になってる
連中にいじめられてルーって気分でつついたってわけ。自分はCOBOL書けないけどね。
C++やJavaはWin以外で使うけど、このときは継承使うよ。だからこそVC++が嫌いでかつ
Unixにデル坊来るなって思っちゃうんだろーなー。
でもサブクラス至上派でホワイトボックス派の立場での意見は歓迎します。
004114=26>39 NGNG
>後”実践UML”をお勧めします。ともかく継承はどっかへほっときなさい。
>いまどきooって単なるコーディングテクニックだと思ってる人いる。?
>やれやれ厨房だらけだ。

ooa=oop=ooとしてますね。基礎が出来て無いですね。
「継承が無ければクラスで無い」はoopの定義です。間違った理解を他人に勧めるのはやめて下さい。
004214=26>40 NGNG
何度も書いて悪いですが、文章読んでも何逝ってるのか分かりません。
0043横レス NGNG
オブジェクトコンポジション→
あるクラスのインスタンス変数に別のクラスのインスタンスを持たせる
やり方。結果、クラスのパブリックメソッドしか弄らない。
実際、これで必要十分なように設計されていないクラスがあったらそれは
アホかも。

サブクラス→派生クラス作って、そこでprotected属性のメソッドや変数を
弄ったり、メソッドオーバーライドしたりしてクラスの性質を変質させて
使うやり方。
コレクションとか使うときに、どうしてもオブジェクトポリモルフィズム
を利用する必要があるので、全く継承しないでOOPはできないとおもうん
だけどなあ。
0044名無しさん@お腹いっぱい。 NGNG
結局のところ実装をしらなければ
分からないと言うのは皮肉だがプログラミングというのは
そういうものだ。
アセンブラからやりたまえ諸君。
0045横レス NGNG
オブジェクトコンポジション例

class A{
 public void func(){...};
}

class B{
 private A a;//これ

 public B(){
  a= new A();
 }

 public void runFunc(){//Aのfunc()を起動したい場合こうする
  a.func();
 }

 public static void main(String args[]){
  B obj = new B();
  obj.runFunc();
 }
}

よく出来たライブラリなら、これで事足りる事が多いので、
なんでもかんでも継承してバグ埋め込まないようにしよーね。
0046横レス NGNG
継承が便利な例(コレクションと複合で使う時)

interface TestInterface {
 public void Say();
}

class TestClassA implements TestInterface{
 public void Say(){System.out.println("I am A!");}
}

class TestClassB implements TestInterface{
 public void Say(){System.out.println("I am B!");}
}


public class TestMain{

 private static List list = new LinkedList();

 public TestMain(){
  list.add(new TestClassA());
  list.add(new TestClassA());
  list.add(new TestClassB());
  list.add(new TestClassB());
  list.add(new TestClassA());
  list.add(new TestClassB());
 }

 public void SayAll(){
  TestInterface instance;
  for(int i = 0 ; i < list.size() ; i++ ){
   instance = (TestInterface)list.get(i);
   instance.Say();
  }
 }

 public static void main(String args[]) {
  TestMain obj = new TestMain();
  obj.SayAll();
 }
}

極端だけどね。
004727 NGNG
>31
>「クラスライブラリを派生させて差分コーディングすれば楽なんだよ」って何で素直に教えてあげない
質問と思うので答えましょう。下手な人はそれが理解できないから。
004836 NGNG
1の方の質問を読み返してみたのですが...

> そこで、クラス継承の概念が理解できず、困っています。

とくに継承について、ハマっておられるわけですね。わしの36の回答は、
質問にちゃんと答えてませんね、すんまそ。

さて、

たんに「継承をするとなにが起こるか」ということについては、そのへんの
教科書に書いてあること以上でも以下でもないと思います。とくに、既出の

> 憂鬱なプログラマのための...

では、うまく説明されていると思います。

しかし、1の方は、ひょっとすると、継承をするとなにが起こるか、が
理解できないのではなくて、

●どうゆう局面で(なにがやりたくて)継承をつかうのかイメージがわかない
●だから継承を効果的につかう自信がない
●たんに差分コーディングをするだけならコピペで良いのではないか

とゆうことで、不安になっておられるのではないですか?

もしそうなら、

Effective C++―C++の50の急所
ISBN:4890524010

とゆう本の「44項:あなたの意図することを言おう、自分が言っていることの意味を
理解しよう」とゆうところが、たいへん役に立ちます。

(てゆうか、たいへん役に立ちました。俺的には^^)

継承は、差分コーディングをして楽をする以外の局面でも威力を発揮します。
004936 NGNG
こんなこと書くとエラソーだけど、つけたし。

C++するにあっては、

「自分は、なにがやりたくてこのようなコードを書いているのだろう」

とゆうことを、つねに頭のなかで明確に言語化して認識しているかどうかは、
けっこうキーになると思います。

005036 NGNG
あ、間違えた!!
Effective C++ の現行版は改訂2版です。
48は古いやつです。すんまそ。
005127 NGNG
もちろん使わなくては上達しないんだが、せめて、でたらめに作るとどんな結果に
なるかを認識するまでは&人間全般が認識できる範囲がどれくらい狭く浅いかが
認識できるまでは、控えめに使ってほしい。。
0052名無しさん@お腹いっぱい。 NGNG
ブラックボックス派です。外注の馬鹿ソースみながら息抜きに2chしてたら
ちょっと暴論吐いたみたいね。頭冷えるとよくわかるスマソ。
確かに自分も継承使うよ、ただclassを理解するのに
is-a@`has-a@`is-implemented-usingと実装/インターフェースの泥沼
でおぼれたらかわいそうだと思ったわけ。モナーって言われりゃそれまでだけど。
で>1がせっかくoo世界に来たいならユースケース/協調図から入ったらと思っただけ。
C++&継承後回しでいいじゃん。後はもっといいレスがついてるからそこにゆずります。
実装依存のooドキュンにだけはなるなよーって思うこのごろ。

0053名無しさん@お腹いっぱい。 NGNG
パターン指向、フレームワークも追々、って事で。
コンポーネント指向で最初に楽するのはマズイ?

(ってゆーかその方が継承のありがたみ実感できると思うけど。)
0054横レス NGNG
>53
おいらの場合Cしか知らなかった頃に、GUIフレームワーククラス
ライブラリ(もちろんMFCじゃ無いやつ)使うことで、クラス
継承階層構造(特に派生クラスによるメソッドオーバーライド)
がどんだけ便利なものか悟りました。

実装からその意義を知るというアプローチも、無くは無いと思うよ。
というか継承ってOOでの「便利なテクニック」というレベルのもの
であって、OOの概念とは直接関係ない気がするが…
0055>54 NGNG
>というか継承ってOOでの「便利なテクニック」というレベルのもの
>であって、OOの概念とは直接関係ない気がするが…

継承はテクニックじゃなくて、クラスの定義、必要条件です。
”気がする”位で間違った事を人に教えるのはヤメレ。(雑談スレなら良いが、このスレは教えてスレ)
0056名無しさん@お腹いっぱい。 NGNG
うーん。OOを学ぶのに。「OOとは」という議論がそもそも必要なんだろうか。
算数を学ぶのに整数論から始めたわけじゃないし。。
0057名無しさん@お腹いっぱい。 NGNG
継承よりも委譲を優先すべし!
0058>56 NGNG
◎◎を学ぶには、◎◎とは何か(=定義)を知らなければなりません。
それを間違って理解していると学んだことになりません。
小学生でも整数論を学びます。大学でさらに代数(群論)として一般化されます。
0059>56 NGNG
「小学生でまなんだ整数論」と大学で一般化された整数論」を
OOの議論に置き換えると、どうなるの?
たとえばπとiの違いを小中学生が厳密に知る必要があるのだろうか。
006059 NGNG
59の>56は>58の間違い。
0061名無しさん@お腹いっぱい。 NGNG
>57
若干賛成。
カプセル化と継承はある意味相反する。委譲はそうではない。その分
コードの再利用性は劣るが、これはOOの本質ではないので。
0062横レス NGNG
>55
あう、そーですか。
じゃあ、下2行は”実装経験者が語る個人的な感想”
っつーことでどうでしょ。
0063>61 NGNG
だから、そういう事を他で逝ってもよいが、それは、OOではありません。
0064名無しさん@お腹いっぱい。 NGNG
>「小学生でまなんだ整数論」と大学で一般化された整数論」を
「大学で一般化された群論」の方が良いと思いますが、系(システム)の記法が加わります。本質は変わりません。
定義した系を満たすものの一つが整数になります。整数は系の一つであり特に整数を特別視しません。

>たとえばπとiの違いを小中学生が厳密に知る必要があるのだろうか。
整数と整数以外を知るために定義を知らなければなりません。πとiを知る必要は無いでしょうが。
0065名無しさん@お腹いっぱい。 NGNG
基礎ができていないブラックボックス派です。慌てて本読み返したら以下の文章あり。

クラスは概念またはタイプのソフトウェアでの実装であり、オブジェクト指向プログラミング言語では、
サブクラスはクラス階層(class hierarchy)の作成によって、そのスーパークラスの属性及び操作の定義を継承します。
継承(inheritance)は、スーパータイプの定義に一致するサブタイプを実装するためのソフトウェアメカニズムです。
したがって、継承は、設計フェーズに進んだときは多くの場合に重要な役割を果たしますが、
概念モデルの考察には含まれません。

この文章から以下が考えられます。
1.著者Creg Larmanはooの基礎ができていない。
2.ooaの概念モデルはooではない。
3.概念モデルのclassはooのclassじゃない。

>41のかた教えてください。
0066>62 NGNG
横レスさんの文章+内容は分かりやすくて良いと思います。
なぜキツク書いたかと逝いますと、「クラスについて、教えて 」の前スレが、
同じように拡散して、cobolerさんが混乱してたからです。
006741>65 NGNG
前スレ読んだのかよ? http://mentai.2ch.net/test/read.cgi?bbs=prog&key=965390658

ooa・・・トップダウンアプローチ・・・クラス間の関係を注目
oop・・・ボトムアップアプローチ・・・クラスの継承を注目
0068横レス NGNG
どうも他人には理解不能な概念論書き散らして
自己満足してる専門馬鹿がいる模様。
0069>横レス NGNG
ヤメレー、概念論って何?概念は概念。
0070横レス NGNG
>68
人のHNつかってあおんないでちょ。
007169>70 NGNG
確かに口調&内容が違うね。コテハンに多少難あり?(汎用名っぽい)
007259>64 NGNG
OOに継承が含まれるか、委譲はどうかというのはiとπの違いと変わらないじゃない?
と暗に述べているんだが。。。それについてのコメントはいかに?
0073名無しさん@お腹いっぱい。 NGNG
>70
まったく同感です。おなじく私と同じHNを使っているものは慎むように!
007464>72 NGNG
>OOに継承が含まれるか、委譲はどうかというのはiとπの違いと変わらないじゃない?
逝ってることが非常に分からない。
is-aをあらわすには継承は不可欠。委託は、継承の実装時にintefaceを挟むかどうか。

i・・・「演算*」を満たさない
π・・・?忘れた
007565>67 NGNG
2chでなんで前スレだとかになるんだ??MLじゃあるまいし。
まーでも面白い。>67結論には同意。でそれなら継承なくてもクラスジャン。
>68概念モデルが概念論だって???激しく逝ってくれ。
俺が専門馬鹿??信じられんよブラックボックス派だっていってるのに。
分析>その後コンポーネント利用で楽チンが理想なのに。
分析して見つかったclassにコンポーネントがきれいにはまっておしまい。
なんて仕事あるはケネーよな。
007674=67>75=65 NGNG
68はほっとこうよ、皆そう思ってないから。僕のことを逝ってたのかと思って僕も怒ってた。
0077通りすがり NGNG
いやーoo厨房は怖いね・・・
007874=67>77 NGNG
当然。だけど今回は、前スレより穏やかだよ。
007972>64 NGNG
>逝ってることが非常に分からない。
確かにそのようだ。。
>>たとえばπとiの違いを小中学生が厳密に知る必要があるのだろうか。
>整数と整数以外を知るために定義を知らなければなりません。πとiを知る必要は無いでしょうが。
を踏まえて
>OOに継承が含まれるか、委譲はどうかというのはiとπの違いと変わらないじゃない?
とのべている。私は
「整数」->「OO」、「πとiを知る必要」->「継承があるかないか」と対応付けて、
「OO」か否かをしるのに「継承があるかないか」は必要ない
と述べている。これに対する反論は、
「整数か整数でないか」->「(継承の有無こそが)OOかOOでないか」と対応付けるべき、
というものを期待した。

アプローチをちょっとかえると、継承の有無はOOかOOでないかの定義にどれくらいの
重要度をもっているだろう?まさか必要条件と主張しているのはわかったが、十分条件で
はさすがにないよね。
008072 NGNG
失礼。74=67なのか。ならば大して意見の相違はない(ように思う)。
なので79へのレスは適当に。
008174=67=14>79 NGNG
OOPは、対象とするものが、データと手続きしか見当たらないので断言しやすい。
OOについては余り断言したくない(考察はしたいが)。十分条件ではないよね。
0082名無しさん@お腹いっぱい。 NGNG
ラックボックス派。79的に期待だったがなんだか81あたりで
自分もなっとくしちゃった。
前スレの構造体話みたら、なんでこんなコードが自分のとこに回ってきたか
なんとなくわかった気がする。
確かに継承=差分コーデングじゃないのに、インターフェースのある言語を進めるべきか?。
だけどJavaの真似してC++書いてこのClassはあのClassと違うのよ
わかったxxチャンなんて言えんし。頭痛いよ。
それともアセンブラか?ちぇMSのCOM解説で一番よくわかったのがjmpテーブルみたいな
アセンブラリストのあるやつだもんナー。自分も実装ドキュンか...情けネー。
0083名無しさん@お腹いっぱい。 NGNG
↑うーむむむ。ま、よくわからんが、よかったよかった。いっしょに喜んであげよう。
0084名無しさん@お腹いっぱい。 NGNG
>1
日経ソフトウエア9月号のオブジェクト指向プログラミングなんてどうでしょ?

車うんぬんより、オブジェクト指向でかかれたソースを
写してコンパイルして、考えて
これを繰り返すとなんとなくわかるもんだと思うのですが

0085名無しさん@お腹いっぱい。 NGNG
車のたとえよりはプログラマなら(Cobolarはどうか保証できないが)、図形描画の
たとえがいいんじゃないかな。丸も四角も図形を描画する、といった同一の形式で
管理できるよ、っての

どっかのスレでやってたが^^;
0086どっかのスレの261 NGNG
やっぱ、くだものや車やkakezanはあんまり良い例ではないかもね(^^;
0087クラスとインスタンスの例え話でこんなの考えてみました。 NGNG
とりあえずメモ帳(notepad)を思い浮かべてください。

#COBOLERの人のために一応言っとくと
#Windowsのおまけについてくる単純なエディタっす

#べつにメモ帳であることが本質ではないので
#マカーの人とかはナニかよく知ってるアプリでもいいっす

で、オブジェクト指向用語でいうところの
「クラス」っていうのはずばりメモ帳の実行ファイル
(のバイナリイメージ)。

実行ファイルを起動したときの
メモリ上の実行イメージがいわゆる「インスタンス」とか
ただ単に「オブジェクト」とか呼ばれるものなわけです。

で、メモ帳は
いくつも起動できますよね?

でもそれらすべてのメモ帳の見た目や動きを規定しているのは
NOTEPAD.EXEっていう1つの実行ファイルなわけです。

よく入門書で「クラスはオブジェクトの鋳型である」とか
「クラスはオブジェクトの設計図である」とか例えられますが
要するにそういうことです。

#実際のOOP言語でもコンパイラなら
#クラスは最終的に実行バイナリに
#組み込まれるわけです。
#Javaなんかクラス=classファイルで
#1対1対応してるし。
0088超電波厨房発見!>87 NGNG
何でnotepad.exeがクラスになるんだ?
メモリ上の実行イメージがオブジェクトだから、とか分かんないこと逝うなよ。
誰も、メモリ上の実行イメージをオブジェクトと逝ってないんだから。
008988 NGNG
「クラスについて教えて」ってところに「クラスとインスタンスの例え話」が出て来るところがドキュソ。
0090>89 NGNG
でも、はじめの一歩はそこじゃんよ。
009189>90 NGNG
レス番号が10以内迄なら「はじめの一歩」を許す。
0092バッカーです NGNG
メモ帳の継承・・・
ワケわかんねーなぁ
0093名無しさん@お腹いっぱい。 NGNG
OOCOBOLだったらCOBOLerにもOOが理解できるだろうか?

http://www.asahi-net.or.jp/~um5m-isd/
0094名無しさん@お腹いっぱい。 NGNG
みんな、87のいいたいことは察してやるのが親切ってもんじゃないか!友達だろ!
0095名無しさん@お腹いっぱい。 NGNG
>94
察してつっこむもヨシ。理解できずに煽るもヨシ。
0096名無しさん@お腹いっぱい。 NGNG
>94
友達ではないが、洞察力の無いイタイ厨房はもっと嫌い。
0097>88 NGNG
OLEとかOpenDOC(笑)とかって発想がもろそうじゃん。
0098名無しさん@お腹いっぱい。 NGNG
そもそもウインドウズってロードされた実行イメージをインスタンスって言うしね。
0099名無しさん@お腹いっぱい。 NGNG
今のビデオカードってほとんど全部IBMのVGAカードのサブクラスだよねー。
ほとんど仮想クラス化してるけど。(実物はみたことない)

で、サウンドカードもいまだにサウンドブラスター継承してるのあるし。
アダプテックもNE2000も以下同文

んで多重継承をつかえば一枚のPCカードでLANにも外付けDVDにも繋げて
あら便利。

調子にのってミレニアムの発色とGeForceの3Dを多重継承しようとしたら
レジスタアドレスやらなんやらバッティングしまくりであら大変。
菱形継承は気おつけましょうってか?(く、苦しい)

空冷ファンはミキシンか?
0100名無しさん@お腹いっぱい。 NGNG
基底から説明するからわけわかんないんじゃないか。
(概念はそうなんだろうが、それがわからんから継承がわからん)

フォードもセダンも2トントラックも「車」だよね、辺りから始める。
あまり変わらんか:-)

といいながら、「継承」より「バリエーション」の方が通りが良いかもと思った。
0101100 NGNG
あ、キリ番だ。
「継承」と「バリエーション」が違う次元のことをいっているのは判っている。

概念を説明するよりも、それを行った結果と元の関係から攻めたほうが
判りやすいんじゃないかって話。


010288 NGNG
で、そろそろ、notepad.exeと車の話は止めるよ。

>OLEとかOpenDOC(笑)とかって発想がもろそうじゃん。
VC++付属のnotepadのC言語ソース拡張してOpenDocやってなさい。
>そもそもウインドウズってロードされた実行イメージをインスタンスって言うしね。
MSがWindowsをオブジェクト指向と逝っているだけで誰も認めん。
■ このスレッドは過去ログ倉庫に格納されています