構造化プログラムとオブジェクト指向プログラム
■ このスレッドは過去ログ倉庫に格納されています
0001デザイナー小僧
NGNG最近JavaScriptを覚えて、すこしスクリプトやプログラムに興味を持ったビギナーですので、
JavaScriptからの流れで、Perlのような構造化プログラムのほうが便利なふうに見えてしまうのですが…
これらはどのように使い分けていくのでしょうか?
文中間違いがあったら指摘して頂けると助かります。
0002デザイナー小僧
NGNGhttp://piza.2ch.net/test/read.cgi?bbs=tech&key=974669983&ls=1
何となくしかこの記事を理解できなかったので引き続き。例えばJavaScriptで
function sentenceA(){
document.write('おじいさんは');
}
function sentenceB(){
document.write('山へ芝刈りに');
}
function sentenceC(){
document.write('逝ってよし!');
}
function story(){
sentenceA();
sentenceB();
sentenceC();
}
と書くのって非常に分かりやすいし、パーツとして再利用も効きそうなんですが、いかがでしょうか?
0003名無しさん
NGNGarray.each{|i| print i@` "\n"}
というRubyプログラムを実行すると
1
aaa
7.3
45
true
と表示される。便利だと思わない?
0004キーは
NGNGおじいさんの年齢とか、年収とかのデータもたせてかいてみろよ。
そんでおばあさんも登場させてみな。
0005デザイナー小僧
NGNGなるほど!非常に便利ですね。
>>4
JavaScriptでの多次元配列の書き方が勉強不足なので、汚いコードだと思いますが、
var ojisan = new Array();
ojisan[0] = 'おじいさん'; /* キャスト名 */
ojisan[1] = '尾自 慰酸'; /* 役者名 */
ojisan[2] = 1900; /* 生年月日(年) */
ojisan[3] = 11; /* 生年月日(月) */
ojisan[4] = 20; /* 生年月日(日) */
ojisan[5] = 10000000; /* 年収 */
ojisan[6] = '山で芝刈り'; /* 職業 */
var obasan = new Array();
obasan[0] = 'おばあさん'; /* キャスト名 */
obasan[1] = '尾芭 朝酸'; /* 役者名 */
obasan[2] = 1900; /* 生年月日(年) */
obasan[3] = 11; /* 生年月日(月) */
obasan[4] = 22; /* 生年月日(日) */
obasan[5] = 10; /* 年収 */
obasan[6] = '川で洗濯'; /* 職業 */
function MakeSentence(Who@`What){
document.write(Who+'は'+'What'+'しに');
}
function Sroty(){
MakeSentence(ojisan[0]@`ojisan[6]);
MakeSentence(obasan[0]@`obasan[6]);
document.write('逝ってよし!');
}
で如何でしょうか?
MakeSentenceをそれぞれに応じて作ればいいのかな?と思うのですが…
0006名無しさん@お腹いっぱい。
NGNGオブジェクト指向(言語)は大規模な(構造の複雑な)システムの記述に向いています。
例えばGUIアプリケーションやネットワーク・アプリケーションがそれです。
手続き型言語(1が言う「構造化プログラム」とは正確にはこのことだと思う。
なぜならオブジェクト指向は暗黙で構造化プログラムを包含しているから)
はオブジェクト指向にしなくても事足りるシステムの記述に使います。
#オブジェクト指向の利点の一つは,ソフトウェアの再利用性だと言われています。
#よって使い捨てのようなプログラムをオブジェクト指向にする必要は
#あまりありません。
>JavaScriptからの流れで、Perlのような構造化プログラムのほうが便利なふうに見えてしまうのですが…
<
プログラム言語を大別すると,JavaScriptはどちらかというとオブジェクト指向型
言語に大別されます。JavaScriptは,継承とポルモルフィズム(polymorphism)
の機能こそ備えていませんが,カプセル化はできます。
つまり
>document.write('おじいさんは');
このような短い文でウェブブラウザに文字列を出力できるのも,
オブジェクト指向の恩恵を受けているからなのですよ。
0007名無しさん || die
NGNG配列の何番目に何が入っているのか覚えておくというのはけっこう苦痛だし、
他人がそのプログラムを見たときに
代入個所を見ない限りstoryが何をしている関数なのか分からない。
JavaScriptがわかるならこのサイトでも見てみて。
http://www.tokumaru.org/JavaScript/
0008imagine
NGNGいいよ。そんなかんじで。
でね、この物語をどんどんおおきくしていった時に収拾がつかなくなりませんか
ってことがいいたかったんだよ。
やってみるのが一番なんだけどね。これJavaでかくとどうなる?
なぜ収拾がつかなくなるかというと、
例えばおじいさんのデータとそれにアクセスするメソッドが分離してるでしょ。
巨大プログラムになると、メンテが大変になるよ。
あとおじいさんのデータにだれでもさわり放題なのもいやじゃない?
0009デザイナー小僧
NGNGありゃりゃ、根本から判っていませんでしたね…。
手続き型言語とは、 BASIC のような、例えるならば一筆書きのような言語を指すのだと思っていました。
このあたりから勉強し直しです。
>>7
確かに、これは配列の何番目?というのを複数の人間でやりとりするのには、判りづらいなと思いました。
>>8さんも触れていらっしゃいますが、大きなプログラムになった時、メンテナンスが煩雑になりそうなのは(今まで仕事の折りに書いてきた、つたないコードでも)薄々感づいていたんです。
7さんのリンク先は今ざっと読ませて頂きました。非常に興味深いサイトです。ハンドルからご察しの通り、デザイナーという職業から HTML@` JavaScript を辿って来ているので、言語としての側面から捉えている文章は自分にとっては新鮮な思いがします。「Java族とPerl族」
http://www.tokumaru.org/memo/memo001.htm
などは、「なるほど、こういう分け型もあるのか」と感心した次第です。
>>8
>あとおじいさんのデータにだれでもさわり放題なのもいやじゃない?
なるほど。まさに。
性善説を信じていますから…というのは回答になってませんか?なってませんね。
0010名無しさん@お腹いっぱい。
NGNGBASICはど〜みても一筆書きじゃないけど。。
一筆書きと言えば、SQLだな。。
0011名無しさん@お腹いっぱい。
NGNGpublic static void main(String args[]){
Ojisan ojiisan = new ojiisann();
Ovaasan obaasan = new obaasan();
Hito hito[] = { ojiisan@` obaasan};
for (i = 0;i <=1; i++) {
System.outPrintln(hito[i].getcastMei());
Systte.outPrintln(hito[i].go());
System.outPrintln(hito[i].work());
}
}
public class Ojisan extends Hito{
castMei = "ojiisan";
dokohe = "yamahe";
shokugyo = "shibakari;
ojiisann();
}
public class Obaasan extends Hito{
castMei = "obaasan";
dokohe = "kawahe";
shokugyo = "shibakari";
obaasan();
}
public class Hito{
private String castMei;
private String dokohe;
pruvate String shokugyo;
Hito();
public String getcastMei{
return castMei;
}
public String getcastMei{
return castMei;
}
public String go(){
return dokohe;
}
public String work(){
return shokugyo
}
}
0012名無しさん@お腹いっぱい。
NGNGつーか、よく考えてないと、一筆書きになりがちでは?
0013名無しさん@お腹いっぱい。
NGNG登場人物が増えるたびにクラスを作るの?
登場人物を「役」とみなして、
複数の役者で演じさせることを可能にするため?
0014名無しさん@お腹いっぱい。
NGNGおじいさんもおばあさんも柴刈りに逝く。
■ このスレッドは過去ログ倉庫に格納されています