オブジェクト指向はそれぞれのインスタンスに属性とオペレーションがあるのがわかりましたが、そうでないプログラムの仕組みなんてありえるんですか?
Aを動かす為にBを押したらCがAを動かしてくれたって物を作ろうとしたときにそれぞれをオブジェクトとする以外に方法は無いような気がしますが。
ものを作るときって部品を組み立てたり作用させたりすると思うので、それ以外の組み立て方法ってどうやるのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

> それぞれをオブジェクトとする以外に方法は無いような気がしますが。



オブジェクト指向における「オブジェクト」って,自律的なモノであって,単なる他動的なモノではありません。
ですから,前者以外に方法は無いような気がします,という問いに対しては,後者の方法があります,と回答できます。

----------------
例えば,次のようなコードが書けるオブジェクト指向言語があるとします。
(相当いいかげんです。プログラムに詳しい方,ご容赦ください)

  A = new クラス(リスナーC)
  A.動け(イベントB)

このオブジェクト指向言語では,次のように機能することを想定しています。

・インスタンスAには,イベントを感知する機能Cが組み込まれた。
・リスナーCは受け取ったイベントBを解釈して適切な動きのパターンを決める。
 他の知らないイベントに対しても適切な動きのパターンを決められる。
・Aは自分に対する「動け」というメッセージとそのパターンに対して
 自分がどうすればよいのか知っている。
・(例えば)Aが動くことによって盤上から外れてしまったり,
 Aが動く先に敵がいたりしても,Aは自分がどうすればよいのか知っている。

質問者自身がおっしゃっているとおり,インスタンスAは自身についての属性と操作をともに内蔵しており,それ自身が独立したインテリジェンスを持つ擬人化されたモノ,すなわちオブジェクトなわけです。

----------------
それに対して,非オブジェクト指向な言語ですと,こんなコード例が想定できます。

  動け(A, リスナーC, イベントB)

このコードのポイントは,
Aが自律性を持つオブジェクトではないため,すべてを単なる「操作対象」として他動的に扱うしかないということ。

変数とリスナーの組合せは適切か? リスナーとイベントの組合せは適切か? 変数とイベントの組合せは適切か? 各組合せのパターンに対応してそれぞれどう動けばよいのか? 自身の盤上の位置や敵の位置によって動きはどう変わるのか? 等々…

これらをすべて「動け」プログラムの中に記述することで,前者と同等の機能を持つシステムを作ることができます。

----------------
単純なイメージで説明するならば。

ひとかたまりのシステムを実現するのに,
「この機能はすべて○○に任せる。俺は○○に指示するだけ。あとは○○が責任を持って立派にやってくれるようにしておいた」というスタンスなのがオブジェクト指向。

「このシステムの機能はすべて俺が管理する。モジュール分割などして管理しやすい工夫はするけれど,システム要素のすべてを把握しておりそれに指示できるのは俺一人」というスタンスなのが「手続き型」という非オブジェクト指向の代表例になります。
    • good
    • 0

文面から想像しますと「オブジェクト指向」を理解されてない気がします。



オブジェクト指向の「オブジェクト」とは、あえて簡単に言うと、関数やサブルーチンです。
関数やサブルーチンは、必要な時に何度でも繰り返し使えます。
また、これをベースに新機能を追加して拡張することが出来ます。
つまり「オブジェクト指向」とは、関数やサブルーチンを使い回すことです。

と前置きしまして、質問の「オブジェクト指向でないプログラム」にお答えします。
オブジェクト指向でないプログラムとは、関数やサブルーチンを一切使わずに、同じ処理(コード)をその都度書くプログラムです。


続いて・・
  >それ以外の組み立て方法ってどうやるのでしょうか?
にお答えします。

例えば、
プログラムの中に、消費税を計算する工程が沢山ある場合、
オブジェクト指向ではこの計算式を自作の関数に置き換えます。
プログラムが短くスッキリします。
また税率が変更した時には関数を修正するだけで簡単です。

一方、オブジェクト指向でないプログラムは
消費税の計算式を毎回書いて、税率が変われば全部の計算式を修正するのです。


※やや強引な説明ではありますが、分かり易く言うとこんな感じです。
    • good
    • 0

ソフト屋さんではないので、厳密な事は言えませんが、


オブジェクト指向とは、そもそもプログラムではなく、設計手法などの方法論ではないでしょうか?
方法論ですので、その作法に習って設計すれば、どのような言語を用いてもオブジェクト指向っぽく記述する事は可能かと思います。

オブジェクト指向っぽく、記述できると言うだけで、オブジェクト指向を適用しやすいと言われるC++であってもオブジェクト指向でないような記述も出来ると思います。

では、どこまでがオブジェクトか?
と、言われると定義の中に粒度は含まれていないような気がします。

ある人がこれは、オブジェクトだと言っても、他の人が違うと言うような事も起こり得ると思います。
と、なると、結局の所、何かを作る際に、チームやグループでその粒度と言うものを定義する必要が出てくるように思います。

しかし、粒度を決める作業にいちいち時間をかけていたら、それこそ生産性が下がりますし、合理的ではないことが多いと思われますので、各人にオブジェクトの粒度自体の定義は任されているように思います。

さらに言えば、オブジェクト指向では設計が難しい物もあると思います。例えば、同じ属性が複数のクラスにまたがる場合などです。複数のクラスにまたがる属性をわざわざ複数のクラスで記述していたら、それこそ合理的ではありません。そのような状況を回避するために、アスペクト指向などと言う方法論もあったりします。

個人的な認識では、オブジェクト指向という考えが主流になってきたのは1990年代後半かと思います。それ以前にも確かにオブジェクト指向という考えはあり、具体的な言語として個人的に知ってるのはEiffelという手続き型言語ですが、余りもてはやされてなかったようにも思います。

これらの時代背景を捉えると、オブジェクト指向と言う考えが主流でなかった時代からあった言語はオブジェクト指向では無いとも言えますし、どのような言語でもアスペクト指向で記述できると思いますから、オブジェクト指向ではなくアスペクト指向だと言う事も可能かもしれません。

しかし、やはり、オブジェクト指向という言葉は、設計手法などの方法論の一つだと思いますから具体的レベルに落ち込む物では無いように思います。
    • good
    • 0

アセンブラ。



レジスタやメモリにデータを転送したり、割り込み入れたり、サブルーチンコールする前にレジスタの値をスタックに飛ばしたり。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qインタフェースと抽象クラスの使い方

インタフェースと抽象クラスの違いがいまいちよくわからないのですが、

違いではなく

インタフェースにできて、抽象クラスではできないこと、

抽象クラスにできて、インタフェースにはできないこと

をお伺いできますでしょうか。

宜しくお願いします。

Aベストアンサー

インターフェイスは必要です。これは、メソッドの実装を保証してくれるからです。

例えば、何かのクラスを定義するとしましょう。このとき、インターフェイスを用意することで、そのメソッドが必ず実装されているものとみなして利用することができます。

例えば、インターフェイスAがあり、そこにABCというメソッドが宣言されているとします。そしてBというクラスがこのAを実装してあるとします。すると、このクラスBを利用する際、必ずそこにABCというメソッドがあるものとしてコードを書くことができるわけです。

クラスCでもクラスDでも、インターフェイスAが実装されていることがわかれば、そのABCメソッドを呼び出して利用する形で処理を構築できます。

抽象クラスでもそこにあるメソッドは保証されますが、インターフェイスはどんなクラスであっても、「追加するだけで特定のメソッドの実装が保証される」という特徴があります。なおかつ、必要であればいくつものインターフェイスを追加できます。こうした使い方は、抽象クラスでは行えません。

QPHP,SQL,オブジェクト指向プログラミング

こんにちは。僕は、現在、PHPとSQLとオブジェクト指向を用いて、掲示板を作成しています。
今ログインフォームまで完成しましたが、その中の認証処理でつまづいています。
ソースを載せますので、アドバイス等お願いします。


session_start();
include 'class.php';
include 'useclass.php';
$its=new keijibandatabase();
$its->k_conect();
$its->k_usertable();
$its2=new userdata;
$its2->k_login();


function k_usertable() { //テーブルuserの呼び出し
$sql = 'SELECT * FROM user';
$stmt=$this->pdo->query($sql);
while($row = $stmt -> fetch(PDO::FETCH_ASSOC)){
} //データベースクラス


function k_login() { //ユーザ認証
$row;
$user=$_POST['user'];
$pass=$_POST['pass'];

if($user===$row['uid'] && $pass===$row['pass']){
echo "成功";
}else{
echo "失敗";
}

}

以上です。
これらのコードは別々のファイルに記述されています。
回答よろしくお願いします

こんにちは。僕は、現在、PHPとSQLとオブジェクト指向を用いて、掲示板を作成しています。
今ログインフォームまで完成しましたが、その中の認証処理でつまづいています。
ソースを載せますので、アドバイス等お願いします。


session_start();
include 'class.php';
include 'useclass.php';
$its=new keijibandatabase();
$its->k_conect();
$its->k_usertable();
$its2=new userdata;
$its2->k_login();


function k_usertable() { //テーブルuserの呼び出し
$sql = 'SELECT * FROM user';
$stmt=$this->pdo-...続きを読む

Aベストアンサー

こんにちは。


>($row = $stmt -> fetch(PDO::FETCH_ASSOC)){」
>で$rowに各ユーザのレコードを格納したわけなんですが、この「$row」を

全てのレコードを利用するなら1レコード毎に$rowを他の変数に入れてあげる必要があります。
var $rows = array();
while($row = $stmt -> fetch(PDO::FETCH_ASSOC)){
$rows[] = $row;
} //データベースクラス

とすると$rowsという配列に全てのレコードが入ります。

それを他のクラスに渡すならクラスの作りによりますがメソッドで受け取れば良いのでは?
$user->setRecord ( $rows );



// どっかのクラスのメソッド
function setRecord ( $rows ) {
}


ただ質問者様がやろうとしていることは一般的ではありません。
質問内容やソースの書き方からすると
クラスの作り方、変数の渡し方等々再度学ぶ必要があるレベルだと思います。

複数のレコードを取得しているのに
if($user===$row['uid'] && $pass===$row['pass']) {
}
では誰と一致させようとしているか?

こんにちは。


>($row = $stmt -> fetch(PDO::FETCH_ASSOC)){」
>で$rowに各ユーザのレコードを格納したわけなんですが、この「$row」を

全てのレコードを利用するなら1レコード毎に$rowを他の変数に入れてあげる必要があります。
var $rows = array();
while($row = $stmt -> fetch(PDO::FETCH_ASSOC)){
$rows[] = $row;
} //データベースクラス

とすると$rowsという配列に全てのレコードが入ります。

それを他のクラスに渡すならクラスの作りによりますがメソッドで受け取れば良いのでは?
$user->setRe...続きを読む

Qオブジェクト指向全般、及び、クラス設計について。

オブジェクト指向全般、クラス設計についての質問です。

当方、C#の日曜プログラマであり、数年まえから趣味のプログラミングを楽しんでおりました。
これまではあまりOOPに関する深い部分の理解をしないままなんとなくプログラミングをしてきましたが、このほど、そこらへんの理解を深めるべく名著と呼ばれる以下の書籍を買い漁って理解を深めようと模索しておりましたが、どうも、しっくりきません。

リファクタリング プログラミングの体質改善テクニック(マーチンファウラー)
オブジェクト指向でなぜつくるのか(平澤章)
デザインパターンとともに学ぶ オブジェクト指向のこころ(アラン・シャロウェイ)
(これ以外に名前は失念してしまいましたが、UNLの書籍も読みました)

それぞれの書籍を読んで「うん。なるほど。」というある程度の理解はできているつもりですが、如何せん、自分のコードで・・・となると、ちょうど作文の最初の一文が見つから無いときのような、そんな感覚に襲われてしまします。

これまでの自分のプログラミングというのは、「動けば良い」という部分が最優先であり、かつ、それのみにしかこだわって無かったことも原因としてはありそうです。

その中でも、特に戸惑ってしまうのが、「何をクラスにするのか」という最も基本的な部分です。

今習作として、2ch用ブラウザのコードを書いていますが
クラス候補としていくつかのものを、確信の無い状態で挙げてはみますが
ワード及び原則としての「責務」「単一責任の原則」「高凝集度」「疎結合」・・・
(それぞれの用語や原則の意味は、ある程度理解しているつもりですが)
これらの用語の海で溺れてしまっている感覚で、何をクラスとすればよいのか?という部分で
すでにアップアップしているような感じとなってしまいます。

また、個々のオブジェクトの関連において、あるオブジェクトを保持するのはどのオブジェクトである
べきか?また、あるオブジェクトにメッセージパッシングするのはどのオブジェクトであるべきなのか?等など・・・このあたりについても、一向に頭の中の霧が晴れてくれません。

このような、悩みを解消する考え方、方法、その他おすすめの書籍でも構いませんが、ご助言いただけませんでしょうか?

よろしくおねがいします。

オブジェクト指向全般、クラス設計についての質問です。

当方、C#の日曜プログラマであり、数年まえから趣味のプログラミングを楽しんでおりました。
これまではあまりOOPに関する深い部分の理解をしないままなんとなくプログラミングをしてきましたが、このほど、そこらへんの理解を深めるべく名著と呼ばれる以下の書籍を買い漁って理解を深めようと模索しておりましたが、どうも、しっくりきません。

リファクタリング プログラミングの体質改善テクニック(マーチンファウラー)
オブジェクト指向でなぜつく...続きを読む

Aベストアンサー

私も質問者さんと同じように、原則だの設計手法だのに振り回されてコードが書けなくなった経験があります。今でもたまに手が止まってしまいます。
>ちょうど作文の最初の一文が見つから無いときのような、そんな感覚に襲われてしまします。
というのは痛いほどよくわかります。
作文で手が止まってしまうのは、そもそも文章を書き慣れていないと、どうすれば相手に自分の考えが伝わるのか、それ以前に自分が何を伝えたいのかもわからない、読んだ相手がどう思うのか想像出来ないからではないでしょうか。「何を求められているのか」という判断基準そのものが無いが故に手の付け方もわからない状態です。
ソフトウェアの設計も似たようなもので、どんな機能が必要で、どんな問題が起こりうるのか、何処が頻繁に変更され、どんなコードなら自分や他人が把握しやすく、保守しやすいか、みたいなのは、最初のうちは見当つかないものです。熟考すれば出てくるものでもありません。


知識をつけると、最初は問題ではないものまで問題に見えてきます。
そうした段階で分析を行っても、書いていてモヤモヤする、何となく気持ち悪い、違和感がある、みたいな理由しかでてきません。しかし、それは本当に取り組むべき問題ではありません。
実作業に支障を来していないコードを、問題に仕立て上げようとしているだけです。
経験豊富なプログラマなら納得出来る理由を説明し、より良い解決策を提示して設計を見直すかもしれません。
しかし、改善すべき明確な理由も方向性も見えていないのなら、手のつけようがありません。
恐らく何処まで経験を積んでもそういう霧は晴れません。そもそも何が必要になるか、何が問題になるのか、みたいな予知を完全に行うことはできないからです。常に不安はつきまといますし、想定外の仕様変更なんていくらでも出てきます。具体的な形になって使い方が解ると、新たな使い道が見える事も少なくありません。そうしてソフトウェアは進化していっています。
拭いきれない違和感との戦いは終わりがないのも問題です。これこれを達成すればひとまずOKという基準を作るのも設計の一環です。
ならば、真っ先に取り組むべき問題は、書いていてイライラする、実作業に支障が出ているところです。
ある機能を呼び出すのに長~いコード何度も書かなければならなかったり、機能を追加するたびにプロジェクト中の修正を必要としたり、一見関係ないコードを修正すると頻繁にバグったり…。


私が今のところこういう状態に陥ったとき、一番巧くやれている方法は、本やネットで得た知識は一旦シャットアウトして、形にする。そして実際に使い続けてみる。また、複数の方法で作ってみて比較する、です。
そうして問題点を洗い出し、再設計を行います。
これを何度も繰り返します。
いわゆるスパイラルモデルというやつですが、「想定される問題」ではなく、プロトタイピングで「顕在化された問題」に対して取り組むのが重要だというのが私の現在の結論です。勘のきかない経験の少ないコードほどそう感じます。逆に何度も組んだことがあるコードは、繰り返し回数が減り、結果的にウォーターフォールになります。


あるオブジェクトを何処が持つべきか、見当がつかなければ、とりあえずグローバルな場所に置いておきます。
C#ならシングルトンとして作ってクラスメソッドで取得させるとか、メインフォームに置いとくとかです。
作り込んでいくうちに、全く関与しないクラス、殆ど全ての機能からアクセスされるオブジェクトなど、関連性はある程度明確になりますし、グローバルにアクセス出来るオブジェクトの問題点もそのうち直面します。
そのとき、再び本を開いてみてください。書いてある意味がまるで違うことに気がつきます。それを何回も何回も繰り返して、ようやく理解したことになるんだと思います。


だらだらとした長文で「結局経験っすよー」みたいな話ばかりで申し訳ありません。
ですが、少しでも切っ掛けが掴めれば幸いです
参考URLは私が以前した、似たような質問のURLです。ご参考までに。

参考URL:http://oshiete.goo.ne.jp/qa/4167313.html

私も質問者さんと同じように、原則だの設計手法だのに振り回されてコードが書けなくなった経験があります。今でもたまに手が止まってしまいます。
>ちょうど作文の最初の一文が見つから無いときのような、そんな感覚に襲われてしまします。
というのは痛いほどよくわかります。
作文で手が止まってしまうのは、そもそも文章を書き慣れていないと、どうすれば相手に自分の考えが伝わるのか、それ以前に自分が何を伝えたいのかもわからない、読んだ相手がどう思うのか想像出来ないからではないでしょうか。「何を求...続きを読む

Qプログラムと無関係なコンピュータ職って?

情報システム系情報技術科の1年です。4月から2年になります。

私はクラスでもプログラミング能力は上位と言えるぐらい周りからできるとは思われてて自分でも
できないほうではないかなと自負しています。

しかし、最近のプログラム課題を根詰めてやってきたせいか、壁にぶち当たりそれいらいプログラムを組むのがすごく嫌になってしまいました。
昔は、プログラムの勉強をするのがすごく楽しい時期があったのですが・・・。

それでも私にはコンピュータ業界しかないと思っています。
ですが、プログラムを組む仕事には就きたくないと思っています。
コンピュータ業界の仕事でもプログラムを組まない仕事ってどのようなものがあるのでしょうか?
SEとして入社したら絶対プログラムは関係してきますよね!?

それともプログラムが嫌になったらもうコンピュータ業界はあきらめざるを得ないでしょうか・・・。

ご教授ください。お願いします。

Aベストアンサー

優秀なSE=プログラムがうまく組めるSEではないのです。なるべくプログラムステップ数を減らす。プログラム自体を減らす。工数を減らすことができて低コストで革新的なシステム構築ができるSEが優秀だと思っています。そういう意味では、ある程度プログラムを組んでいって、プログラムが嫌いになったあなたは優秀なのかもしれません。嫌いでいいんですよ。

ちなみに私は、全社のネットワーク基盤構築やシステム基盤構築といったことをしていますが、今後のインフラリソースの需要予測をしたりするのにEXCELでマクロを組むくらいでC++でプログラムなんて、他人に任せてます。会社の中で(あるいは社会の中で)は自分ひとりで超える必要ないんです。みんなで共同で作業していくのがコンピュータ業界です。

Qオブジェクト指向(具体的にはどんなクラスで作ります?)

 オブジェクト指向、クラスの便利さは大体わかりました。
(赤外線やマイクロ波の専門的な説明はわかったけど、リモコンや電子レンジに具体的に見てみないと、ぴんときていない状態だと、思います。)
それに、一人で作っていることもあり、また構造化プログラミングで今まで作ってきたので、具体的にどういうクラスに分け、どういうことを将来予想し、作るのかがわかりません。

仮に、シンプルな日記から作る場合、どういったクラスを作り、どういうことを予想し、作りますか?
特に、継承や他に使いまわせるようにとか、ソフトを作り、何を想定するのかを知りたいです。

Aベストアンサー

あんまり参考にならないかもしれませんが。

1人で自由にコーディングしているのであれば、まずどんどんソースを書いていって「何か似たようなコード書くことになるな」「同じコード書くことになるな」という段階で、クラス化します(まぁ最低限、最初の段階でReadクラスとWriteクラスと分けますが)。

仕事で客先からの要求がある場合は、あらかじめコーディング前に、「似たようなコード書くことになるな」「同じコード書くことになるな」を想定して、クラス化します。

余裕があれば、「この要件は、後々同じようなことを言ってくるだろうな」というのも、クラス化しておきます。が、「一歩先を見越す」程度でそれ以上はしません(限られた納期ですし、アテが外れる場合もありますから)。

それと、保守しやすい・見やすい(結果としてバグが出にくくなる)という点もクラス・メソッド設計では重視します(今、他人が作ったソースの保守・改修で泣きを見ているので)。

うーん、あまりレベルは高くないかもしれませんが(涙)、今の私の現状です。

Q画面系のプログラムでTDDってどうするの?

テストコードを先に書いて、
テストに合格するプログラムを書いてリファクタリング・・・・云々。
JunitやNunitなどを使う・・・・云々。
このような話はよく聞きます。
が・・・・。
業務ロジックのみがつまったような単体で動く
モジュールには適用できそうですが。
Windowsアプリや、Webアプリの
画面の制御の部分のロジックに対して、
どのようにすれば、TDDを適用できるのでしょうか?
素朴な疑問ですが、よろしくお願いします。

Aベストアンサー

画面制御は、ロジックと見なさない傾向あります。FPにしてもdataと処理ですし。
MVCでいうVの部分は、処理のトリガでしかないですから。所詮、そのトリガに起因してビジネスロジックが駆動するので、TDDとしても、画面の制御はビジネスロジックが動いたということですでにその機能を満たしているとおもうですが...

仮にクライアントでのスクリプトでの画面変化があるとしたら、それはその部分にマクロ的にTDDを適応すればいいのではないでしょうか?

QExcel VBA でのクラスの使い方について

クラスの使い方がわかりません
どうしてもクラスでないと処理できない処理があれば
教えて下さい

Aベストアンサー

こんにちは。

まず、はじめに、簡単なクラスへのマクロを紹介します。

'//
'標準モジュール
Public objHello As Class1
Sub Auto_Open()
 Set objHello = New Class1
End Sub
Sub Test1()
 objHello.Hello "kumano_SECさん"
End Sub
'-----------------
'Class モジュール (Class1)
Public objHello As Class1
Function Hello(person)
Dim t As Date
Dim msg As String
 t = Time()
 Select Case Hour(t)
  Case Is < 12: msg = "Morning"
  Case Is < 16: msg = "Aternoon"
  Case Is < 20: msg = "Evening"
  Case Is < 0: msg = "Night"
  Case Else: msg = "heavens!"
  End Select
 Hello = MsgBox(person & ", Good " & msg)
End Function
'//

クラスというのは、オブジェクトの種類の意味です。
しかし、実際にプログラミングをしていると分かりますが、クラスは設計図のようなものです。クラスのオブジェクトは何もしませんが、そこから、切り出され生成したものを、インスタンスと呼び、それが実際の実行をするわけです。

上記で言えば、objHello に、.Hello というプロパティがつけられ、クラス・オブジェクトの性質がここに投影されたわけです。こんなことは、結果的にはクラスを使わなくてもできると言われればそのとおりです。ですが、オブジェクトを作り、そのオブジェクトを任意でプロパティやメソッドが付けられるというのは、興味深いはずです。

では、今度は、具体的にExcelのクラスでは、何に使われるかということですが、私が知っている範囲では、まず、イベントが主流ではないかと思います。本来、オブジェクト指向の元に使われるものではあるのですが、VBAでは、フル機能を持っているわけではありませんので、全体的には、あまり利用度は高くありません。例えば、「カプセル化」したいと言って、そう施しても、VBAでは、あまりその恩恵を感じるようには思いません。
代表的に使われるのは、以下のイベントです。

クラスモジュール
Public WithEvents App As Application
Private Sub App_NewWorkbook(ByVal Wb As Workbook)
 '実行
End Sub

これは、新しいブックを開いた時に、まるで、そのブックに付けられたイベント・ドリブン型のマクロが付けられているような働きをしめします。

こんにちは。

まず、はじめに、簡単なクラスへのマクロを紹介します。

'//
'標準モジュール
Public objHello As Class1
Sub Auto_Open()
 Set objHello = New Class1
End Sub
Sub Test1()
 objHello.Hello "kumano_SECさん"
End Sub
'-----------------
'Class モジュール (Class1)
Public objHello As Class1
Function Hello(person)
Dim t As Date
Dim msg As String
 t = Time()
 Select Case Hour(t)
  Case Is < 12: msg = "Morning"
  Case Is < 16: msg = "Aternoon"
 ...続きを読む

Qプログラム経験なしでいきなりSEらしきことをしている私ってどうなの?

ソフトウェア開発に携わる20歳代前半の男。
昨年3月に大卒後、翌月から某社に入社した者です。
私の会社はソフトウェア会社ではなく
「メーカーの一部門がソフト屋だ」という少々特殊な会社です。
同期も純粋な営業マンから電気系のエンジニアまで職種は色々。
一般的なソフトウェア会社に入った学生時代の友人の話を聞くと
入社後数ヶ月はCやらJAVAやらのプログラミング研修を
みっちりと受けたとよく聞きますが、
自分はこういう会社なので、そういうのはありませんでした。

今の私はまだ顧客先に出向く機会も少ないのですが、
直属の先輩の様子を見ていると、今後は自分も顧客先に出向いて
顧客の悩みを聞き、それをどうソフトウェアで解決していくかを分析する
いわゆるSE業をしていくことになりそうです。
今の私はその先輩の補助で、顧客から得た情報を元に、
ソフトウェア仕様書を毎日のようにバンバン作っています。
そして、私の書いた仕様書に基づき、
外注のプログラマに実装してもらっています。
直属の先輩にしろ私自身にしろ
自社の人間がプログラマとして仕事をすることは一切ありません。

学生時代にちょこっとC言語を触っただけの私が
ソフトウェアの基本設計書を作り、外注さんに指示を与えててもいいのか?
と悩んでいます。最近、プライベートでJAVA(外注さんの使用言語)の勉強を
やっていますが、本当に趣味程度のものですね。

「SE」「プログラマ」といった単語をここで検索すると
「プログラマ経験のないSEなんて有り得ない!」といった
厳しい口調の回答もチラホラ見掛けるのですが、
自分はまさにその手の人間です。
今の会社にいる限り、今後もプログラマ経験は一切ないでしょう。

「プログラマ経験のないSEってのはアリなのか?やっぱりおかしいのか?」
アドバイスをお願いします。

ソフトウェア開発に携わる20歳代前半の男。
昨年3月に大卒後、翌月から某社に入社した者です。
私の会社はソフトウェア会社ではなく
「メーカーの一部門がソフト屋だ」という少々特殊な会社です。
同期も純粋な営業マンから電気系のエンジニアまで職種は色々。
一般的なソフトウェア会社に入った学生時代の友人の話を聞くと
入社後数ヶ月はCやらJAVAやらのプログラミング研修を
みっちりと受けたとよく聞きますが、
自分はこういう会社なので、そういうのはありませんでした。

今の私はまだ顧客先に出...続きを読む

Aベストアンサー

職種がSEなら仰るとおりですが、コンサルやPMなら話は別です。
もちろん経験があるのがベストだとは思いますが、下手に経験があるあまりに顧客のニーズを曲解してしまったり、専門用語を並べ立てたり、PGよりの発言に終始したりしてしまう人もいますからね。
一方、現場のPG達からするとあまりに勉強が足りないPMはやっかい極まりなく、無茶な要求を無茶な納期でオーケーされるとかしたら殺意が芽生えることでしょう(苦笑)。
その辺のバランス感覚に優れた人が一番ありがたいです。ど素人であるクライアントの言葉を正しく理解し、SEやPGに指示が出せればオーケー。

というわけで、個人的には別にプログラム経験無くても良いけど、的確な指示が出せるくらいには勉強してね、という感じです。

Qクラスと関数群のうまい使い方

今、クラスを使ってPHP(今はPHP4を使っています)によるWEBアプリケーション(といっても、そんなに大げさなものではないですが)を作成しながら、クラスの使い方を勉強しています。

ある程度クラスを使うことには慣れてきたのですが、悩んでいることがあります。

今までは、別ファイルによく使う関数群をまとめて、呼び出す形でやっていました。
それを、クラスを使ってやるようになってから、それぞれのオブジェクトでの処理はそのクラスにまとめることで、すっきりとなりました。
が、全てのクラス(もしくはいくつかのクラス)で共通して使用する処理(文字列操作など)はどうすればいいのかと悩んでいます。

それぞれのクラスに同じ処理を書くのは、クラスを使う意味がない気がするので、避けるべきだと考えていています。
そこで、今までのように共通の処理を関数群にして、クラスファイルでインクルードして使うか、共通処理をもつクラスを作って使用するクラスの中でインスタンスを作成して処理関数を呼び出すか・・・とどちらがいいのでしょうか?

ただ、関数群をまとめたファイルを作ると、他にクラスを使う意味がないような気もするし、共通処理をまとめたクラスを作ってその処理を利用するクラスでインスタンスを作るのは、処理的に重くなりそうでまたクラスの本来の意味からすると共通処理をまとめたクラスというのがおかしい気もするし。

根本的にクラスの作り方がまずいのかもしれませんが、良いアドバイス等あればご指摘下さい。

長文になりましたが、よろしくお願いいたします。

追伸)
PHPでのクラスの学習についていい本やサイトなどあればそちらもお教え願えればと思います。

今、クラスを使ってPHP(今はPHP4を使っています)によるWEBアプリケーション(といっても、そんなに大げさなものではないですが)を作成しながら、クラスの使い方を勉強しています。

ある程度クラスを使うことには慣れてきたのですが、悩んでいることがあります。

今までは、別ファイルによく使う関数群をまとめて、呼び出す形でやっていました。
それを、クラスを使ってやるようになってから、それぞれのオブジェクトでの処理はそのクラスにまとめることで、すっきりとなりました。
が、全てのクラス(...続きを読む

Aベストアンサー

関数群がどんなものかわからないのでなんともいえませんが、どのクラスでも共通で使う処理があるのでしたら
その関数を行うクラスを1つ作って、そのほかのクラスはそれを継承する形にすればいいのではないでしょうか?

それとも関数はクラスからだけではなくて、いわゆる関数としても使いたいというものでしたら関数群のファイルを作ってインクルードするがいいかも知れません。

QプログラムかけなくてもSEになれますか?

今プログラマーなんですが苦手です。会社に相談したところSE職をすすめられました。ブラック企業なんでやめたほうがいいか心配です。でも生活があるのですぐやめれません。

Aベストアンサー

>プログラムかけなくてもSEになれますか?
可能です。
SEはプログラムが書けないといけないという誤解をして
いる人が多い様ですが....

他業種、例えば建築などではデザイン設計、構造計算、
施工設計、施工を別々の人が行う事が普通に行われて
います。
客先の要求を元に作成した仕様を、実際にプログラム
を作るPGに渡せる様に「構造設計」「施工設計」する
人を間に入れて作業分担すれば良いのです。

プログラムの技術は高いが客先と話すのは苦手といった
人を探すのはそう難しい事ではないと思います。

どういった事までできるかは、把握しておく必要が有り
ますし、「構造設計」「施工設計」担当者との話合いを
行う必要はあります。

システムの規模が大きくなる程、こういった作業分担が
重要な物になると思います。


人気Q&Aランキング

おすすめ情報