- くだすれPython(超初心者用) その22
350 :デフォルトの名無しさん[sage]:2014/04/03(木) 00:01:58.53 ID:qL+1iK2f - >>347
>A coins = coins + magic_coins - stolen_coinsで、なんでcoinsを両辺に持ってくるのか Python に限らず手続き型プログラミング言語における記号「=」の意味は、 一般的な数学の「等しい」ではなくて、「右辺の式を評価した結果で左辺を書き換える」になる いいかえると、この文は等式(あるいは方程式)とは、まったく関係ない 数学の世界だと、変数は一度初期化されれば二度と値が変化することなんてありえないけど、 プログラミングの世界だと、変数とは黒板みたいなもので、いくらでも書き換えできる この文は、coinsその他変数の値を読み出し、計算し、黒板上に書かれたcoinsの欄を 黒板消しで消してから、その計算結果の値をチョークで書き込みなさい!!という 手順(=命令の並び)を表現している
|
- スレ立てるまでもない質問はここで 135匹目
75 :前スレ991[sage]:2014/04/03(木) 20:30:48.92 ID:qL+1iK2f - >>32
>人間クラスが実装可能で、哺乳類が実装不可能なクラスとする。 >ここまでは認識はあってると思う。 哺乳類は抽象クラスで人間は具象クラスだから、ここまではあっているね >で、例えば日本人だけ特別な振る舞いを実装しようとすると、 >人間クラスから日本人クラスってのを作らないの? まず 哺乳類-人間 というクラス構成は、生物学上の分類に従っている (人間は生物学の学名であるホモ・サピエンスの俗称である) そして、もし人間クラスを継承するのであれば、同様に人種を切り口にして 白人(コーカソイド)/黄色人種(モンゴロイド)/黒人(ネグロイド)等で分類すべき それなのに、国籍あるいは民族による分類で日本人という例を 何の迷いもなく提示してしまう点が、素人の発想だと指摘しておく >この場合は、哺乳類から派生させろっていってる? >それとも、人間を抽象クラスにして日本人とその他のクラスを作れっていってる? >>38が推測しているように、後者が望ましいと考える 上記の例であれば、具象クラスである人間を抽象クラスへ変更し、 それを継承した白人/黄色人種/黒人クラスを定義する そして(人間クラスではなく)おそらく黄色人種クラスをインスタンス化して KACを生成するよう変更を加える
|
- スレ立てるまでもない質問はここで 135匹目
76 :前スレ991[sage]:2014/04/03(木) 20:52:32.41 ID:qL+1iK2f - >>44
>それって、..... (中略) ..... >にしろってこと? 人間クラスは抽象クラスだから、1行目は、以下のようになる abstruct class AbstructMammalia {} abstruct class AbstructPerson extend Abstruct Mammalia {} >「人間クラス」にはwork(), eat(), sleep()メソッドがある場合(日本人だけsleep()の内容がちょっとちがう)、 >そのメソッドはどこに実装するの? これも>>49(>>38)氏の推測が当たっている ただし、食う(eat)/寝る(sleep)/遊ぶ(work)という活動は生物にとって共通の振る舞いだから、 哺乳類クラスで定義して人間クラスで継承し、必要に応じてオーバーライドするのが適切であると考える たとえば、「食う」という活動は哺乳類だと単にエネルギーを得るのが目的であると定義されるけど、 人間クラスであれば、それに火を使った調理であるとか食事というコミュニケーションの道具としての 意味合いを加えた内容でメソッドをオーバーライドする
|
- スレ立てるまでもない質問はここで 135匹目
77 :前スレ991[sage]:2014/04/03(木) 21:36:39.60 ID:qL+1iK2f - >>45
>最後の「人間も抽象クラスに」だとすると、 >結論としては > ・派生して振る舞いが変わるメソッドは純粋仮想にする >って事が要求されている事にもなると思う。 なぜそういった要求が結論として導かれるのだろうか? >>31の後段で以下のように述べたように、 >サブクラス(抽象クラスまたは具象クラス)でのオーバーライトは普通にありうる サブクラスでのオーバーライドに関して何ら制限を加えようとする意図は、どこにも無い もしも人間を具象クラスから抽象クラスへ変更するコストを欠点(or 問題)と考えているなら、 それは>>49氏が推測されているように、「その変更が必要だから」というのが答えになる つまり、「与えられた対象領域が変更されたのなら、それに応じてクラス定義も適切に 再設計すべき」という方法論になる なぜそれが必要なのかは、すでに>>31の問い「哺乳類クラスをインスタンス化した オブジェクトとは具体的には何になるか?」で答えているはずだよ それを「ちょっと特別なもの(>>16)」などと、安易に目先のコーディングのコストを優先して、 モデリングという上流の設計工程へ立ち返ろうとしないリーダが存在するから、 プロジェクトが炎上する >>17で書いたように、この方法論は生産性と高品質との両立を目的としている 最近のスパイラルやアジャイルといった開発手法についても同様であり、その反復の各フェーズで 「モデルの再設計に立ち返る」という姿勢が参加メンバー全員に浸透していることが成功の前提になる それを目先のコーディングの改善をリファクタリングだと勘違しているから、 せっかく最新の開発手法を導入しても失敗を繰り返すことになる
|
- スレ立てるまでもない質問はここで 135匹目
81 :前スレ991[sage]:2014/04/03(木) 22:09:20.59 ID:qL+1iK2f - >>58,59
そのコードが適切かどうかは、与えられた対象領域しだいだね たとえば>>76では「食う(eat)」を例にオーバーライドを説明したけど、 「寝る(sleep)」のケースの場合、 世界的な睡眠時間は平均8時間であるけど、日本人は世界有数の 睡眠不足国民と言われ、平均6時間と大きな隔たりがある http://www.smartsleeplibrary.jp/column/001-2.html という知識をモデル化するのが対象領域であれば、メソッド sleep の実装は AbstructPresonクラスだと「睡眠時間の平均は8時間」という実装に、 Japaneaseクラスであれば「睡眠時間の平均は6時間」という実装になるけど、 これが一概に間違っていると断定はできないよね?(他に適切な答えはある?) そして、Japaneaseは具象化クラスだからそのままインスタンス化できるし、 それ以外の国民をインスタンス化したいのなら(抽象クラスのAbstructPersonではなく、 それを継承した)具象クラスであるPersonをインスタンス化する 何か問題あるかな? それとも哺乳類クラスをインスタンス化するのが正しく、それと同様に、 このケースでもAbstructPersonをインスタンス化するのが正しいと思うの?
|
- スレ立てるまでもない質問はここで 135匹目
82 :前スレ991[sage]:2014/04/03(木) 22:16:27.95 ID:qL+1iK2f - >>80
さて一般常識の三択クイズです: 「哺乳類」「人間」と来たとき、次に来る言葉として適切なのは、 以下のどれでしょう? 1)日本人 2)黄色人種 3)AB型
|