オブジェクトのプロパティ プロパティとは? あたかもそういうメンバー変数(フィールド)がそのクラスに存在するかのように見せる仕組み!

Slides:



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

2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
前回のおさらい プログラムが動く順番 プログラムの一時停止 文字列の長さ,文字→数値の変換
プログラミング言語としてのR 情報知能学科 白井 英俊.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング基礎I(再) 山元進.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
第12回構造体.
基礎プログラミングおよび演習 第9回
プログラミング基礎I(再) 山元進.
情報基礎A 第10週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
基礎プログラミング 第13回(2007年5月28日) 「関数」の補足説明 Report-Fの解説.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
アルゴリズムとデータ構造 2011年6月13日
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング言語入門 手続き型言語としてのJava
JAVA入門.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
関数の定義.
プログラミング応用 printfと変数.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
第7回 条件による繰り返し.
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
もっと詳しくArrayクラスについて調べるには → キーワード検索
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
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言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとプログラミング (Algorithms and Programming)
アルゴリズムとデータ構造1 2009年6月15日
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
メンバとメソッド C言語の構造体 変数の集まり C#言語のクラス + それを処理する関数の集まり フィールド または メンバ変数 メンバ
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test4)】
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
アルゴリズムとデータ構造 2010年6月17日
フレンド関数とフレンド演算子.
演算子のオーバーロード.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
第3回簡単なデータの入出力.
情報処理Ⅱ 2005年11月25日(金).
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
プログラミング入門2 第5回 配列 変数宣言、初期化について
printf・scanf・変数・四則演算
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

オブジェクトのプロパティ プロパティとは? あたかもそういうメンバー変数(フィールド)がそのクラスに存在するかのように見せる仕組み! メソッド(関数)の定義みたいだけど,( )も引数も無い → プロパティの定義 プロパティとは? あたかもそういうメンバー変数(フィールド)がそのクラスに存在するかのように見せる仕組み! class Time { private int min; public void Add(Time t) { ・・・ } //省略 public void Input() public void Write() public int Minute get { return min%60; } set { int h = min/60; min = h * 60 + value; } public int Hour get { return min/60; } int m = min%60; min = value * 60 + m; 今,何時かな? 13 今,何分かな? 85 今の時刻は14:25で~す. class lecture5 { static void Main() Time t = new Time(); Console.Write("今,何時かな? "); t.Hour = int.Parse(Console.ReadLine()); Console.Write("今,何分かな? "); t.Minute = int.Parse(Console.ReadLine()); Console.WriteLine("今の時刻は{0}:{1}で~す", t.Hour, t.Minute); } オブジェクトから値を得るのはget Minuteプロパティの定義 Timeクラスのメンバー変数HourとMinuteみたいだけど・・・  だが,改良型Timeクラスにはメンバー変数はminだけ!!  Hour, Minute → プロパティ オブジェクトに値を設定するのはset Hourプロパティの定義 代入文の右辺ではgetプロパティ 代入文の左辺ではsetプロパティ x = t.Hour; 右辺の値13はキーワードvalueに入る t.Hour = 13;

静的メンバ(静的メソッド) 通常のメンバ(通常のメソッド) 静的メンバ(静的メソッド) 通常のメソッド 静的メソッド 静的メソッドの例 インスタンスの宣言 ↓ インスタンスがメモリ上に 作成される インスタンスのメンバー変数が using System; class Complex {   // ・・・省略・・・・   public void Method1()   { ・・・ }   public static void Method2() } 通常のメンバ(通常のメソッド) 静的メンバ(静的メソッド) インスタンスのメンバー変数 に関する処理 通常のメソッド インスタンス(クラス変数)に対して呼び出す インスタンスを宣言する前には呼び出せない 静的メソッド クラスに対して呼び出す インスタンスを宣言しなくても呼び出せる (インスタンスに対して呼び出すとエラーになる) class lecture5 {   static void Main()   {     Complex z1 = new Complex(2.0, 10.0);     Complex.Method1()     z1.Method1();     Complex.Method2();     z1.Method2();   } } インスタンスのメンバー 変数に関係ない処理 静的メソッドの例 Console.WriteLine() → Consoleクラスの静的メソッド Math.Sqrt(double x) → Mathクラスの静的メソッド

演算子オーバーロード 演算子オーバーロード コンパイラは というソースを, という関数呼び出しと解釈 する z2←z2+z1 using System; class Complex {   // ・・・省略・・・   public void Add(Complex a)   {     this.Real = this.Real + a.Real;     this.Imag = this.Imag + a.Imag;   }   public static Complex Add(Complex a, Complex b)     Complex z = new Complex();     z.Real = a.Real + b.Real;     z.Imag = a.Imag + b.Imag;     return z;   public static Complex operator+(Complex a, Complex b) } class lecture5 {   static void Main()   {     Complex z1 = new Complex(2.0, 10.0);     Complex z2 = new Complex(-1.5, 10.2);     Complex z3 = new Complex();     z2.Add(z1);     z3 = Complex.Add(z1, z2);     z3 = z1 + z2;   } } z2←z2+z1 z3←z1+z2 演算子オーバーロード コンパイラは z3 = z1 + z2; というソースを, z3 = operator+(z1, z2) という関数呼び出しと解釈 する

C#における配列 要素数10のint型配列の宣言 a[0], a[1], a[2], ・・・, a[9] インデックスは 0 から(要素数-1)まで using System; class kadai61 {   public static void Main()   {     int[] a = new int[10] ;     int i;     for (i = 0; i < 10; i++)       a[i] = i*3;       Console.Write("a[{0}] = {1} ", i, a[i]);     Console.WriteLine();   } } // C言語だったら int a[10]; a[0] = 0 a[1] = 3 a[2] = 6 a[3] = 9 a[4] = 12 a[5] = 15 a[6] = 18 a[7] = 21 a[8] = 24 a[9] = 27 Press any key to continue

配列の初期化と定義 配列の初期化 重要:C#の配列宣言では要素数として変数を指定できる.これはCではできなかった. using System; class kadai61 {   public static void Main()   {     int[] a = new int[] { 3, 6, 9, 12 } ;     int i;     for (i = 0; i < 4; i++)       Console.Write("a[{0}] = {1} ", i, a[i]);     Console.WriteLine();   } } 配列の初期化 // C言語だったら int a[10] = { 3, 6, 9, 12 }; a[0] = 3 a[1] = 6 a[2] = 9 a[3] = 12 Press any key to continue int n; n = int.Parse(Console.ReadLine());  // 要素数を入力 int[] a = new int[n];         // その要素数で配列宣言 重要:C#の配列宣言では要素数として変数を指定できる.これはCではできなかった. → C#ではダイナミックに配列要素数を決めることができる.

2次元の配列 2次元配列の定義 int[,] は2次元の配列を表わす int[4,3]は3行4列の行列と考えればよい using System; class kadai61 {   public static void Main()   {     int[,] a = new int[4,3];     int i, j;     for (j = 0; j < 3; j++)       for (i = 0; i < 4; i++)         a[i, j] = (i+j) * 3;     {         Console.Write("a[{0}, {1}] = {2} ", i, j, a[i, j]);         Console.WriteLine();     }   } } a[0,0] a[1,0] a[2,0] a[3,0] a[0,1] a[1,1] a[2,1] a[3,1] a[0,2] a[1,2] a[2,2] a[3,2] a[,,] は3次元の配列 a[0, 0] = 0 a[1, 0] = 3 a[2, 0] = 6 a[3, 0] = 9 a[0, 1] = 3 a[1, 1] = 6 a[2, 1] = 9 a[3, 1] = 12 a[0, 2] = 6 a[1, 2] = 9 a[2, 2] = 12 a[3, 2] = 15 Press any key to continue

C#における配列の真実 注目! 配列aのプロパティ? Yes,配列はプロパティを持っている ↓ C#の配列は実は オブジェクトだ! using System; class kadai61 {   public static void Main()   {     int[] a = new int[10] ;     int i;     for (i = 0; i < 10; i++)       a[i] = i*3;       Console.Write("a[{0}] = {1} ", i, a[i]);     Console.WriteLine();     Console.WriteLine("配列aの長さは{0}である.", a.Length );   } } a[0] = 0 a[1] = 3 a[2] = 6 a[3] = 9 a[4] = 12 a[5] = 15 a[6] = 18 a[7] = 21 a[8] = 24 a[9] = 27 配列aの長さは10である. Press any key to continue

Arrayクラス C#における配列はArrayクラスのオブジェクト Arrayクラスで定義されているメソッド,プロパティを用いることができる Length : 配列の長さを取得する a.Length → 10 (2次元以上の場合は全ての次元の長さの合計) Rank : 配列の次元を取得する a.Rank → 2 メソッド GetLength() : 指定した次元の配列の長さを返す GetUpperBound() : 指定した次元のインデックスの上限を返す 静的メソッド Reverse() : 1次元配列の要素の並びを逆転させる 以上は一例.その他たくさんのメンバーが定義されている

配列のプロパティやメソッドの使用例 0番目の次元の長さが8 1番目の次元の長さが5 静的メソッドのため,頭にクラス名が必要 using System; class kadai6 {   public static void Main()   {     int[] a = new int[] { 3, 10, 2, -3, 6 };     int[,] b = new int[8,5];     Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}",         a.Length, b.Length, b.GetLength(0), b.GetLength(1),         b.GetUpperBound(0), b.GetUpperBound(1));     int i;     for (i = 0; i < a.Length; i++)       Console.Write("{0} ", a[i]);     Console.WriteLine();     Array.Reverse(a);   } } 0番目の次元の長さが8 1番目の次元の長さが5 ループでこのような書き方が出来る.実際の配列の長さを気にしなくてよいので便利 静的メソッドのため,頭にクラス名が必要 5, 40, 8, 5, 7, 4 3 10 2 -3 6 6 -3 2 10 3 Press any key to continue

もっと詳しくArrayクラスについて調べるには → キーワード検索 (3) 「検索する文字列」に「Array」を入力 (2) 「フィルタ条件」を「Visual C#および関連項目」にする (4) 表示されるリスト中から一つのトピックスを選ぶ (1) 「キーワード」タブをポイントする

C#言語の変数の型 char sbyte 1 unsigned char byte short 2 int 4 unsigned int 値の範囲 サイズ (バイト) 説明 char sbyte -128~127 1 ANSI文字,または小さな数値 unsigned char byte 0~255 符号無し.ANSI文字,または小さな数値 short -32768~32767 2 小さな数値 Unicode文字(日本語もOK) int -2147483648 ~2147483647 4 一般的な整数値 unsigned int uint 0~4294967295 符号無しのint long 基本的にintと同じ -9223372036854775808 ~9223372036854775807 8 巨大な整数値 float ±1.5x10-45~±3.4x1038 単精度浮動小数点(実数値).有効桁数7桁 double ±5.0x10-324~±1.7x10308 倍精度浮動小数点(実数値).有効桁数15 ~ 16 桁 decimal ±1.0x10-28~±7.9x1028 16 有効桁数 28 ~ 29桁の高精度実数値 string Unicode文字の文字列(日本語OK) bool true または false 真 と 偽 を表わす型 注) C言語の変数のサイズや値の範囲は,コンパイラや実行するCPUによって変わってくる.上の値は32bit CPUでの値.

文字列を表わすstring型 string型の変数宣言. 同時に初期化も行っている. 日本語OK. stringはオブジェクト. Lengthプロパティで文字列の長さを取得. '+'演算子はオーバーロードされている. 文字列を連結する. '=='演算子もオーバーロードされている. 文字列が全く同じならtrueになる. using System; class kadai6 {   public static void Main()   {     string s1 = "今日は";     string s2 = "基礎計算機演習の";     string s3 = "日だ";     Console.WriteLine("文字列「{0}」は{1}文字だ", s1, s1.Length);     string s4;     s4 = s1 + s2 + s3;     Console.WriteLine("全部あわすと「{0}」", s4);     if (s1 == s2)       Console.WriteLine("同じ文字列");     else       Console.WriteLine("違う文字列");   } } 文字列「今日は」は3文字だ 全部あわすと「今日は基礎計算機演習の日だ」 違う文字列 Press any key to continue

stringクラスのメンバ例 以上は,ごく一部のメンバを示した.詳しくはStringをキーワード検索 種類 名前 説明 プロパティ Length 文字列の長さを取得する メソッド CompareTo() 二つの文字列を比較する Insert() 文字列に他の文字列を挿入するために使う Remove() 指定位置から指定した数の文字を削除 静的メソッド Format() {0}の書式を使って数値データなどの他の要素を文字列化する Concat() 二つの文字列を結合した新しい文字列を返す 演算子 + == 二つの文字列が同じならtrueを返す != 二つの文字列が同じでなければtrueを返す 以上は,ごく一部のメンバを示した.詳しくはStringをキーワード検索

C#言語の変数の真実 → すべての変数はオブジェクト クラスのメンバを詳しく知るためにはクラス名をキーワード検索 C言語 C#言語 クラス/構造体名 説明 char sbyte Sbyte ANSI文字,または小さな数値 unsigned char byte Byte 符号無し.ANSI文字,または小さな数値 short Int16 小さな数値 Char Unicode文字(日本語もOK) int Int32 一般的な整数値 unsigned int uint UInt32 符号無しのint long 基本的にintと同じ Int64 巨大な整数値 float Float 単精度浮動小数点(実数値).有効桁数7桁 double Double 倍精度浮動小数点(実数値).有効桁数15 ~ 16 桁 decimal Decimal 有効桁数 28 ~ 29桁の高精度実数値 string String Unicode文字の文字列(日本語OK) bool Boolean 真 と 偽 を表わす型 例えば,intはInt32の別名である

int型のメンバの利用例 静的・・・ は頭にクラス名が必要 intの静的プロパティ int.MaxValue, int.MinValue 静的・・・ は頭にクラス名が必要 using System; class kadai6 {   public static void Main()   {     Console.WriteLine("int型の最大値は{0},最小値は{1}だ", int.MaxValue, int.MinValue);     int x;     x = int.Parse("1232");     string s;     s = Console.ReadLine();     x = int.Parse(s);   } } intの静的メソッド int int.Parse(string s) 文字列sをint型の数値に変換して返す Consoleクラスの静的メソッド stirng Console.ReadLine() コンソールから一行分の文字列を入力して返す この2行をまとめて書くと x = int.Parse(Console.WriteLine()) となる.