投稿

10月, 2021の投稿を表示しています

10月29日(金)1、2コマ目

イメージ
今日、やったこと C#からオラクルDBを利用する 今日のホワイトボード C#からオラクルデータベースを利用するには そもそもDBアクセスするには ネットワーク経由でDBアクセス=>ネットワークのプログラムが必要 データベースにSQLを渡す=>データベースアクセスのプログラムが必要 といろいろとやらなければならないことがある。 が、いずれもDBアクセスには必要なモノなので、マイクロソフトはADO.NETというライブラリ(フレームワーク)を用意している。 ADO.NETはC#自体にないDBアクセス機能を補完してくれる。 さらに、オラクルもオラクルDBに特化したODP.NETを用意している。 これらを使えば、DBアクセスするプログラムを作ることができる。 ただし、ODP.NETのルールに従ってプログラミングする必要がある。 図 DBアクセス機能を補完するADO.NET、ODP.NET ODP.NETを使うには ポイントになる内容を紹介。 ①参照の追加 ODP.NETの本体(Oracle.ManagedDataAccess.dll)が参照できるように設定。 これはプロジェクトを作るたびに実行する必要あり。 ②プログラミング ODP.NETを使うために、 usingディレクティブでOracle.ManagedDataAccess.ClinetとOracle.ManagedDataAccess.Typeをインポートする 接続文字列を定義する を行うこと。 図 ODP.NETでプログラミング なお、接続文字列のユーザー名、パスワードはオラクルに接続する際のユーザー名、パスワード。 図 接続文字列のユーザー名、パスワードは CS_グループマスタテーブルを全件検索する ソースをあげておきます。 OracleConnectionクラスやOracleCommandクラス、OracleDataReaderクラスが登場しますが、いずれも役割が決まっています。そこを理解してください。 あと、処理の流れも決まっています。 ということで、この授業のポイントは OracleXXクラスたちの理解(プロパティやメソッドの理解) ...

10月28日(木)1コマ目

イメージ
今日、やったこと C#練習問題4の解説 今日のホワイトボード C#練習問題4の解説をしました。 改めて解答例も挙げておきます。 正解例をあげておきます。 4-1 Employeeクラス 解説 これは特に問題はないと思います。 4-2 Ex4_2クラス 解説 図 Employeeクラス型の配列の初期化 Employeeクラス型の配列listの初期化方法について話をしました。 配列listの各要素に代入されるのは Employeeクラスのインスタンスへの参照情報 です。 配列でも変数でもxxクラス型なら、代入される値は参照情報です 。 C的に言えば、ポインタ変数です。 参照情報が代入される変数を参照型と呼びます。 参照型変数はそこに代入されている値(参照情報)の先に利用する値があります 。 そのため、値を取り出すには ①変数代入値確認=>参照情報を取得 ②取得した参照情報の先を確認=>ほしいデータがある の2ステップになります。 intやdoubleはプリミティブ型と呼び、代入値が利用したい値です。 4-3 Ex4_3クラス 解説 ポイントはソートでしょうか。 いわゆるバブルソートってやつです。 降順でソートなので、小さい値を見つけて、配列の後ろへ送るイメージです。 図 降順でソート その1 図 降順でソート その2 配列listから取り出した要素(Employeeクラスのインスタンス)のSalaryプロパティの参照は以下のようにできます。 図 配列listのi番目の要素のSalaryプロパティを参照する 4-4 Divisionクラス 解説 これも特に問題はないと思います。 4-5 Employeeクラス 解説 図 EmployeeクラスのDivisionプロパティ Divisionプロパティですが、Divisionクラス型です。 よって、部署名を取得するにはDivisionプロパティ(Divisionクラス型)のさらにNameプロパティを参照します。 4-6 Ex4_6クラス 解説 図 Employeeクラスのコンストラクタの第4引数はDivisionクラス型 Employeeクラスコンストラクタの4番目の引数はDivisionクラス型です。 よって、渡す値はDivis...

10月22日(金)1、2コマ目

今日、やったこと C#練習問題4 今日の課題(C#練習問題4) 正解例をあげておきます。 4-1 Employeeクラス 4-2 Ex4_2クラス 4-3 Ex4_3クラス 4-4 Divisionクラス 4-5 Employeeクラス 4-6 Ex4_6クラス 4-7 Ex4_7クラス 4-8 Ex4_8クラス 4-9 Employeeクラス Ex4_9クラス  

10月21日(木)1コマ目

イメージ
今日、やったこと 練習問題3の解説 練習問題3の解説 3-1 Cityクラス 3-2 Ex3_2クラス 配列citiesの要素はCityクラス型。よって、配列citiesにはCityクラスのインスタンスが代入される。 図 配列citiesとその要素 配列の要素を順に取り出すにはfor()より便利なforeach()がある。 単純に配列の要素を先頭から順にアクセスしたい場合は、カウンタ変数不要なforeach()のほうが便利。 図 foreach() 3-3 Ex3_3クラス 3-4 Ex3_4クラス  

10月16日(金)1、2コマ目

今日、やったこと 練習問題2(クラス) 練習問題3(クラス) 練習問題2(クラス) 解答例 2-1 Dogクラス(Dog.cs) Ex2_1クラス(Ex2_1.cs) 2-2 Dogクラス(Dog.cs) Ex2_2クラス(Ex2_2.cs) 2-3 Dogクラス(Dog.cs) Ex2_3クラス(Ex2_3.cs) 2-4 Dogクラス(Dog.cs) Ex2_4クラス(Ex2_4.cs)  

10月15日(木)1コマ目

イメージ
今日、やったこと アクセス修飾子 プロパティ コンストラクタ 今日のホワイトボード Cとの違い (古典的な)Cは関数の最初で変数宣言をする必要がある(コンパイルエラー)。 C#は関数の途中でも変数宣言が可能。 よって、変数スコープを限定するために図のようにしてください。 図 変数宣言の違い アクセス修飾子 とりあえず private と public だけおさえてください。 privateをつけたフィールドやメソッドは同じクラス内のみアクセス可能。 publicをつけたフィールドやメソッドはどこからでもアクセス可能。 図 アクセス修飾子 プロパティ フィールドの悪進修飾子は一般的にprivateに クラス外から変更ができないようにprivateにする。 だが、クラス外からアクセスするための手段を用意する必要があるため、publicなメソッドを用意する。 図 フィールドのprivateにすると、アクセス用メソッドが必要 フィールド+アクセス用メソッド=>プロパティ C#にはこのアクセス用メソッドのかわりにプロパティがある。 例  // フィールド  private int id;  // プロパティ   public int Id {   set{     // ここでフィールドに値をセット     // 変数valueはプロパティに代入された値     id = value;   }   get {     // ここでフィールドの値を返す     return id;   }  } フィールドに値をセットするだけ、フィールドの値を取得するだけなら、プロパティは以下のように省略可能。 さらに、フィールドも用意してくれる。 例   // idフィールドは不要  // プロパティ   public int Id { set; get; } 図 フィールド+アクセス用メソッドをプロパティで置き換え コンストラクタ インスタンス生成時に実行される 。 メソッドのようだが、戻り値なし(指定すらできない)。 メソッド名に相当する部分をクラス名と同じにする 。 例 class Item {   // Itemクラスのコンストラクタ    public Item()   {     // プロパティの初期化処理等を行う   } コンストラクタは引数の違い(数、型)で複数用意で...

10月8日(金)1、2コマ目

イメージ
今日、やったこと C#練習課題 クラス 今日のホワイトボード 変数のスコープは最小限に 変数は宣言したブロック内が有効範囲(スコープ)です。 意図しない変数の上書きを防ぐために、スコープは最小範囲に留めるようにしてください。 たとえば、for()ループのカウンタ変数はfor()ループを抜けると要りません。よって、for()ループ内にスコープを限定すべきです。 図 C#ではfor()内で変数宣言可能 図 for()内で宣言した変数のスコープはfor(){ }内 クラス 一見、Cの構造体と同じ Cの構造体によく似ています。 図 Cの構造体、C#のクラス が、C#では Timeクラス型の変数tmを宣言し、Hourフィールドにアクセスすると、エラーになります。 CではTime構造体型の変数tmを宣言し、Hourメンバにアクセスできます。 なにが違うのでしょうか? Cの構造体では(メモリを意識してみる) Time構造体型の変数tmを宣言すると、Time構造体に必要なサイズのエリアがメモリ上に確保され、変数名tmでこのエリアにアクセスすることができます。 図 Cの構造体(メモリマップ) C#のクラスでは(メモリを意識してみる) Timeクラス型の変数tmを宣言すると、メモリ上にエリアが確保されますが、このエリアのサイズはTimeクラスに必要なサイズではありません。 じつは変数tmはポインタ変数です。メモリ番地が代入され、変数tmでその番地にアクセスすることができます。 図 C#のクラス(メモリマップ) 結局、変数tmは宣言されただけで、参照すべきメモリ番地は代入されていません。 tm.Hourと書いても、参照先がないためエラーになります。 参照先をどうやって指定する ①Timeクラス用のエリア確保 まず、Timeクラスに必要なエリアをメモリ上に確保します。これを インスタンス生成 と呼びます。 ②確保したエリアをtmが参照する 変数tmに確保したエリアのアドレスを代入します。これで変数tmはTimeクラス用のエリアを参照することができます。 図 C#のクラスを使うには プログラム的にどうする? ①インスタンス生成 キーワード new を使ってTimeクラス用のエリアを確保します。 ②tmに代入   tm = new Time(); と書くと、確保したエリアのアドレスが変数tmに...

10月7日(木)1コマ目

イメージ
今日、やったこと C#練習課題 今日の練習課題のヒント 配列を返したい 図 配列を返したい 配列の要素を順に取り出す for()でもできますが、もっと便利な foreach() がある。 図 配列の要素を順に取り出す 今日の練習課題の解答例 1-3 1-4

10月5日(火)4コマ目

今日、やったこと C#の練習課題 練習課題の解答例 とりあえず1-1、1-2の2問だけ解答例をあげておきます。 1-1 1-2 練習課題のヒント 1-3 オリンピック開催都市名はstring型の配列。 string[] olympic={"東京", "メキシコシティ", ・・,"リオデジャネイロ"}; olympic[0]は"東京"になる。 1-4 〇変換する値 実行時にMain()メソッドに渡されるコマンドライン引数で2進数に変換したい値を渡す。 コマンドライン引数は  プロジェクトのプロパティ->デバッグ->アプリケーション引数 で指定。 〇2進数に変換する値は 10進数は0以上255以下の整数 => 8ビット(8ケタ) よって、8ビットの2進数に変換する。 〇2進数に変換後の値を格納する 8ビットの2進数なので、要素数8のint型の配列を利用。 各ビットの値を配列に格納していく。 〇10進数=>2進数 2で割った  あまり=>2進数の各桁の値  こたえ=>また2で割る です。 1-5 〇2進数に変換する値は 10進数は-128以上127以下の整数 => 8ビット(8ケタ) よって、8ビットの2進数に変換する。 〇2の補数 2の補数に変換するには ①10進数負数を絶対値へ  絶対値=符号をとる ②絶対値を2進数へ  1-4と同じ ③②の2進数を1の補数へ  1の補数にするにはビット反転  0->1、1->0 ④③の1の補数を2の補数へ  ③の1の補数に+1 1-6 ソート方法は何でもいいです。  

10月4日(月)3、4コマ目

イメージ
今日、やったこと C#の基礎 今日のホワイトボード C#の文法 Cをベースにしているため、データ型、変数宣言、制御構造文(繰り返し、条件分岐)はCとほぼ同じ。 配列はCとちょっと異なる。 文字列専用のstring型がある。 Main()メソッド Cと異なり、メソッドはクラス内で定義する。 メソッド呼び出しは クラス名.メソッド名() になる。 Console.WriteLine()はConsoleクラスで定義したWriteLine()メソッド。 Cのprintf()と同じような機能だと思ってもらえれば。 図 Main()メソッドとその中身 +演算子 数値の加算と文字列の結合の2種類の機能がある。 +演算子の両サイドが数値か文字列かで加算か文字列結合かが決まる。 図 +演算子 配列 Cと異なり、newキーワードを使って要素数を指定する。 図 配列 foreach() コレクションの要素に順にアクセスすることに特化したfor()。 配列の要素を順番にアクセスするような場合によく使う。 図 foreach() varは変数の型を推論して指定できる場合に使う。 配列は要素の型が限定されているため、varで型の推論が可能。 プロジェクトにクラスを追加する ファイル名とクラス名は一致させること。 図 クラスの追加 string型 文字列のための型。 Cなら文字列はchar型の配列で扱ったが、C#にはもっと便利はstring型がある。 図 string型 次回は 課題演習の時間にします。