fc2ブログ

初心者のためのC#プログラミング本格入門40 - プロパティでフィールドの値を取得しよう

 この記事は、初心者のためのC#プログラミング本格入門39の続きです。前回は、インスタンスメソッドについて解説しました。今回は、プロパティについて解説します。
 前回メソッド(インスタンスメソッド)を使用して、インスタンスが保持するフィールドの値を操作できる事を書きました。では、どうやってインスタンスが保持するフィールドの値を使用するのでしょうか?今のままではフィールドの値にアクセスできません。試しにサンプルプログラムのAnalyzerを使用してみましょう。

static void Main()
{
    //型のインスタンスを生成
    Analyzer obj = new Analyzer();
    obj.AnalyzeExpression("+ 1 2 3");
    
    //valuesの値を取得できない!
    int[] values = obj.values;
}

このプログラムを書くと、「'Program.Analyzer.values' はアクセスできない保護レベルになっています。」というエラーが発生します。そうです。今のままではインスタンスが保持するフィールドの値にアクセス出来ないのです。これを解決するには、プロパティという文法を使用します。
 プロパティは次の様に書きます・・・
//定義
public 戻り値の型 プロパティの名前
{
    get 
    {
        //ここに1行以上のプログラムを書く
    }
}

//実例
class Analyzer
{
    int[] values;
    public int[] Values
    {
        get { return this.values; }
    }
}

書き方は大体分かったと思います。初心者の方は恐らく、「ただフィールドの値を取得するだけなのに、何で一々面倒な事を書くんだろう?」と不思議に思った事でしょう。
 確かにこの様な単純なプログラムで、プロパティを使うのは無駄に見えるでしょう。しかし、プロパティの働きはフィールドの値を取得する事だけではありません。プロパティを使うと、フィールドでは出来ない事が出来るようになります
 何が出来るようになるのか気になると思いますが、一度に聞くと混乱すると思いますので少しずつ解説していきます。C#プログラミングをマスターするコツは焦らない事です。焦らずじっくり学習しましょう。

テーマ : プログラミング
ジャンル : コンピュータ

実践的オブジェクト指向分析入門38

 この記事は実践的オブジェクト指向分析入門37です。前回から引き続き、機能モデルの構築で行う作業について具体的に書きます。
 入力値と出力値が判明したら、オブジェクトの制約について考えます。どの様な機能も前提となる条件があります。現時点で注目する制約は事前条件・事後条件・不変表明です。他にも制約は考えられますが、余程複雑な機能でない限り、ひとまずこの3つの条件を考えましょう。
 事前条件とは、処理をする前に満たさねばならない条件です。例えば、「振り込み処理は、投入する金額が1円以上なければならない。」などです。事後条件はその反対に、処理後に満たさねばならない条件です。残りの不変表明は、オブジェクトが常に満たすべき条件です。例えば、「社員の勤務年数は、年齢を超えてはならない。」などです。
 制約はシーケンス図に追加します。制約の書き方はいくつか考えられますが、私がお勧めする方法を書きます。不変表明をオブジェクトの上に書いておきます。そうする事により、オブジェクトの性質が分かりやすくなります。事前条件と事後条件については、[ 金額 > 0 ]の様にメッセージ名に括弧をつけて書くか、制約をつける方法があります。メッセージに制約を書く方法は、処理の流れが変わる時に使用します。制約をノートなどで書く方法は、処理の流れに注目しない時に使用します。
 シーケンス図に書く時に注意する事は、「重要な制約のみを記述するように注意する」です。シーケンス図は細かい制約を書くのには向いていませんし、過剰な分析は害となります。もし、分析において必要ならば、アクティビティ図を別に書くとよいでしょう。その時は、関係する図がある事をメモに書きましょう。続く...

テーマ : ソフトウェア開発
ジャンル : コンピュータ

ネタつつき113 - 読解能力とは何か

 社会人になると多くの書類や専門書を読みます。従って、コミュニケーション能力と同様に読解能力が必要とされています。しかしながら、コミュニケーション能力同様、読解能力についても説明される事が少ないので書く事しました。
 私が考える読解能力とは、「相手の言いたい事を読みとる能力」です。コミュニケーション能力の一種だと言えます。では、読解能力が低い人と高い人はどう違うのでしょうか?先ずは違いについて考えてみましょう。
 読解能力の低い人に見られる特徴は、趣旨から離れた細かい部分から想像を膨らませる事です。会話同様全ての文章には、対象・前提・流れがあり、趣旨とは関係のない事は省略されます。文章というものは想定している相手に情報を伝えるのが目的であり、対象と目的を把握せねば誤読します。また、書き手が何を伝えたいのかを理解する事が読み手に求められており、書き手のメッセージを無視する行為は根本的に間違っています。読解能力がない人は、こういった間違った行為をしております。
 こうした読解能力がない人は、相手の意思を受け取る能力に欠けており、仕事が出来ない上に学ぶ事がないので成長もしません。かなり損をしていると言えるでしょう。これを読んだ読解能力に自信がない人はショックを受けるかもしれません。ですが、気にする必要はありません。読解能力はコミュニケーション能力よりも比較的簡単に向上できます。
 先ずは文章の趣旨を把握します。手掛かりは題名です。題名を読んだ時点で、およその見当をつけておきましょう。ただし、週刊誌などの見出しは信頼できないので注意しましょう。こうした題名は内容と一致していない場合が多いので、疑って読むのがベストだと思います。
 題名の次は本文を読む事になると思います。この時の心掛けは「先入観を捨てる」です。貴方と書き手は違う人間です。貴方と書き手は伝えたいことや、文章の書き方が違います。ですから、自分の考えを押し付けて本文を読むと誤読する確率が高まります。何かのフィルターを通して読むのではなく、本文の内容だけをよく読みましょう。そうすれば、誤読する確率が減ります。
 本文の内容を理解する時に注意するべきポイントは、「全体像を把握する」です。誤読は全体像を把握していない事が原因です。文章能力がない人はその時考えた事を散文的に書きますが、大概の書き手は予め全体像を考えて書きます。従って、文章の全体像を捉えるのが非常に重要となります。散文の場合は全体像がありませんが、それは全体像を意識して読めば自ずとわかると思います。
 全体像を把握した後は、「全体像と関連付けて細かい事を把握」します。書き手は全体像を考えた後、そのテーマに沿って文章を書きます。全体像と関連付けて読む込む事により、書き手の主張が明確に分かります。
 最後に文章の前提を考えましょう。全ての事を書いた文章は存在しません。繰り返しになりますが、文章は対象を決め目的を持って書かれたものです。従って、その前提を考えなくては正しく読解出来ません。前提を読み違えば、書き手の伝えたい事から大きく外れる羽目になるのです。
 色々書いたので難しいと感じた人がいるかもしれません。ですが、読解能力の基礎は単純です。相手の話しをよく聞くという心掛けさえあれば大きく誤読しません。もし誤読したとしても、確認をするという当たり前のことをすれば済む話しです。難しく考えず気楽に文章を読みましょう。人として当たり前の心掛けさえあれば読解能力は自然と向上します。

テーマ : ビジネス
ジャンル : ビジネス

ネタつつき112 - コミュニケーション能力とは何か

 社会人になると「コミュニケーション能力が必要」というセリフをよく聞くと思います。しかしながら、肝心なコミュニケーション能力の定義を説明する人が少ないのでお困りの人がいるかと思います。そこで今回は、ビジネスで求められるコミュニケーション能力について書きます。
 コミュニケーション能力を厳密に定義するのは難しいのですが、ビジネスという限定した領域では簡単です。簡潔に言うと「相手の意思を引き出し、論理的に考えて相手に自分の意思を伝達する能力」です。誤解している人が多いのですが、相手に自分の意見を押し通す能力ではありません。相手の考えを引き出す方が肝心であり、自分の意見は相手の意見を踏まえたものでなくてはなりません。残念ながら会議などで、声の大きい人が一方的に意見を言ってお終りになるケースが多く見受けられます。この原因は、コミュニケーション能力への誤解と、論理的思考の不足にあると私は考えています。
 日本では論理的に考えるという風習があまりないと言われています。その真偽は分かりませんが、実際に声の大きい人の意見を鵜呑みにするケースが多々あります。この状態は大変好ましくありません。声が大きく一方的に意見を押し付ける人は、相手の意見を引き出していないのでコミュニケーション能力が不足しており、それを許容しているとコミュニケーションの質が落ちます。
 私は職業柄お客様とのコミュニケーションが頻繁にあります。その際に気をつけているのは、お客様の意見をよく聞くという事です。比重としては、聞くのが8割で、自分の意見を言うのは2割ぐらいです。何故ならば商売において、コミュニケーションはお客様から情報(要望や不平不満)を引き出すのが目的であり、自分の意見はさほど重要でないからです。相槌を打ったり、相手に問いかけたり、同意する発言をするのが殆どです。自分の意見は、理由を添えて相手に対して問いかけるように言います。
 コミュニケーション能力が不足している人は、自己主張が多い傾向があります。先ほどの例でいいますと、会議で自分の意見を押し通す人は会議の意味をなくしています。そもそも会議は情報交換の場であり、誰か一人が自己満足するための場ではありません。自分の意見を言う時はあくまでも「自分はこう思うのだけど、みんなはどう思う?」という風なオープンな発言でなくてはなりません。
 また、コミュニケーション能力が不足している人は、相手の言葉をさえぎり、相手の意見を聞かずに自分の発言を繰り返します。相手の言葉を遮るのは論外であり、相手の言葉を文字通りに受け取るのもまた問題です。人間が一度に情報を発生できる量には限りがあります。それは文章も同じです。一言だけ聞いて決めつける人、一つのメールを読んで直ぐに決めつける人、相手の性別・人種・地位などのレッテルを見て決めつける人・・・それらの行為は非論理的であり、絶対にするべきではありません。
 纏めます。コミュニケーションの目的は情報交換であり、相手の意見を引き出さねば意味がありません。また、参加者全員が論理的に考えないと、コミュニケーションは成り立ちません。従ってコミュニケーション能力とは、「相手の意思を引き出し、論理的に考えて相手に自分の意思を伝達する能力」だと言えます。人の話しをよく聞き、よく考えてから発言しましょう。そうすればビジネスキーパーソンになれます。

テーマ : ビジネス
ジャンル : ビジネス

初心者のためのC#プログラミング本格入門39 - インスタンスメソッドを覚えよう

 この記事は、初心者のためのC#プログラミング本格入門38の続きです。前回は、インスタンスごとに変数を持つ方法である「フィールド」について解説しました。今回は、メソッドの種類について解説します。
 前回、フィールドを定義しインスタンスごとに値を保持する方法を学びました。次に学習する事は、「インスタンスメソッド」です。
 今までメソッドの種類について詳しく解説しませんでしたが、実はメソッドには2つの種類が存在します。それは、今まで使ってきた静的メソッドとこれから新しく学ぶインスタンスメソッドです。インスタンスメソッドというと、何か得体のしれないものだと感じるかもしれませんが、文法は凄く単純で使いやすいものです。
 メソッドの定義の仕方が変わるだけなので、サンプルプログラムを見れば文法は直ぐに分かります。

//staticキーワードがないだけ
void AnalyzeExpression( string inputValue )
{
    //後で掲載
}

今まではstatic AnalyzeExpression( string inputValue ){}とメソッドを定義していました。それが静的メソッドです。一方インスタンスメソッドは、staticキーワードを書かなくてもOKです。オブジェクト指向プログラミングで、単純にメソッドというとインスタンスメソッドを指します。ですから、こちらの方が簡単な文法となっています。
 両メソッドの違いはフィールドの扱い方にあります。静的メソッドは特別な指定をしない限りアクセスできず推奨もされていません。その理由については初心者にとっては難しいと思いますので、他の理由ととともに少しずつ解説していきます。
 インスタンスメソッド(通常はメソッドと呼ぶ)は、インスタンスのフィールドにアクセスできます。それを確かめる為に、サンプルプログラムを見てみましょう。

class Analyzer
{
    //各種フィールドを定義
    bool success;
    char sign;
    int[] values;
    int count;

    public void AnalyzeExpression( string inputValue )
    {
        //数値を取り出す
        string tmp = inputValue;
        bool loopFlag = true;
        this.values = new int[ 100 ];
        this.count = 0;
        do
        {
            System.Tuple<bool, int, string> value = TryValue( tmp );
            loopFlag = value.Item1;
            if ( loopFlag == true )
            {
                ++this.count;
                int index = this.count - 1;
                this.values[ index ] = value.Item2;
                tmp = value.Item3;
            }
        } while ( loopFlag == true );

        //符号を取り出す
        System.Tuple<bool, char, string> signInfo = GetSign( tmp );
        this.sign = signInfo.Item2;

        //処理が成功しているか否かを記録
        this.success = this.count != 0 & signInfo.Item1 == true;
    }

    static System.Tuple<bool, char, string>
        GetSign( string inputValue )
    {
         //省略
    }

    static System.Tuple<bool, int, string> TryValue( string inputValue )
    {
        //省略
    }
}
<
thisキーワードの部分に注目して下さい。「this.count = 0;」のようにフィールドにアクセスしています。この様に、インスタンスメソッドはフィールドの値を自由に読み書きできます。なお、インスタンスメソッドは通常は省略してメソッドと呼びますので、これ以降メソッドと呼びます。
 あと覚える事は呼び出し方です。メソッドの呼び出し方法は静的メソッドと少し違います。

static void Main()
{
    Analyzer obj = new Analyzer();
    obj.AnalyzeExpression( "+ 1 2 3" );
}

今までのサンプルは「AnalyzeExpression("+ 1 2 3")」の様に直接呼び出していましたが、メソッド(インスタンスメソッド)は必ずインスタンスを指定して呼び出します。その理由は、インスタンスごとに保持する値が違うからです。
 今回の記事を通じて、インスタンスを生成する理由が少し分かってきたと思います。そして、分かった瞬間楽しいと感じた人が多いと思います。少しずつ理由が分かってくるのがC#プログラミングの醍醐味でもあります。続く...

テーマ : プログラミング
ジャンル : コンピュータ

システム開発における情報セキュリティ7

 この記事は、システム開発における情報セキュリティ6の続きです。前回は、権限の取り扱いについて解説しました。今回は、システム設計時に考える事柄について解説します。
 システムが取り扱う情報資源と、情報資源に対する権限について考えました。次に考えるべき事は情報資源の保管場所です。何故ならば、セキュリティ対策は情報資源の保管場所によって変わるからです。
 データベースサーバーに保存する場合と、ファイルに保存する場合のセキュリティ対策は違います。また、ローカルネットワークで情報資源を共有する場合と、遠隔地にあるネットワークにある情報資源を使用する場合では、セキュリティ対策が異なります。従って、情報資源の保管場所はセキュリティに於いて大変重要です。
 なお、情報資源をどこに置くのかは、情報資源の性質によります。複数の人が必要とする情報資源ならば、遠隔地からアクセスできるようにせねばなりません。一方、ごく一部の人間しか使用しない機密情報はローカルに管理し、遠隔地からアクセス出来ないようにする必要があります。
 すなわち、情報資源は適切な場所に配置する必要があるのです。情報資源は適切な場所に配置しましょう。

テーマ : プログラミング
ジャンル : コンピュータ

初心者のためのC#プログラミング本格入門38 - フィールドを定義しよう

 この記事は、初心者のためのC#プログラミング本格入門37の続きです。前回は、型を使用する方法について解説しました。今回は、インスタンスごとに変数を持つ方法である「フィールド」について解説します。
 int型のインスタンスが「10」などといった値を持つように、個々のインスタンスは値を保持できます。自分が定義する独自の型も個々のインスタンスに値を持たせる事ができます。そのための文法がフィールドです。
 C#でフィールドを定義する方法は極めて簡単です。型の宣言内で変数の宣言をするだけです。この連載で作っている型「Analyzer」にフィールドにいくつかのフィールドを定義してみましょう。

class Analyzer
{
    //各種フィールドを定義
    bool success;
    char sign;
    int[] values;
    int count;
}

実に簡単です。変数を宣言する文法さえ知っていれば直ぐにやり方が分かります。
 初心者の方にとって難しいのは、フィールドを定義する文法ではなく、フィールドの意味だと思います。しかし今は気にする必要がありません。フィールドは他の文法と併せて効果を発揮する文法であり、フィールドの意味は単体で見えてきません。
 これはフィールドに限った話しではありません。オブジェク指向プログラミングを実現する文法は特に、複数使ってようやく意味をもつものです。C#の文法は細かい単位で覚えようとせず、まとめて覚えましょう。C#プログラミングは細かい文法単位で覚えようとしても習得できないのです。今のところは、フィールドという概念がある事と、フィールドを宣言する位置を覚えておきましょう。

テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター