C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
C++ 基礎. 目次 C++ とは? C++ におけるオブジェクト指向 課題 C++ とは? Cには足りなかったものが付与されて出来た物 具体的には、 情報の隠蔽(カプセル化) 共通の名前付け(関数のオーバーロード) 再利用の仕組み クラスの導入 など オブジェクト指向 C++ では大規模なプログラミングの.
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
前回の関数のまとめ (1) プログラムは main() 関数の先頭から実行される 関数は main() 関数または他の関数から呼び出されて実行される. 関数を呼び出す側の実引数の値が関数内の仮引数 ( 変数 ) に コピーされる 関数内で求めた値は return 文によって関数値として呼び出し側に戻され.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
プログラミング基礎I(再) 山元進.
第13回構造体.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
第12回構造体.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
Step-by-Step Guide on How to Start ALICE Analysis
アルゴリズムとデータ構造1 2007年6月12日
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
第6章 2重ループ&配列 2重ループと配列をやります.
構造体.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
関数の定義.
プログラムはどこに保存され,どこで実行されるのか?
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
第11回 プログラミングⅡ 第11回
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
オブジェクトのプロパティ プロパティとは? あたかもそういうメンバー変数(フィールド)がそのクラスに存在するかのように見せる仕組み!
もっと詳しくArrayクラスについて調べるには → キーワード検索
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
復習 前回の関数のまとめ(1) プログラムはmain()関数の先頭から実行される
C言語 はじめに 2016年 吉田研究室.
プログラミング序論演習.
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
アルゴリズムとプログラミング (Algorithms and Programming)
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
第5回 プログラミングⅡ 第5回
メンバとメソッド C言語の構造体 変数の集まり C#言語のクラス + それを処理する関数の集まり フィールド または メンバ変数 メンバ
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング入門2 第5回 配列 変数宣言、初期化について
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
C言語講座第5回 2017 構造体.
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名 kadai41 オマジナイ! キーワード using, class, static → 後で学習 Main()のMが大文字 printf()の代わりに Console.WriteLine() ちょっと長い・・・ C言語 using System; class kadai41 { static void Main() Console.WriteLine("Hello World!"); Console.WriteLine("Hello Students!"); } C#言語 #include <stdio.h> void main() { printf(‟Hello World!\n‟); printf(‟Hello Students!\n‟); } Hello World! Hello Students!

C#ソースプログラムの例(2) using System; class kisopro43 // 基礎プロの課題4-3のC#版 { static void Main() int a, b; Console.Write("初期値? "); a = int.Parse(Console.ReadLine()); // 整数値をaに入力 Console.Write("終了値? "); b = int.Parse(Console.ReadLine()); // 整数値をbに入力 Console.WriteLine("2乗値は次のとおり."); int i; for (i = a; i <= b; i=i+2) Console.Write("{0}*{0}={1}, ", i, i*i); } Console.WriteLine(); // コンソール出力を改行する 初期値? 5 終了値? 13 2乗値は次のとおり. 5*5=25, 7*7=49, 9*9=81, 11*11=121, 13*13=169, Press any key to continue

オブジェクトを中心としたプログラムの考え方 オブジェクト指向 オブジェクトを中心としたプログラムの考え方 オブジェクト = モノ,全ての事物・事象 オブジェクトの例(1) 人間 人間を表わす要素 性別,名前,年齢,身長,・・・,etc. 機械 機械を表わす要素 名前,重さ,部品の数,値段 実験データ 実験データを表わす要素 データ値の個数,データの値 オブジェクトの例(2) ウィンドウ ボタン スクロールバー

カプセル化 継承性 多態性 オブジェクト指向を表わす三つの言葉 なぜこれらが必要か? リサイクル 能率 共同作業 一度書いたプログラムをできるだけ再利用 能率 できるだけ短時間に効率よくプログラムを作成 共同作業 みんなで協力してプログラムを作る

構造体 ー オブジェクト指向の第一歩 いくつかの変数をまとめて新しい変数を作る 例えば 複素数型 実部と虚部のfloat型の2変数からできている 日付型 年,月,日を表すint型の3変数からできている 学生身体データ型 学籍番号(int型変数) 名前(文字列変数) 誕生日(日付型構造体) 身長(float型変数) 体重(float型変数)

a b x y z 1234 14 5 構造体変数 普通の変数 x y z 構造体変数 x y z a.x b.x プログラム中では

C#言語ソースプログラムの原型(2) C言語 C#言語 12時30分 Press any key to continue using System; class Time { public int h; // 時 public int m; // 分 } class mihon41 static void Main() Time t = new Time(); t.h = 12; t.m = 30; Console.WriteLine("{0}時{1}分", t.h, t.m); C#言語 キーワード class キーワード public キーワード new 注) クラス名Timeが大文字Tで始まるのは,単なる習慣である (小文字timeでもかまわない) #include <stdio.h> struct time { int h; // 時 int m; // 分 } void main() time t; t.h = 12; t.m = 30; printf("%d時%d分Hello World!",t.h, t.m); 12時30分 Press any key to continue

C#言語ソースプログラムの原型(3) クラス定義中で関数が定義されている! C#言語 クラス中で定義された関数の呼び出し 時? 10 using System; class Time { public int h; public int m; public void Input() Console.Write("時? "); h = int.Parse(Console.ReadLine()); Console.Write("分? "); m = int.Parse(Console.ReadLine()); } public void Write() Console.Write("{0}時{1}分\n", h, m); class mihon41 { static void Main() Time t1 = new Time(); Time t2 = new Time(); t1.Input(); t2.Input(); Console.Write("一つ目は"); t1.Write(); Console.Write("二つ目は"); t2.Write(); Console.Write("{0}時{1}分", t1.h, t1.m); } オブジェクトt1に値を入力する オブジェクトt2に値を入力する オブジェクトt1の値を表示 オブジェクトt2の値を表示 時? 10 分? 15 時? 2 分? 38 一つ目は10時15分 二つ目は2時38分 10時15分 クラス定義中で関数が定義されている!

メンバとメソッド C言語の構造体 変数の集まり C#言語のクラス + それを処理する関数の集まり 二つあわせてクラスのメンバと呼ぶ   + それを処理する関数の集まり メンバ変数 または フィールド メンバ と呼ぶ メソッド メンバ関数

カプセル化 オブジェクトのデータと その処理方法を 一つのオブジェクトに 閉じ込めること カプセル化とは? オブジェクトのデータ (メンバ変数) オブジェクトの処理方法 (メソッド)

クラスとインスタンス クラス 設計図 (1枚だけ) オブジェクト(大量) クラス変数 = インスタンス インスタンスの利用 = メソッド class Time { public int h; public int m;   ・・・ } 設計図 (1枚だけ) オブジェクト(大量) Time t1 = new Time(); Time t2 = new Time(); クラス変数 = インスタンス t1 t1.Input(); t1.hとt1.mに値を入力 t2.Input(); t2.hとt2.mに値を入力 インスタンスの利用 = メソッド オブジェクトの 利用 t2 t1 t2

C#言語ソースプログラムの原型(4) メソッドの呼び出しは クラス変数名.メソッド名() メソッドの定義 メソッド定義以外ではメンバ変数は using System; class Time { public int h; public int m; public void Input() Console.Write("時? "); h = int.Parse(Console.ReadLine()); Console.Write("分? "); m = int.Parse(Console.ReadLine()); } public void Write() Console.Write("{0}時{1}分\n", h, m); class mihon41 { static void Main() Time t1 = new Time(); Time t2 = new Time(); t1.Input(); t2.Input(); Console.Write("一つ目は"); t1.Write(); Console.Write("二つ目は"); t2.Write(); Console.Write("{0}時{1}分", t1.h, t1.m); } クラス 先頭にキーワードpublicをつける これ以外は通常の関数定義と同じ. 引数を取ることもできる. メソッドの定義 t1 t2 メソッド定義以外ではメンバ変数は クラス変数名.メンバ変数名 t1.hとt1.mに入力 t2.hとt2.mに入力 t1 t2 メソッド内ではメンバ変数は単にその変数名を書くだけでよい(t.m等と書く必要はない)

C#言語ソースプログラムの原型(5) publicの代わりに キーワードprivate を指定したら・・・ using System; class Time { private int h; int m; public void Input() Console.Write("時? "); h = int.Parse(Console.ReadLine()); Console.Write("分? "); m = int.Parse(Console.ReadLine()); } public void Write() Console.Write("{0}時{1}分\n", h, m); class mihon41 { static void Main() Time t1 = new Time(); Time t2 = new Time(); t1.Input(); t2.Input(); Console.Write("一つ目は"); t1.Write(); Console.Write("二つ目は"); t2.Write(); Console.Write("{0}時", t1.h); Console.Write("{0}分\n", t1.m); } privateメンバ変数は読み出しも代入もできない 何も指定がない場合もprivateメンバと見なされる publicもprivateも指定しないと・・・ publicメンバ(メンバ変数とメソッド)→外部からアクセス可能 privateメンバ(メンバ変数とメソッド)→外部からアクセス不可

なぜカプセル化が必要か? できれば,オブジェクトの内部構造を利用者に知られたくない プログラマAさん (オブジェクトの設計者) プログラマBさん (オブジェクトの利用者) できれば,オブジェクトの内部構造を利用者に知られたくない オブジェクトの内部構造は別に知りたくない.利用方法さえ分れば良い. デバッグのため,あるいは性能向上のため,時々オブジェクトの内部構造を変更したい オブジェクトの内部構造を変更しても,利用方法は変えて欲しくない.今までのソースのままでオブジェクトを使いたい オブジェクト 設計者しかアクセスできないメンバ → private指定 利用者が利用するメンバ → public指定

publicメンバとprivateメンバ 設計者が書いたソース 利用者が書いたソース using System; class Time { private int h; private int m; private void Adjust() while (m > 60) h = h + 1; m = m - 60; } public void Add(Time t) h = h + t.h; m = m + t.m; Adjust(); public void Input() Console.Write("時? "); h = int.Parse(Console.ReadLine()); Console.Write("分? "); m = int.Parse(Console.ReadLine()); public void Write() Console.Write("{0}時{1}分\n", h, m); class mihon41 { static void Main() Time t1 = new Time(); Time t2 = new Time(); t1.Input(); t2.Input(); Console.Write("一つ目は"); t1.Write(); Console.Write("二つ目は"); t2.Write(); t1.Add(t2); Console.Write("足すと"); t1.Write(); t.Adjust(); } privateメソッドの定義. mが60以上にならないように調整するメソッド publicメソッドの呼び出し 引数(Timeクラス変数)tとこのオブジェクトの和を再びこのオブジェクトに代入するpublicメソッド t1.h = t1.h + t2.h t1.m = t1.m + t2.m 時? 10 分? 113 時? 2 分? 15 一つ目は11時53分 二つ目は2時15分 足すと14時8分 privateメソッドの呼び出し privateメソッドはクラス外部からは呼び出せない privateメソッドの呼び出し