Prog2_12th

Similar documents
Prog2_15th

Prog2_4th

Prog2_2nd

Prog2_9th

C#の基本

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

C#の基本2 ~プログラムの制御構造~

Prog2_10th

Microsoft Word -

Prog1_6th

Microsoft Word - VB.doc

JavaプログラミングⅠ

Prog2_6th

Prog2_6th

Prog2_10th

プログラミング基礎I(再)

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Prog2_2nd

目次 はじめに... 3 システムの必要条件... 4 ライセンス認証... 4 アクティベーション... 6 開発... 7 手順 1. アプリケーションの作成... 7 手順 2. データソースの作成と代入... 7 手順 3. テンプレートの作成 手順 4. レポートビューアの追加

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

Javaプログラムの実行手順

Prog2_5th

Prog2_2nd

Userコントロール

PowerPoint プレゼンテーション

Microsoft Word - C言語研修 C++編 3.doc

Javaの作成の前に

Microsoft PowerPoint - ruby_instruction.ppt

Microsoft PowerPoint ppt

Microsoft PowerPoint - prog03.ppt

スライド 1

メディプロ1 Javaプログラミング補足資料.ppt

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

PowerPoint プレゼンテーション

2

PowerPoint プレゼンテーション

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

プロセス間通信

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

JavaプログラミングⅠ

ルーレットプログラム

Prog2_6th

GEC-Java

Microsoft PowerPoint - chap10_OOP.ppt

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

基礎計算機演習 実習課題No6

Java言語 第1回

テキストファイルの入出力1

PowerPoint プレゼンテーション

Visual Studio Do-It-Yourself 第 9 回ユーザーコントロール 第 6 回のリソースから第 8 回のテンプレートで さまざまな方法でコントロールをカスタマズできるこ とを学びました 今回のテーマであるユーザーコントロールは 既存の一つのコントロールをカスタマ ズするのではな

Java講座

Prog1_3rd

ガイダンス

基本情報STEP UP演習Java対策

JAVA入門

GUIプログラムⅣ

Prog1_15th

ガイダンス

PowerPoint プレゼンテーション

ガイダンス

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

ガイダンス

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

PowerPoint プレゼンテーション

Microsoft PowerPoint - lec06 [互換モード]

PowerPoint プレゼンテーション

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

JavaプログラミングⅠ

D:\Documents\Visual Studio 2015\Projects\MyHomePage 用サンプル \ExcelAndWord\ExcelAndWord\MainForm.cs 1 /* */ Excel や Word とやりとりする ~9,20 仕様 Excel

Microsoft PowerPoint - prog04.ppt

プログラミング入門1

Prog2_9th

CodeGear Developer Camp

PowerPoint プレゼンテーション

Javaプログラマー早期育成ドリル ~コードリーディング編~ 解答

ICONファイルフォーマット

ブロック パニック

Prog1_10th

JavaプログラミングⅠ

PowerPoint プレゼンテーション

ファイルを直接編集する画面を切り替えることができる. 図 3 標準のレイアウトを削除する (2) グラフィカル レイアウト画面で LinearLayout(Vertical) を追加するパレットウィンドウの レイアウト の中にある LinearLayout(Vertical) をドラッグして, 編集

DEMO1 まずはやってみよう アクティビティをダブルクリック 作成 - プロジェクト C# => Workflow CodeActivity をぽとぺ シーケンシャルと ステートマシン それぞれのコ ンソールアプリ あとライブラリがある びっくりマークは足りていないあかし プロパティをみると判別で

プログラミングA

プログラミング入門1

ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウ

Java演習(4) -- 変数と型 --

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

TestDesign for Web

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

第2回講義

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Prog1_2nd

プログラミング基礎

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

XAML Do-It-Yourself 第 3 回ベントとトリガー XML Do-It-Yourself 第 3 回目は ベント処理とトリガーについて学習します Windows フォームゕプリケーションでは たとえば ボタンが押された というベントに対応する処理 ( ベントハンドラー ) を記述する

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

VB.NET解説

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

2 / 26 平成 26 年 4 月 11 日 ( 金 ) 午後 1 時 9 分 Visual C Express の使用法 ( 東海大学理学部物理学科 ) 無償で利用できる開発環境 (Windows XP 以降 ) Visual Studio 2010 Express

JavaプログラミングⅠ

Transcription:

2018 年 12 月 13 日 ( 木 ) 実施クラスの継承オブジェクト指向プログラミングの基本的な属性として, 親クラスのメンバを再利用, 拡張, または変更する子クラスを定義することが出来る メンバの再利用を継承と呼び, 継承元となるクラスを基底クラスと呼ぶ また, 基底クラスのメンバを継承するクラスを, 派生クラスと呼ぶ なお, メンバの中でコンストラクタは継承されない C# 言語では,Java 言語と同様に単一継承のみがサポートされている これはある基底クラスから複数の派生クラスを作ることは可能であるが, ある派生クラスを複数の基底クラスから作ることは出来ない ( 下図 ) 基底クラス 派生クラス A 派生クラス B 派生クラス C 派生クラス A の派生クラス 派生クラスの構成は一般に次の様になる 修飾子 class 派生クラス名 : 基底クラス名 フィールド修飾子コンストラクタ名 (= 派生クラス名 ) ( 引数リスト ) 初期化処理 修飾子データ型メソッド名 ( 引数リスト ) 処理 オーバーライド派生クラスで基底クラスから継承したメソッドを再定義することをオーバーライド (override) と呼ぶ C# 言語では, メソッドをオーバーライドするためには, 基底クラスのメソッドに virtual のキーワードを付けておいて, 派生クラスでオーバーライドするメソッドには overrideキーワードを付ける必要がある - 1 -

カプセル化 C# 言語では, アクセス修飾子によって, 全てのクラスおよびクラスメンバに対して, 他のクラスに提供するアクセスレベルを指定出来る 主なアクセス修飾子は次の様な働きをする public 制限は無く, どこからでもアクセス出来る private 同じクラス内でのみアクセス出来る protected 同じクラス内または派生クラス内でのみアクセス出来る internal 同じアセンブリ ( アプリケーションのビルドの基本単位 ) 内でのみアクセス出来る これらのアクセス修飾子の使い分けによって, 外部からの影響を防ぐメンバを隠し, 外部からの操作を許すメンバを公開してアクセス可能にすることをカプセル化と呼ぶ 本日の課題 クラスの継承, メソッドのオーバーライド, 及びカプセル化について, 実例を通じて学ぶ 手順 1) プロジェクトの作成 Visual Studio 2013 を起動したら, [ ファイル ] [ 新規作成 ] [ プロジェクト ] と辿って, プロジェクトを作成する 新しいプロジェクト ダイアログボックスでは, プログラミング言語を Visual C#, プロジェクトテンプレートとしては, Windows フォームアプリケーション を選択し, 名前 を Twelfth に書き換え, 場所 が H: Documents Visual Studio 2013 Projects となっていることを確認してから OK を押す( 詳細は第 1 回の教材を参照 ) 2) コントロールの配置及びフォームの作成今後, フォーム上に配置するコントロールのプロパティのフォントサイズは全て 14ポイントに変更するものとする Form1 上にラベルを 2 つ, テキストボックスを 2 つ, ボタンを 2 つ貼り付ける それぞれのプロパティは次の様に設定する Form1 Text クラスの継承 Icon 自作のアイコン button1 Text 入力 button2 Text 入力 - 2 -

3) コーディング Form1 のフォームデザイナー上でコントロールが貼られていない箇所をダブルクリックして Form1.csのプログラムのソースコードを表示する Form1_Loadメソッドのブロック内に Form1 が読み込まれた際の処理として, label2 の Text プロパティに空の文字列を設定する処理, textbox2 及び button2 の Visible プロパティに false を設定して非表示にする処理及び label1 の Text プロパティに初期の文字列を設定する処理( 赤枠の部分 ) を記述する private void Form1_Load(object sender, EventArgs e) label2.text = ""; textbox2.visible = false; button2.visible = false; label1.text = "1 人目の点数 :"; Form1 クラスより下に Grade クラス,Grade2 クラス及び Grade3 クラスの定義を記述する ここで,Grade2 クラスは Grade クラスの派生クラス,Grade3 クラスは Grade2 クラスの派生ク ラスである SetGrade メソッドは protected なので,Form1 クラスからはアクセス出来ない public class Grade public int point; public char grade; public Grade() point = -1; grade = SetGrade(point); - 3 -

public Grade(int p) point = p; grade = SetGrade(point); protected char SetGrade(int p) int rank; char grd; if (p < 0 p > 100) grd = 'X'; else rank = p / 10; switch (rank) case 6: grd = 'C'; break; case 7: grd = 'B'; break; case 8: grd = 'A'; break; case 9: case 10: grd = 'S'; break; default: grd = 'D'; break; return grd; どのクラスを記述 中かはここに注目 - 4 -

public class Grade2 : Grade String mstr = ""; public Grade2() : this(-1) mstr += " エラー : 点数を入力してください \n"; public Grade2(int p) : base(p) mstr += " 点数 : " + point + "--> 成績 : " + grade + "\n"; public virtual void DispGrade() MessageBox.Show(mstr, " 点数 成績表示 "); : this(-1) はこのクラスの引数が 1 個 のコンストラクタに -1 を渡して実行する : base(p) は基底クラス( この場合は Grade クラス ) の引数が 1 個のコンストラクタに p を渡して実行する その結果, point 及びgrade に値が代入される DispGrade メソッドには virtual キーワー ドを付けて, オーバーライド可能にしてい る public class Grade3 : Grade2 String mstr = ""; public Grade3() : this(-1) mstr += " エラー : 点数を入力してください \n"; public Grade3(int p) : this(" 名前無し ", p) mstr += " エラー : 氏名を入力してください \n"; - 5 -

public Grade3(String name, int p) : base(p) mstr += " 氏名 : " + name + "\t 点数 : " + point + "--> 成績 : " + grade + "\n"; public override void DispGrade() MessageBox.Show(mstr, " 氏名 点数 成績表示 "); DispGrade メソッドには override キーワードを付け て, オーバーライドしている Form1 のフォームデザイナー上で button1 及び button2 をダブルクリックして,Form1.cs のプログラムのソースコードを表示する 先ず, クラス全体に適用可能な定数, 変数及び配列の 宣言をクラスの冒頭に記述する const int NUM = 5; int i = 0; int[] pdata = new int[] -1, -1, -1, -1, -1 ; String[] ndata = new String[NUM]; ここで,pdata は点数データを格納する配列, ndata は氏名データを格納する配列である - 6 -

次に,button1_Click メソッド及び button2_click メソッドのブロック内にそれぞれのボタン がクリックされた際の処理 ( 赤枠の部分 ) を記述していく private void button1_click(object sender, EventArgs e) Grade2[] gr2 = new Grade2[NUM]; // インスタンスの配列 gr2 if (textbox1.text == "") gr2[i] = new Grade2(); else pdata[i] = Int32.Parse(textBox1.Text); gr2[i] = new Grade2(pdata[i]); // 配列要素もインスタンス化 // 配列要素もインスタンス化 gr2[i].dispgrade(); textbox1.text = ""; i++; if (i < NUM) label1.text = (i + 1) + " 人目の点数 :"; else i = 0; label2.text = "1 人目の氏名 :"; textbox2.visible = true; button2.visible = true; label1.text = ""; textbox1.visible = false; button1.visible = false; private void button2_click(object sender, EventArgs e) Grade3[] gr3 = new Grade3[NUM]; // インスタンスの配列 gr3 if (textbox2.text == "") gr3[i] = new Grade3(pdata[i]); // 配列要素もインスタンス化 else ndata[i] = textbox2.text; gr3[i] = new Grade3(ndata[i], pdata[i]); // 配列要素もインスタンス化 gr3[i].dispgrade(); - 7 -

textbox2.text = ""; i++; if (i < NUM) label2.text = (i + 1) + " 人目の氏名 :"; else i = 0; label1.text = "1 人目の点数 :"; textbox1.visible = true; button1.visible = true; label2.text = ""; textbox2.visible = false; button2.visible = false; 4) プログラムの実行 最終確認 すべてを保存 ボタンを押してから, 開始 ボタンを押して, プログラムを実行する エラーが出ている場合には, 修正してから保存, 開始と進む 今回のプログラムでは, 点数をテキストボックスに入力して入力ボタンを押すという操作を 5 回繰り返すと氏名入力のラベル, テキストボックス及びボタンが現れる ( 次のページの図はその一例 ) - 8 -

8 点数を埋めて から 入力 ボ タンを押す 点数を埋めずに 入力 ボタンを 押すとこうなる 氏名を埋めて から 入力 ボ タンを押す 点数は pdata[i] によって引き継 がれている 氏名を埋めずに 入力 ボタンを 押すとこうなる - 9 -

確認を終えたら, プログラムを終了する ファイルが保存されている場所 Twelfth H: Documents Visual Studio 2013 Projects Twelfth 提出物 : 1) フォームのデザインファイル Form1.Designer.cs をメ - ルに添付して提出する 2) フォームを含むソースファイル Form1.cs をメ - ルに添付して提出する - 10 -