ねねっちと一緒にプログラムを勉強するスレ第2話 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/03/18(土) 13:03:05.05ID:KGlkA67c
ぬるぽって何?
2017/03/18(土) 23:36:20.62ID:Z1poHEqC
今日も一日ガッんばるぞい
2017/03/19(日) 00:18:40.43ID:cSt3/uVu
>>1
れーがい。
4デフォルトの名無しさん
垢版 |
2017/03/19(日) 00:29:34.64ID:dpFhURxm
2ch誕生時ぬるぽ誕生時はねねっちの誕生前史…でも無いか…?
2017/03/19(日) 07:19:32.95ID:lvnI99G6
前スレ

ねねっちと一緒にプログラムを勉強するスレ [無断転載禁止]??2ch.net
http://echo.2ch.net/test/read.cgi/tech/1485415033/
2017/03/19(日) 13:14:33.69ID:3j9rxESx
馬鹿が馬鹿に向けてコーチしてるから、いつまでたっても終わらんな

馬鹿は馬鹿の気持ちがわかるから教師に向いてるとかいうけど
まともな言語使役能力がない馬鹿に教師が務まるわけねえだろバーカ
自分の馬鹿さ加減を正当化する以前に相手の立場、聞き手の立場になってライティングする技術を学べよバーカ
2017/03/19(日) 13:28:09.26ID:GVCm3UtV
馬鹿が大好きな馬鹿
2017/03/19(日) 13:35:24.13ID:MQWsDRoG
>>6
コーチ任せた
2017/03/19(日) 15:26:53.79ID:DJjYEA61
>>6
分からないことがあるから聞いてもいいかな?
2017/03/19(日) 16:55:32.81ID:MC3Ph5Rd
とりあえずどんなに小規模でもいいからアプリケーション一つ作ってみれば何かしら見えるようになる気はするけど

結局プログラミングって技術だから必要になってから学ぶ事柄の方が身につくし
どんなに小規模でもソフトウェア一本作るなら要求されることは多い
2017/03/19(日) 18:32:39.25ID:cSt3/uVu
ポインタ、クラスという2つの大きなカベをぬーぶくんは乗り越えることが出来るかな?
特にポインタはかなり難しい。
2017/03/19(日) 19:42:24.52ID:w6cUNJco
言語1つ習得するのにいつまで掛かっとんじゃい!
2017/03/19(日) 20:15:51.06ID:sUTtusgG
逆に言語を完璧にマスターしようとしたら相当の時間は必要だと思うけど

例えばJavaに限ってもEffecive Javaの内容を実践できるようになるレベルまでたどり着くだけでも相当な時間がいると思う
2017/03/19(日) 21:07:09.25ID:3j9rxESx
まずは五目並べとかを目標にするべきだとおもうの
五目ならべとかくそつまんねえけど、最低限のゲームループははいってるわけでね
おれも大学時代Cでかかされたけど、あれはマジ難しい
インターフェース作るので精一杯で、CPUのAIはランダムに石をおくぐらいしかできんかったわ
2017/03/19(日) 23:12:11.49ID:9swj1Ik4
>>11
お前は何がどこまでできるようになったんだ?
全然プログラミングやってないようだが
2017/03/20(月) 00:22:53.87ID:5XocBJvS
>>15
スッキリわかるJavaの入門編が終わったので、実践編に入ったのですが、難しくてつっかえつっかえです。
例えばオブジェクトクラスに備わっているメソッドのオーバーライドとかで苦戦してます。
あれ必ずやるんですか?しんどいです…。
2017/03/20(月) 01:31:41.05ID:GbEM94zj
まずjavaは難しいからね
継承を中心としたライブラリがあるかと思えば、インターフェースを中心としたライブラリもある

継承を選択すると、データ型に階層構造ができるが、たいてい継承というのは、ある特定の見方で行う分類学みたいなもんだから、この分類に失敗した時点で設計が汚くなる

例えば鳥はflyメソッドを実装すべきだが、飛べない鳥はどうする、swimメソッドを持つ鳥持たない鳥があると思えば哺乳類でも歩けないクジラみたいなのもいる

クラスを動物で例えるのはよくないがイレギュラーを綺麗に処理できるような美しい分類などほぼほぼ存在しない

君はおそらく継承を使った設計などしないし、基本的にすべきじゃない、でも継承を使わないといけないライブラリもあるからね、そういうときはどうするんだろ、
真面目に一つずつオーバーライド実装するかproxyパターンとか使うのかね
結局動的言語のほうが楽なんだよそういうのはJavaだけ勉強してもわからないことだ、もしJavaだけで例えばリフレクションの概念を正確に理解できたとしたらたいしたもんだ、λ式も同じくね
2017/03/20(月) 08:01:55.59ID:8oBPBpt5
>>16
>あれ必ずやるんですか?しんどいです…。
書籍に必ずやりますって買いてあったか?
おまえプログラムできても、プログラマに向いてないからやめたほうがいいよ
周りが迷惑するわ
2017/03/20(月) 16:56:55.64ID:GbEM94zj
静的でもっさいオブジェクト指向言語ってのはそうやって、やれインターフェースがどうだの、やれ継承がどうだのどうでもいいことにいちいち頭を悩ます必要があるからな

正直オブジェクト指向の基本理念は大方失敗してるからそこらへんの技術や思想は無視した方がいい

あれがめんどいと思うなら、動的言語をおすすめする、正直個人でのプログラムにおいてオブジェクト指向はそんなに役に立たない

カプセル化がどうだのいう輩は、ほとんどの言語のライブラリが、オブジェクト指向ライブラリよりもはるかに高いレベルでカプセル化を実現していることに気付かないんだよ
2017/03/20(月) 20:07:41.05ID:ivsP1GF2
言語ひとつ覚えるのにいつまでかかっとんじゃい…うん(´・ω・`)

何かひとつアプリケーションを作れとのことなんで
五目並べはちょっとハードル高いけど
簡単なインベーダーを作ってみようと思う
でも画像をどうやって作ろうか悩む
2017/03/21(火) 00:09:43.10ID:LsnLNCD2
>>17
横だけど、それHead First のデザインパターンの序章である奴だよね。
飛べない鳥とか振る舞いのインターフェースと実装をすれば対応出来る奴じゃん。
オブジェクト指向の基本理念は失敗とかディスってる様だけど、オブジェクト指向を理解出来てない馬鹿がオブジェクト指向を語るなよ。
2017/03/21(火) 00:18:59.12ID:RJ2XVIqX
じゃあその通りに実装すればいいと思うよ

実際飛べない鳥のサンプルコード書いてみ
それがオブジェクト指向のメリットなんだから、喜んで書けるよな
2017/03/21(火) 07:15:17.71ID:LsnLNCD2
>>22
以下になるけど、Strategyで実装すれば書けるだろ。

package test;
class MiniDuckSimulator {
public static void main(String[] args) {
Duck model = new ModelDuck();
model.performFly();
}
}
class ModelDuck extends Duck {
public ModelDuck() {
flyBehavior = new FlyNoWay();
}
}
abstract class Duck {
FlyBehavior flyBehavior;
public Duck() {
}
public void performFly() {
flyBehavior.fly();
}
}
24デフォルトの名無しさん
垢版 |
2017/03/21(火) 07:16:06.90ID:LsnLNCD2
書き込み制限が出た為、分割。

interface FlyBehavior {
public void fly();
}
class FlyNoWay implements FlyBehavior {
public void fly() {
System.out.println("I can't fly");
}
}
class FlyWithWings implements FlyBehavior {
public void fly() {
System.out.println("I'm flying!!");
}
}
2017/03/21(火) 23:08:09.09ID:RJ2XVIqX
え?このプログラムがオブジェクト指向なの?
俺にはこの設計が理解できないなあ

例えば飛べない鳥duckはflyメソッドを持ってはいけないという前提でどうクラス構成するかって話なんだけど、
飛べない鳥duckがそもそもflyを持っていいという設計思想を踏襲するなら、素直にflyメソッドをもつabstract birdクラスまたはflyableインタフェースをDuckは継承または実装し、flyをoverrideあるいはimplementにすればいいと思うんだけど

ストラテジーパターンと言い張ってるけどストラテジーパターンではないよね、それはブリッジパターンだよ
素直にFlyableインタフェースを使ってfly可能なものに対してはflyableインタフェースを素直に実装するのがストラテジーパターンでしょ、間にコンポジションは挟まないよ

という無駄な分類学とデザパタ議論が栄えるだけなのがオブジェクト指向
ここまで一切どのようにエレガントに鳥を飛ばせるかなんて議論なかったでしょ

こういう複雑なだけでくだらない議論に巻き込まれないためにも、動的言語及び関数型言語を勉強する価値がある
2017/03/21(火) 23:31:22.93ID:+RCV7fhe
正しい設計にこだわってすべてが崩壊するよい例だね。
バカは完璧を求めてはいけない。
2017/03/22(水) 00:08:54.02ID:Q7/mY9A+
>>25
ああ、Oreillyの初心者向けの本の序盤に書いてあるレベルだけど、
理解出来ないの?

flyをそのまま実装するとか拡張性が低い実装してんね。
飛べない鳥を具象クラスに追加したりとか
飛べる鳥が骨折して飛べなくなった場合とか対応出来ないだろ。

Strategyってアルゴリズム部分を明確に定義してカプセル化し、
変更や交換がクライアントと独立して行う事が出来るデザパタだけど分からないかな?

bridgeの意味も全然違うし、interfaceから無造作に分類していくと、
実装クラスの数がキリがないから特徴を分離して実装クラスの数を抑えるデザパタだろうが。

てかこの程度のGoFの簡単なデザパタで複雑とかねーわ。
ドメイン駆動設計とか理解出来なさそうだし、
複雑な業務をシステムに落とし込むことは出来なさそうだな。
オブジェクト指向が駄目なんじゃなくて
お前が馬鹿で使いこなしてないだけだから、
オブジェクト指向の基本理念は大方失敗とかほざいてんじゃねーよ。
2017/03/22(水) 00:40:13.35ID:gvAZwZV8
俺は上のコードのやりたいことは概ね理解できたけど、初学者がこれをみて何の黒魔術なんだと思っても何の不思議でもない
たかが飛べない鳥を実装するのに、flybehavior、flywithwings,flynowayというクラス、インタフェースが必要になるとは誰も思っちゃいなかっただろう

実際俺自身これはストラテジーパターンで実装すべき、そしてduckはflyableインタフェースを実装しないべき、だって飛べないんだから、と思っている
何を思ってブリッジパターンにしたのかはそれこそ誰にも解読不能である

僕らはプログラマであって、分類学者じゃない
オブジェクト指向でもてはやされる特徴のうち唯一使えるのはポリモーフィズムだが、実はポリモーフィズムもそんなに役に立たない
ポリモーフィズムが効果的に機能するほどデータ型を作る必要がでた時点で根本的に設計を誤っているからだ

骨折した鳥がどうとか言ってるけど、
骨折した鳥を表現したいなら、鳥クラスのなかにbool型フィールドのisfracturedを追加して内部状態に基づいてflyを切り替えればいい
それがクラスを定義する意味であり、そうしたくないならクラスを宣言する必要がないんだよ

君は間接参照のコストがわかっていないし、gofのパターンもわかってないよ、ちゃんとUML見てくればわかるとおり、ストラテジーパターンはコンポジションを挟まない、ブリッジは挟む
君は変化に対応することに躍起になってるが、それこそ動的言語でサクッとかいたほうが済む話なわけだ、Javaでやることじゃない

クラス設計を過剰に重視する奴は、基本データ構造、特に構造体と辞書型配列とクラスの区別がついていない
29デフォルトの名無しさん
垢版 |
2017/03/22(水) 01:13:13.41ID:gvAZwZV8
たぶんこの問題ならこんな感じのモデルをまず書くんじゃないだろうか。
Javaは久しく書いてないんで、コンパイル通らなかったらごめんな
static class FlyFunction
{static public void fly(bool isFlyable)
if(isFlyable){System.out.println ("I can fly.");}
else {System.out.println ("I cannot fly.");}}
interface Flyable {public void fly();}
interface mayLostWing {public void lostWing();}
//個人的にDuckはFlyableをimplすべきではないが、
public class Duck implement Flyable{
private bool _isFlyable = false;
public void fly(){FlyFunction.fly(_isFlyable);}
}
public class FlyableBird implement Flyable ,mayLostWing
{
private bool _isFlyable = true;
public void fly(){FlyFunction.fly(_isFlyable);}}
public void lostwing(){_isFlyable = false;}}
//curewingなどお好きなメソッドを追加しようね。
}
クラスを使うなら内部フィールドを使わないとクラス使ってる意味ないから。
クラスを使いつつ実際には内部フィールドを参照しないなら、
それはクラスを使いつつも内部状態に依存したくないって気持ちを表している。
それはインスタンスクラスじゃなくてstaticなメソッドクラス、つまり関数ってことなんだよ
これを理解していない限り、無駄に間接参照してパフォーマンスを悪化させるコードの出来上がりだろう。
そしてこれならおそらく誰でも理解できるだろう。

この実装でも不満だけどな。
例えば、飛べない鳥がたくさん出てきたときにどう実装するの?
penguin?chicken?そのたびにクラスを書くのかい?
僕なら辞書配列を使うけどクラスはなんの抽象化の手助けもしてくれないね
penguinクラスとか定義するたびに、flyメソッドを実装したり、lostwingメソッドを実装するのを見て草生えるやろそんなの
2017/03/22(水) 02:32:31.56ID:JXaIwOpQ
>>ぬーぶくん
どうだい?素晴らしいだろう。
Javaをやってみようとは思わんかね?
2017/03/22(水) 03:24:31.66ID:DZdLj/0d
>>30
気持ち悪
だからやんねーっての

どこを見てJavaをやる気になるんだよ
C++でも表現できるわ
3230
垢版 |
2017/03/22(水) 12:14:36.54ID:JXaIwOpQ
>>31
確かに自分でも書いてて気持ち悪い文章だなとは思った。
ちょっとふざけたくなったんです。すんません。
2017/03/22(水) 12:56:40.89ID:Uj/VLma9
ふざけてる場合か!
早く仕事しろ!
2017/03/22(水) 13:03:03.41ID:HAsQj55b
学校早く終わったお

>>30
うーんJavaとかはAndroidアプリ作るには最適だけど
自分はPCのゲーム作りたいからいいかな。
コードの形とか実行速度とかライブラリとか、
どれをとってもあんまりメリットを感じられない。
35デフォルトの名無しさん
垢版 |
2017/03/22(水) 13:37:46.29ID:nJg9yiEm
は?
36デフォルトの名無しさん
垢版 |
2017/03/22(水) 15:16:46.85ID:CS3xBlnx
ねねっちでもC++できるというのにお前らときたら
2017/03/22(水) 15:48:00.79ID:dsEiUABL
>>30
何で他人のコードであたかも自分が書いたかのように威張ってんの?
まず自分がコード書くのが先だろ
38デフォルトの名無しさん
垢版 |
2017/03/22(水) 16:29:42.06ID:R1u9KQvE
>>37
うるせえハゲ
テメェは一生、ゴミコード書き続けてろ
2017/03/22(水) 18:42:35.46ID:Uj/VLma9
34歳最低だな
こいつは一生このままで終わるな
2017/03/22(水) 19:22:50.60ID:JXaIwOpQ
>>32で謝ってるのに、最低とまで言われなきゃいけないのはおかしくない?
まあプログラマー板で言われ慣れてるけどさ。
2017/03/22(水) 19:36:24.52ID:dsEiUABL
>>40
お前馬鹿だろ
2017/03/22(水) 19:53:31.39ID:HAsQj55b
>>40
平謝りしたら全部チャラってどういう
人間ってそういうものじゃないと思うの
2017/03/22(水) 20:06:22.73ID:HAsQj55b
画像の準備終わったからプログラミングに手つけるよ
けど敵の発生と当たり判定どうしよう
2017/03/22(水) 20:54:28.15ID:QtBhfvr1
>>43
敵の発生
https://www.google.co.jp/search?q=%E6%95%B5%E3%81%AE%E7%99%BA%E7%94%9F

当たり判定
https://www.google.co.jp/search?q=%E5%BD%93%E3%81%9F%E3%82%8A%E5%88%A4%E5%AE%9A
2017/03/22(水) 21:00:05.00ID:HAsQj55b
>>44
ggrksって言いたいんか
粘着せんでええんやで
2017/03/22(水) 21:07:04.25ID:J/UeQ48D
敵の発生は、乱数使えばよか。もちろん、敵は複数だから配列とforループを使うように。
当たり判定は、キャラを長方形と見なして、各成分ごとに不等式を使えばよかよ。
2017/03/22(水) 21:13:08.39ID:sbD4JH/G
ぬーぶっちと片山っちやないか
ねねっちをだせ
■ このスレッドは過去ログ倉庫に格納されています