.NET Visual C#言語入門 > はじめに
のぶ亭『プログラミングの相談窓口』 … 様々なプログラミング問題を個別対応致します |
はじめに
プログラミング言語とは
コンピュータ上での振る舞いをプログラムとしてまとめ上げるためのツールであって、それ以上でも以下でもありません。
プログラミング言語学習
言語学習は、基礎と応用に分けて学習しましょう!。基礎と応用を混在して学ぶと、混乱するだけでなく、トレーニングが疎かになってしまいます。虫食い学習は避けて徹底的に理解できるまでステップ学習することが重要です。
「これからはじめてみたい」「ほとんど経験が無い」という方は、はじめる前に学ぶ講座【Windowsプログラミング入門 .NET C#/VB】もご参照ください。
Windowsアプリケーションからはじめてもいいですが、混乱したり躓くことが予想されます。まずは、コンソール アプリケーションでプログラミング言語をマスターしてから、次へ進むことをお勧めします。
焦りは禁物ですよ。わかりやすく解説しています。でも、プログラミングは、文章を読んだからといってできるようになる・・・といったものではありません。自分で試す、変えてみる、想像する、思考するというトレーニングの積み重ねが必要です。
これから学ぶ内容は、プログラムを構成する要素、それらを使った実用プログラムの考え方、プログラミング実習で身に付けるポイントです。決して難しものではありませんので安心して学習してください。
言語基礎は、徹底的に覚えて、使って体で理解する!
言語仕様
C#の言語仕様は、Microsoft社より「日本語版のドキュメント」が用意されています。できれば、ダウンロードして印刷しいつでも読めるようにすることをお勧めします。
ところで、この言語仕様ですが「人に向け」というよりもどちらかと言えば「コンパイラ」に対する仕様として書かれています。
このコード、この書き方は、コンパイラはこう解釈しますよ。という感じです。したがって、プログラムを記述する場合、コンパイラの解釈を意識する必要があります。
言語(文法)とライブラリ
どんな言語も同じです。言語仕様は、プログラムを書くための最小限必要なことを規定したものです。ハードウェアの操作、OSとの対話、高度な数学演算、データ構造、コンピュータのリソース、様々なサービスや技術は、ライブラリで提供されます。
- 画面に文字を出力する
- キーボードからの入力値を取得する
- 文字列を操作する
言語仕様は、考えること、データを一時保管したり、活用したりすることといった手順を処理する部分です。
ライブラリは言語とセットで提供されますが、ライブラリそのものも言語仕様に基づいて作られたプログラムです。.NET Framework Class Libraryは、ソースコードが公開されていますし、9割以上はC#で記述されています。これらも参考にして学習していきましょう!
プログラム、プログラミングとは
誤解を避けるためにここでハッキリと理解しておいてください。あなたの目的は「演習問題」を解くことですか?それとも、その上「プログラム作り」を目指すことですか?
ここでは、プログラム作りを目指す人を対象に言語を解説します。
皆さんは、すばらしい頭脳を持っています。考えることができます。創造することができます。ところが、コンピュータは自分で考えたり創造することはできません。あらかじめ決められた通りの手順にしたがって処理を行うしかできません。つまり、プログラムは、コンピュータ上での様々な仕事(処理)を手順化したもの・・・ということです。
プログラミングとは、
あらかじめ決められた答え・・・それを導くための式や手順を導き出し、プログラムコードに展開すること。
数字の「3」という答えを導く式や方程式を考え、それをプログラムとして実装することです。
コンピュータでしかできないことを実現する・・・高速計算、膨大なデータの蓄積と解析、ゲーム、制御、・・・それから、手作業では煩わしいこと、早く行いたいことをプログラム化することです。
「思考」はあなたが考える
演習問題やソフトウェア要求を考える場合、多くの人が誤解していることがあります。
「考える」ことを「プログラムコード」で思考するという過ちです。
数字の「3」という答えを導く式や方程式・・・という場合、5-2,1*3、30÷10、√9、・・・あらゆる式が考えられます。わかりやすく数値で表現しましたが、変数と条件を使った柔軟な方法も複数存在します。このように、どんなアプローチで行うのかを事前に検討してからプログラムを考えるという流れが重要です。
「コンピュータは、手順通りに処理をするだけ。考えることは一切行いません」
「プログラムを作るためには、様々な状況を判断し、状況に応じた適切な処理や柔軟な対応も手順に組み込む必要があります」
「そのためには、手順はどんな状況にでも耐えうるものなのか、ある条件では対応できないのか、どこまでするのかを想像し予測して設計しなければなりません。全てを事前に考察することはできません。プログラムを作って様々な評価(テスト)を行い、可能であれば改善していくことが必要です」
「やってみなければわからない」・・・?
言語の文法や技術的なことと命題に対するプログラム作りは分けることが重要です。知識や技術が足らなければ、勉強し実験して覚えればいいだけです。プログラム作りは、「結果」=「知識、技術」×「論理、思考、経験」です。要件に基づく「結果」を出すことです。
このように、プログラミングは「結果」があってそれを実現する手順(ロジック)を考えて実装することです。方法は一つではありません。プログラムを書く人の数だけ存在するという場合もあります。
例えば、ある物体の振動を計測した実験データがあります。 ・・・続き
言語学習のシナリオ
言語基礎・概念
プログラムを構成する7つのキーワードを学び、徹底的なトレーニングをしましょう。それほど時間はかかりません。40時間程度で習得することができます。
言語固有の機能・概念
言語特有の機能や概念を学習します。とても有用で知らなければ損をする便利な機能です。
オブジェクト指向の概念と実装
クラス、インスタンス化、オブジェクト、隠蔽、ポリモーフィズム、・・・といった概念と実体と実装について学習します。
オブジェクト指向を学ばずに、C言語と同様のプログラム構造も可能です。これを構造化手法と呼び全てを関数(メソッド)で実現するのですが、人にコードを見せるとき、プロのプログラマーを目指す場合、避けた方がいいです。オブジェクト指向を理解し使いこなせるようにしましょう!
言語仕様のカテゴリを分けた学習方法
Microsoftのプログラミングガイドに記載されている順に学習すると、ムダに時間を浪費し、混乱するので注意しましょう。
いきなり、クラスやオブジェクト指向の概念からはじめてはいけません。
- プログラムの基本と構造
- メソッドを作って使う
- クラスを使う
- オブジェクト指向とクラス
- アセンブリ、部品化
といった流れで、理解しプログラムを書いて演習しながらステップアップ学習をしていきます。※本を読んで理解したからマスターした・・・と錯覚する人がいます。言語基礎のマスターとは、「演習問題」のプログラムが作れることを指します。
プログラムの実体(1)
プログラムが作れる必要最小限の要素で、プログラムの基礎を徹底的に覚えることが重要です。プログラミング言語基礎~7つのキーワード~です。
- データ型(変数)
- 配列
- 式、演算子
- ステートメント
- メソッド、プロパティ
- クラスを使う
- main()
プログラムの実体(2)
プログラム作りに欠かせない重要な要素です。
- 型変換(キャスト)
- メンバー
- フィールド
- プロパティ
- メソッド
- 修飾子(一部)
- 型=オブジェクト
- 例外処理
- 文字列(クラスライブラリ)
- null許容型
- 構造体
- using
ソースファイルに対する制御
プログラム構造に必要な要素です。
- using
- namespace(名前空間)
- プリプロセッサディレクティブ
- XMLドキュメント
特殊機能
C#言語または.NET用の機能です。太字の部分はできるだけ学習し身に付けるようにし、それ以外は必要な状況になったときに学習すればいいです。
- コマンドライン
- 列挙体(enum)
- インデクサ(indexer)
- デリゲート(delegate)
- イベント(event)
- 反復子(Collection)
- ジェネリック(generic)
- LINQクエリ式
- ラムダ式
- unsafeとFixedとポインタ
- 匿名メソッド
クラス、構造体の構造と構成要素
プログラムや独自のデータ構造を構成するクラスや構造体を学習しながらオブジェクト指向の概念を学び実装できるようにしていきます。
- メンバー
- フィールド
- プロパティ
- メソッド
- 修飾子(アクセサ)
- 継承(派生)
- インターフェイス
- オーバーロード
- オーバーライド
- 例外
- 例外処理
- 部分クラス
- 入れ子のクラス
- 静的クラス
プラットフォーム セクション
最後に、一通り目を通しておいて必要になったときに学習すればいいです。
- アプリケーション ドメイン
- アセンブリとグローバル アセンブリ キャッシュ
- 属性
- コレクション クラス
- 例外と例外処理
- 相互運用性
- スレッド処理
- パフォーマンス
- リフレクション
- C# の DLL
- セキュリティ
体系的に分割することで学習しやすくなります。
ここまでは、すべてコンソールアプリケーションで学びます。
Windowsアプリケーション
ここまでを学習した方は、Windowsアプリケーションは、比較的簡単に学習できる土台ができているはずです。
Windowsアプリケーション特有のメカニズムを理解し、GUI(グラフィカルユーザーインターフェイス)と処理をできるだけ切り離して実装することで、わかりやすいプログラムを実装していきましょう!
GUIは鬼門
UIの伴わないプログラムは、自分のプログラムに専念できます。ところが、GUIは様々な要素が混在し自分のプログラムというよりも、ライブラリやOS、さらに利用者に翻弄させられることになります。
- プログラム内部機能とUIとの親和性
- わかりやすい、使いやすいUI
- コントロールやコンポーネントの熟知
- 同時実行(スレッド)
標準コントロールを使いこなそう!
画面デザインは、人のプログラムを参考にしよう!
「人の振り見て我が振り直せ」・・・他人の悪いところはよく見えます。
そして、最後に
GUIに囚われていては、プログラムはいつまでたっても完成しません。まず全体のフローワークを構築することが先決です。全体を動くようにしてから、GUIを完成させていくのがベストです。