もっと詳しくArrayクラスについて調べるには → キーワード検索

Slides:



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

1 C++ における OOP を用いた 書き方講座 H 山崎貴英. 2 今回の内容 OOP とは? C++ の超基礎 注釈 書いてあるコードはすべて一部抜粋。 コピペだと動かないよ!
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
プログラミング基礎I(再) 山元進.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
基礎プログラミングおよび演習 第9回
情報基礎A 第10週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
アルゴリズムとデータ構造 2011年6月13日
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
ソフトウェア工学 知能情報学部 新田直也.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第11週:super/subクラス、継承性、メソッド再定義
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test5)】
プログラミング演習I 2003年5月7日(第4回) 木村巌.
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
独習Javaゼミ第10回 セクション1~3 発表者 直江 宗紀.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクトのプロパティ プロパティとは? あたかもそういうメンバー変数(フィールド)がそのクラスに存在するかのように見せる仕組み!
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
フロントエンドとバックエンドのインターフェース
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミングⅠ 平成30年10月22日 森田 彦.
GUIプログラミングの基本=イベント イベントとは イベントの例 ウィンドウやウィンドウ内のパーツ(ボタン・スクロールバーなど)に発生する
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回.
アルゴリズムとデータ構造 2012年6月11日
サブゼミ第7回 実装編① オブジェクト型とキャスト.
画面への描画 Graphics オブジェクト 紙 ペン Pen オブジェクト Brush オブジェクト 画面のピクセルをカプセル化
メンバとメソッド C言語の構造体 変数の集まり C#言語のクラス + それを処理する関数の集まり フィールド または メンバ変数 メンバ
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test4)】
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
フレンド関数とフレンド演算子.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
演算子のオーバーロード.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
第3回簡単なデータの入出力.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

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

文字列を表わす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

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()) となる.

オブジェクト指向を表わす三つの言葉 カプセル化 継承性 多態性

なぜ継承が必要か? プログラマAさん (オブジェクトの設計者) プログラマBさん (オブジェクトの利用者) クラス AA  提供されているクラスAAは,作成したいプログラムにほぼ適しているが,一部だけ変えたいところがある.少しだけ手直ししたクラスABが欲しい. 別の利用者に新しいクラスACを提供したいが,それはAAとよく似ているので,できるだけAAを利用してソースコードを減らしたい. 継承 継承 新クラス AC  新クラス AB 

継承の概念と用語 元クラスAA 元のクラス メンバー(フィールド) 変数x,変数y 配列z 新クラス 新クラスAB 追加メンバー 変数 v 派生する 導出する ベースクラス スーパークラス 基本クラス 親クラス 派生クラス サブクラス 導出クラス 子クラス 継承の概念と用語 プロパティ p1 元クラスAA メンバー(フィールド) 変数x,変数y 配列z 新クラスAB 追加メンバー 変数 v メソッド func1 元のクラス 新クラス プロパティ p2 メソッド func2 新プロパティ p2 新メソッド func2 メソッドの再定義 (関数定義の変更) → オーバーライド

クラスTimeを継承した,クラスMyTimeの定義 継承のプログラム例(1) ベースクラス(親クラス) クラスTimeを継承した,クラスMyTimeの定義 class Time { private int min; public void Add(Time t) min = min + t.min; } public void Write() Console.Write("{0}時{1}分\n", Hour, Minute); 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; class MyTime : Time {   public bool IsAM // 午前中ならtrueを返す   {     get     {       if (Hour < 13)         return true; return false;     }   } } 時が13未満なら 午前中と判定・・・? ベースクラスTimeのプロパティ class kadai70 {   static void Main()   {     MyTime t = new MyTime();     t.Hour = 13;     t.Minute = 30;     if (t.IsAM)       Console.WriteLine("午前");     else       Console.WriteLine("午後");   } } 派生クラスMyTimeのプロパティ

キーワードprotectedは,クラス外からはアクセス不可だが,派生クラスからはアクセス可であることを宣言する 継承のプログラム例(2) class MyTime : Time {   public bool IsAM // 午前中ならtrueを返す   {     get     {       if (min < 720)         return true; return false;     }   } } 改良 minが720(=12*60)未満なら午前中と判定 理由:メンバminはTimeクラスのプライベートメンバであり,MyTimeクラスからはアクセスできない キーワードprotectedは,クラス外からはアクセス不可だが,派生クラスからはアクセス可であることを宣言する class Time { private int min; public void Add(Time t) { ・・・ } public void Write() public int Minute public int Hour } class Time { protected int min; public void Add(Time t) { ・・・ } public void Write() public int Minute public int Hour }

× ○ アクセス修飾子のまとめ アクセス範囲 private protected public クラスの作成者のみが使える クラス外 派生クラス内 クラス内 private × ○ protected public クラスの利用者なら誰でも使える 派生クラスを作成する人は使える その他に,internal,prtected internal等のアクセス修飾子があるが,説明省略

キーワードbaseはベースクラスのメンバを指定する メソッド・プロパティのオーバーライド 派生クラスのHourプロパティ 12時間制の時を取得(注:設定は24時間制) class Time { protected int min; public void Add(Time t) min = min + t.min; } public void Write() Console.Write("{0}時{1}分\n", Hour, Minute); 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; class MyTime : Time {   public bool IsAM // 午前中ならtrueを返す   {     get { return (min < 720); }   }   public int Hour     get { return base.Hour % 12; }     set { base.Hour = value; } } こちらを 呼び出す キーワードbaseはベースクラスのメンバを指定する class kadai70 {   static void Main()   {     MyTime t = new MyTime();     t.Hour = 13;     t.Minute = 30;     Console.WriteLine("時刻は{0}時", t.Hour);   } } ベースクラスのHourプロパティ 24時間制の時を取得・設定 時刻は1時

クラスの階層構造とクラスライブラリ クラス Object 継承 全てのクラスの元になる スーパー ベースクラス Object クラス A クラス X 継承 継承 クラス B クラス Y 継承 継承 C#では,プログラマが定義したクラスは自動的にObjectクラスを継承している →Objectクラスのメソッドを用いることができる クラス C クラス Z 継承 継承 クラス D1 クラス U1 クラス D2 クラス U2 クラス D3

暗黙的なクラスの継承 ToString()メソッドはそのままではクラス名を文字列として返す クラスObjectから継承されたメソッド class Time: Object となっていなくても,自動的にクラスObjectを継承している class Time { protected int min; public void Add(Time t) min = min + t.min; } public void Write() Console.Write("{0}時{1}分\n", Hour, Minute); public int Minute {  } public int Hour { } class MyTime : Time   public bool IsAM // 午前中ならtrueを返す   {     get { return (min < 720); }   }   public int Hour     get { return base.Hour % 12; }     set { base.Hour = value; } class kadai70 {   static void Main()   {     MyTime t = new MyTime();     t.Hour = 13;     t.Minute = 30;     string s = t.ToString();     Console.WriteLine("sを表示すると,{0}", s);     Console.WriteLine("tを表示すると,{0}", t);   } } sを表示すると,MyTime tを表示すると,MyTime ToString()メソッドはそのままではクラス名を文字列として返す Console.WriteLine()関数でMyTimeのインスタンスtを表示できる → 実はConsole.WriteLine()はt.ToString()を呼び出している

Objectクラスから継承されたメソッドのオーバーライド class Time { protected int min;   // 省略 } class MyTime : Time   public bool IsAM // 午前中ならtrueを返す   {     get { return (min < 720); }   }   public int Hour     get { return base.Hour % 12; }     set { base.Hour = value; }   public override string ToString()     string s       = string.Format("{0}:{1}", Hour, Minute);     return s; キーワードoverride システムで提供されるメソッドのオーバーライドでは一般にこれが必要 class kadai70 {   static void Main()   {     MyTime t = new MyTime();     t.Hour = 13;     t.Minute = 30;     Console.WriteLine("時刻は{0}だ~!", t);   } } 時刻は1:30だ~! Console.WriteLine()が利用できる! → t.ToString()が呼び出されて,インスタンスtの内容が表示されている. string.Format()静的メソッド Console.WriteLine()と同様の形式で文字列を生成するメソッド ToString()メソッドのオーバーライド